Linux iptables 端口重定向示例
您可以通过在 nat 表的 PREROUTING 或 OUTPUT 链中插入规则来轻松重定向传入流量。您可以使用 REDIRECT 目标设置目标端口。
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | Linux 终端 |
类别 | 防火墙 |
操作系统兼容性 | Alma • Alpine • Amazon Linux • Arch • CentOS • Debian • Fedora • Linux • Mint • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu |
预计阅读时间 | 2 分钟 |
句法
将 tcp $srcPortNumber 端口重定向到 $dstPortNumber 的语法如下:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-ports $dstPortNumber
将 替换eth0为您的实际网络接口名称。您可以使用各种命令(例如ip 命令)列出 Linux 中的网络接口。例如:
$ ip link show
在 Linux 中使用端口重定向匹配源和目标 IP 地址
以下语法匹配源 IP 和目标 IP。例如:
iptables -t nat -I PREROUTING --src $SRC_IP_MASK --dst $DST_IP -p tcp --dport $portNumber -j REDIRECT --to-ports $rediectPort
示例
以下示例将 TCP 端口 25 重定向到端口 2525:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
在此示例中,端口 80 上的所有传入流量都重定向到端口 8123:
# iptables -t nat -I PREROUTING --src 0/0 --dst 192.168.1.5 -p tcp --dport 80 -j REDIRECT --to-ports 8123
引用 iptables 手册页:
此目标仅在 nat 表、PREROUTING 和 OUTPUT 链以及仅从这些链调用的用户定义链中有效。它通过将目标 IP 更改为传入接口的主地址(本地生成的数据包映射到 127.0.0.1 地址)将数据包重定向到机器本身。它采用一个选项:
--to-ports port[-port]
指定要使用的目标端口或端口范围:
如果没有该选项,则目标端口永远不会改变。
仅当规则还指定 -p tcp 或 -p udp 时,该选项才有效。
OUTPUT链示例:
# iptables -t nat -I OUTPUT --src 0/0 --dst 192.168.1.5 -p tcp --dport 80 -j REDIRECT --to-ports 8123
如何查看 NAT 规则?
键入以下命令:
# iptables -t nat -L -n -v
如何保存 NAT Iptables 重定向规则?
# iptables-save > /path/to/iptables.save
以下是我在 RHEL 6.x 服务器上保存规则的方法:有关更多信息,
请参阅如何在现代 Linux 发行版(例如 Debian 或 RHEL/CentOS Linux)上保存 iptables 规则。
# iptables-save > /etc/sysconfig/iptables
# ip6tables-save > /etc/sysconfig/ip6tables
相关另外,请查看我们针对Alpine Linux Awall、CentOS 8、OpenSUSE、RHEL 8、Debian 12/11、Ubuntu Linux 版本16.04 LTS / 18.04 LTS / 20.04 LTS和22.04 LTS 的
所有完整防火墙教程。
总结
REDIRECT 命令是一个更简单的选项,专门用于将流量重定向到本地计算机上的其他端口。该示例演示了它修改数据包头中的目标端口,但不更改目标 IP。
数据包被路由到本地计算机和修改后的端口号。在需要时使用 REDIRECT iptables 目标:
- 将内部服务(端口)重定向到不同的端口。
- 它有助于简化应用程序配置的端口配置。
使用 iptables 将流量重定向到不同的 Linux/Unix 服务器
下面演示了如何将端口 25 上的所有流量重定向到另一台 IP 地址为 192.168.2.100 且端口为 25 的机器(或者您选择的任何其他端口):
# sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport ${SrcPortNumber} -j DNAT --to-destination ${DestRediectIPAddress}:${DestRediectPort}
# sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 192.168.2.100:25
参考
- 使用 man 命令或 help 命令查看iptables 命令手册页。例如:
$ man iptables