我有一台運行 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
可能位於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。