Я должен послать электронные письма (и только отправить, не получить) с сервера Linux (SUSE Linux Enterprise Server 11), и я думаю, что должен добавить вид следующего правила к iptables:
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
Но я не совсем уверен, начиная с моего ВЫВОДА iptables правила предлагают мне, чтобы с текущими правилами я смог послать электронные письма, но на самом деле я не могу.
Это - мой ВЫВОД 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 в 4-м месте.
Политика вывода установлена на ПРИНЯТЬ? тогда нет необходимости создавать правило ВЫВОДА. Скорее, вам нужно входящее правило, чтобы либо (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.
Для того, чтобы исходящая электронная почта работала, вам нужны две вещи:
Есть две возможности решить вторую проблему:
Вы можете разрешить вашему серверу выполнять поиск в 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]
Edit: В обоих случаях вам также необходимо разрешить возврат пакетов. Вы не показали весь вывод iptables, но если у вас его еще нет, вы должны добавить что-то вроде:
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT