VPS (Virtual Private Server) первый шаг к получению полного контроля над вашей инфраструктурой. В отличие от обычного хостинга, здесь вы получаете выделенные ресурсы и root-доступ, что позволяет реализовать любые конфигурации, включая настройку сложных систем безопасности вроде iptables и fail2ban.  аренда виртуального сервера

Debian 13 (Trixie) требует современного подхода к безопасности. Связка iptables + Fail2ban остается золотым стандартом защиты сервера от атак перебором (brute force). В этой статье мы рассмотрим пошаговую настройку этих инструментов с учетом особенностей актуальной версии Debian.

Iptables базовый межсетевой экран ядра Linux, который фильтрует пакеты. Fail2ban - интеллектуальный надзиратель. Он анализирует логи (например, /var/log/auth.log), и если видит, что IP-адрес совершает много ошибок при входе (SSH, FTP, веб-формы), он автоматически добавляет правило в iptables, чтобы заблокировать этот адрес на определенное время.

1. Подготовка системы и установка

Прежде чем начинать настройку firewall, обновим систему и установим необходимый набор инструментов.

sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban iptables iptables-persistent -y

В процессе установки iptables-persistent вас спросят, хотите ли вы сохранить текущие правила. На этом этапе можно согласиться, так как правил у нас еще нет.

2. Базовая настройка Iptables

Приведем политики по умолчанию к безопасному состоянию: запрещаем всё входящее, кроме явно разрешенного, и разрешаем исходящие соединения (чтобы сервер мог обновляться и обращаться к API).

# Сброс текущих правил (если они есть)
sudo iptables -F
sudo iptables -X

# Политики по умолчанию
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# Разрешаем трафик на loopback-интерфейсе
sudo iptables -A INPUT -i lo -j ACCEPT

# Разрешаем уже установленные соединения (чтобы не сбрасывать текущую сессию SSH)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешаем SSH (обязательно, иначе потеряете доступ к серверу!)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешаем HTTP и HTTPS (если сервер веб)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Сохраняем правила, чтобы они пережили перезагрузку:

sudo netfilter-persistent save

3. Настройка Fail2ban

Конфигурация Fail2ban строится на принципе локальных override-файлов. Вместо изменения jail.conf, мы создадим jail.local, где будут наши настройки. Это гарантирует, что при обновлении пакета конфигурация не собьется.

Создаем файл конфигурации:

sudo nano /etc/fail2ban/jail.local

Базовая конфигурация для Debian 13:

[DEFAULT]
# Адреса, которые никогда не блокируются (белый список)
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/16 10.0.0.0/8

# Время бана (1 час)
bantime = 3600

# Временное окно, в течение которого считаются неудачи (10 минут)
findtime = 600

# Количество неудач до бана
maxretry = 5

# Бэкенд для чтения логов (на Debian 13 предпочтительнее systemd)
backend = systemd

# Действие по умолчанию - банить через iptables
banaction = iptables-multiport

# Включение SSH тюрьмы (jail)
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
maxretry = 3
bantime = 3600

Почему backend = systemd? Начиная с Debian 9, systemd-journal стал стандартом. Использование этого бэкенда гарантирует, что Fail2ban будет читать логи напрямую из journald, что надежнее, чем чтение файлов.

4. Интеграция: как Fail2ban управляет Iptables

fail2ban man

После запуска Fail2ban автоматически создает в iptables отдельные цепочки (chains) для каждой активной тюрьмы. Например, для SSH создастся цепочка f2b-sshd. Правила в основной цепочке INPUT перенаправляют трафик в эту цепочку, где происходит сверка с бан-листом.

Проверить созданные цепочки можно командой:

sudo iptables -L -n

Вы увидите строчку в Chain INPUT:

Chain INPUT (policy DROP)
target     prot opt source               destination
f2b-sshd   tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

И отдельную цепочку для банов:

Chain f2b-sshd (1 references)
target     prot opt source               destination
DROP       all  --  203.0.113.XX         0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Пример таблицы состояний цепочек iptables

Цепочка (Chain) Политика (Policy) Количество правил Ссылки на неё (references) Назначение
INPUT DROP 5 0 Входящий трафик
FORWARD DROP 0 0 Транзитный трафик
OUTPUT ACCEPT 0 0 Исходящий трафик
f2b-sshd - 2 1 Блокировка SSH
f2b-http - 1 0 Блокировка веб-атак

5. Управление и мониторинг

После внесения изменений перезапустим сервис и проверим его статус:

sudo systemctl restart fail2ban
sudo systemctl status fail2ban

Основные команды для администрирования:

  • Посмотреть список активных тюрем: sudo fail2ban-client status
  • Посмотреть статус конкретной тюрьмы и список заблокированных IP: sudo fail2ban-client status sshd
  • Разблокировать IP вручную: sudo fail2ban-client set sshd unbanip 192.168.1.100
  • Заблокировать IP вручную: sudo fail2ban-client set sshd banip 192.168.1.100

Логи работы Fail2ban хранятся в /var/log/fail2ban.log. За ними удобно следить в реальном времени:

sudo tail -f /var/log/fail2ban.log

Настройка связки iptables + fail2ban на Debian 13 занимает не более 15 минут, но критически повышает уровень защиты сервера. Статические правила iptables закрывают порты от случайных сканирований, а Fail2ban динамически реагирует на подозрительную активность. Не забывайте периодически проверять логи и адаптировать параметры maxretry и bantime под интенсивность использования вашего сервера.

Сравнение стандартных параметров блокировки

Сервис maxretry (попыток) findtime (сек) bantime (сек) Типичный порт
sshd 3 600 3600 22
apache (http) 5 600 1800 80, 443
proftpd 4 900 3600 21
postfix (smtp) 5 1200 7200 25, 587
dovecot (pop3) 5 600 3600 110, 995

 

 

Еще по теме

Что будем искать? Например,Идея