iptables -F 命令是否会将我的 SSH 锁定?

iptables -F 命令是否会将我的 SSH 锁定?

我正在使用 iptables 为 VPS 创建一些防火墙规则。我的 shell 脚本如下所示:

#!/bin/sh
# My system IP/set ip address of server
SERVER_IP="1.2.3.4"

# Flushing all existing rules
iptables -F
iptables -X

# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Allow SSH on 22
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# Default policy DROP
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

如果我iptables -F在运行此脚本后运行命令,我将无法使用 SSH(我可以重新登录,但我不想让 SSH 关闭)。

我有三个问题。

  1. 当我运行命令时,我是否会因为未删除的默认过滤策略而被锁定iptables -F
  2. 如果我这么做的话,我不会被锁定吗iptables -FX
  3. 如果我在 shell 脚本末尾添加默认删除策略,那么默认过滤策略是否有必要?

干杯!

答案1

当然,您会被锁定——您将策略设置为默认拒绝,然后刷新所有允许您进入的规则。

  1. 是的。
  2. 不,因为-X与连锁政策没有太大关系-F(也就是说,没有任何关系)。
  3. 是的,因为规则可以被删除、刷新、旋转和破坏。链式策略则不能。

答案2

您应该只会发现 ssh 被暂时锁定,因为您在规则中允许了“ESTABLISHED”。但是,暂时的数据包丢失会扰乱 ssh,并且 tcp 需要 10 秒或更长时间才能恢复。

我自己总是在刷新命令之后立即在顶部放入一个通用的“iptables -A INPUT -m state --state established,related”规则,这样锁定时间就很短!

您没有使用 conntrack 来刷新状态,是吗?

ps 如果您正在控制来自相对受信任的局域网的连接,那么最后使用 REJECT 规则会更有帮助,因为失败的新连接尝试会被立即拒绝,而不必超时。

相关内容