В этой статье я приведу пример обнаружения и блокировки рассылки спам сообщений за 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 я не рекомендую запускать на серверах с очень большим трафиком.
Смотрите также мои статьи:
- Настройка logrotate для ротации логов
- Журналирование активности средствами IPTables
- Установка и запуск ipt_NETFLOW
- Установка и настройка DNS-сервера BIND9
- Настройка маскарадинга (NAT) в Ubuntu
- Настройка PTR записи
Proxmox Mail Gateway в помощь.