昨天我的服务器把我的服务器锁住了。然后我尝试从另一台服务器刷新 iptables 来解锁,正如这个问题的回答3次失败后锁定
之后我就无法登录服务器了。我向客服寻求支持,最后我就可以像以前一样登录了。
他(客服)重启服务器,执行iptables -A INPUT -p tcp --dport 22 -j ACCEPT,关闭防火墙。
现在我想让防火墙恢复到刷新之前的状态。
可以这样做吗?怎样做?
我从其他论坛看到,他们说只要重新启动机器,IP 表就会恢复到以前的状态。对吗?
答案1
iptables 配置的防火墙是短暂的。它从不保存,必须在每次启动时重新加载。通常,init.d 中有一个脚本可在启动时加载 iptables 规则。使用 iptables -F 刷新规则时,只会刷新内核知道的内容,但不会影响防火墙在下次启动时的设置方式。每个发行版都不同。Fedora 使用名为 /etc/init.d/iptables 的 init.d 脚本,该脚本仅运行 iptables-restore /etc/sysconfig/iptables 或类似的东西。Ubuntu 使用 ufw,它根据本地配置调用一系列 iptables 命令。如果您所做的只是运行 iptables 命令并且没有将任何内容存储到文件中,则重新启动应该可以恢复防火墙。如果您知道哪个 init.d 脚本,您可能只需重新加载该脚本即可恢复,而不必完全重新启动。
答案2
嗯。难道它不能在你刷新之前保存吗?http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s1-iptables-saving.html?
+= 如果没有,那几乎是不可能的,除非有一些丢失的带有 fw 规则的磁盘文件。
答案3
从 Ubuntu 12.04 开始,iptables 配置永久存储在 /etc/default/iptables-rules 中
您应该检查保存的 iptables-rules 是否仍然包含您的规则,并在停止 iptables 服务之前复制该文件或准备好该文件的备份。
- 然后停止 iptables 服务:
sudo service iptables stop
- 恢复 /etc/default 中的 iptables-rules 文件
sudo cp <my backup of iptables> /etc/default/iptables-rules
- 并启动 iptables 服务
sudo service iptables start
答案4
我认为这一切都取决于您在执行刷新之前如何设置 iptables 规则。我指的是链 INPUT、OUTPUT 和 FORWARD 的默认策略。
因此,为了确保在刷新 iptables 规则时不会被锁定,请首先确保链的默认策略完全开放。如下所示:
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
然后,也只有这样,你才能安全地刷新你的规则:
iptables -F
如果您的问题在于您的连锁店的默认策略与 ACCEPT 不同,那么这将会起作用。
当然,在刷新它们之前,您应该将规则备份到文件中:
iptables-save > /route/to/file.anyextension
测试完毕后,您可以恢复旧规则:
iptables-restore < route/to/file.anyextension
如果您添加或删除一条规则,并且希望它是永久的(这样即使您重新启动它也会保留),您将必须根据您的发行版执行不同的事情。