Linux
IPtables - 合理且不矛盾的規則?
這是我安裝了 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-reply)目的。但是還有其他一些您可能不想允許的,例如 ICMP-echo-request。沒有簡單的方法可以建議您應該做什麼,但有些人可能會爭辯說
iptables -A INPUT -p icmp --icmp-type any -m state --state ESTABLISHED,RELATED -j ACCEPT
稍微寬鬆一點,並保留了幾乎所有有用的功能。
綜上所述,我注意到您列出了兩次環回規則,這完全沒有意義,並且您正在過濾
OUTPUT
流量並且不允許將半數據包返回到允許的INPUT
流量。所以這根本行不通。恐怕我不得不同意伊恩的觀點;如果您想開始自定義您的
iptables
規則,您需要在此之前了解更多關於 TCP/IP 的知識。