Iptables
iptables 規則發送電子郵件
我必須從 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。