No Image

Защита от ddos ubuntu

СОДЕРЖАНИЕ
912 просмотров
10 марта 2020

Чаще всего люди задумываются о защите, когда уже слишком поздно. Когда уже за спиной час, два, а то и день downtime’а. Конечно для полноценной защиты нужно что-то большее чем iptables. Но и серьезные атаки, требующие такую защиту случаются гораздо реже. В общем описанное под катом — must have для любого сервера. И да, речь пойдет об общей защите (не только сайтов), без использования модулей, nginx, apache. Только iptables и настройки Linux.

Системные настройки:

В первую очередь настраиваем sysctl . Для этого идем в /etc/sysctl.d , создаем новый файл с названием 60-custom.conf, открываем на редактирование. Мой вариант хорошего конфига, устойчивого к DDOS, собран из кучи разных полезных статей:

Для применения только что измененных настроек, необходимо перезапустить службу: service procps restart

Оптимизация сервисов:

Перед тем как приступать к какой-либо защите, нужно настроить ваши сервисы (демоны) на оптимальную производительность. Если вы защищаете сайт — уделите время настройкам nginx и apache. Если какой-то другой сервис — настройте его. Цель такого тюнинга — дабиться того, чтобы сервис сбрасывал мертвые соединения как можно скорее и тем самым не расходовал лишние ресурсы. Естественно это особенно важно при защите от DDOS атак.

Приведу пару примеров, на которые точно стоит обратить внимание.

Apache

Файл настроек: /etc/apache2/apache2.conf

Вот два параметра, на которые следует обратить внимание. Их можно уменьшить как минимум на половину.

MySQL

Конечно напрямую базу не достанут, она же доступна только по localhost’у. Если у вас это не так — срочно покиньте этот блог Но если сайт работает с базой — то при каждом запросе (в том числе и ddos’e) будет работать база, забирая ресурсы машины. Поэтому тюнинг ее настроек тоже нужен.

Файл настроек /etc/mysql/my.cnf

Советую обратить внимание на этот параметр и по возможности его уменьшить:

Настраиваем iptables:

Итак, фаервол в Linux имеем массу интересных возможностей, которые помогут защитить сервер от детского ддоса, а может быть и от некоторых видов взрослого. Настраивается iptables скриптом, который необходимо запускать при каждом старте системы, т.к. при перезагрузке правила стираются. Есть несколько вариантов как добавить его в автозапуск, но лучше этого не делать. Потому что если вы лишите себя ssh доступа — единственный вариант получить доступ без звонка в дата центр — это перегрузить сервер по питанию, обычно такая возможность предоставляется.

Мой шаблон настроек:

Это базовые настройки и не очень жесткие. Если хотите ужесточить — можно сделать policy на дроп всего и открывать отдельно только те порты и соединения, которые нужны.

Шаблон естественно нужно адаптировать под вашу ситуацию и ваши сервисы.

Секции в шаблоне пронумерованы, так что пройдем по ним и поймем что же происходит:

  1. Создано 2 новых цепочки: SUSPIC и BAN. Вы можете отправлять туда неудоволетворяющие соединения вместо DROP’а. Если было 3 SUSPIC за 60 секунд с одного IP адреса — такой хост автоматически получает BAN. А бан DROP’ает все пакеты с этого IP в течении 30 минут.
  2. Спорное правило. Инициализация соединений всегда должна содержать в себе syn пакет, если его нет — считается что соединение некорректно и сразу уходит в DROP. Вообще конечно это правильно, но некоторые сервисы с таким правилом могут не работать или работать плохо.
  3. Тут все легко — максимум открытых соединений с одного IP
  4. Правило защищает порты от сканирования. В данном примере — SSH порт. Трюк прост — начинаем пускать соединения только с третьего раза. Сканер портов обычно сканирует 1-2 раза порт, редко больше.
  5. Основное правило от ддоса. Защищаемся от резких перепадов кол-ва соединений в промежуток времени. В шаблоне 2 правила. Первое блокирует на 2 секунды все соединения с IP, если превышен лимит подключений с этого IP. Лимит подключений для первого правила — 1 соединение в 2 секунды. Соответственно лимит второго правила — 40 подключений в 4 секунды и блокировка на 4 секунды.
Читайте также:  Ты фейк что ответить

Для проверки как все работает, какие правила есть и сколько пакетов какие правила отфильтровали, используем команду: iptables -nvL

DROP vs REJECT

Можно фильтровать нежелательные пакеты несколькими способами.

  • DROP — для клиента это означает «нет ответа», то есть как будто на этом порту вообще ничего нет.
  • REJECT — клиенту возвращается ответ «соединение отклонено».

На мой взгляд лучше использовать DROP всегда когда это возможно. Это заставит атакующие машины выжидать таймаут.

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

Совсем недавно столкнулся с такой проблемой, как 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-ят. В этот раз атака не сильная и заметил я ее случайно во время очередного этапа самообразования с целью заполнения пробелов в знаниях в области безопасности.

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

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 ‘‘ | 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).

На этом все. Возникнут вопросы – пишите в комментариях.

Комментировать
912 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector