伺服器:Debian Buster。
在 nftables.conf 中我有:
chain INPUT {
..
tcp dport { 25,465,587,993} log prefix "nft smtp: " accept comment "accept SMTP, SMTPS, IMAPS"
..
log prefix "nft nac: " comment "not accepted"
}
chain OUTPUT
{
..
tcp sport { 25,465,587, 993} log prefix "nft smtp: " accept comment "accept SMTP, SMTPS, IMAPS"
..
log prefix "nft nac: " comment "not accepted"
}
當我透過 Dovecot / Postfix 發送電子郵件時,
nft smtp 日誌沒有顯示任何內容
nft nac 日誌(不接受)說:
IN= OUT=eth0 SRC=188.166.29.7 DST=159.65.66.140 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=41257 DF PROTO=TCP SPT=58228 DPT=25
mail.info 說: 連線逾時。
顯然 nftables 不接受連接埠 25,而它應該接受。我不明白為什麼。
出了什麼問題?
答案1
您的日誌顯示一個資料包離開您的乙太網路介面(輸出)目的地連接埠 25。來源25號港口。
你可能想要做什麼 - 而不是過濾來源輸出鏈中的連接埠 - 允許與現有(追蹤的)連接關聯的傳出連接。
您可能想要但尚未新增至防火牆規則中的是 OUTGOING 規則,該規則允許您發送外寄郵件 - 這將是與目的地25號港口。
答案2
為了檢查發生了什麼,我將以下程式碼放入 nftables.conf 中
對於 INPUT 鏈
tcp sport { 25,465,587} log prefix "nft smtp1: " accept
tcp dport { 25,465,587} log prefix "nft smtp2: " accept
對於輸出鏈
tcp dport { 25,465,587} log prefix "nft smtp3: " accept
tcp sport { 25,465,587} log prefix "nft smtp4: " accept
在 /etc/rsyslog.d/10-nftables.conf 中
:msg, contains, "nft smtp1" -/var/log/nft_smtp1.log
:msg, contains, "nft smtp2" -/var/log/nft_smtp2.log
:msg, contains, "nft smtp3" -/var/log/nft_smtp3.log
:msg, contains, "nft smtp4" -/var/log/nft_smtp4.log
:msg, contains, "nft nac" -/var/log/nft_not_accepted.log
&stop
後
service rsyslog restart
和
systemctl restart nftables
我可以使用防火牆測試電子郵件並在日誌檔案中取得詳細的偵錯資訊。然後我可以看到哪些電子郵件活動觸發了哪些 nftable 規則。
進行這些更改後,我發現 INPUT 和 OUTPUT 鏈中的 dport 和 sport 錯誤。更改後即可運行:
對於 INPUT 鏈
tcp dport { 25,465,587} log prefix "nft smtp2: " accept
對於輸出鏈
tcp dport { 25,465,587} log prefix "nft smtp3: " accept
或至少這兩行是由發送和接收電子郵件觸發的。
我真正缺少的是什麼 是對防火牆工作原理的全面概述。大多數資訊都是關於在配置中插入規則和“它應該有效”。我想真正了解防火牆,這樣我才能快速發現錯誤。有什麼好的網站或書籍可以推薦嗎?謝謝!