Имеем ноду с виртуальными серверами, которые много спамят.
Интерфейсы eth0 lo venet0. Требуется логировать при помощи iptables подключения по 25 порту, а после при превышении порога дропать:
iptables -N smtp_check # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 5 минут (300 секунд) с одного адреса было 3 или более новых соединений — блокируем этот адрес (сначало в лог)
iptables -A smtp_check -p tcp --dport 25 -m conntrack --ctstate NEW -m recent --update --seconds 300 --hitcount 3 -j LOG --log-prefix "25port: "
#А теперь в дроп
iptables -A smtp_check -p tcp --dport 25 -m conntrack --ctstate NEW -m recent --update --seconds 300 --hitcount 3 -j DROP
# В противном случае — разрешаем, и при этом заносим в список
iptables -A smtp_check -m recent --set -j ACCEPT
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
При таком раскладе ничего не логируется и соответсвенно не дропается. Проверяю telnet на какой нибудь яндекс
Хотелка: если в определенный промежуток времени с виртульного сервера уходить много почты (спамят) ограничить в количестве соединений виртуалку.
самый простой способ - закрыть им вобще 25ый порт наружу, и настроить отдельно почтовый релей с спаморезкой например rspamd, владельцев виртуальных серверов заставить юзать этот релей.
Сложные решения - всякие man in the middle спаморезки но это сложно и дорого и часто работает криво.