Мне нужно отправлять электронные письма (и только отправлять, а не получать) с 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 или где-то еще.
Правила INPUT:
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
Примечание: я добавил правило INPUT, предложенное @Otheus, на 4-е место.
Чтобы исходящая электронная почта работала, вам понадобятся две вещи:
Решить вторую проблему можно двумя способами:
Вы можете разрешить своему серверу выполнять поиск DNS, чтобы выяснить, на какой хост отправлять почту. Для этого вам нужно добавить в iptables следующее (заменить 10.2.3.4
с собственными DNS-серверами)
iptables I OUTPUT 1 -p udp -d 10.2.3.4 --dport 53 -j ACCEPT
У вас может быть сервер ретрансляции, который будет принимать все электронные письма из этого ящика и обрабатывать запросы DNS и доставку. Если да, то в этом поле вам нужно иметь только следующее правило iptables:
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
Вам также потребуется исправить конфигурацию постфикса для настройки узла ретрансляции. Вы делаете это в /etc/postfix/main.cf
(заменив 10.2.3.4 IP-адресом вашего узла ретрансляции)
relayhost = [10.2.3.4]
Редактировать: В обоих случаях вам также необходимо разрешить возврат пакетов. Вы не показали весь вывод iptables, но если у вас его еще нет, вы должны добавить что-то вроде:
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
Политика вывода установлена на ПРИНЯТЬ? тогда нет необходимости создавать правило ВЫВОДА. Скорее, вам нужно входящее правило либо (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. Также имейте в виду, что во многих случаях интернет-провайдеры фильтруют доступ к порту 25 (вы должны использовать их собственный почтовый шлюз - это сделано для устранения спама). И smtp + ssl иногда использует порт 465, а иногда 587.
В соответствии с вашей ошибкой «Ошибка службы имен» актуальной проблемой является разрешение DNS. Вышеупомянутое правило также будет обрабатывать это, но опять же, если вы хотите быть более строгим, --sport будет 53.