У меня есть почтовый сервер, и у пользователей есть такая плохая привычка: они любят нажимать кнопки отправки и получения одновременно в течение секунды, из-за чего журнал заполняется ненужной информацией.
Я пытаюсь ограничить каждый IP-адрес в своей сети (внутренний IP-адрес), чтобы иметь возможность подключаться к почтовому серверу один раз в 30 секунд, но это не должно применяться к внешним IP-адресам, поскольку почтовый сервер иногда будет получать пересылаемую почту с другого разрешенного почтового сервера.
Я прочитал страницу руководства iptables и обнаружил, --connlimit-above N
что там ограничивается только соединение, а не единица времени.
Кто-нибудь может показать мне, как это можно сделать с помощью iptables или ufw?
решение1
Это стандартный случай ограничения скорости:
iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --update --seconds 30 --hitcount 2 -j DROP
Здесь я предположил, что ваша локальная сеть192.168.0.0/24и ваш интерфейсeth0Если нет, пожалуйста, измените соответствующим образом.
Первое правило обнаруживает всеНОВЫЙпакеты, приходящиеeth0из вашей локальной сети, и направлен на порт TCP 25, и добавляет IP-адрес кнедавнийсписок; вторая команда, после полученияНОВЫЙпакет на том же порту, проверяетнедавнийсписок (--обновлять) и, если адрес был внесен в список менее чем--секунд 30назад, сбрасывает пакет, если заданное число--количество попаданий 2Был достигнут.
Обратите внимание, что это применимо только кНОВЫЙпакеты: если у вас есть законный разговор, который происходит, вы не хотите вмешиваться в него, просто заблокируйте установление другого. В этом мой ответ полностью отличается от ответа Анджело
решение2
Хорошо, я это НЕ проверял, поэтому заранее прошу прощения, если это не сработает (но, надеюсь, этого будет достаточно, чтобы вы разобрались):
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags FIN,ACK FIN,ACK --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags RST RST --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -m limit --limit 1/minute -j LOG --log-prefix 'SMTP limit:'
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -j DROP