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 автоматически создает в 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 |








