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.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.comdomain.com可能位於domain.com與其自身不同的 IP 位址。

現在,如果您從電子郵件軟體程式(也稱為 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。

相關內容