Сегодня мы поговорим о том, как на 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 mail-whois[name=name_of_jail, dest=admin@domain.com]
Можно выбирать любой фильтр из папки filter.d или написать свой.
filter = sshd
Так же можно переопределять их путем создания .local файлов.
Так же можно переопределять их путем создания .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
backend = auto
Скопируем jail.conf как jail.local и откроем для редактирования
cp jail.conf jail.localДля защиты подключений ssh создадим в jail.local секцию
vi jail.local
[sshd]Теперь осталось прописать его в /etc/rc.conf
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
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%, а третья уже будет блокироваться.
Комментариев нет:
Отправить комментарий