Связаться со мной:
3 заметки с тегом

Advanced Policy Firewall

Ошибка при запуске apf-firewall

Если при запуске apf получаем ошибку:

apf(23061): {glob} activating firewall
libkmod: ERROR ../libkmod/libkmod-module.c:1567 kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory
Error: could not get list of modules: No such file or directory

или

kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory

то в файле /etc/apf-firewall/conf.apf надо изменить значение директивы с

SET_MONOKERN="0"

на

SET_MONOKERN="1"

После этого apf-firewall должен запустится без ошибок.

2015   Advanced Policy Firewall   APF   APF-Firewall   debian   ubuntu

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

2014   Advanced Policy Firewall   APF   APF-Firewall   ddos-deflate

Как заставить работать apf-firewall на ядре версии 3.x

Установил apf-firewall на один из серверов, столкнулся с проблемой. При запуске фаервола получил ошибку:

Kernel version not equal to 2.4.x or 2.6.x, aborting.

Фаервол не запустился и правила в iptables не добавились. Путём долгого гуления выяснилось что в коде скрипта стоит проверка версии ядра и на ядрах отличных от 2.4.х и 2.6.х apf отказывается работать. Обойти данное досадное недоразумение, как оказалось, достаточно просто. В файле /etc/apf-firewall/internals/functions.apf находим строку 68 и приводим условие к такому виду:

elif [ "$KREL" == "3.2" ]; then

MEXT="ko"

Где 3.2 ваша версия ядра. Версию ядра можно узнать выполнив:

# uname -a

После этих изменений apf запустился без проблем и правила добавились в iptables. Нормальная работа apf проверена на версии ядра 3.2.х и по информации в интернете 3.0.х. Решение вроде простое, но найти эту информацию оказалось довольно трудно. Поэтому сделал эту запись, возможно кому-то поможет.

2013   Advanced Policy Firewall   APF   APF-Firewall   debian   iptables   Kernel   Linux   ubuntu