iptables управляют для отправки электронного письма

Я должен послать электронные письма (и только отправить, не получить) с сервера 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-м месте.

0
задан 15 April 2015 в 14:33
2 ответа

Политика вывода установлена ​​на ПРИНЯТЬ? тогда нет необходимости создавать правило ВЫВОДА. Скорее, вам нужно входящее правило, чтобы либо (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.

0
ответ дан 4 December 2019 в 13:50

Для того, чтобы исходящая электронная почта работала, вам нужны две вещи:

  1. разрешить исходящее соединение SMTP (и их ответные пакеты). Этот, кажется, вы уже рассмотрели.
  2. способ выяснить, на какой хост отправлять почту. Это то, что в настоящее время не работает.

Есть две возможности решить вторую проблему:

  • Вы можете разрешить вашему серверу выполнять поиск в 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
2
ответ дан 4 December 2019 в 13:50

Теги

Похожие вопросы