02 сентября 2014

Защита от брутфорса Fail2ban

Сегодня мы поговорим о том, как на FreeBSD сервере защитить службы с открытыми портами от подбора паролей. Для этого мы будем использовать одну из лучших утилит в этом деле Fail2ban. Она представляет собой набор скриптов на питоне, которые анализируют логи на предмет неудачных попыток авторизации и блокируют злоумышленников. Имеет гибкие инструменты для настройки и умеет работать с любыми сервисами. Для большинства уже есть готовые шаблоны конфигов, например для sshd, apache, vsftpd, proftpd и др.

Устанавливаем Fail2ban из портов. Как обычно, сначала их обновляем
portsnap fetch update
Затем переходим в
cd /usr/ports/security/py-fail2ban
И ставим
make install clean
Все файлы конфигурации располагаются в
cd /usr/local/etc/fail2ban
Но файлы .conf не редактируются! Все настройки осуществляются путем создания одноименных .local файлов, в которых вы только переопределяете нужные вам значения.

Наиболее важный файл конфигурации это jail.conf, здесь настраивается слежение за сервисами и для многих, как я уже говорил, есть готовые шаблоны.

Принцип настройки крайне прост. Вы создаете свой [jail], так в данной терминологии называется комбинация фильтра и действия или находите уже созданный шаблон и редактируете его опции. Большинство из них задано глобально в секции default. Рассмотрим основные из них.

Что бы включить фильтр добавляете опцию 
enabled = true

Назначаете любое действие из папки action.d. 
action = bsd-ipfw[port=22]

В квадратных скобках могут используются разные параметры. 
Добавим еще действие отправки уведомления на почту.
action = bsd-ipfw
mail-whois[name=name_of_jail, dest=admin@domain.com]


Можно выбирать любой фильтр из папки filter.d или написать свой.
filter = sshd
Так же можно переопределять их путем создания .local файлов.  

Есть крайне полезная команда для проверки фильтров fail2ban-regex. Протестируем  предыдущий фильтр.
fail2ban-regex /var/log/auth.log /usr/local/etc/fail2ban/filter.d/sshd.conf
Продолжаем рассматривать параметры из jail.conf
Анализируемый файл логов
logpath = /puth/to/log/file

Игнорировать указанные ip-адреса
ignoreip = 127.0.0.1 192.168.50.200 

Время блокировки в сек.
bantime = 60
Количество неудачных попыток авторизации с одного ip
maxretry = 2 Время анализа в сек, т.е. 2 ошибки в 10 минут.
findtime = 600
Способ получения измененного логфайла
backend = auto

Скопируем  jail.conf как jail.local и откроем для редактирования
cp jail.conf jail.local
vi jail.local
Для защиты подключений ssh создадим в jail.local секцию
[sshd]
enabled = true
filter = bsd-sshd

action = bsd-ipfw[port=22]
mail-whois[name=sshd, dest=my@mail.com]
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 3600
backend = 
polling
Теперь осталось прописать его в /etc/rc.conf
fail2ban_enable="YES"
и запустить
service fail2ban start
Теперь можно спать спокойно!


Для защиты sshd так же рекомендуется изменить некоторые настройки в файле sshd_config.
vi /etc/ssh/sshd_config
Перво наперво явно запретить логин пользователя root
PermitRootLogin no
Если это приемлемо изменить порт подключения
Port 22
Сделать время выполнения логина достаточным только для ввода правильного пароля. Например 30 сек, по умолчанию стоит 120.
LoginGraceTime 30
Уменьшить количество попыток логина внутри одной сессии
MaxAuthTries 2
И задать число допустимых неавторизованных сессий
MaxStartups 1:50:10
Здесь start:rate:full, где start – это уже имеющееся неавторизованные подключеня, rate – вероятность отклонения попыток подключения, full – максимальное число неавторизованных соединений.
В нашем примере, если уже есть одна неавторизованная сессия, то сможет открыться еще одна, затем вероятность отключения увеличится до 100%, а третья уже будет блокироваться.










Комментариев нет:

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