Iptables端口转发配置详解
Iptables 端口转发实战指南
本文将指导你如何使用 iptables 在 Linux 系统上配置端口转发,实现将外部网络请求转发到内部服务器的目标。假设你需要将外部端口 80 的请求转发到内部服务器 192.168.1.100 的端口 8080。
操作前的准备
确保你具备以下条件:
- 一台运行 Linux 的服务器(作为网关或防火墙)。
- 服务器有两个网络接口:一个连接外部网络(eth0),一个连接内部网络(eth1)。
- root 用户权限或可使用 sudo 命令。
- 内部服务器 192.168.1.100 已经启动并监听端口 8080。
详细操作步骤
1. 检查现有规则
在配置新规则前,备份或查看当前规则:
iptables -L -n -v
此命令将列出所有链及其详细信息,-n 表示使用数字表示 IP 地址,-v 表示详细模式。
2. 清除现有 NAT 规则
如果之前配置过 NAT 规则,先清除以避免冲突:
iptables -t nat -F
-t nat 表示操作 NAT 表,-F 表示清除链中的所有规则。
3. 配置 PREROUTING 链规则
在数据包进入路由决策前,将目标端口为 80 的请求重定向到内部服务器:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
关键参数说明:
- -t nat:指定操作 NAT 表。
- -A PREROUTING:在 PREROUTING 链的末尾添加规则(也可使用 -I 在开头插入)。
- -p tcp:指定协议为 TCP。
- --dport 80:指定目标端口为 80。
- -j DNAT:指定跳转到 DNAT(目标网络地址转换)动作。
- --to-destination:指定转换后的目标地址和端口。
4. 配置 POSTROUTING 链规则
将转发出去的数据包源 IP 地址修改为外部网关的 IP,避免目标服务器响应回自身:
iptables -t nat -A POSTROUTING -j MASQUERADE
MASQUERADE 动作将自动使用网关的外部 IP 地址。
5. 保存规则
使用以下命令保存规则(不同 Linux 发行版命令可能不同):
/etc/init.d/iptables save # Debian/Ubuntu
service iptables save # CentOS/RHEL
或临时保存(重启后失效):
iptables-save
6. 测试配置
使用外部网络访问 http://你的网关公网IP,确认是否正确转发到 192.168.1.100:8080。
关键命令与概念解释
iptables 命令的核心参数:
- -t nat:指定操作 NAT 表(包含 PREROUTING, POSTROUTING, OUTPUT 链)。
- -A / -I:-A 添加到链末尾,-I 插入到指定位置。
- -p:指定协议(tcp, udp, icmp)。
- --dport / --sport:指定目标端口或源端口。
- -j:指定跳转动作(DNAT, MASQUERADE, REDIRECT 等)。
注意事项与技巧
1. 端口冲突检查:确保目标端口 8080 在内部服务器未被占用。
2. 防火墙配置:内部服务器 192.168.1.100 的防火墙需允许端口 8080 的入站连接。
3. 规则顺序:iptables 规则按顺序匹配,建议使用 -I 插入关键规则。
4. 日志调试:使用 -v 参数查看详细信息,或添加 -j LOG 动作记录匹配的包。
5. 持久化:推荐使用 iptables-persistent (Debian) 或 iptables-save 配置管理工具。
通过以上步骤,你已成功配置 iptables 端口转发。此配置适用于 Web 服务器反向代理、VPN 等场景,是网络运维的基础技能之一。