在Ubuntu上拒绝所有端口(发送)上的所有邮件包

我刚刚对我们的ISP有问题; 我们的互联网连接被阻塞,因为从我们的IP发送了很多邮件。 问题是我们都使用gmail,并且根据我们所知,没有邮件通​​过ISP SMTP服务器发送(如果服务器不在服务器上,ISP阻塞所有到端口25的通信)。

我提前阻止了端口25,所以没有发送到该邮件服务器的邮件可以离开我们的networking。 但是这不会拒绝邮件发送到其他服务器上的端口。

我想要做的是找出在我们的networking上发送这些邮件的是什么。 有没有一个程序可以识别邮件数据包并拒绝他们使用Ubuntu? 顺便说一下,我们的Ubuntu路由器不运行SMTP服务器。

tcpdump是一个非常有用的工具,用于将数据包从networking上转储到文件或屏幕上,通常在发行版包装库中可用,并且对于类似的情况进行了很好的logging和testing。

您可以在ubuntu路由器上安装tcpdump apt-get install tcpdump ,并将其configuration为监视smtpstream量;

  # tcpdump -s0 -w/tmp/smtp_dump port 25 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 

您可以查看主机从另一个SSH会话向其发送SMTPstream量的文件;

 # tcpdump -qr /tmp/smtp_dump reading from file /tmp/smtp_dump, link-type EN10MB (Ethernet) 13:27:54.291884 IP g0801.hpl.com.33942 > pz-in-f27.1e100.net.smtp: tcp 0 13:27:54.315294 IP pz-in-f27.1e100.net.smtp > g0801.hpl.com.33942: tcp 0 13:27:54.315323 IP g0801.hpl.com.33942 > pz-in-f27.1e100.net.smtp: tcp 0 13:27:54.339110 IP pz-in-f27.1e100.net.smtp > g0801.hpl.com.33942: tcp 45 ... 

如果您将wireshark安装到本地计算机并下载转储文件,或者在ssh命令行使用tshark,则可以获得更复杂的输出。

警告:如果你有很多smtpstream量的话,tcpdump会很快填满你的磁盘,所以当你有几MB的数据时,查看输出文件ls -lh /tmp/smtp_dump并用ctrl-c停止命令。

tcpdump的接口选项( -i eth0 ):如果你的路由器使用与eth0不同的接口,那么你可能需要使用-i选项来select它,例如tcpdump -i bond0 -s0 -w/tmp/smtp_dump port 25

你可能想要阻止所有的smtp包,这可能是一个真正的麻烦,幸运的是有17个filter 。 它可以阻止很多不同的协议 ,只需要在网关/防火墙上安装。

邮件也可以在端口465和587发送(465已被撤销,但仍可能被使用)。 结合滥用代理服务器,邮件甚至可以发送到端口80或443或3128(鱿鱼)或许多其他。

您的networking是否有一个到互联网的出口点? 那个时候你有防火墙吗?

如果没有,你会想要的。 如果你有多个出口点,你应该有每个防火墙。 (可能是相同的物理盒子。)

设置您的防火墙默认情况下放弃一切,只允许通过你想要的stream量。

如果您不知道正常的stream量是什么,则可以在防火墙规则的末尾添加一条logging行,以便所有尚未匹配的logging都被logging下来。

即使您设法阻止使用防火墙的stream量,您仍然需要追踪并停止发送邮件的邮件。 如果你不知道发送过程是什么,邮件可能很容易成为一个被泄露的系统,或者是一个垃圾邮件发送者正在滥用的开放代理或者web表单。 我不想要在我的networking中的一个。

最好的解决scheme可能是configuration您的邮件客户端在发送传出邮件时使用提交端口(587)或SSMTP端口(465),然后阻止所有传出通信到端口25.大多数邮件提供商应允许访问这些端口提交外发邮件。