通过 SSH 配置 iptables 而不被锁定?

通过 SSH 配置 iptables 而不被锁定?

我需要通过 SSH 配置服务器,并在此过程中进行配置iptables。更准确地说,我希望按以下顺序运行以下命令:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
iptables -t nat -A PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 5000
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
iptables -A INPUT -j DROP
iptables-save

我该如何实现这一点而不会被锁定?我可以批量应用这些吗?

答案1

我可能会将规则保存在一个新文件中,然后/etc/iptables/new.rules使用以下命令iptables-apply对其进行测试:

iptables-apply -t 180 new.rules

这样,规则将保持有效 180 秒(-t = 时间),但除非您确认连接仍按预期工作,否则不会保存。如果 180 秒后没有交互,规则将恢复到之前的状态。

答案2

我通常这样做:

1)我备份了旧的 iptables 配置文件:

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

2)在尝试新设置之前,我会执行此命令,以确保如果新设置中的某些内容将我锁定,我可以重新连接(基本上我会在 10/15 分钟后替换旧规则):

echo“mv /etc/sysconfig/iptables.bak /etc/sysconfig/iptables && service iptables restart”| 现在 + 15 分钟

3)现在我可以安全地修改 iptables 规则了。如果出现问题,我可以在 15 分钟内重新连接。

答案3

我认为您认为自己会被锁定的原因是您在配置 ACCEPT 规则之前输入了默认 DROP 规则。

通过单个 shell 命令运行命令,例如:

bash -c 'iptables -F; iptables -P INPUT DROP; ...'

整个字符串将被发送并读取,然后进行处理,然后应用规则。由于命令不需要输入,它们将全部处理,完成后您仍然可以访问。

答案4

如果您想避免暂时被锁定的情况(并避免防火墙设置因错误而失败的风险),一种技术替代方案是避免 INPUT 表刷新。 用以下方法替换iptables -Fiptables -F INPUT

iptables -I INPUT 1 -p tcp -m tcp --dport 22 -j ACCEPT
while iptables -D 2 INPUT; do
  :
done
for chain in $(iptables -L -n | awk '/^Chain/ && $2 != "INPUT" { print $2 }'); do
  iptables -F "$chain"
done

然后像往常一样定义规则(只需将 -A 用于 INPUT,请不要-I INPUT 1),最后删除连接安全规则:iptables -D INPUT 1

相关内容