====== Как защититься от DDOS'а ======
===== Установка и настройка apf-firewall + ddos-deflate. =====
Как защитить linux сервер? Естественно с помощью iptables. Можно конечно написать скрипт с кучей правил iptables и добавить его в автозагрузку. Но лучше использовать готовые решения. В качестве фаервола мы будем использовать **apf-firewall**. Он нравится многим за простоту и за то, что его можно быстро развернуть.
**Apf-firewall** – это очень удобная надстройка над iptables, которая на основе собственного простого и понятного конфига генерирует список правил и добавляет их в iptables, заменяя там уже прописанные. Работает в режиме демона. Так что если вы пользуетесь этим фаерволом, правила добавляйте только через него.
Так же в качестве небольшого бонуса к защите мы установим скрипт **ddos-deflate**. Конечно от серьезных атак он не защитит, но всяких школьников отпулит на раз.
==== Установка apf на ubuntu/debian ====
# apt-get install apf-firewall -y
По окончанию установки появится сообщение, что для запуска демона требуется изменить переменную RUN с no на yes в файле /etc/default/apf-firewall. Откройте файл с помощью nano, например.
# nano /etc/default/apf-firewall
И измените значение переменной.
Затем откройте конфигурационный файл apf.
# nano /etc/apf-firewall/conf.apf
В этом файле нужно указать порты, которые вы хотите оставить открытыми. Правим следующие переменные:
* IG_TCP_CPORTS="22,80" – в этой переменной через запятую в кавычках описываются входящие tcp порты.
* EG_TCP_CPORTS="21,25,80" – в этой аналогично исходящие tcp порты.
Тоже самое для udp:
* IG_UDP_CPORTS="53"
* EG_UDP_CPORTS="20,21,53"
Сохраняем файл и пробуем запустить фаервол:
# apf -s
Вполне вероятно что при запуске вы получите ошибку о неизвестном ядре и фаервол не запустится. Ничего страшного, выполните действия из [[https://anikin.pw/all/kak-zastavit-rabotat-apf-firewall-na-yadre-versii-3-x/|этой статьи]] и попробуйте ещё раз. Всё должно запустится.
Возможно, если вы что-то не так сделали, то после запуска фаервола вы заблокируете себе доступ к серверу. Не пугайтесь, apf автоматически отключится через 5 минут и вы сможете исправить нужные настройки в конфиге.
Если всё в порядке, фаервол работает нормально и доступ к серверу вы не потеряли то измените значение переменной DEVEL_MODE на 0 в конфиге /etc/apf-firewall/conf.apf. По умолчанию у неё значение 1, это режим когда apf запускается для проверки и отключается через 5 минут. Всё, apf установлен.
Так же в каталоге /etc/apf-firewall есть множество конфигурационных файлов для более тонкой настройки фаервола. Внутри почти всех файлов есть комментарий для чего данный конфиг и описан синтаксис. Можно например открыть доступ к определённому порту только с определённого ip или добавить обычное правило iptables. В общем apf очень гибок в настройке и понятен в использовании.
==== Установка ddos-deflate ====
Теперь установим ddos-deflate. Это скрипт, который раз в минуту проверяет количество подключений к серверу с каждого ip. И если какой то ip превышает количество разрешённых подключений, то скрипт его банит на определённое время.
Установка скрипта довольно простая:
apt install dnsutils
apt-get install net-tools
apt-get install tcpdump
apt-get install dsniff -y
apt install grepcidr
#
wget https://github.com/jgmdev/ddos-deflate/archive/master.zip -O ddos.zip
unzip ddos.zip
cd ddos-deflate-master
./install.sh
После выполнения этих команд файлы скрипта установятся в /usr/local/ddos/. В debian/ubuntu требуется изменить интерпретатор скрипта /usr/local/ddos/ddos.sh с #!/bin/sh на #!/bin/bash. Иначе работать не будет. В тексте скрипта также есть “/bin/sh”, тоже нужно изменить. Подправим конфиг скрипта:
# nano /usr/local/ddos/ddos.conf
Исправим несколько переменных:
* NO_OF_CONNECTIONS=100 – количество подключений с одного ip, при превышении этого значения – бан
* APF_BAN=1 – банить с помощью apf
* BAN_PERIOD=600 – время бана
Сохраняем и закрываем конфиг. Теперь нужно добавить скрипт в cron. Выполняем
# crontab -e
И в конец добавляем
*/1 * * * * nice -n -5 /usr/local/ddos/ddos.sh > /dev/null 2>&1
Сохраняем и выходим. Всё скрипт будет выполнятся раз в минуту и банить хулиганов.
P.S. чтобы скрипт ddos-deflate нормально работал возможно понадобится изменить в конфиге путь до бинарника apf. По умолчанию он указан как /etc/apf/apf. Это не верно. Чтобы узнать где у вас находится бинарник выполните:
# whereis apf
И измените директиву APF в конфиге скрипта.
==== Ссылки ====
* [[https://anikin.pw/ustanovka-i-nastroyka-apf-firewall-ddos-deflate.html|Оригинал статьи]]