我在一台 Linux 机器上运行 Postfix,其中有几百个拥有邮箱的本地用户。
有没有办法监控 Postfix 服务的所有传入连接 (SMTP)?例如“IP 地址 xxxx 刚刚连接到 Postfix 服务器”和“IP 地址 yyyy 刚刚断开连接”的实时流?
我想监控所有传入连接,以便我可以查找同一 IP 地址试图向我的用户发送多个垃圾邮件或可能尝试中继的趋势(顺便说一下,它不是开放中继!)。
将所有连接和断开连接(列出 IP 地址)转储到文本文件或系统日志中就很完美了。或者还有其他更好的方法吗?
谢谢!
答案1
postfix 会记录每个进入的连接,日志行如下
Jul 8 16:25:15 swiss postfix/smtpd[11127]: connect from some.host.or.other [192.0.2.1]
因此您可以使用tail -F
您的日志文件(在我的系统上是/var/log/mail.log
),grep
来过滤您想要的行,并观看实时流量。
答案2
上面的海报很接近。
tail
允许您查看文件中的最后 10 行。该-f
开关允许您查看附加到 maillog 文件的新行。
cd /var/log
tail -f maillog
Ctrl+c逃脱。
看到这已经写入一个名为的文件中/var/log/maillog
,不确定为什么要创建另一个文件,除非您想提取特定信息。
如果您只想阅读邮件日志,请使用您最喜欢的编辑器或执行以下操作:
less maillog
按下Enter(回车)键将使文件一次向下移动一行,或者您可以按下该Page Down键进行全屏移动。
按下这个q键你就会逃脱。
答案3
我发现以下内容很有帮助:
tail -f maillog | grep connect
但是如果您愿意的话,您可以 grep 断开连接或特定的 IP 吗?
答案4
这将为您提供 mail.log 文件中所有 IP 的数量,以便您可以识别干扰 IP。
grep connect /var/log/mail.log |grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort | uniq -c | sort
使用 ipset 创建黑名单并将其添加到你的 IP 表中
创建黑名单:
ipset create <nameof blacklist> hash:ip (or net) -hashsize 4096
ipset add <nameof blacklist> <IP or network/nn>
匹配黑名单并丢弃:
iptables -I INPUT -m set --match-set <nameof blacklist> src -j DROP
iptables -I FORWARD -m set --match-set <nameof blacklist> src -j DROP
您也许可以编写脚本并自动执行此操作。