IPtables, защита от DoS атаки

P
На сайте с 04.02.2012
Offline
2
7394

Здравствуйте!

Каким образом можно ограничить количество пакетов получаемых в секунду?

Пробовал при помощи модуля recent сделать что то вроде ...

iptables -A INPUT -p tcp --dport 22 -m recent --name SSH --update --seconds 1 --hitcount 150 -j REJECT

iptables -A INPUT -p tcp --dport 22 -m recent --name SSH --set -j ACCEPT

... но выдает ошибку. (ssh указал для примера)

Возможно recent вообще для этого не подходит, и мой пример выглядит глупо:)

zexis
На сайте с 09.08.2005
Offline
388
#1

Вот пример. Цифирки можете подставить свои.

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP

iptables -I INPUT -p tcp --syn --dport 80 -m hashlimit --hashlimit-above 1/second --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-srcmask 24 --hashlimit-name blip -j DROP

Против ддоса лучше не REJECT, а DROP.

P
На сайте с 04.02.2012
Offline
2
#2

Спасибо, буду разбирать.

И я забыл уточнить, мне нужно сделать для каждого подключенного ip адреса свой ограничитель.

На сервере находится игра (что то вроде Counter Strike).

zexis
На сайте с 09.08.2005
Offline
388
#3

Что такое подключенный IP ?

Вы имеете ввиду, что ваш сервер имеет несколько IP ? И для каждого свой лимит?

Для защиты игры есть такой интересный способ. Может пригодится.


iptables -A INPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 37800:37900 -m recent --set --name lserv --rsource -j DROP
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 2106 -m recent --rcheck --seconds 15 --name lserv --rsource -j LSCHAIN
iptables -A INPUT -p tcp -m tcp --dport 2106 -m conntrack --ctstate NEW -j DROP
iptables -A LSCHAIN -m recent --remove --name lserv --rsource -j ACCEPT

Смысл в том, что клиент может подключится только в том случае, если он перед этим сделает попытку подключения на определеннй секретный диапазон портов.

Секретный диапазон портов можно менять хитрыми алгоритмами.

Я вам идею дал, если ее развить, то можно постороить для игры защиту.

P
На сайте с 04.02.2012
Offline
2
#4

Я неправильно выразился.

Лимит для каждого клиента(игрока). В общем это не важно, я фигню сказал.

Атака происходит следующим образом. Нехороший пользователь заходит в игру и при помощи нехороших программ начинает создавать флуд. К примеру просто отправляя огромное количество сообщений в чат.

Raistlin
На сайте с 01.02.2010
Offline
247
#5

amx вроде имеет средства автобана, не?

HostAce - Асы в своем деле (http://hostace.ru)
M
На сайте с 16.09.2009
Offline
278
#6
zexis:
Для защиты игры есть такой интересный способ. Может пригодится.

И вы его хоть где-то использовали? Для обычных клиентских программ, без модификации последних.

Просто любопытно.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
zexis
На сайте с 09.08.2005
Offline
388
#7
myhand:
И вы его хоть где-то использовали? Для обычных клиентских программ, без модификации последних.

Просто любопытно.

У меня написан чат с такой зашитой.

Секретный диапазон портов постоянно меняется по определенному алгоритму.

Конечно же код клиентской программы должен быть модифицирован, что бы он мог подключится к серверу.

M
На сайте с 16.09.2009
Offline
278
#8
zexis:
У меня написан чат с такой зашитой.
...
Конечно же код ...

Ну вы почти сами уже поняли какая это тупость в рассматриваемой ситуации. Не забывайте, кстати, что куча игрушек вовсю использует UDP.

zexis
На сайте с 09.08.2005
Offline
388
#9

myhand, вы думать не пробовали?

:)

Разработчик игры сам может выбрать протокол, который использовать.

P
На сайте с 04.02.2012
Offline
2
#10

Можете объяснить как работают:

--hashlimit-above 1/second

--hashlimit-burst 20

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий