Anti ddos для linux

Оптимальная защита от DDoS с помощью netstat и iptables

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

Совсем недавно столкнулся с такой проблемой, как DDoS. Сразу скажу, я вообще ни разу не линуксоид, но зато чуточку программист, так что все что ниже, основано чисто на логике, а не на фактах, плюс переписанное с некоторыми добавками от уже известного.

Перекопав полчища статей и опробовав множество вариантов, так и не нашел, что помогло бы с защитой. Взяв за основу статьи Простой и эффективный метод отразить http DDoS от 50мбит с помощью nginx и iptables и (D)DoS Deflate решил написать свой скрипт. Ну вернее не решил, а методом тыка и исправлений он получился сам.

Должен заметить, что статья от Алексея Кузьмина не идеальна, т.к. в логах nginx`a не достаточно копаться, да и обработка логов может потребовать много ресурсов. А именно в моем случае создавались логи более 50 Гиг, плюс запросы шли не «GET / HTTP/1.1», а «GET / HTTP/1.0», плюс, как оказалось, мой сервер сам от себя получал редиректы (127.0.0.1), которые не отображались в логах, которые отображались в запросе

Суть скрипта такова, что через определенное время кроном запускается скрипт и проверяет все соединения с сервером, ip и кол-во их соединений которые записываются в файл. Потом запускается другой скрипт, который смотрит, если соединения, превышают заданное число (у меня стоит 20), то создается скрипт с блокировкой этих айпишников через iptables.

Я создавал отдельные файлы, чтобы прослеживать весь ход работы отдельно, и по своей некомпетентности, легко было обнаружить где и что не срабатывало.

Теперь к практике:
создаем каталог, где будет скрипт

в нем создаем файл ddos.sh и меняем его права:

записываем в него:

Вот в принципе и все. Теперь запускаем кронтаб, предпочитаю команду:

и добавляем новую задачу в него, выполняющуюся каждые 10 минут:

Также я изменил ротацию логов в файле /etc/logrotate.d/nginx от nginx`a, чтобы многогиговые файлы не создавались

и записал еще задачу в крон, выполняющуюся каждый час

ну и для больше комфорта еще и раз в сутки решил перезагружать сервак, опять же через крон:

общий список заданий, выведенный через crontab -l:

я записывал все под пользователем root, поэтому если вы не под этим пользователем, перед каждой командой стоит добавить root, типа:

Все пути делал абсолютными, т.к. не все команды без полного пути срабатывали.

Надеюсь кому-нибудь пригодится данная статейка. Прошу строго не судить по самому коду, т.к. я вообще впервые сам что-то делал на серваке )

Источник

Защита от DDOS атак своими руками

Снова меня DDOS-ят. В этот раз атака не сильная и заметил я ее случайно во время очередного этапа самообразования с целью заполнения пробелов в знаниях в области безопасности.

Если кто-то открыл эту статью просто так, то рекомендую все же ее прочитать. Я все писал «понятным»языком для лучшего восприятия.

DoSатака (Denial of Service) — закидывание неугодных ресурсов различным флудом, приводящее их к нокдауну. А DDoSатака — это такая DoSатака, которую осуществляет не один энтузиаст, а разгневанная толпа, желающая Страшный Суд, Ад и Погибель неправославному ресурсу. Весь профит этого метода заключается в том, что грамотно спланированную атаку невозможно отразить вообще. В результате сервер начинает как минимум безбожно тормозить при ответах на нормальные запросы, а то и вовсе ложится, не вынеся такого издевательства.

Проще говоря, что такое DoS? Это, к примеру, когда ведёшь разговор с кем-то, но тут подходит алкаш, и начинает громко нести бред. Говорить либо невозможно, либо очень сложно. Решение: зовёшь охрану, она скручивает синяка и уводит.

Читайте также:  Solus linux ��������� ����������

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 ‘‘ | cut -d: -f1 | sort | uniq -c | sort -nr | grep -v «127.0.0.1» > /usr/local/ddos/ddos.iplist

# создаем DROP правила (не выдавать ответа сервера на запросы забаненых) для IP с количеством подключений более 50 и добавляем их в файл
awk ‘ 50) >’ /usr/local/ddos/ddos.iplist >> /usr/local/ddos/iptables_ban.sh

# запускаем скрипт бана 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 атак на ваш сервер.

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

  1. Защита на уровне PHP. Честно, не могу врубится в работу этой логики. То есть, нужно запретить доступ для ботов на этот уровень, чтобы не было огромной нагрузки. Не очень хорошее решение!
  2. Защита на уровне Apache. Есть модуль mod_evasive, но толку от него тоже не сильно много, не больше чем от PHP!
  3. Защита на уровне nginx. Самый оптимальный вариант для решение многих атак. Можно прокешировать все страницы и энжинкс будет отдавать страницы почти без нагрузки на процессор. Только канал будет нагружаться весьма прилично. Также можно настроить и использовать limit_req.
  4. Защита на уровне 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 ‘’ | cut -f1 -d «:» | sort | uniq | grep -v $` do ipset -‘ dos $i done ipset -S > /etc/sysconfig/ipset

Система Дебиан 7 КВМ

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Оцените статью