我有一台运行 exim 的 CentOS 机器,我试图将出站电子邮件限制为仅发送到一个域(假设为 domain.com)并阻止发送到所有其他域的邮件。我添加了一条特定规则以允许将邮件发送到 domain.com(行号 6、7 和 8),并且输出链的默认操作是阻止。但邮件仍然发送到 gmail、yahoo 和其他域。我的 iptables 规则有什么问题?
以下是出站规则
root@host1 [/tmp/logd]# /sbin/iptables -L OUTPUT -n --line-number -v
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.x.x.x /* test */
2 3455 420K ACCEPT tcp -- * * 0.0.0.0/0 23.x.x.x tcp dpt:443
3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 104.x.x.x tcp dpt:80
4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 104.x.x.x tcp dpt:80
5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 104.20.5.21 tcp dpt:80 /* www.spamhaus.org */
6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 216.x.x.x tcp dpt:25 /* allow mails to domain.com */
7 69 16484 ACCEPT tcp -- * * 0.0.0.0/0 216.x.x.x tcp dpt:25 /* allow mails to domain.com */
8 68 10803 ACCEPT tcp -- * * 0.0.0.0/0 173.x.x.x tcp dpt:25 /* allow mails to domain.com */
9 800K 826M LOCALOUTPUT all -- * !lo 0.0.0.0/0 0.0.0.0/0
10 0 0 ACCEPT tcp -- * !lo 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
11 0 0 ACCEPT udp -- * !lo 0.0.0.0/0 0.0.0.0/0 udp dpt:53
12 9 536 ACCEPT tcp -- * !lo 0.0.0.0/0 0.0.0.0/0 tcp spt:53
13 2147 313K ACCEPT udp -- * !lo 0.0.0.0/0 0.0.0.0/0 udp spt:53
14 11324 17M ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
15 797K 826M INVALID tcp -- * !lo 0.0.0.0/0 0.0.0.0/0
16 797K 826M ACCEPT all -- * !lo 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
17 0 0 ACCEPT icmp -- * !lo 0.0.0.0/0 0.0.0.0/0 icmp type 0
18 0 0 ACCEPT icmp -- * !lo 0.0.0.0/0 0.0.0.0/0 icmp type 8
29 0 0 ACCEPT icmp -- * !lo 0.0.0.0/0 0.0.0.0/0 icmp type 11
20 0 0 ACCEPT icmp -- * !lo 0.0.0.0/0 0.0.0.0/0 icmp type 3
21 372 25376 LOGDROPOUT all -- * !lo 0.0.0.0/0 0.0.0.0/0
答案1
我不知道您的这台机器上是否也有 IPv6?如果是,exim 会默认尝试通过 IPv6 发送,然后再回退到 IPv4。但我认为这里的问题不是 iptables 本身,而是处理和查找这些域的方式。几乎不可能根据 IP 地址进行过滤,因为大公司有各种路由和 BGP 技巧来降低延迟以及如何将流量路由到他们的域。
我反而建议您将 exim4 配置为仅将电子邮件发送到您允许的传出域,然后再发送到其他任何域,也许可以使用以下命令:阻止向 exim 中的某些用户发送邮件
答案2
我认为你对如何做到这一点的总体想法是错误的。这类主题通常都是写得很充实的书,但我会试着简短地解释一下:
您可能认为邮件服务器的domain.com
IP 地址与domain.com
自身相同。虽然在某些情况下(甚至在许多情况下)可能确实如此,但一般情况下并非如此。
相反,域的 DNS 记录中有一些条目,它们决定哪个服务器(IP 地址)负责处理域的邮件。您可能已经看到过这样的 DNS 记录:
domain.com. 1H MX 50 mail.domain.com
domain.com. 1H IN A 2.3.4.5
mail.domain.com 1H IN A 1.2.3.4
这意味着邮件服务器(例如mail.domain.com
)domain.com
可能位于与其本身不同的 IP 地址domain.com
。
现在,如果您从电子邮件软件程序(也称为 MUA - 邮件用户代理)发送电子邮件,MUA 会将邮件传送到 Exim。当 Exim 尝试将邮件转发给收件人时,它首先查找将处理收件人域的邮件的邮件服务器,然后尝试连接到该服务器并在那里传递邮件。
这意味着你的方法甚至可以阻止你发送任何电子邮件。假设domain.com
解析为1.1.1.1
,但 的邮件服务器domain.com
位于(或解析为 )2.2.2.2
。由于您的防火墙只允许到 的流量通过1.1.1.1
,因此您甚至无法向 发送任何电子邮件domain.com
,因为到 的电子邮件domain.com
必须递送到2.2.2.2
。
这只是您不应该使用防火墙来实现目标的众多原因之一。正如@Fredrik Lundhag 所说,您应该相应地配置 Exim。