Защита от ддос атак сервера 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, типа:

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

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

Источник

linux-notes.org

Защита от DDoS с iptables, готовый скрипт

Надоели атаки на компьютер или на сервер, то я покажу готовый и хороший скрипт для решение DDoS атак на ваш сервер.

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

  1. Защита на уровне PHP. Честно, не могу врубится в работу этой логики. То есть, нужно запретить доступ для ботов на этот уровень, чтобы не было огромной нагрузки. Не очень хорошее решение!
  2. Защита на уровне Apache. Есть модуль mod_evasive, но толку от него тоже не сильно много, не больше чем от PHP!
  3. Защита на уровне nginx. Самый оптимальный вариант для решение многих атак. Можно прокешировать все страницы и энжинкс будет отдавать страницы почти без нагрузки на процессор. Только канал будет нагружаться весьма прилично. Также можно настроить и использовать limit_req.
  4. Защита на уровне iptables. Это один из самых эффективных и надежных способов защиты вашего сервера от различных атак.
Читайте также:  Tv digital windows phone

Для получения списка доступных модулей для 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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

linux-notes.org

Защита от ddos атак

DDos атака — это любая атака на сервер ( сайт) чтобы избавится от него ( вывести из строя). Это делается в качестве забавы или задуманное действие ( из-за конкуренции, и тд и пд). Я не сильно буду говорить что это такое, вы просто можете это почитать в интернете ( википедиа), а я расскажу в теме «защита от ddos атак» как же можно защитить себя от различных атак.

Виды DDos атак

1. Насыщение полосы пропускания

  • HTTP-flood и ping-flood;
  • Smurf-атака (ICMP-flood);
  • Атака Fraggle (UDP-flood);
  • Атака SYN (SYN-flood). Используется с помощью переполнения пакетами.

2. Недостаток ресурсов

  • Отправка «тяжелых» пакетов;
  • Переполнить сервер логами;
  • Плохая система квотирования;
  • Очень плохая проверка данных пользователя;
  • Атака второго рода.

3. Ошибки программирования

  • Изъяны в коде самих программ;
  • Переполненный буфер.

4.Маршрутизация и атаки DNS

  • DoS-атаки на изъяны в ПО на ДНС-серверах
  • ДДос атаки на сами DNS-сервера

Существуют методы для обнаружения различных ДДос-атак:

  • сигнатурные — Этот метод основанный на глубоком и хорошем анализе вашего трафика.
  • статистические — Этот метод основанный на количественном анализе конкретного трафика.
  • гибридные — комбинируют оба метода.

Что нужно делать в самом начале атаки DoS?

До самой ДДос -атаки хакеры только набирают свои обороты и постепенно увеличивая поток пакетов на ПК самой жертвы. Нужно быстро и немедленно принимать конкретные действия, а то может закончится не очень хорошо.

Читайте также:  Linux more and less

Допустим, нас пытаются атаковать с помощью SYN-flood-а, то чтобы с этим справиться нужно выставить число «полуоткрытых» соединений:

По хорошему, они не вообще не должны быть, но а если уже и есть, то максимум должен быть около 1-3. Если больше, то это говорит о возможной DoS-атаки.

Немного посложнее обходится с HTTP-flood-ом. Для самого начала нужно подсчитать сколько у нас имеется подключений по 80-му порту, а так же сколько процессов апача:

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

Чтобы вывести список всех IP-адресов по которым идут запросы на соединение можно использовать команду что ниже:

Так же легко можно заюзать вот такой еще вариант:

На следующем этапе нужно выполнить анализ всех пакетов с использованием команды tcpdump:

Если мы видим очень большой поток однообразных пакетов с разных айпишников, которые «слушают» один порт, можно тогда сказать что Вас Ддосят. Если такое произошло, но нужно ребутнуть (перезапустить или сбросить) все эти соединения, но само лучшее решение сделать это прямо на самом маршрутизаторе:

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

Защита от основных видов DoS-атак

  • Защита от HTTP-flood

Чтобы защитится от HTTP-flood нужно прибавить одновременное количество максимальных подключений к БД сервера, нужно установить перед апачем еще и энжинкс для кэширования всех запросов. Данный конфиг приведу файликом, который можно глянуть:

  • Защита от ICMP-flood

Расскажу сейчас как бороться от ICMP-flood, а всего то нужно отключить ответы на запросы ICMP ECHO:

Так же это можно сделать с помощью брандмауэра:

  • Защита от UDP-flood

Т.к UDP-пакеты посылаются на разные UDP-сервисы, то собственно достаточно вырубить их от мира и прописать собственно ограничение на количество соединений к DNS-серверу:

  • Защита от SYN-flood

Эта данная защита заключается в выключении самой очереди «полуоткрытых» TCP-соединений:

Так же нужно включить сам механизм TCP syncookies, для этого следует выполнить:

Следующим этапом мы ограничиваем максимального число «полуоткрытых» соединений с 1-го IP для нужного порта:

У вас должна быть настроена система, которая будет анализировать трафик и которая сможет своевременно узнать о ДДос-атаке, а так же по мере возможности, принимать меры по ее избежанию.

  • Защита от спуфинга

Для этого нужно выполнить:

Проверяем TCP-соединение каждую минуту (если на др стороне — нормальный сервер, то сразу ответит. (Стандартное значение — 2ч):

Проверяем через 10 сек:

Устанавливаем количество проверок перед закрытием соединения:

Я очень бегло рассказал и описал что и как, но постепенно ( со временем) я буду рассказывать и приводить примеры по борьбе с ДДосиками, так же я буду более глубоко уделять вниманию каждому из видов атак. Чтобы это я мог сделать, мне нужно время, время для того чтобы я смог найти нужный и полезный материал, а так же более подробно расписал, чтобы всем было понятно. Надеюсь я нормально пишу статьи, если есть замечания или может предложения, добавляйтесь в группы, можно и в друзья, а так же можете просто писать в комментах.

Собственно, я завершу наверное на этом «защита от ddos атак», надеюсь было полезно. Спасибо что посещаете мой сайт http://linux-notes.org

2 thoughts on “ защита от ddos атак ”

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

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

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

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

Источник

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