LinuxForum.Fans
Тема

Лимитирование соединений на UDP сервис при помощи iptables

Автор: vspider 6 сообщений 3100 просмотров
#100236

Доброго времени суток!

Есть машина с Linux Centos 5.2, есть самописный демон, который принимает определенные данные по UDP протоколу (слушает UDP порт). На udp порт идет поток данных (мусорных в том числе), который увеличивается ближе к вечернему времени, что приводит к тормозам, а в последствии к полной остановке самописного ПО. Исходники демона утеряны и модернизации он не подлежит. Как временное решение проблемы было найдено решение по лимитированию соединений при помощи iptables. Следующие правила применял для реализации этой задачи:

-A RH-Firewall-1-INPUT -p udp -m udp --dport 8000 -m limit --limit 5/second --limit/burst 5 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 8000 --limit 10/s --limit-burst 20 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 8000 -j DROP -m iplimit --iplimit-above 1
-A RH-Firewall-1-INPUT -p udp --dport 8000 -m limit --limit 1/s --limit-burst 1 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 8000 -m limit --limit 20/s --limit-burst 200 -j DROP
-A INPUT -p udp --dport 8000 --limit 10/s --limit-burst 20 -j DROP

Данные правила я применял в разном порядке и в разных вариациях. Теперь о том, как проверял работоспособность UDP лимитов:

на "защищаемой" машине запускаю iperf
# iperf -s -p 8000 -u
------------------------------------------------------------
Server listening on UDP port 8000
Receiving 1470 byte datagrams
UDP buffer size: 8.00 MByte (default)

С другой машины (обе находятся в локальной сети):
iperf -c 192.168.1.156 --format k -u -p 8000 -t 180

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

В связи с этим у меня к сообществу пара вопросов

1. Правильно ли я проверяю работоспособность UDP лимитов, используя при этом инструмент iperf?
2. Какие же все таки правила iptables нужны для лимитирования соединений по UDP?

Буду рад любым ответам, спасибо.

#100250

а обязательно со всей сети собирать или с определённых хостов?
По скрипту по ходу я не понимаю зачем стоко правил на 1 порт?
Зачем указываешь политику accept или drop?
по скрипту
http://www.opennet.ru/docs/RUS/iptables/#STATEMACHINE
6.4.3.1. Критерий Limit

#100262

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

#100264

зачем делаете в секундах везде попробуйте перевести в минуту.
например
-p udp --dport 8000 --limit 10/minute --limit-burst 20 -j DROP
ну эт кусок ток.

#100557

что еще есть в iptables, явно пакеты идет по другим правилам.

#100736
a-x написал:
что еще есть в iptables, явно пакеты идет по другим правилам.

Да куда явнее "-A INPUT -p udp --dport 8000 --limit 10/s --limit-burst 20 -j DROP" десять пакетов в секунду и 20 burst

Войдите или зарегистрируйтесь, чтобы ответить.