DDoS-защита Linux'овского сервера через правила iptables

SiBear

Участник
Сообщения
6
Реакции
2
Добрый вечер.

iptables воистину мощный инструмент!
Когда-то у меня стояли CS:S v34 серваки, которые DDOSил каждый школьник круглосуточно, но сервер ни разу не ложился и даже не чувствовал DDOS-атаки с 5 машин одновременно (2 из них в локалке). В боевых условиях замечал с 10 машин попытку одновременного ддоса.

Но просто вручную блокировать их НЕ тривиально!
Таким образом, с помощью iptables+logs+ipset+scripts(bash)+cron я создал свою систему BlackList (назвал так, просто первое что на ум пришло :) ), которая через cron-задание сканировала log'и и создавала кэш DDOS-IP, а после, добавляла в ipset таблицу DROP этих адресов.

Таким образом, за месяц работы в авто-режиме добавились 1267 DDOS-адресов.
Исключены случаи случайного блокирования, в логи заносились только 100% DOS-адреса, как только они запускали скрипты/программы для ддоса.
Так же был WhiteList, чтобы ip самого-себя не заблокировать :)

Кому интересно - пишите в личку или сюды.
 

BatyaMedic

Участник
Сообщения
766
Реакции
127
Добрый вечер.

iptables воистину мощный инструмент!
Когда-то у меня стояли CS:S v34 серваки, которые DDOSил каждый школьник круглосуточно, но сервер ни разу не ложился и даже не чувствовал DDOS-атаки с 5 машин одновременно (2 из них в локалке). В боевых условиях замечал с 10 машин попытку одновременного ддоса.

Но просто вручную блокировать их НЕ тривиально!
Таким образом, с помощью iptables+logs+ipset+scripts(bash)+cron я создал свою систему BlackList (назвал так, просто первое что на ум пришло :) ), которая через cron-задание сканировала log'и и создавала кэш DDOS-IP, а после, добавляла в ipset таблицу DROP этих адресов.

Таким образом, за месяц работы в авто-режиме добавились 1267 DDOS-адресов.
Исключены случаи случайного блокирования, в логи заносились только 100% DOS-адреса, как только они запускали скрипты/программы для ддоса.
Так же был WhiteList, чтобы ip самого-себя не заблокировать :)

Кому интересно - пишите в личку или сюды.
Мне интересно.
 

Tallanvor

НЕ ПИШУ я плагины!!! И не правлю! И ваще...
Сообщения
1,352
Реакции
554
SiBear, думаю, будет интересно очень многим, особенно тем, кто не не гуру в линухе.
Выкладывай на всеобщее обозрение :)
 

ykpon

Владыка
Сообщения
675
Реакции
399
Добрый вечер.

iptables воистину мощный инструмент!
Когда-то у меня стояли CS:S v34 серваки, которые DDOSил каждый школьник круглосуточно, но сервер ни разу не ложился и даже не чувствовал DDOS-атаки с 5 машин одновременно (2 из них в локалке). В боевых условиях замечал с 10 машин попытку одновременного ддоса.

Но просто вручную блокировать их НЕ тривиально!
Таким образом, с помощью iptables+logs+ipset+scripts(bash)+cron я создал свою систему BlackList (назвал так, просто первое что на ум пришло :) ), которая через cron-задание сканировала log'и и создавала кэш DDOS-IP, а после, добавляла в ipset таблицу DROP этих адресов.

Таким образом, за месяц работы в авто-режиме добавились 1267 DDOS-адресов.
Исключены случаи случайного блокирования, в логи заносились только 100% DOS-адреса, как только они запускали скрипты/программы для ддоса.
Так же был WhiteList, чтобы ip самого-себя не заблокировать :)

Кому интересно - пишите в личку или сюды.

DDoS и правда был школьный, значит. У тебя iptables сам загнет сервер при серьезной атаке.
 

ykpon

Владыка
Сообщения
675
Реакции
399

Оффтоп
 
B

bigbrain911

Подскажите, сегодня один ушлепок крашил сервер, в консоли сервера спамило:

Socket ProcessAccept Error: Too many open files

в логах линухи:

kernel: [27625.689844] srcds_linux[1609]: segfault at 50 ip 00000000eea135c9 sp 00000000fff598a0 error 4 in metamod.2.css.so[ee9fb000+38000]

Кинул подсеть ушлепка в бан + добавил пару правил в iptables:

-A INPUT -p udp -m udp --dport 27000:28000 -m length --length 0:28 -j DROP
-A INPUT -p tcp -m tcp --dport 27000:28000 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 1 --connlimit-mask 32 -j DROP


Атаки пропали, но все ли правильно, точнее все ли учтено, может кто сталкивался, или есть дополнения по правилам? Все что есть на данный момент:

