iptables 似乎没有阻止出站邮件

iptables 似乎没有阻止出站邮件

我有一台运行 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.comIP 地址与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.comdomain.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。

相关内容