我尝试多次保存 iptables 配置,以便它在我重新启动 Raspberry Pi(Ubuntu 22.04.1 LTS)时自动启动,但是当我使用此命令查看时:
$ sudo iptables -L
重启后我的链式规则就消失了。
我遵循了以下文档:
https://help.ubuntu.com/community/IptablesHowTo
以下是我按特定顺序使用的命令的规则:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -j DROP
sudo iptables -I INPUT 1 -i lo -j ACCEPT
然后,根据同一文档,他们推荐解决方案 1 或解决方案 2 来保存 iptables 并在重启时恢复。我尝试了这两种方法,但都没有成功。
以下是我针对解决方案 2 所做的事情:
我将防火墙规则保存到文件 iptables.rules 中,如下所示:
sudo sh -c "iptables-save > /etc/iptables.rules"
我为 /etc/network/if-pre-up.d/iptablesload 脚本创建了这个新文件。下面是我用 Vim 编辑的脚本内容:
#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0
我使用 :wq 在 Vim 上保存了该文件
然后我在 /etc/network/if-post-down.d/iptablessave 中为脚本创建了这个新文件。它包含:
#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
iptables-restore < /etc/iptables.downrules
fi
exit 0
我使用 :wq 在 Vim 上保存了该文件
最后我赋予这两个脚本执行权限如下:
sudo chmod +x /etc/network/if-post-down.d/iptablessave
sudo chmod +x /etc/network/if-pre-up.d/iptablesload
完成所有这些操作后,当我重新启动 Raspberry Pi 并输入命令
sudo iptables -L
我的所有链式规则都消失了。
我是 Ubuntu 新手,感谢您的帮助。
答案1
Ubuntu 提供了以下在启动时加载 iptables 规则的方法:
所需软件:
必须安装 iptables-persistent
启动时规则:
启动时要加载的规则存储在/etc/iptables/rules.v4
(IPv4) 和/etc/iptables/rules.v6
(IPv6) 中。可以/etc/iptables/rules.v4
使用命令保存现有的 v4 规则集
iptables-save -c > /etc/iptables/rules.v4
或者
ip6tables-save -c > /etc/iptables/rules.v6
还有其他方法,比如在启动时启动自己的脚本,但这个问题没有详细描述。错误的 iptable 规则集可能会阻止您访问服务器,请小心,始终询问如果……会发生什么?