можно ли реализовать Ограничение на основе IP-адреса для SMTP AUTH в Postfix?
Сценарий: я использую почтовый сервер Postfix, который принимает почту со всего Интернета. Но сервер не только принимает почту, но и позволяет своим аутентифицированным пользователям отправлять письма внутренним или внешним пользователям. Пока никаких проблем.
К сожалению, я всегда немного пугаюсь при чтении файлов журнала. Ежедневно происходят тысячи неудачных незаконных попыток входа в систему с IP-адресов со всего мира.
Но на самом деле легитимные хосты-отправители поступают только из нескольких известных диапазонов IP-адресов. Так что я знаю только кто-то из (например)
мощь даже быть законным отправителем. (Я знаю, что IP-адрес, указанный в приведенном выше примере, искажен. Я просто не хотел раскрывать настоящие.)
Так что, если отправитель приходит из другого диапазона IP-адресов, он наверняка никому из моих пользователей и поэтому не имеет права передавать что-либо.
Я не хочу, чтобы кто-то не из этих подсетей мог ретранслировать четный если он выясняет допустимую комбинацию имени пользователя и пароля для SMTP AUTH. Если он из диапазона IP-адресов, не включенных в белый список, он не должен отправлять. Ни при каких условиях. Так permit_sasl_authenticated
одного недостаточно. Пока кто-то из "определенный" страны (я не хочу называть их явно ...) могут входить в систему с украденными / перебором / шпионскими учетными данными, это недостаточно безопасно. :-) (Подумайте о социальной инженерии, троянских кейлоггерах, которые крадут данные учетных записей, легкомысленных пользователях с легко угадываемыми паролями и т. Д.)
=> Итак, возможно ли реализовать ограничение IP-адреса для попыток входа в систему с помощью SMTP AUTH? (Это не должно влиять на получение входящих писем. Для этого у меня есть policyd-weight
и т.д. Здесь речь идет только об исходящих / подлежащих ретрансляции письмах.)
Решения, которые не будет работать:
iptables
ограничение брандмауэра. Поскольку я хочу иметь возможность получать почту со всего Интернета через порт 25, я не могу реализовать ограничения на уровне транспортного уровня. - Более того, я хочу, чтобы законные пользователи могли подключаться к порту 25, чтобы принимать новые исходящие письма на сервер. Таким образом, разрешить отправку почты только через TCP-порт с ограниченным доступом к подсети, например 24343, тоже не решение.permit_mynetworks
: Не все из известных диапазонов IP-адресов являются законными пользователями. Так что я не могу позволить всем оттуда отправлять. Вход в систему SMTP AUTH необходим, чтобы определить, является ли кто-либо авторизованным пользователем.Как насчет того, чтобы поставить SMTP AUTH на другой порт, например 587, и использовать iptables для ограничения доступа к этому порту? 587 - это не скрытый порт, это порт отправки почты, определенный RFC. Почта к вам приходит 25, почта через вас должна идти более 587.
Вы хотите использовать отрицательную форму smtpd_sasl_exceptions_networks
.
smtpd_sasl_exceptions_networks = !134.500.0.0/16 !134.700.42.0/24 !134.800.133.7
Вас также может заинтересовать smtpd_client_connection_rate_limit
.
Ежедневно происходят тысячи неудачных незаконных попыток входа в систему с IP-адресов со всего мира.
установите fail2ban и настройте существующий или создайте новый фильтр для их перехвата. Я использую:
failregex =\[<HOST>\]\: SASL LOGIN authentication failed
Я бы посоветовал вам использовать HIDS, например OSSEC для временной блокировки IP-адресов, которые пытались войти в систему. Вы также можете добавить правило в OSSEC, чтобы исключить ваши доверенные сети из этого правила, чтобы законные пользователи не блокировались после нескольких попыток.
Я предлагаю это, поскольку не думаю, что Postfix действительно может дополнить my_networks и SASL.