Fail2ban лучшая защита от атак

   В прошлой статье, вот здесь, я уже касался программ, в частности bruteblock, которые могут защитить сервер от атак. Но сегодня я хочу предложить одну из самых лучших прог в этом секторе - это fail2ban. Дело всё в том, что на сервере уже установлено ни одна и не две, а уже несколько служб, которые смотрят наружу и которые нужно защитить, а с этим может справится только fail2ban. fail2ban, это небольшой набор скриптов, написанных на python. Принцип работы: отслеживать изменения в лог файлах различных сервисов и по определенным сигнатурам, выполнять определенные действия. Для поиска характерных признаков подбора пароля, используются регулярные выражения в файлах фильтров. Для выполнения действий используются action файлы. Так что будем устанавливать. Настраивать будем защиту sshd, proftpd, dovecot и может ещё какую службу.  Для работы естественно потребуется включенный фаервол, во FreeBSD штатным является ipfw и мы его уже запустили, кто не знает как идём сюда.

Установка fail2ban

Идём сюда:

# cd /usr/ports/security/py-fail2ban

запускаем  инсталляцию:

# make install clean

Дальше идём сюда /usr/local/etc/fail2ban и наблюдаем следующую структуру каталога:

    папка action.d - содержит файлы действий
    папка filter.d - файлы фильтров
    файл fail2ban.conf - основной файл конфигурации
    файл jail.conf - файл настройки защиты конкретных сервисов

Настройка fail2ban

Чтобы в процессе конфигурации не натворить плохого, все файлы, которые мы будем править будем переименовывать из .conf в .local. В первую очередь копируем файл jail.conf в файл с именем jail.local.

# cp /usr/local/etc/fail2ban/jail.conf /usr/local/etc/fail2ban/jail.local

   Основной файл конфигурации /usr/local/etc/fail2ban/fail2ban.conf  здесь можно оставить всё по умолчанию, можно только установить уровень логирования на 4, чтобы мы могли видеть побольше сообщений. Далее идём в папку  /usr/local/etc/fail2ban/action.d видим кучу фаерволов, нас интересует пока только bsd-ipfw.conf. Переименовываем его в bsd-ipfw.local. Оставляем в нём всё по умолчанию. Можно только внести строчку

actionunban = ipfw table 1 delete

чтобы при выходе из fail2ban обнулялась таблица, иначе там зависнут все забаненные навечно. Добавляем в ipfw правило, блокирующее все IP адреса, находящиеся в таблице table 1:

# ${FwCMD} add deny all from table\(1\) to me

Правило ставим сразу после вот этого правила

${FwCMD} add allow ip from any to any via lo0

   Переходим в каталог filter.d. Тут у нас лежат фильтры, которые по регулярному выражению ищут определенные строки в лог файлах. Нас интересуют sshd.conf и proftpd.conf и dovecot.conf, как и ранее копируем их в sshd.local, proftpd.local и dovecot.local соответственно. В файлах я все оставил как есть.

   А теперь мы дошли до самого вкусного, что есть в этой проге, чего нет ни в одной аналогичной проге. Проверить работоспособность того или иного фильтра с регулярными выражениями можно с помощью скрипта fail2ban-regex, идущего в поставке fail2ban. Например проверяем фильтр proftpd.local, натравливая его на лог файл авторизаций:

# fail2ban-regex /var/log/auth.log /usr/local/etc/fail2ban/filter.d/proftpd.local

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

С фильтрами вроде разобрались, теперь вернемся к файлу jail.local и приведем его к следующему виду:

[ssh-iptables]

enabled  = true
filter   = bsd-sshd
action   = bsd-ipfw
           mail-whois[name=SSH, dest=alex2 [at] 2gogo [dot] ru]
logpath  = /var/log/auth.log
maxretry = 3
bantime = 240
findtime = 600
ignoreip = 127.0.0.1
backend = poller

[proftpd-iptables]

enabled  = true
filter   = proftpd
action   = bsd-ipfw
           mail-whois[name=ProFTPD, dest=alex2 [at] 2gogo [dot] ru]
logpath  = /var/log/auth.log
maxretry = 3
bantime = 240
findtime = 600
ignoreip = 127.0.0.1
backend = poller

[dovecot-iptables]

enabled  = true
filter   = dovecot
action   = bsd-ipfw
           mail-whois[name=Dovecot, dest=alex2 [at] 2gogo [dot] ru]
logpath  = /var/log/dovecot-info.log
maxretry = 3
bantime = 240
findtime = 600
ignoreip = 127.0.0.1
backend = poller
 

   Расшифровка: При наступлении maxretry неудачных попыток на протяжении времени findtime, хост атакующего блокируется на время bantime средствами ipfw/iptables/tcpwraper. Бан не будет сниматься автоматически если указан параметр bantime = -1.

   Мне нужно было, чтобы fail2ban отправлял письма, поэтому  я включил mail-whois и не забываем отредактировать соответствующий файл в директории action.d, в данном случае mail-whois.local, там все довольно просто. Ну вот вроде всё настроили, пора запускать fail2ban. Прописываем в /etc/rc.conf

fail2ban_enable="YES"

и запускаем его

# /usr/local/etc/rc.d/fail2ban start

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

Ну вот! Вроде всё.

Категории:

Рейтинг: 
Средняя: 4.3 (3 оценок)

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

Filtered HTML

Plain text