Linux
記憶體名稱伺服器的 iptables 規則
我們將 Bind 作為記憶體名稱伺服器執行,這些是我們設置中用於處理 DNS 功能的 3 條規則:
iptables -A INPUT -s $OUR_NETWORK -p udp --destination-port 53 -j ACCEPT iptables -A INPUT -s $OUR_NETWORK -p tcp --destination-port 53 -j ACCEPT iptables -A INPUT -p udp --source-port 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
前兩條規則適用於我們的客戶。請注意,即使我們不允許區域傳輸,因為我們沒有託管任何區域(但我注意到一些合法客戶端通過 TCP 進行查詢),我也包含了 TCP,這就是我包含它的原因。
我的問題是關於第三行。此行用於來自上游 DNS 伺服器的響應(響應我們的遞歸查詢)。我認為這一行就足夠了,但後來我注意到日誌(我丟棄的數據包與任何 ALLOW 行都不匹配)有幾十個來自源埠 UDP/53 的 UDP 數據包。
我最初的想法是:
- 這些是來自其他 DNS 伺服器的合法響應,我的系統的連接跟踪未辨識為“相關”
2)這些是合法的響應,但它們是“遲到的響應”,因此我的系統無法辨識它們。
您對記憶體名稱伺服器的響應使用什麼規則?無論狀態如何,我是否應該通過僅匹配傳入的源埠 udp/53 來允許 ANY?您是否對 udp 使用連接跟踪機制(已建立、相關)?
萬事如意,JFA
恕我直言,您應該明確允許在您的 OUTPUT 鏈上進行出口 DNS 查詢(當然在 UDP 和 TCP 上),然後從
RELATED
入口規則中刪除特定於埠和協議的標誌,例如:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
或者,換句話說,使用出口策略來控制基於每個協議的出站流量,並使用狀態匹配來控制入站響應。
預設的 RHEL/CentOS iptables 規則是這樣工作的,儘管它們預設允許任何 OUTPUT 數據包。
是的,您經常會看到被拒絕的數據包,因為它們來不及匹配狀態匹配。