Fail2ban — это приложение, которое используется для мониторинга системных журналов на предмет попыток входа методом подбора. Это система предотвращения вторжений, которая обнаруживает попытки несанкционированного доступа и предотвращает нарушение, помещая IP-адреса злоумышленников в черный список. Fail2ban работает незаметно в фоновом режиме, сканируя на предмет попыток нарушения безопасности. В этом руководстве вы узнаете, как установить fail2ban.
Fail2ban — это отличное программное обеспечение, которое позволяет вам контролировать системные службы, такие как SSH, Apache, proftpd, pure-ftpd, vsftpd, lighttpd-auth, sendmail, squid, cyrus-imap, … и блокировать IP-адреса, которые пытаются взломать вашу систему методом подбора паролей.
Установить Fail2ban
Скачивать будем с официального хаба https://github.com/fail2ban/ с помощью клонирования.
mkdir /opt/fail2ban cd /opt/fail2ban git clone https://github.com/fail2ban/fail2ban.git sudo python setup.py install
Проверяем куда установилось.
whicn fail2ban-client
Исполняемые скрипты помещаются в /usr/local/bin/
, а конфигурация в /etc/fail2ban
.
Добавление в сервисы.
По умолчанию приложение не добавляется в автозагрузку. По этому будем добавлять в сервисы так будет удобнее им управлять.
Создаем файл в каталоге /etc/systemd/system/ под названием fail2ban.service со структурой файла.
[Unit] Description=Fail2Ban Service After=network.target iptables.service firewalld.service ip6tables.service ipset.service nftables.service PartOf=firewalld.service [Service] Type=simple ExecStart=/usr/local/bin/fail2ban-server -xf start ExecStop=/usr/local/bin/fail2ban-server stop [Install] WantedBy=multi-user.target
Дальше перечитываем конфигурации сервисов.
systemctl daemon-reload
Запускаем сервис
systemctl start fail2ban
Проверяем работает ли в сервисах
systemctl | grep fail2ban
Проверяем работает ли в приложениях.
ps ax | grep fail2ban
Настройка
Открывает текстовый файл с помощью какого ни будь редактора я использую mcedit.
mcedit /etc/fail2ban/jail.conf
Давайте рассмотрим несколько параметров.
Ignoreip: выбирает список IP-адресов, которые не будут заблокированы.
Bantime: определяет продолжительность блокировки хоста в секундах после нескольких неудачных попыток.
Findtime: Это параметр, используемый для проверки того, забанен ли хост или нет. Когда хост генерирует maxretry в своем последнем findtime, он забанен.
Maxretry: Этот параметр устанавливает ограничение на количество повторных попыток хоста. Если лимит превышен, хост блокируется.
Создание файлов Jail для мониторинга входов SSH и Mysql
Поскольку злоумышленники в основном нацеливаются на порт SSH 22 при попытке проникновения в системы, мы добавим sshd.conf в папку jail.d
mcedit /etc/fail2ban/jail.d/sshd.conf
С содержанием
[ssh] enabled = true findtime = 300 maxretry = 3 bantime = 72h port = 2992,ssh,ssh2 filter = sshd action = iptables[name=sshd] logpath = /var/log/secure
И очень часто подборы бывают к базе данных Mysql по порту 3306. Так же создаем файл mysqld.
mcedit /etc/fail2ban/jail.d/mysqlhd.conf
С содержанием
[mysqld-auth] enabled = true port = 3306 maxretry = 3 bantime = 72h filter = mysqld-auth action = iptables[name=mysqld] logpath = /var/log/mysqld.log /var/log/mysql/mysqld.log
enable — включение jail
bantime — время блокировки, в секундах.
maxretry — количество попыток перед перед блокировкой.
bantime — время, на протяжении которого рассчитывается количество попыток перед баном (maxretry).
filter — по какому скрипту будем обрабатывать
action — какая реакция на нахождения повторяющегося ip
logpath — папка с логами которую будет проверять.
Проверка
Что бы проверить сколько активных jail выполняем команду.
/usr/local/bin/fail2ban-client status
Что бы проверить конкретный jail как он обработал выполняем
/usr/local/bin/fail2ban-client status ssh
Чтобы получить список за баненных IP-адресов, запустите
iptables -L -n