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

Брандмауэр сервера предотвращает отправку электронной почты

Брандмауэр на моем VPS не позволяет моему сайту отправлять электронную почту. До конца прошлого месяца все работало нормально. Мой хостинг-провайдер (Webfusion) практически бесполезен.

Я могу отправить электронное письмо, если открываю порты INPUT 32768-65535, но не могу, если эти порты закрыты. Почему это могло быть?

У меня в брандмауэре следующие правила (N.B. Я исключил правила, которые ограничены моим IP, например ssh и т. д.):

# sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
VZ_INPUT   all  --  anywhere             anywhere

Chain FORWARD (policy DROP)
target     prot opt source               destination
VZ_FORWARD  all  --  anywhere             anywhere

Chain OUTPUT (policy DROP)
target     prot opt source               destination
VZ_OUTPUT  all  --  anywhere             anywhere

Chain VZ_FORWARD (1 references)
target     prot opt source               destination

Chain VZ_INPUT (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssmtp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp dpts:32768:65535
ACCEPT     udp  --  anywhere             anywhere            udp dpts:32768:65535
ACCEPT     tcp  --  localhost.localdomain  localhost.localdomain
ACCEPT     udp  --  localhost.localdomain  localhost.localdomain

Chain VZ_OUTPUT (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere
ACCEPT     udp  --  anywhere             anywhere

VPS работает под управлением Plesk 10.4.4.
Редактировать: Почтовый сервер - qmail
Редактировать: Правила создаются модулем брандмауэра "ПК Р-Виртуализация".
(спросите, нужна ли вам дополнительная техническая информация, чтобы помочь мне)

Я думаю, вы отбрасываете входящие ответы. Попробуйте добавить с помощью

-m state --state RELATED,ESTABLISHED -j ACCEPT

к VZ_INPUT

Я думаю, тебе нужно прочитать эфемерные порты чтобы вы могли немного больше понять, как ваша машина устанавливает исходящие соединения.

Когда ваш сервер устанавливает исходящее SMTP-соединение (порт назначения 25, разрешенный вашим очень разрешающим правилом OUTPUT), ответы будут возвращаться на эфемерный порт, с которого ваш сервер получил соединение. По умолчанию диапазон временных портов Linux составляет от 32768 до 61000. Когда вы запрещаете входящий трафик на портах с 32768 по 65535, вы блокируете ответы от удаленного SMTP-сервера.

Мне эти правила брандмауэра кажутся довольно нетрадиционными. Это довольно нетипично, по крайней мере, по моему опыту, видеть правила брандмауэра, которые не используют преимущества ip_conntrack и фильтрации с отслеживанием состояния. Некоторые поисковые запросы по именам «VZ_FORWARD», «VZ_INPUT» и т. Д. Показывают мне, что это довольно типичный набор правил, который создается некоторым пакетом управления виртуальным сервером. Лично я бы использовал фильтрацию с отслеживанием состояния, но у поставщика VPS могут быть аргументы против производительности.

Редактировать:

Если вам интересно узнать больше о netfilter, официальная документация неплохое место для начала, хотя некоторые из этих документов немного устарели. Вы не упоминаете, какой дистрибутив вы используете, но вы можете найти там документацию по конкретному дистрибутиву. В другом комментарии вы упоминаете, что хотите ограничить свои модификации используемого вами менеджера графического интерфейса. Это может ограничить вашу возможность вносить существенные изменения в конфигурацию. Даже если вы не собираетесь вручную изменять конфигурацию, вы, вероятно, получите полезные знания, немного почитав netfilter.

re: ваша цепочка OUTPUT - администратор, заботящийся о безопасности, хотел бы заблокировать трафик OUTPUT, чтобы, если злоумышленники получат контроль над серверным компьютером без полномочий суперпользователя, они будут ограничены в том, какие типы трафика могут исходить из машина в инет. Некоторые черви, например, ожидают, что смогут отправлять запросы HTTP (или FTP, или TFTP) обратно в Интернет для загрузки своих компонентов «второго этапа». Когда вы убираете возможность сервера делать произвольные запросы в Интернет, вы можете ограничить действия злоумышленника, которые могут заставить вашу машину делать. (Очевидно, что если они получат доступ уровня суперпользователя, то «игра окончена» - они могут просто изменить правила брандмауэра.)

Глядя на VZ_INPUT:

ПРИНЯТЬ tcp - в любом месте tcp dpt: smtp

Это позволяет входящие подключения к вашему SMTP-серверу.

Ваши правила вывода позволяют все.

Но когда вы отправляете электронные письма, ваша машина действует как КЛИЕНТ, а не как сервер.

Поэтому, когда вы пытаетесь отправить электронное письмо, пакет SYN отправляется, скажем, с порта 32768 на порт 25, затем ack возвращается с порта 25 на порт 32768, что соответствует только глупому правилу, добавленному в конце.

следовательно, добавление обратного правила к VZ_INPUT разрешит трафик:

ACCEPT     tcp  --  anywhere             anywhere            tcp spt:smtp

Или, как предлагает Мозе, разрешить связанный трафик на VZ_INPUT. Последнее на самом деле является лучшим решением, поскольку приведенная выше версия без сохранения состояния не будет блокировать доступ к портам ваших серверов злоумышленником, который устанавливает для своего порта клиента значение 25.

Вам действительно следует реализовать правильную фильтрацию исходящего трафика на своем сервере - следовательно, вы должны (как говорит Деннис) разрешить установку, связанную с vz_output, вместе с действующими клиентскими протоколами, такими как DNS, SMTP и NTP, вместе с политикой DENY по умолчанию.

Кстати: как получить оболочку в системе, если она не поддерживает ssh / rsh / telnet?