使用 iptables 记录哪些用户正在向端口 25 发送电子邮件

使用 iptables 记录哪些用户正在向端口 25 发送电子邮件

因为我们在 CBL 上被列入了黑名单,所以我使用 iptables 设置了以下防火墙规则:

#!/bin/bash
iptables -A OUTPUT -d 127.0.0.1 -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 25 -m owner --gid-owner mail -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 25 -m owner --uid-owner root -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 25 -m owner --uid-owner Debian-exim -j ACCEPT
iptables -A OUTPUT -p tcp -m limit --limit 15/minute -m tcp --dport 25 -j LOG --log-prefix "LOCAL_DROPPED_SPAM"
iptables -A OUTPUT -p tcp -m tcp --dport 25 -j REJECT --reject-with icmp-port-unreachable

我无法使用 root 或邮件组成员以外的其他用户从本地主机连接到端口 25->因此它似乎有效。

但仍存在一些问题:

  • 您认为这套规则对于防止服务器上托管的不良 PHP 脚本发送垃圾邮件的效果如何?
  • 有没有办法在同一个语句中阻止端口 25 和 587?
  • /usr/sbin/sendmail该规则集是否也限制或阻止了的使用?
  • 有没有办法记录所有尝试将内容传送到端口 25 的其他尝试的用户名?

答案1

最好将 OUTPUT 表的策略设置为 DROP,然后明确打开相关端口等,但这对您的环境来说非常具体,因此对 OP 来说是一项练习。

您最多可以-m multiport匹配 15 个端口,例如

iptables -A OUTPUT -p tcp -m multiport --dports 25,587 -m owner --gid-owner mail -j ACCEPT

允许在两个端口上发送群组邮件或

您可以像这样记录新的出站连接

iptables -A OUTPUT -p tcp -m multiport --dports 25,587 -m state --state NEW -j LOG --log-uid --log-prefix  "LOCAL_DROPPED_SPAM "

你会收到这样的消息

11 月 11 日 12:52:26 主机名内核:LOCAL_DROPPED_SPAM IN=OUT=eth0 SRC=192.168.254.181 DST=192.168.254.187 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=53476 DF PROTO=TCP SPT=49893 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0UID=1000 GID=1000

iptables -A OUTPUT -p tcp -m multiport --dports 25,587 -j DROP

最终断开两个端口上的所有出站连接。

请记住,iptables 操作规则按照它们在表中的顺序排列,第一个匹配的规则获胜,因此

  • 先放置您的 ALLOW 规则
  • 遵循 LOG 规则
  • 然后删除

相关内容