Разберу настройку Fail2Ban для защиты FTP‑сервера (vsftpd) от брутфорс‑атак пошагово.
Шаг 1. Установка Fail2Ban
sudo apt update
sudo apt install fail2ban -y
Запустите и включите автозапуск службы:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Проверьте статус:
sudo systemctl status fail2ban
Шаг 2. Создание конфигурации для vsftpd
Создайте файл конфигурации jail для vsftpd:
sudo nano /etc/fail2ban/jail.d/vsftpd.conf
Вставьте следующее содержимое:
[vsftpd]
enabled = true
port = ftp,ftp-data,ssh
protocol = tcp
filter = vsftpd
logpath = /var/log/vsftpd.log
maxretry = 3
findtime = 600
bantime = 3600
Пояснения к параметрам:
- enabled = true — активирует защиту для vsftpd;
- port — порты, которые мониторятся (FTP: 21, 20; можно добавить SSH для защиты);
- filter = vsftpd — указывает на используемый фильтр логов;
- logpath — путь к логам vsftpd (убедитесь, что логирование включено);
- maxretry = 3 — количество неудачных попыток до блокировки;
- findtime = 600 (10 минут) — временной интервал, в течение которого учитываются попытки;
- bantime = 3600 (1 час) — длительность блокировки IP‑адреса.
Шаг 3. Настройка логирования vsftpd
Убедитесь, что vsftpd пишет логи. В файле /etc/vsftpd.conf должны быть строки:
xferlog_enable=YES
xferlog_std_format=YES
log_ftp_protocol=YES
xferlog_file=/var/log/vsftpd.log
Если файла логов нет, создайте его и задайте права:
sudo touch /var/log/vsftpd.log
sudo chown root:root /var/log/vsftpd.log
sudo chmod 644 /var/log/vsftpd.log
Перезапустите vsftpd:
sudo systemctl restart vsftpd
Шаг 4. Проверка фильтра Fail2Ban
Fail2Ban должен иметь готовый фильтр для vsftpd. Проверьте его наличие:
ls /etc/fail2ban/filter.d/ | grep vsftpd
Должен отобразиться файл vsftpd.conf.
Если его нет, создайте фильтр вручную:
sudo nano /etc/fail2ban/filter.d/vsftpd.conf
Содержимое файла:
[Definition]
failregex = ^%(__prefix_line)s.* \[pid \d+\] \[.*\]FAIL LOGIN: Client "<HOST>"\s*$
^%(__prefix_line)s.* \[pid \d+\] \[.*\]ERROR: Failed to change directory to .* Client "<HOST>"\s*$
ignoreregex =
Шаг 5. Настройка общей конфигурации Fail2Ban (опционально)
Отредактируйте основной конфиг:
sudo nano /etc/fail2ban/jail.local
Добавьте или проверьте следующие параметры:
[DEFAULT]
# Настройки по умолчанию для всех джейлов
bantime = 3600
findtime = 600
maxretry = 3
# Используемый бэкенд для мониторинга логов
backend = auto
# Действия при блокировке (по умолчанию — iptables)
banaction = iptables-multiport
# Email оповещения (опционально)
destemail =
sender =
mta = sendmail
Шаг 6. Запуск и проверка работы
Перезапустите Fail2Ban, чтобы применить настройки:
sudo systemctl restart fail2ban
Проверьте, что джейл vsftpd загружен:
sudo fail2ban-client status
sudo fail2ban-client status vsftpd
В выводе команды status vsftpd должна быть информация о количестве заблокированных IP‑адресов и активных правилах.
Шаг 7. Тестирование
Попробуйте подключиться к FTP с неверным паролем 3 раза подряд с одного IP‑адреса.Проверьте статус джейла:В списке заблокированных хостов должен появиться ваш IP.
sudo fail2ban-client status vsftpd
Попробуйте подключиться ещё раз — соединение должно быть отклонено.
Чтобы снять блокировку для теста:
sudo fail2ban-client set vsftpd unbanip <ваш_IP>
Шаг 8. Мониторинг и управление
Просмотр логов Fail2Ban:sudo tail -f /var/log/fail2ban.log
Список всех заблокированных IP:
sudo fail2ban-client banned
Разблокировка конкретного IP:
sudo fail2ban-client set vsftpd unbanip <IP-адрес>
Важные замечания
- Лог‑файл. Убедитесь, что путь в logpath соответствует реальному расположению логов vsftpd. Если вы используете нестандартную конфигурацию, проверьте, куда пишутся логи.
- Длительность блокировки. Для большей безопасности можно увеличить bantime (например, до 86400 секунд = 24 часа) или maxretry до 2.
- Email‑оповещения. Настройте destemail и mta, чтобы получать уведомления о блокировках.
- Брандмауэр. Fail2Ban использует iptables по умолчанию. Если вы используете UFW, убедитесь, что правила корректно применяются.
- Производительность. При большом количестве атак Fail2Ban может потреблять ресурсы. Следите за нагрузкой.