- Защита от DDOS атак своими руками
- Автоматизация защиты при DDoS атаке
- linux-notes.org
- Защита от DDoS с iptables, готовый скрипт
- Защита от атаки с использованием SYN flood.
- Защита от DDos атаки
- 9 thoughts on “ Защита от DDoS с iptables, готовый скрипт ”
- Добавить комментарий Отменить ответ
- DDoS-защита Linux’овского сервера через правила iptables
- Pir@tehnic
Защита от DDOS атак своими руками
Снова меня DDOS-ят. В этот раз атака не сильная и заметил я ее случайно во время очередного этапа самообразования с целью заполнения пробелов в знаниях в области безопасности.
Если кто-то открыл эту статью просто так, то рекомендую все же ее прочитать. Я все писал «понятным»языком для лучшего восприятия.
DoS—атака (Denial of Service) — закидывание неугодных ресурсов различным флудом, приводящее их к нокдауну. А DDoS—атака — это такая DoS—атака, которую осуществляет не один энтузиаст, а разгневанная толпа, желающая Страшный Суд, Ад и Погибель неправославному ресурсу. Весь профит этого метода заключается в том, что грамотно спланированную атаку невозможно отразить вообще. В результате сервер начинает как минимум безбожно тормозить при ответах на нормальные запросы, а то и вовсе ложится, не вынеся такого издевательства.
Проще говоря, что такое DoS? Это, к примеру, когда ведёшь разговор с кем-то, но тут подходит алкаш, и начинает громко нести бред. Говорить либо невозможно, либо очень сложно. Решение: зовёшь охрану, она скручивает синяка и уводит.
DDoS же отличается тем, что алкашей вбегает толпа многотысячная, и даже если позвать охрану, она банально не сумеет всех скрутить и увести.
Наиболее же эффективная атака такого плана выполняется не тысячами набежавших алкашей (ибо набор добровольцев, организация, синхронизация и прочее), а превращением в зомби уже имеющихся вокруг мирных юзеров. Они уже есть, уже ходят вокруг, уже оборудованы ртом — осталось только заставить их начать орать пациенту в ухо. Всем сразу и независимо от их желания, по команде, с исполнительностью и настойчивостью компьютера. В компьютерном мире такой захват душ обычно выполняется с помощью трояна.
Для начала нужно посмотреть сколько запросов идет с IP адресов клиентов. Для этого в консоли выполним команду:
netstat -ntu | awk ‘
‘| cut -d: -f1 | sort | uniq -c | sort -nr | more
Видно, что с IP 192.230.77.217 поступило 129 обращений. «Алкаш» (смотреть выше) один, значит не DDOS, а просто DOS—атака. Заголовок статьи менять уже не буду — позже поймете почему.
Ради интереса, можно посмотреть на какие порты идут обращения с этого IP адреса выполнив команду:
Ага. 443 порт пользуется популярностью. Я думал как обычно на 80-й будет, но в принципе не важно.
Блокирую по всем портам исходящие и входящие соединения с этого IP адреса командами:
iptables -A INPUT -s 192.230.77.217 -j DROP
iptables -A INPUT -d 192.230.77.217 -j DROP
Исходящие блокирую «на всякий случай». Вдруг меня взломают и начнут атаковать с моего сервера. Неприятностей потом будет куча, поэтому лучше подстраховаться.
Все порты блокирую на случай, если будет идти подбор паролей к FTP или еще к чему-то.
Проверяем заново текущую ситуацию после применения блокировки командой:
netstat -ntu | awk ‘
‘| cut -d: -f1 | sort | uniq -c | sort -nr | more
Все чисто. Враг не пройдет!
Автоматизация защиты при DDoS атаке
Понятно, что все вышеописанное ручками выполнять лениво и не практично. Давайте этот процесс автоматизируем для нашего удобства и оперативности реагирования на атаки.
На основе одного примера, найденного в Интернете, я написал свой скрипт для защиты от DoS и DDoS атак. Он получился простой, но очень эффективный. Скрипт блокирует IP адреса, количество подключений с которых превысило 50. Это значение можно изменять — скрипт хорошо прокомментирован.
# Находим все соединения на все порты и записываем их в файл ddos.iplist
netstat -ntu | awk ‘
# создаем DROP правила (не выдавать ответа сервера на запросы забаненых) для IP с количеством подключений более 50 и добавляем их в файл
awk ‘
# запускаем скрипт бана IP атакующих
bash /usr/local/ddos/iptables_ban.sh
# Очищаем скрипт, который производит бан
cat /dev/null > /usr/local/ddos/iptables_ban.sh
Давайте его установим.
Для начала, необходимо создать рабочую папку для нашего скрипта. Вводим в консоли команду:
Теперь перейдем в эту папку командой:
Загружаем скрипт в эту папку командой:
Выставляем права 755 на файл скрипта командой:
Запускаем скрипт для теста командой:
В папке со скриптом появятся два файла:
ddos.iplist — в него скидываются все подключения
iptables_ban.sh — сформированный скрипт для блокировки IP адресов
Теперь открываем файл /etc/crontab и добавляем в него следующие строки
*/5 * * * * root /bin/sh /usr/local/ddos/ddos.sh
@monthly root iptables -F
- Первая строка — запускает наш скрипт каждые 5 минут.
- Вторая — производит раз в месяц очистку всех блокировок (амнистия).
За неделю работы скрипта ситуация с банами IP сложилась следующая (команда iptables -L).
На этом все. Возникнут вопросы — пишите в комментариях.
Источник
linux-notes.org
Защита от DDoS с iptables, готовый скрипт
Надоели атаки на компьютер или на сервер, то я покажу готовый и хороший скрипт для решение DDoS атак на ваш сервер.
Сейчас я расскажу, про виды которые часто используются для защиты серверов или сайтов.
- Защита на уровне PHP. Честно, не могу врубится в работу этой логики. То есть, нужно запретить доступ для ботов на этот уровень, чтобы не было огромной нагрузки. Не очень хорошее решение!
- Защита на уровне Apache. Есть модуль mod_evasive, но толку от него тоже не сильно много, не больше чем от PHP!
- Защита на уровне nginx. Самый оптимальный вариант для решение многих атак. Можно прокешировать все страницы и энжинкс будет отдавать страницы почти без нагрузки на процессор. Только канал будет нагружаться весьма прилично. Также можно настроить и использовать limit_req.
- Защита на уровне iptables. Это один из самых эффективных и надежных способов защиты вашего сервера от различных атак.
Для получения списка доступных модулей для IPTables, выполните:
Чтобы получить информацию о всех модулях:
Защита от атаки с использованием SYN flood.
Одна из распространенных DoS атак — это посылка очень большого числа SYN пакетов к серверу.
Чтобы узнать о атаке SYN служит команда netstat, которая показывает список открытых подключений на сервере:
Так же, можно подсчитать их количество, выполнив:
Первое что необходимо сделать, так это установить опцию tcp_syncookies в значение 1, посмотреть можно так:
Следующим действием служит увеличения очереди открытых соединений — tcp_max_syn_backlog, например до (но сначала проверим сколько сейчас):
Чтобы увеличить, выполните:
Так же, уменьшаем время ожидания соединения — это параметр tcp_synack_retries,но посмотрим сколько имеется на данный момент:
Уменьшим их до 1. Данный параметр говорит что будет ожидаться соединения около 9 секунд:
Уменьшаем параметр tcp_fin_timeout — который определяет время хранения сокета в состоянии FIN-WAIT-2 и после чего будет закрыт на локальной стороне (выводим сколько сейчас):
Изменим данный параметр и уменьшим его до 30:
Уменьшаем опцию tcp_keepalive_probes — это число служит для передачи проб keepalive, по завершению, соединение будет считаться разорванным. Данный параметр имеет 9 проб по умолчанию. Чтобы посмотреть какое число имеет данный параметр, используйте:
Убавим его до 5:
Опция tcp_keepalive_intvl задает интервал передачи для проб и по умолчанию, имеет число 75 сек. Уменьшим данный параметр, но прежде убедимся что он уже не прописан оптимальным:
Выставим его в 15:
Опция netdev_max_backlog служит для указания максимального количества пакетов в очередь на обработку в случае чего, интерфейс будет получать пакеты быстрей чем ядро сможет обработать их. Данный параметр должен быть увеличен, но смотрим что имеется:
Увеличиваем его до 20к:
Выставляем оптимальное цисло для somaxconn который задает максимальное число всех открытых сокетов которые ждут соединения. Его нужно увеличить:
Прописываем еще один не маловажный параметр:
PS: Данные применения для опций ядра не сохраняются после перезагрузки ОС, то их нужно добавить в /etc/rc.local:
После чего, нужно добавить ограничения в iptables:
В данных правилах, я задал определенное число для новых SYN пакетов ( 500 за сек), и если привысит ограничение 2000, то все новые новые пакеты будут заблокированы.
Добавляем в iptables еще полезные опции:
Установить SYN и FIN:
Установить SYN и RST:
Установить FIN и RST:
Установить FIN, без ожидаемого сопутствующего ACK:
Установить PSH,без ожидаемого сопутствующего ACK:
Установить URG, без ожидаемого сопутствующего ACK:
Приведу скрипт, который нашел в интернете для зашиты от DDoS атак с использованием ipset. Почему именно я использую ipset а не iptables? Да все потому что, после блокировки больше чем 100 IP адресов iptables начинает тормозить весь сервер.
PS: нужно установить пакет ipset. Если не знаете как, то можете воспользоваться инструкцией что ниже.
Установка IPset.
После установки добавлем правило блокировки в iptables:
dos — это таблица из ipset.
Следующим шагом необходимо создать хеш для таблицы dos:
ВНИМАНИЕ! При необходимости можно заблокировать даже всю подсети, но для этого вместо iphash стоит использовать nethash.
После завершения необходимо сохранить все правила iptables:
Собственно, все уже готово, за исключением скрипта который будет блокировать флуд на сервере.
Вы его можете прочитать и поглядеть тут, чтобы скачать себе на сервер выполните команду:
После чего, запускаем скачанный скрипт:
Стоит заметить, что целесообразно установить данный скрипт на выполнение в crontab на каждые 1-5 минут. Промежуток выберите сами. Если не знаете как, то можете воспользоваться моей инструкцией:
Чтобы вывести все заблокированные IP адресы, выполняем команду:
Более подробно о ipset я расскажу в своей статье:
Защита от DDos атаки
Атаку можно найти если выполнить команду:
Остальное будет скоро 😉
Вот еще полезный материал:
На этом тема «Защита от DDoS с iptables, готовый скрипт» подошла к завершению. Надеюсь поможет этот скрипт, как помог он мне.
9 thoughts on “ Защита от DDoS с iptables, готовый скрипт ”
как его подправить под свой IP и потом запустить?
Что вы имеете ввиду?
Нужно подправить IP адрес в самом файле, остальное можно оставить таким же.
Сменил на свой IP при попытке запустить — line 14: syntax error near unexpected token `do
Его в автозагрузку или в крон добавить?
Нет, когда начинается DDos просто выполните этот скрипт:
# sudo /путь_где_он_лежит/Anti_SYN_Flood_IPTables.sh
Он запустится и должен помочь. Только не забываем подправить скрипт по себя ( необходимо сменить ИП адрес на свой).
Уважаемый CAPTAIN — можно краткую инструкцию для чайника, по номерами, типа такую:
1)закачиваешь файл Anti_SYN_Flood_IPTables.txt туда то…
2)меняешь в нем ИП
3)конфиг такой то там, можешь поправить под себя…
4)запускаешь при помощи …, вот так…
Буду ну ппц как признателен тебе. И думаю не только я.
Александр, на момент написание статьи, данный скрипт работал. Я его переписал на более оптимальный вариант. Пожалуйста ознакомьтесь, будет полезно. Данный скрипт работает лучше и не нагружает сервер, т.к я использую ipset (до этого использовался именно iptables). Спасибо за уместное замечание что нужно более подробно описывать все шаги.
В общем пытался методом тыка, не получилось. Когда выполняю через ssh то пишет что команды не существует. Я явно что то не то делаю….
Как правильно редактировать файл? Вот такие ошибки:
Anti_SYN_Flood_IPTables.sh: line 17: $’\r’: команда не найдена
Anti_SYN_Flood_IPTables.sh: line 19: syntax error near unexpected token `>’
Anti_SYN_Flood_IPTables.sh: line 19: `for i in `netstat -ntu | grep SYN_RECV | awk ‘
Система Дебиан 7 КВМ
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Источник
DDoS-защита Linux’овского сервера через правила iptables
Pir@tehnic
Участник
DDoS-защита Linux’овского сервера Source через правила iptables
Не знал куда писать, в Статьи или сюда! Но решил сюда, так как статейка все-таки относится именно к защите Сервера!
Скажу сразу, если у Вас работает плагин DoS-Protect и работает успешно и нормально отбивает DoS-атаки, то читать статью и заморачивать себе голову вовсе не надо. Ежели плагин не работает или не спасает, тогда приятного чтения! =)
В общем я как-то выложил плагин Dos-Protect , отписавшись «У меня отказался работать на Зомби-Моде».
И вот по «счастливой» случайности этот самый мой Зомби-Мод сервер работал на Линуксе, и при установке этого плагина Зомбез крашился при запуске и к сожалению, в течении некоторого времени многой всякой школоты при каждом удобном случае сразу же врубали своими погаными ручонками свои ДДОСилки и успешно сваливали Зомбез за минуту, стоило хоть в чем-то неугодить :D. Нет, админы невиноваты и сервак вполне нормальный, что их не устраивало, так и осталось для меня секретом).
При этом, я делал копию этого же Зомбеза на компе с Виндой, и вот почему-то на Винде этот плагин вполне успешно работал, а вот на Линухе, зараза, не хотел!
Теперь к делу:
Хочу с вами поделиться тем, как мне удалось решить эту проблему!
Я просто задал пару правил для линуховского iptables.. Точнее просто вбил пару строк в терминал!
iptables -A INPUT -p udp —dport 27016 -m hashlimit —hashlimit 50/s —hashlimit-burst 50 —hashlimit-mode srcip —hashlimit-name CSS -j ACCEPT
iptables -A INPUT -p udp —dport 27016 -j DROP
Где: 27016 — это порт Сервака, еще можно попробовать побаловаться с числом 50/s , но я себе поставил именно 50 ! Вбивайте и вы =)
После этого я тестил Зомбез несколькими програмками для ДОС-атак, среди которых был DDoS-ер с иконкой в виде лимона и CSS Server Lagger и Зомбез короче от них даже не пошевелился (хотя до этого любая из них сваливала Сервак за минуту).
Только одна програмка смогла поднять пинг до 200, но к счастью ее автор (програмки) эту прогу не распространяет и никому не дает =) .
Можно прописать и другие правила, для более точной фильтрации!
iptables -A INPUT -p udp -m udp —dport 27016 -m state —state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp —dport 27016 -m state —state NEW -m hashlimit —hashlimit 100/s —hashlimit-burst 100 —hashlimit-mode srcip —hashlimit-name TF -j ACCEPT
iptables -A INPUT -p udp —dport 27016 -j DROP
Здесь также можно попробовать изменить число 100 , но мне кажется 50 или 100 — нормально!
Еще команды для iptables:
iptables -L -n — показывает уже существующие правила!
iptables -F — сбрасывает все правила!
>>>Не помогли мне эти правила для моего Линуховского серва, все равно ДДОСят, можно ли еще что-то придумать?
Можно попробовать осилить эту статью ->
Или можно сделать так!
Ставите плагин DoS Attack Fixer (DAF) и в настройках включаете логирование! Далее, если произошла DDoS-атака, смотрите в логе с какого IP-адреса была атака, и баните IP-адрес через iptables! Бан по iptables — вещь очень надежная, на себе проверял =) !
Оффтоп: хотя и написано что этот плагин DAF защищает сервер от ДДОСа, но по моему мнению и опыту, ни фига он не защищает (Во всяком случае от лимона не спасал)
Банить через iptables надо так:
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
Где xxx.xxx.xxx.xxx — это IP-адрес нарушителя!
Если нарушитель имеет динамический IP, сменил IP и ДДОСит дальше, то баним подсеть или несколько подсетей!
iptables -A INPUT -s xxx.xxx.xxx.0/24 -j DROP
Пример:
iptables -A INPUT -s 187.34.232.0/24 -j DROP -> Так мы забаним по iptables диапазон IP-адресов от 187.34.232.0 до 187.34.232.255
iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
Примечание 1:
Кстати, Бан по iptables вроде как не Банит на сервере CS:S, то есть Юзер, забаненный по iptables, сможет играть на вашем Серваке, но не сможет ДДОСить!
Примечание 2:
И еще, эти все правила и Баны предотвращают только от внешних DDOS-атак, т.е. когда можно ДДОСить через всякого рода програмы-флудилки, не заходя на Сервер! Для скриптов, которые флудят командами в консоль на самом серваке можно попробовать использовать Античит KAC!
Источник