Rose debug info
---------------

Установка и настройка 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

Вполне вероятно что при запуске вы получите ошибку о неизвестном ядре и фаервол не запустится. Ничего страшного, выполните действия из этой статьи и попробуйте ещё раз. Всё должно запустится.

Также иногда можно получить ошибку которая описана в этой статье.

Возможно, если вы что-то не так сделали, то после запуска фаервола вы заблокируете себе доступ к серверу. Не пугайтесь, apf автоматически отключится через 5 минут и вы сможете исправить нужные настройки в конфиге.

Если всё в порядке, фаервол работает нормально и доступ к серверу вы не потеряли то измените значение переменной DEVEL_MODE на 0 в конфиге /etc/apf-firewall/conf.apf. По умолчанию у неё значение 1, это режим когда apf запускается для проверки и отключается через 5 минут.

Всё, apf установлен.

Так же в каталоге /etc/apf-firewall есть множество конфигурационных файлов для более тонкой настройки фаервола. Внутри почти всех файлов есть комментарий для чего данный конфиг и описан синтаксис. Можно например открыть доступ к определённому порту только с определённого ip или добавить обычное правило iptables. В общем apf очень гибок в настройке и понятен в использовании.

Теперь установим ddos-deflate. Это скрипт который раз в минуту проверяет количество подключений к серверу с каждого ip. И если какой то ip превышает количество разрешённых подключений, то скрипт его банит на определённое время.

Установка скрипта довольно простая:

# wget http://www.inetbase.com/scripts/ddos/install.sh

# chmod 0700 install.sh

# ./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 - время бана

Сохраняем и закрываем конфиг.

Теперь нужно добавить скрипт в крон. Выполняем

# 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 в конфиге скрипта.

Поделиться
Отправить