Блокировка SPAM за NAT сервером

В этой статье я приведу пример обнаружения и блокировки рассылки спам сообщений за NAT сервером.

Однажды в одну компанию прислали жалобу что с их IP адресов рассылается спам, как оказалось эти IP адреса принадлежали NAT серверу за которым находились сотни клиентов.

Я подключился к этом серверу и добавил правило в iptables, которое позволяет писать SMTP запросы клиентов в /var/log/syslog:

iptables -t filter -A FORWARD -s 172.16.0.0/12 -m tcp -p tcp --dport 25 -j LOG --log-prefix "iptables: "

Не забываем потом удалить чтобы не заполнить логами все дисковое пространство:

iptables -t filter -D FORWARD -s 172.16.0.0/12 -m tcp -p tcp --dport 25 -j LOG --log-prefix "iptables: "

Можно установить лимит запросов которые будут записываться:

iptables -t filter -A FORWARD -s 172.16.0.0/12 -m tcp -p tcp --dport 25 -m limit --limit 5/minute -j LOG --log-prefix "iptables: "

Можно также настроить запись iptables логов в отдельный файл:

nano /etc/rsyslog.d/10-iptables.conf
:msg, contains, "iptables: " -/var/log/iptables.log
& ~

И ротацию логов, например чтобы они не хранились дольше 7 дней:

nano /etc/logrotate.d/iptables
/var/log/iptables.log
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /etc/init.d/rsyslog restart > /dev/null
        endscript
}

Через некоторое время я проанализировал логи и заметил что некоторые клиенты просто шлют email через свои почтовые сервера, а некоторые рассылают спам, чаще всего спам шлют именно вирусы.
По этому блокировать весь smtp трафик на порт 25 нельзя, так как клиентов за NAT сервером около 10 000 и вероятность заблокировать почту простым клиентам 100%.
Просто приведу пример правила которое полностью блокирует трафик на SMTP порт 25 и в моем случае не поможет:

iptables -A FORWARD -s 172.16.0.0/12 -p tcp --dport 25 -j DROP

Разве что можно заблокировать ненужный smtp трафик от вирусов до серой клиентской сети, но это не спасет от рассылки спама в интернет (подобным образом можно блокировать другие порты, чтобы уменьшить вероятность распространения вирусов в локальной сети через уязвимости):

iptables -A FORWARD -d 172.16.0.0/12 -p tcp --dport 25 -m comment --comment SMTP_Blocked_to_local -j DROP

Каждый IP адрес который постоянно флудил запросами на SMTP порт 25, я заблокировал вручную, приведу пример:

iptables -A FORWARD -s 172.16.7.70 -p tcp --dport 25 -m comment --comment "SPAM_09_01_2021" -j DROP

Также обязательным решением защиты от спама будет создание обратных PTR записей на DNS сервере для всех IP адресов которые используются для NAT. Чтобы почтовые сервера могли сверить имя домена отправителя с доменом IP адреса от которого пришло письмо, если имя домена не совпадает, то почтовый сервер может не принять такое письмо, но чаще всего примет и иногда поместит в папку spam (это зависит от количества email и оценки уровня спама), по этому вычислять и блокировать спамеров на NAT сервере тоже нужно.

Посмотрим обратную PTR запись для IP адреса (пример команд для Linux/MacOS):

nslookup 1.2.3.4
whois 4.3.2.1.in-addr.arpa
host 1.2.3.4

В моем случае PTR записей не было, по этому я написал в поддержку LIR, который когда-то продал AS с блоком белых IPv4 адресов, чтобы он указал в RIPE два моих DNS сервера, на которых будут находится обратные записи для всех сетей /24. DNS серверов должно быть минимум два и обратные записи PTR должны быть уже настроены перед тем как указывать эти DNS сервера в RIPE.

Я запустил пару DNS серверов, последнее время мне больше по душе bind9.

Пример (допустим IP адреса NAT сервера 1.2.3.100-1.2.3.103):

nano /etc/bind/3.2.1.in-addr.arpa
$TTL 3600
@          IN SOA ns1.ixnfo.com. admin.ixnfo.com. (
              2020112511        ; Serial
              21600             ; refresh
              3600              ; retry
              3600000           ; expire
              86400 )           ; minimum
 
        IN  NS ns1.ixnfo.com.
        IN  NS ns2.ixnfo.com.
 
$ORIGIN 3.2.1.in-addr.arpa.
100 IN PTR dynamic.pool.ixnfo.com.
101 IN PTR dynamic.pool.ixnfo.com.
102 IN PTR dynamic.pool.ixnfo.com.
103 IN PTR dynamic.pool.ixnfo.com.
nano /etc/bind/named.conf
zone "3.2.1.in-addr.arpa" {
type master;
file "/etc/bind/3.2.1.in-addr.arpa";
};
/etc/init.d/bind9 restart

Также существует много систем и скриптов для мониторинга трафика и безопасности, которые позволят составить топ IP адресов по SMTP трафику и блокировать его. Однако те что используют tcpdump я не рекомендую запускать на серверах с очень большим трафиком.

Смотрите также мои статьи:

Вливайтесь в общение

1 комментарий

Добавить комментарий