关于 iptables,-P INPUT ACCEPT 是什么意思?

关于 iptables,-P INPUT ACCEPT 是什么意思?

我对 iptables 还不太熟悉,正在尝试弄清楚我是否正确配置了规则集。关于-P 输入接受作为我问题的一部分,我试图确定这在我想要应用的规则的上下文中是否有效。请参阅下文了解更多详细信息。

我用过iptables-恢复使用包含以下规则的文件。本质上,我试图允许环回流量、已建立/相关连接、SSH 和 HTTP。所有其他流量都应被拒绝。

*filter
:fail2ban-ssh - [0:0]

# Input chain rules
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
# Reject all other inbound traffic
-A INPUT -j REJECT   

# Output chain rules
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

# Forward chain rules
-A FORWARD -j REJECT                                    

# fail2ban-ssh chain rules
-A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN

COMMIT

如果我跑iptables -S,我收到以下输出:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN

我对 iptables 做了一些阅读,我的理解是前几行(例如,“-P 输入接受“”)本质上意味着,如果不适用其他规则,则默认操作是接受流量(在本例中为输入、转发和输出)。

如果是这种情况,我是否应该在规则文件中明确添加以下几行并再次恢复 iptables?

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP

在此先非常感谢阅读此完整问题的任何人!这个问题有点长,但我认为有必要包含上述所有细节,以充分解释我的情况。

答案1

为了回答您实际提出的问题,策略应该出现在普通iptables-save文件中,但不能作为-P规则的参数。

相反,它们应该出现在开头,与任何自定义链的声明及其策略一起出现,如下所示:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:fail2ban-ssh - [0:0]

自定义链旁边的连字符缺少策略参数,因为用户定义的链没有策略。

请注意,如果您将所有策略更改为DROP,则防火墙将难以进行 DNS 查找,并且许多事情将会不可预测地失败。

答案2

基本上,除了 fail2ban 阻止的任何内容外,您当前的规则意味着您没有防火墙。
考虑一下您的防火墙在以下情况下会如何响应:

您正在运行 MySQL 或其他数据库,它们正在侦听 TCP 连接以进行本地连接 - 但您不希望进行远程连接。
然后,恶意远程计算机尝试访问端口 上的 mysql 服务器3306
假设 fail2ban 尚未阻止它们,问题是您现有的任何规则是否对您有帮助?那么:

  • -A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable - 没有
  • -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT- 没有
  • -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT- 没有

等等……没有匹配项,因此会丢弃连接,因此您的 INPUT 策略适用,并且连接被接受。
然后考虑相同的场景对于您机器上运行的任何其他服务- 如果 fail2ban 没有阻止,你的服务器将允许他们进入。
所以是的,我建议你添加你的iptables-restore规则

-P INPUT DROP
# Any unmatched packets  on FORWARD chain will be dropped
-P FORWARD DROP

注意:虽然 iptables 规则通常不会在重启后继续存在,但策略会。在这种情况下,如果服务器重启后没有加载相应的 ACCEPT 规则,则上述规则将锁定 SSH 会话 - 即此策略将锁定您。
我个人仍会使用丢弃策略,但有些人喜欢保留-P INPUT ACCEPT并改用

-A INPUT DROP

通常,它位于 INPUT 链的最底部,是一种“准”策略。您必须小心处理这一点,并在修改文件墙时不断重新阅读规则,但如果您没有设置 iptables 在重启时恢复其规则,这种安排意味着您可以重新进入您的机器。

答案3

顺便说一句,我刚刚把你的规则(链INPUT)转储到哎呀提取简化版本。它仅显示谁可以建立连接:

ACCEPT     all  --  127.0.0.0/8          0.0.0.0/0    
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    dports: 22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    dports: 80
DROP       tcp  --  146.0.77.33/32       0.0.0.0/0    dports: 22
DROP       tcp  --  62.75.236.76/32      0.0.0.0/0    dports: 22
DROP       all  --  0.0.0.0/0            0.0.0.0/0    
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

您可以看到您的 fail2ban 方法实际上是有问题的:第二条规则接受所有 ssh 连接;规则 4 和 5(DROP 规则)被遮蔽(它们永远无法到达)。

我假设您的默认策略是ACCEPT,您可以将其视为简化列表中的最后一条规则。您可能还会看到,的默认策略INPUT在这里并不重要,因为倒数第二条规则已经丢弃了所有之前不匹配规则的数据包。这是由于您的-A INPUT -j REJECT规则。

相关内容