我刚刚遇到了一个与我们的 ISP 相关的问题;我们的互联网连接被阻止了,因为从我们的 IP 发送了太多邮件。问题是我们都使用 Gmail,据我们所知,没有邮件通过 ISP SMTP 服务器发送(如果邮件不在他们的服务器上,ISP 会阻止所有到端口 25 的流量)。
我提前封锁了 25 端口,因此任何发往该邮件服务器的邮件都无法离开我们的网络。但这不会阻止邮件发送到其他服务器的端口。
我想做的是找出在我们的网络上发送这些邮件的人。是否有可以使用 Ubuntu 识别邮件包并拒绝它们的程序?顺便说一句,我们的 Ubuntu 路由器不运行 smtp 服务器。
答案1
tcpdump是一种有用的工具,可以将数据包从网络转储到文件或屏幕,它通常在发行版打包存储库中可用,并且针对此类情况有非常完善的文档和测试。
你可以在 ubuntu 路由器上安装 tcpdump(apt-get install tcpdump
),并将其配置为监视 smtp 流量;
# tcpdump -s0 -w/tmp/smtp_dump port 25
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
您可以查看哪些主机从另一个 SSH 会话发送 smtp 流量的文件;
# 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。
警告:如果您有大量 smtp 流量,tcpdump 将很快填满您的磁盘,因此请检查输出文件ls -lh /tmp/smtp_dump
并在您有几 MB 的数据需要查看时使用 ctrl-c 停止命令。
tcpdump 的接口选项(-i eth0
):如果你的路由器使用与 eth0 不同的接口,那么你可能必须使用以下选项进行选择,-i
例如tcpdump -i bond0 -s0 -w/tmp/smtp_dump port 25
答案2
答案3
邮件也可以通过端口 465 和 587 发送。(465 已被撤销,但可能仍在使用。)结合滥用代理服务器,邮件甚至可以通过端口 80、443 或 3128(用于 squid)或许多其他端口发送。
您的网络是否有一个通向互联网的出口点?您在该出口点有防火墙吗?
如果没有,你会想要这个。如果你有多个出口点,你应该在每个出口点上都安装防火墙。(可能是同一个物理盒子。)
将防火墙设置为默认丢弃所有内容并仅允许您想要的流量通过。
如果您不知道您的正常流量是什么,您可以在防火墙规则末尾添加一个日志行,以便记录所有尚未匹配的内容。
即使您设法使用防火墙阻止流量,您仍然需要追踪并阻止发送邮件的程序。如果您不知道发送邮件的程序,则邮件可能很容易来自受感染的系统、开放代理或某些垃圾邮件发送者滥用的 Web 表单。我不希望我的网络中出现这些程序。
答案4
最好的解决方案可能是将您的邮件客户端配置为在发送外发邮件时使用提交端口 (587) 或 SSMTP 端口 (465),然后阻止所有到端口 25 的传出流量。大多数邮件提供商应该允许访问这些端口以提交外发邮件。