我使用通过 ubuntu 运行的 amazon EC2 实例。默认情况下,根据安全限制,我无法将应用程序绑定到端口 80,因此我只需将其绑定到端口 8080,然后通过以下命令将路由重定向从端口 80 设置为 8080:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
但我发现当我重新启动服务器时,此设置不再有效,直到我再次调用此命令。
所以我的问题是,即使系统重新启动,如何启用端口的重定向工作?
答案1
您可以添加此命令/etc/rc.local
,这样它将在重启后自动执行。
答案2
请改用iptables-save
命令。
防火墙规则绝不应写入rc.local
脚本。rc.local
这是最后执行的操作。如果已将阻止规则写入,rc.local
则攻击者可以在很短的时间内利用未实施的规则。
虽然这种情况可能无所谓,但最好还是不要养成以后可能会给你带来麻烦的坏习惯。
答案3
以下是 iptables 官方文档教给我们的方法。看这里
添加以下两行/etc/network/interfaces
:
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules
该行将post-down iptables-save > /etc/iptables.rules
保存下次启动时要使用的规则。
答案4
我在 Ubuntu 16.04 中发现了一组目录,/etc/network
它们会在网络初始化和关闭期间的不同时间运行脚本:
if-down.d
if-post-down.d
if-pre-up.d
if-up.d
interfaces.d
所以我发现我可以像往常一样转储配置:
$ sudo sh -c "iptables-save > /etc/iptables.rules"
然后我创建了一个文件“/etc/network/if-pre-up.d/restore:
#!/bin/sh
iptables-restore < /etc/iptables.rules
...并将其标记为可执行
$ sudo chmod 755 /etc/network/if-pre-up.d/restore