Iptables端口转发配置详解

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 等场景,是网络运维的基础技能之一。

THE END