Performance

負匹配與正匹配是否會影響防火牆性能?

  • December 30, 2013

我很好奇使用負匹配和正匹配是否會影響netfilter堆棧的性能。例如,在性能方面iptables -I INPUT -p tcp -s 192.168.0.0/16 -j DROP相當於iptables -I INPUT -p tcp !-s 192.168.0.0/16 -j ACCEPT

有人告訴我,負匹配可能會產生更差的性能,但我認為沒有任何事實支持;據我所知,匹配的迭代次數(即規則)對性能影響最大。不幸的是,我手頭沒有可以測試該假設的測試設置。

我問這個的原因是我工作的公司使用許多小型(無論是在大小還是在計算能力方面)MikroTik 路由器,我正試圖提出一個合理的最佳實踐防火牆策略。顯然 RouterOS 是 MikroTik 隨附的專有作業系統,它基於 Linux 核心 2.6.16,所以我相信 vanilla 2.6.16 核心的限制也適用於那裡。由於聲稱績效存在差異的人是我的老闆,我想確保我可以放心地忽略該聲明。

我的第一直覺是,在您的範例中,您的規則的成本和復雜性是相同的,哪個更好,這與其他任何事情一樣多是個人喜好。反演一般不會像 netfilter 中的匹配規則那樣複雜。

普遍的共識似乎是,規則的數量和順序對於最佳性能而言比您如何制定單個規則更為重要,儘管您也可以從中獲得收益。

Linux netfilter 防火牆通常在第一次匹配的基礎上執行,並且每個鏈中的規則都是按順序處理的,因此在匹配之前需要處理的規則越少,您的性能就會越高。

這就是大多數防火牆配置具有以下內容的原因:-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT作為第一條規則。通常,該單一規則匹配相當繁忙站點上的大部分流量。(如所有流量的 99% 以上……)

現在剩下的防火牆規則只針對新連接觸發和處理,顯著減少了所需的處理量。

由於規則是按順序處理的,因此從性能的角度來看,按照規則被觸發的可能性對規則進行排序是有意義的。

例如,在網路伺服器上,絕大多數流量都在預設的 HTTP 埠上。因此,像-A INPUT -p tcp -m state --state NEW -m multiport --dports 80,443 -j ACCEPT影響大多數使用者這樣的規則應該是您的第二條規則,而不是作為第 199 條規則,因為除了少數特定使用者和/或不常見的協議之外,所有規則都不太可能匹配任何人。

至於製定規則,通過使用正確的模組,例如 multiport 和 iprange,您可以創建智能規則,而不是大量的單獨規則。

引用自:https://unix.stackexchange.com/questions/107146