-A INPUT -p udp -m udp --dport 27000:28000 -m hashlimit --hashlimit-upto 100/sec --hashlimit-burst 50 --hashlimit-mode srcip --hashlimit-name CSS -j ACCEPT
-A INPUT -p udp -m udp --dport 27000:28000 -j DROP
-A INPUT -p udp -m udp --dport 27000:28000 -m length --length 0:28 -j DROP
-A INPUT -p tcp -m tcp --dport 27000:28000 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 1 --connlimit-mask 32 -j DROP
 
Последнее редактирование модератором:

TWRP

Участник
Сообщения
317
Реакции
44
Подскажите правила такие.
Сделать ограничение подкл к машине.

То есть например сделать. можно только 500 подкл к машине
Если уже больше чем за 500, то машина уже не могла принимать подкл.

возможно ли так сделать через iptables ?
 

Tallanvor

НЕ ПИШУ я плагины!!! И не правлю! И ваще...
Сообщения
1,352
Реакции
554
TWRP,
Для ограничения количества одновременных подключений к серверу для клиента по IP используется модуль connlimit. Ограничим количество параллельных подключений по SSH до трех, для одного клиента
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT Ограничим количество параллельных подключений по HTTP до трех, для одного клиента
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP где

  • --connlimit-above 10 - условие для проверки одновременных подключенийне более 10;
  • --connlimit-mask 24 - группировка хостов по длине префикса (для IPv4 это число должно быть 0 и 32;
Также ограничить количество подключений в единицу времени можно с помощью модуля limit.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT где

  • -m limit - подключаем модуль limit;
  • –limit 25/minute - порог в 25 подключений в минуту;
  • –limit-burst 100 - условие включения порога: после достижения 100 подключений
Источник

Оно?
 
  • Мне нравится
Реакции: TWRP

Tallanvor

НЕ ПИШУ я плагины!!! И не правлю! И ваще...
Сообщения
1,352
Реакции
554
а если я --dport 80 уберу работать будет ?

Тебе надо определиться, для каких задач/протоколов тебе нужно ограничить количество подключений.
80 порт - это стандартный порт HTTP протокола, т.е. доступ на WEB-сервер, если он поднят на твоей машине.
Если надо на какие-то другие порты заблочить, то указывать надо их.
БЕЗ указания порта и протокола (tcp/udp) такое правило работать не будет!
 

TWRP

Участник
Сообщения
317
Реакции
44
мне нужно именно на машину
конкретнее на ip только
 

OSR-Sapport

Участник
Сообщения
25
Реакции
0
Когда так задаешь правила, то тогда сервера в Избранном отображаются как выкл или пинг 2000, а потом падает и опять же набирает и опять в офлайне, но подкл можно к нему! :)

Столкнулся с такой же проблемой. Из правил прописано
iptables -A INPUT -p udp -m udp --dport 27016 -j DROP
iptables -A INPUT -p udp -m udp --dport 27016 -m hashlimit --hashlimit-upto 50/sec --hashlimit-burst 50 --hashlimit-mode srcip --hashlimit-name CSS -j ACCEPT

Как сделать, чтобы сервера не подвисали в поиске?
 
B

bigbrain911

Вы режете инте клиентам, пробуйте как ниже должно работать:
-A INPUT -p udp -m udp --dport 27000:28000 -m hashlimit --hashlimit-upto 100/sec --hashlimit-burst 50 --hashlimit-mode srcip --hashlimit-name CSS -j ACCEPT
-A INPUT -p udp -m udp --dport 27000:28000 -j DROP
 

pihmih

Участник
Сообщения
512
Реакции
23
hashlimit-upto 100/sec --hashlimit-burst 50
Эти цифры как то зависят от количества серверов и одновременно подключенных людей на хосте моем?
 

coolman

Участник
Сообщения
4
Реакции
0
Подскажите правила такие.
Сделать ограничение подкл к машине.

То есть например сделать. можно только 500 подкл к машине
Если уже больше чем за 500, то машина уже не могла принимать подкл.

возможно ли так сделать через iptables ?

Не правильный вопрос и не правильный ответ дадут, надо делать ограничения не на сервер, а на атакующий комп, иначе твой сервер многие не будет видеть в сети. большая часть правил из этого топика, говнянские, 100 летней давности, сделанными криворукими юзерами и успешно распространившиеся по всему инету.
Ответ на твой вопрос:
iptables -A INPUT -p udp -m multiport --dport 27015:27040 -m connlimit --connlimit-above 500 --connlimit-daddr --connlimit-mask 32 -j DROP
только я уже сказал, какие будут последствия.

Добавлено через 18 минут
Забирайте:
iptables -A INPUT -p tcp --syn --dport 27015:27050 -j DROP -m connlimit --connlimit-above 1
И всякие флудилки пахать не буду
спасибо поржал:-D
 
Последнее редактирование:
Сверху Снизу