IPtables - 合理且不矛盾的规则?

IPtables - 合理且不矛盾的规则?

这是安装了 SSH 的 Web 服务器的 IPtable 规则,我得到了很多帮助才走到这一步。我的问题是,我的规则是否相互矛盾。例如,有人建议我使用以下两行:

# DONT KNOW WHAT THESE DO
$i -A INPUT -i lo -j ACCEPT
$i -A INPUT -p icmp --icmp-type any -j ACCEPT

但在我的整体剧本中,我觉得他们可能实际上没有做任何事情。

i=/sbin/iptables

# Flush all rules
$i -F
$i -X

# Setup default filter policy
$i -P INPUT DROP
$i -P OUTPUT DROP
$i -P FORWARD DROP

# DONT KNOW WHAT THESE DO
$i -A INPUT -i lo -j ACCEPT
$i -A INPUT -p icmp --icmp-type any -j ACCEPT

# Force SYN checks
$i -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Drop all fragments
$i -A INPUT -f -j DROP

# Drop XMAS packets
$i -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Drop NULL packets
$i -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Allow established connections
$i -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow unlimited traffic on loopback
$i -A INPUT -i lo -j ACCEPT
$i -A OUTPUT -o lo -j ACCEPT

# Open nginx
$i -A INPUT -p tcp --dport 443 -j ACCEPT
$i -A INPUT -p tcp --dport 80 -j ACCEPT

# Open SSH
$i -A INPUT -p tcp --dport 22 -j ACCEPT

答案1

第一个接受环回接口上的所有流量。这是内核与自身对话的方式之一,因此,不要阻止此流量非常重要;如果这样做,可能会产生不可预测的结果。这是一条标准规则,我不知道使用它会带来任何安全隐患。

第二种情况稍微复杂一些。有多种类型的 ICMP 需要允许,无论是出于信息目的(例如 ICMP-host-unreachable)还是出于功能目的(例如 ICMP-fragmentation-needed、ICMP-echo-r​​eply)。但还有一些类型的 ICMP,例如 ICMP-echo-r​​equest,您可能不想允许。没有简单的方法可以建议您应该怎么做,但有些人可能会认为

iptables -A INPUT -p icmp --icmp-type any -m state --state ESTABLISHED,RELATED -j ACCEPT

稍微不那么宽容,但保留了几乎所有有用的功能。

尽管如此,我注意到你列出了环回规则两次,这完全没有意义,而且您正在过滤OUTPUT流量,并且不允许返回半数据包进入允许的INPUT流量。所以这根本行不通。

恐怕我不得不同意伊恩的观点;如果您想开始自定义iptables规则,那么在这样做之前您需要了解更多有关 TCP/IP 的知识。

答案2

在 INPUT 链顶部添加此类规则的一个可能原因是为了尽早接受包,这样它们就不必遍历所有规则:

$i -A INPUT -i lo -j ACCEPT # whitelist all loopback traffic
$i -A INPUT -p icmp --icmp-type any -j ACCEPT # whitelist all ICMP traffic

要了解各个规则的使用量,请使用

iptables -L -nv

相关内容