Linux-as-a-server 系統預設要求在防火牆下具有網路可操作性
我是 Linux 的新手,對 Windows 更熟悉,我用後者描述了這種情況,所以我可以在給定的上下文中提出正確的問題。在 Windows 上,如果您在嚴格阻止模式下執行本地系統防火牆,甚至需要有網路連接才能正常工作。預設的內置防火牆設置有一些通常稱為“核心網路”的規則,這些規則存在並啟用以確保您的網路連接正常。例如:
Core Networking - Destination Unreachable Fragmentation Needed (ICMPv4-In) Core Networking - Dynamic Host Configuration Protocol (DHCP-In) Core Networking - Internet Group Management Protocol (IGMP-In) Core Networking Diagnostics - ICMP Echo Request (ICMPv4-In) (and their counterparts for Outbound)
這是網路正常工作所需的最低限度。其餘的是應用程序域配置,即您需要的任何應用程序及其功能 - 您添加自定義規則。
那麼我的問題是: Linux 的執行方式是否類似?例如,如果我安裝預設 Arch,我將沒有預先配置的 iptables 或防火牆規則,我需要自己製作它們。如果我將防火牆設置為*“阻止所有未明確允許的內容”以使核心網路可用,是否需要一些特定的預設全域規則集?*
我問的原因是我知道一些發行版,尤其是伺服器發行版,預設情況下具有這種狀態 - 您必須明確允許/打開您想要或需要的埠。我已經使用了很多隨 VPS/VDS 提供的它們。我不知道的是如何設置的複雜性。我沒有太多經驗來做出有根據的結論。顯然,我知道如何制定拒絕任何埠上所有傳入數據的全域 iptabels 規則,例如,我知道如何為埠 22 設置例外。我不知道除此之外是否還有其他東西,在幕後,我需要設置,類似於上面的 Windows 範例。
我試過類似的東西:
iptables -F iptables -P INPUT DROP iptables -A INPUT -i lo -p all -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A INPUT -j DROP
但是現在這甚至不允許像 simple 這樣的傳出內容
ping ip.ip.ip.ip
。我錯過了什麼?
您阻止了 ping 回复(或任何連接回复)。您缺少實現有狀態防火牆的規則。例如,由於您使用的是 Arch Linux,這在Simple stateful firewall中有記錄。您錯過的重要部分是:
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
如果剛剛收到的數據包已經是跟踪流的一部分,這將告訴iptables為每個傳入數據包查詢conntrack子系統。如果此流確實存在並且處於預期狀態,則意味著它(即:此流的第一個數據包)在第一次看到時已被接受(例如:OUTPUT 連結受 OP 情況下的所有內容),因此接受數據包(並且短路任何剩餘的規則)。
將此應用於 ping:傳入的 ping 回複數據包將被視為傳出 ping 請求創建的流的一部分,因此將被接受而不是被丟棄,因為沒有規則允許它。
記住順序很重要。該規則應該是第一條規則(或者如果稍後完成,則使用
-I INPUT
而不是將其插入到第一個位置)。-A INPUT
您應該閱讀 Arch Linux wiki 頁面的其餘部分以獲取更多詳細資訊。不要期望找到與其他作業系統的功能完全一致的功能,您可能必須改變思考方式。