Iptables

iptables 規則發送電子郵件

  • April 15, 2015

我必須從 linux 伺服器(SUSE Linux Enterprise Server 11)發送電子郵件(並且只發送,不接收),我認為我應該在 iptables 中添加以下規則:

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT

但我不太確定,因為我的 OUTPUT iptables 規則向我建議,按照目前規則,我應該能夠發送電子郵件,但實際上我不能。

這是我的 OUTPUT iptables 規則:

Chain OUTPUT (policy ACCEPT XXM packets, XXM bytes)
pkts bytes target     prot opt in     out     source               destination
 xxM   xxG ACCEPT     all  --  any    lo      anywhere             anywhere
 xxM   xxM SST-OUTPUT  all  --  any    any     anywhere             anywhere

我一直不願意更改裸 iptables 中的規則,但我認為如果預設策略是“接受”,我應該能夠僅使用目前規則發送電子郵件,我錯了嗎?

我得到的錯誤是:Name service error for name=xxxxx.xxx type=MX: Host not found, try again是什麼讓我認為問題一定出在 /etc/resolv.conf 或其他地方。

輸入規則是:

Chain INPUT (policy DROP)
target     prot opt in     out     source               destination
 ACCEPT     all  --  lo     any     anywhere             anywhere
 ACCEPT     all  --  any    any     anywhere             anywhere            state ESTABLISHED
 ACCEPT     icmp --  any    any     anywhere             anywhere            state RELATED
 ACCEPT     tcp  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED tcp spt:smtp
 LOG        all  --  any    any     anywhere             anywhere            limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-IN-ILL-TARGET '
 DROP       all  --  any    any     anywhere             anywhere

注意:我在第四位添加了@Otheus 建議的 INPUT 規則。

輸出策略設置為接受?則無需創建 OUTPUT 規則。相反,您需要一個傳入規則來 (1) 接受已建立的連接或 (2) 接受來自埠 25 的非同步數據包。第一個是首選,在 Linux 中通過以下方式完成:

iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

如果您想更嚴格,請將埠添加到規則中:

iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -p tcp -m tcp --sport 25 -j ACCEPT

您可以使用 telnet、socat、nc、nmap 之一進行測試。還要記住,很多時候 ISP 過濾埠 25 訪問(你必須使用他們自己的郵件網關——這樣做是為了消除垃圾郵件)。而 smtp+ssl 有時使用埠 465,有時使用 587。

根據您的錯誤“名稱服務錯誤”,實際問題是 DNS 解析。上面的規則也可以處理那個,但是如果你想更嚴格,–sport 是 53。

引用自:https://serverfault.com/questions/682306