Назад | Перейти на главную страницу

правило 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 или где-то еще.

Правила 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-е место.

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

  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]

Редактировать: В обоих случаях вам также необходимо разрешить возврат пакетов. Вы не показали весь вывод 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.