URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 5485
[ Назад ]

Исходное сообщение
"Интересное поведение IPTables и hashlimit"

Отправлено WeSTMan , 19-Мрт-19 19:10 
Всем привет, форумчане. Вообщем есть правила:
-P INPUT DROP
-A INPUT -i -lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -p udp -m multiport --dports 27015:27020 -m state --state NEW -m hashlimit --hashlimit-upto 104/sec --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name CSS -j ACCEPT

Использую такой метод защиты от DoS атак UDP протокола.
Приложение передает не более 104 пакета в секунду.
По сути защита не должна пускать тех, кто превышает 104 пакета.
Когда я атакую свой выделенный сервер, оно так и происходит...
Например я посылаю 150 000 пакетов...
Но через некоторое время почему-то я попадаю в состояние ESTABLISHED и большое количество пакетов попадает в приложение. Возможно я что-то напутал в правилах?
И если я попадаю в ESTABLISHED, есть возможность отфильтровать пакеты? Спасибо.


Содержание

Сообщения в этом обсуждении
"Интересное поведение IPTables и hashlimit"
Отправлено ыфективный манагер , 19-Мрт-19 19:27 
> И если я попадаю в ESTABLISHED, есть возможность отфильтровать пакеты? Спасибо.

тебе виднее куда ты там попадаешь
советую попасть сначала в гугл и основательно почитать базовую документацию

но если пакет уже попал в ACCEPT/DROP - то остальные правила после него уже необрабатываются,
это основная аксиома работы с iptables , советую отойти от консоли пока его не поймёшь

твои правила в том виде что они есть лишены смысла

> -A INPUT -p udp -m multiport --dports 27015:27020 -m state --state NEW -m hashlimit --hashlimit-upto 104/sec --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name CSS -j ACCEPT

убери -m state NEW и поставь правило выше -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

так оно будет работать как ты хочешь



"Интересное поведение IPTables и hashlimit"
Отправлено WeSTMan , 19-Мрт-19 19:48 
>[оверквотинг удален]
> советую попасть сначала в гугл и основательно почитать базовую документацию
> но если пакет уже попал в ACCEPT/DROP - то остальные правила после
> него уже необрабатываются,
> это основная аксиома работы с iptables , советую отойти от консоли пока
> его не поймёшь
> твои правила в том виде что они есть лишены смысла
>> -A INPUT -p udp -m multiport --dports 27015:27020 -m state --state NEW -m hashlimit --hashlimit-upto 104/sec --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name CSS -j ACCEPT
> убери -m state NEW и поставь правило выше -A INPUT -m conntrack
> --ctstate ESTABLISHED -j ACCEPT
> так оно будет работать как ты хочешь

К сожалению... нет, опять я попадаю в ESTABLISHED и не отсеиваю пакет, который превысил мои правила
alex@server:~# iptables -L -v -n
Chain INPUT (policy DROP 34506 packets, 1274K bytes)
pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  -lo    *       0.0.0.0/0            0.0.0.0/0
2159 86280 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 27015:27020 limit: up to 104/sec burst 1 mode srcip
203K 7511K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 224 packets, 36759 bytes)
pkts bytes target     prot opt in     out     source               destination

Как видно, iptables заблокировал 34506 пакета и пропустил 203000+ пакета


"Интересное поведение IPTables и hashlimit"
Отправлено WeSTMan , 19-Мрт-19 22:11 
Решение:
-A INPUT DROP
-A INPUT -i -lo -j ACCEPT //Разрешаем входящие соединения для локальной сети
-A INPUT -p udp -m multiport --dports 27015:27020 -m hashlimit --hashlimit-upto 104/sec --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name CSS -j ACCEPT //Если пакетов меньше 104 в секунду, пропускаем их
-A INPUT -p udp -m multiport --dports 27015:27020 -j DROP //Если больше, то дропаем
-A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT //Разрешаем установленные соединения