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

Использование iptables для блокировки SMTP, кроме одного хоста?

У меня есть один сервер, который работает и как почтовый, и как веб-сервер. Я хотел бы использовать iptables для разрешения всех входящих и исходящих подключений, кроме входящего порта 25. Я хочу, чтобы только один удаленный хост мог подключаться к порту 25 (для ретрансляции почты).

По сути, мне нужен открытый сервер, не превращающий его в ретранслятор спама. Какие-либо предложения? Спасибо!

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

Предполагая, что ваша цепочка INPUT настроена на политику «ACCEPT» и в настоящее время позволяет новым входящим пакетам уходить с конца цепочки, просто выполните:

iptables -A INPUT -p tcp --dport 25 -s ! x.x.x.x -j DROP

Для полноты картины мой первоначальный ответ выглядел так:

iptables -A INPUT -p tcp --dport 25 -s x.x.x.x -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP

Первый метод основан на использовании одного правила и его очень легко визуально анализировать, поскольку он самодостаточен. Ко второму проще добавить дополнительные адреса.

Замените исходный адрес на «x.x.x.x». Я подозреваю, что вам действительно нужно больше одного источника, но вы можете понять это. (У вас, вероятно, есть машины в вашей локальной сети или другие клиенты, с которыми вы хотите поговорить, но, возможно, нет.)

(Надеюсь, у вас есть правила в верхней части цепочки INPUT, позволяющие установленным соединениям сокращать оставшуюся часть цепочки и просто ПРИНЯТЬ. На самом деле вам не нужно ничего, кроме первоначального рукопожатия, соответствующего приведенным выше правилам.)

Очевидно, сохраните эти правила в любом устройстве сохранения состояния iptables, которое использует ваш дистрибутив.

Изменить: Спасибо, womble.

Что-то вроде этого является более перспективным вариантом на тот случай, если вам понадобится разрешить больше адресов.

iptables -A INPUT -p tcp --dport 25 -s x.x.x.x -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP

также легче перейти от этой политики к политике DENY по умолчанию, что всегда хорошо.

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