用iptableslogging哪个用户正在将邮件发送到端口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 

我无法连接到本地主机的端口25与另一个用户比根或邮件组成员 – >所以它似乎工作。

仍然有一些问题:

  • 您评估这个规则集有多么有效,以防止垃圾邮件来自服务器上托pipe的错误PHP脚本?
  • 有没有办法在同一个声明中阻止端口25和587?
  • /usr/sbin/sendmail的使用是否也受到这个规则集的限制或阻止?
  • 有没有办法logging所有其他企图尝试传递的东西到端口25的用户名?

将OUTPUT表的策略设置为DROP,然后明确地打开相关的端口等等可能会更好,但是这对于您的环境来说是非常具体的,所以这是对OP的练习。

您可以使用-m multiport来匹配多达15个端口,例如

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

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

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

 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 = 0 UID = 1000 GID = 1000

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

最终放弃两个端口上的所有出站连接。

请记住,iptables动作规则按照它们在表中的顺序排列,并首先匹配胜利

  • 首先放置您的允许规则
  • 按照这个LOG规则
  • 然后DROP