服务器: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 log(不被接受)说:
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。防火墙在 OUTPUT 链中允许的是带有 TCP来源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
对于 OUTPUT 链
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
对于 OUTPUT 链
tcp dport { 25,465,587} log prefix "nft smtp3: " accept
或者至少这两行是通过发送和接收电子邮件触发的。
我真正缺少的 是防火墙工作原理的全面概述。大多数信息都是关于在配置中插入规则和“它应该工作”。我希望真正了解防火墙,以便我可以快速找到错误。您能推荐一个好的网站或书籍吗?谢谢!