Брандмауэр на моем 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?