Linux

IPtables - 合理且不矛盾的規則?

  • June 6, 2014

這是我安裝了 SSH 的網路伺服器的 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

其中第一個接受環回介面上的所有流量。這是核心與自己對話的方式之一,不阻塞這種流量是相當重要的;如果這樣做,可能會出現不可預知的結果。這是一個標準規則,我不知道使用它有任何安全隱患。

第二個稍微複雜一些。您希望允許多種類型的 ICMP,用於資訊(例如 ICMP-host-unreachable)或功能(例如 ICMP-fragmentation-needed、ICMP-echo-r​​eply)目的。但是還有其他一些您可能不想允許的,例如 ICMP-echo-r​​equest。沒有簡單的方法可以建議您應該做什麼,但有些人可能會爭辯說

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

稍微寬鬆一點,並保留了幾乎所有有用的功能。

綜上所述,我注意到您列出了兩次環回規則,這完全沒有意義,並且您正在過濾OUTPUT流量並且不允許將半數據包返回到允許的INPUT流量。所以這根本行不通。

恐怕我不得不同意伊恩的觀點;如果您想開始自定義您的iptables規則,您需要在此之前了解更多關於 TCP/IP 的知識。

引用自:https://serverfault.com/questions/602320