Сканирование на вредоносное ПО и руткиты: rkhunter и ClamAV
Защитите Linux-сервер от вредоносного ПО и руткитов. Установка rkhunter и ClamAV, настройка сканирования, интерпретация результатов, планирование сканирований и реагирование на инциденты.
Защитите сервер от SSH брутфорс-атак с помощью Fail2Ban. Установка, настройка jail.local, джейлы для Nginx/Apache, белый список IP, мониторинг блокировок и email-уведомления.
SSH брутфорс-атаки — одна из наиболее распространённых угроз для каждого сервера, доступного из интернета. Fail2Ban — мощный инструмент, который отслеживает неудачные попытки входа и автоматически блокирует IP-адреса злоумышленников. Это руководство проведёт вас через настройку Fail2Ban с комплексной защитой для SSH, Nginx и Apache.
Fail2Ban — инструмент безопасности, который отслеживает лог-файлы и блокирует IP-адреса, делающие слишком много неудачных попыток входа в заданном временном окне, используя правила iptables/nftables. Написан на Python и включает готовые фильтры для многих сервисов.
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
# CentOS/AlmaLinux/Rocky Linux
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
# Запустить службу Fail2Ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# Проверить статус
sudo systemctl status fail2ban
Основной файл конфигурации Fail2Ban — jail.conf. Однако не редактируйте его напрямую — он может быть перезаписан при обновлениях. Вместо этого создайте файл jail.local:
# Скопировать jail.conf
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Редактировать конфигурацию
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
# Длительность блокировки (секунды) — 1 час
bantime = 3600
# Окно обнаружения (секунды) — 10 минут
findtime = 600
# Максимальное количество неудачных попыток
maxretry = 5
# Бэкенд (auto, pyinotify, gamin, polling, systemd)
backend = auto
# Уровень логирования
loglevel = INFO
# Цель логирования
logtarget = /var/log/fail2ban.log
# Email-уведомление
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
# Действие — блокировать и отправить email
action = %(action_mwl)s
# Белый список — эти IP никогда не блокируются
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# В /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400 # 24 часа
findtime = 600
Для SSH рекомендуются maxretry = 3 и bantime = 86400 (24 часа). Это позволяет злоумышленникам делать только 3 попытки в день.
# Ошибка HTTP-аутентификации Nginx
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
# Нарушение ограничения скорости Nginx
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 600
# Защита от флуда 404 Nginx
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 60
bantime = 3600
# Ошибка аутентификации Apache
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600
# Плохие боты Apache
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log
maxretry = 2
bantime = 86400
[DEFAULT]
# Можно добавить несколько IP или подсетей
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 203.0.113.1
# Перезагрузить конфигурацию
sudo fail2ban-client reload
# Проверить белый список
sudo fail2ban-client get sshd ignoreip
# Просмотр статуса всех джейлов
sudo fail2ban-client status
# Просмотр статуса конкретного джейла
sudo fail2ban-client status sshd
# Список заблокированных IP
sudo fail2ban-client status sshd | grep "Banned IP"
# Мониторинг лог-файла
sudo tail -f /var/log/fail2ban.log
# Фильтрация последних событий блокировки
sudo grep "Ban" /var/log/fail2ban.log | tail -20
# Вручную заблокировать IP
sudo fail2ban-client set sshd banip 1.2.3.4
# Разблокировать IP
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Удалить все блокировки (с осторожностью!)
sudo fail2ban-client unban --all
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@yourdomain.com
mta = sendmail
# Варианты действий:
# action_ = только блокировать
# action_mw = блокировать + email
# action_mwl = блокировать + email + whois + строки лога
action = %(action_mwl)s
Очень агрессивные настройки (низкий maxretry, длинный bantime) могут также блокировать легитимных пользователей. Для SSH maxretry=3-5 и bantime=3600-86400 — сбалансированный подход.
Fail2Ban — незаменимая часть безопасности сервера. При правильной настройке для SSH, Nginx и Apache он значительно снижает количество брутфорс-атак. Регулярно отслеживайте лог-файлы и добавляйте ложные срабатывания в белый список.
Возможно, вы забыли добавить свой IP-адрес в белый список. Подключитесь к серверу через консоль и выполните 'sudo fail2ban-client set sshd unbanip ВАШ_IP'. Затем добавьте свой IP в строку ignoreip в jail.local.
Да. Установите 'banaction = ufw' в jail.local, чтобы Fail2Ban создавал правила UFW. По умолчанию используется iptables, но он также работает с UFW.
Для SSH рекомендуется 3-5 попыток. Для веб-сервисов может быть уместно 5-10. Слишком низкие значения могут блокировать легитимных пользователей, слишком высокие — обеспечивают недостаточную защиту.
Стандартный лог-файл — /var/log/fail2ban.log. Отслеживайте его в реальном времени с помощью 'sudo tail -f /var/log/fail2ban.log'. На системах с systemd можно также использовать 'sudo journalctl -u fail2ban -f'.
Fail2Ban эффективен против брутфорс-атак, но одного его недостаточно. Его следует использовать вместе с SSH-аутентификацией по ключу, надёжными паролями и правилами брандмауэра.
Защитите Linux-сервер от вредоносного ПО и руткитов. Установка rkhunter и ClamAV, настройка сканирования, интерпретация результатов, планирование сканирований и реагирование на инциденты.
Настройте VPN-сервер WireGuard: генерация ключей, конфигурация сервера и клиента, IP-пересылка, правила брандмауэра и настройка клиентов Windows/Linux/Android.
Принципы сетевой безопасности Zero Trust и практическая реализация: никогда не доверяй всегда проверяй, микросегментация, доступ на основе идентификации и реализация с существующими инструментами Linux.