Fail2Ban — защита Linux-сервера от брутфорса и атак
Fail2Ban — защита Linux-сервера от брутфорса и атак
При подключении сервера к интернету почти сразу начинаются автоматические попытки взлома: подбор SSH-паролей, сканирование портов и атаки на веб-сервисы. Даже новый VPS через несколько минут может получить десятки подозрительных подключений.
Одним из самых популярных инструментов защиты Linux-серверов является Fail2Ban — система автоматической блокировки IP-адресов при подозрительной активности.
Что такое Fail2Ban
Fail2Ban — это сервис, который анализирует логи системы и автоматически блокирует IP-адреса при повторяющихся ошибках авторизации или подозрительных запросах.
Например:
- несколько неверных SSH-паролей;
- попытки входа в панель управления;
- массовые запросы к веб-серверу;
- атаки на почтовые сервисы.
После срабатывания Fail2Ban добавляет IP в firewall и временно запрещает подключение.
Установка Fail2Ban
Для Ubuntu и Debian установка выполняется одной командой:
sudo apt update
sudo apt install fail2ban
Проверка работы сервиса
Статус Fail2Ban
sudo systemctl status fail2ban
Если всё работает нормально, появится статус:
active (running)
Запуск сервиса
sudo systemctl start fail2ban
Автозапуск при загрузке
sudo systemctl enable fail2ban
Основной конфигурационный файл
Главная ошибка новичков — редактирование файла:
/etc/fail2ban/jail.conf
Делать этого не рекомендуется.
Правильный вариант — создать:
/etc/fail2ban/jail.local
Именно этот файл обычно используется для пользовательских настроек.
Базовая настройка SSH-защиты
Откройте конфиг:
sudo nano /etc/fail2ban/jail.local
Добавьте:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
findtime = 10m
bantime = 1h
Что означают параметры
| Параметр | Значение |
|---|---|
enabled | включение защиты |
port | порт SSH |
maxretry | число ошибок до бана |
findtime | время отслеживания |
bantime | длительность блокировки |
Перезапуск Fail2Ban
После изменения конфигурации:
sudo systemctl restart fail2ban
Проверка активных правил
Общий статус
sudo fail2ban-client status
Пример:
Status
|- Number of jail: 1
`- Jail list: sshd
Статус SSH-защиты
sudo fail2ban-client status sshd
Можно увидеть:
- заблокированные IP;
- количество попыток;
- активные правила.
Разбан IP-адреса
Если случайно заблокировали себя:
sudo fail2ban-client set sshd unbanip 1.2.3.4
Просмотр логов Fail2Ban
Основной лог:
sudo tail -f /var/log/fail2ban.log
В реальном времени можно видеть:
- блокировки IP;
- разбаны;
- срабатывания правил.
Полезная команда с GeoIP
Для просмотра заблокированных IP и стран:
watch -n 2 'sudo grep "Ban" /var/log/fail2ban.log | tail -n 20 | awk "{print \$1, \$2, \$3, \$NF}" | while read date time ip; do country=$(geoiplookup $ip | cut -d: -f2); printf "%-12s %-8s %-15s %s\n" "$date" "$time" "$ip" "$country"; done'
Команда обновляет список каждые 2 секунды и показывает:
- дату;
- время;
- IP-адрес;
- страну источника.
Где Fail2Ban особенно полезен
Fail2Ban отлично подходит для защиты:
- SSH-сервера;
- Nginx;
- Apache;
- VPN-сервисов;
- почтовых серверов;
- панелей управления;
- 3X-UI и Xray-сервисов.
Полезные рекомендации
Измените SSH-порт
Стандартный порт 22 постоянно сканируется ботами.
Например:
Port 2222
в файле:
/etc/ssh/sshd_config
После изменения:
sudo systemctl restart ssh
Используйте SSH-ключи
Авторизация по ключу значительно безопаснее пароля.
Не отключайте себя случайно
Перед экспериментами с Fail2Ban желательно:
- открыть вторую SSH-сессию;
- проверить firewall;
- добавить свой IP в whitelist.
Исключение IP из блокировки
Пример:
ignoreip = 127.0.0.1/8 YOUR_IP
Полное отключение Fail2Ban
sudo systemctl stop fail2ban
Отключить автозапуск:
sudo systemctl disable fail2ban
Заключение
Fail2Ban — один из самых полезных инструментов для защиты Linux-сервера. Он практически обязателен для VPS, открытого в интернет.
Даже минимальная настройка значительно снижает количество автоматических атак и защищает сервер от простого брутфорса.
