我必须设置一条规则,使我的 Web 服务器(在端口 7000 上运行)可通过端口 80 访问:
ptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 7000
到目前为止,一切运行良好。
但如果我重启服务器,规则就消失了。要怎么做才能使该规则永久生效?
埃利亚斯
答案1
您使用哪个 GNU/Linux 发行版?
对于 Debian/Ubuntu,简单的解决方案是将 iptables 调用添加到 post-up 挂钩中,/etc/network/interfaces
如下所示:
# The primary network interface
auto eth0
iface eth0 inet dhcp
post-up iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 7000
答案2
在基于 Red Hat/Fedora 的系统上:
service iptables save
并确保该iptables
服务设置为在启动时启动:chkconfig iptables on
答案3
基本上,您将 iptables 命令添加到网络启动脚本中,以便它在启动网络连接时运行。
不同发行版所需的更改文件有所不同。
如果您使用的是 Ubuntu(也许对于 Debian 和其他系统也是如此),您可以使用命令iptables-save
并iptables-restore
在重启时保存配置。
答案4
我建议不要反复调用 iptables,而是执行以下步骤:
[1]根据您的喜好配置 iptables(阻止、反欺骗、重定向等)
[2]保存 iptables 配置:
iptables-save > /etc/my-iptables.conf
(或使用您喜欢的名称)
[3]创建包含以下行的脚本(例如/etc/my-iptables-init.sh
):
#!/bin/bash
iptrest="<location_of_iptables-restore>"
cat="/bin/cat"
conf="/etc/my-iptables.conf"
#
$cat $conf | $iptrest
(有人说iptables-restore < /etc/my-iptables.con
有时候不管用)
[4]可以从任意位置调用该脚本。可能是 /etc/network/interfaces 或(我偏爱的)/etc/rc.local