Настройка базовой защиты сервера: iptables и Fail2Ban

Настройка базовой защиты сервера: iptables и Fail2Ban

В современной инфраструктуре безопасность сервера — критически важный аспект. Один из способов защиты — использование iptables для фильтрации сетевого трафика и Fail2Ban для автоматической блокировки подозрительных подключений. В этой статье разберём настройку этих инструментов для базовой защиты Linux-сервера.


1. Установка и настройка Fail2Ban

1.1. Установка и активация

Устанавливаем Fail2Ban из репозитория и включаем автозагрузку:

apt install fail2ban
systemctl enable --now fail2ban

1.2. Базовая конфигурация

Основные настройки хранятся в:

  • /etc/fail2ban/jail.conf — основной конфиг (лучше не редактировать напрямую)
  • /etc/fail2ban/jail.d/*.conf — кастомные настройки (предпочтительный способ)

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

nano /etc/fail2ban/jail.d/custom.conf

Добавляем следующие параметры:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 217.25.227.207  # IP, которые не блокируются
bantime  = 30d                              # Время блокировки (30 дней)
findtime = 5m                               # Окно анализа попыток входа
maxretry = 3                                # Макс. число попыток до бана
banaction = iptables-multiport              # Действие при бане (по портам)
banaction_allports = iptables-allports      # Блокировка всех портов

1.3. Проверка работы Fail2Ban

Проверим статус защиты для SSH:

fail2ban-client status sshd

Посмотрим правила iptables, созданные Fail2Ban:

iptables -L -n -v | grep -A 10 "f2b-sshd"

2. Настройка iptables для базовой защиты

2.1. Основные правила

Перед применением политики DROP на INPUT разрешим необходимый трафик:

# Разрешаем ICMP (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем порт для Zabbix-агента
iptables -A INPUT -p tcp --dport 10050 -j ACCEPT

# Разрешаем SSH (порт 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешаем ответы на исходящие соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешаем локальный интерфейс (loopback)
iptables -A INPUT -i lo -j ACCEPT

# Запрещаем весь остальной входящий трафик
iptables -P INPUT DROP

# Сохраняем правила
iptables-save > /etc/iptables/rules.v4

2.2. Управление правилами iptables

Если нужно удалить правило:

iptables -L --line-numbers  # Просмотр правил с номерами
iptables -D INPUT 3         # Удаление правила №3 из цепочки INPUT

3. Что получаем на выходе всех настроек

Комбинация Fail2Ban и iptables даёт:
✅ Автоматическую защиту от брутфорса (Fail2Ban)
✅ Гибкую фильтрацию трафика (iptables)
✅ Контроль доступа к критическим сервисам (SSH, Zabbix)

Рекомендуется:
🔹 Регулярно проверять логи Fail2Ban (journalctl -u fail2ban -f)
🔹 Обновлять список ignoreip для доверенных IP
🔹 Тестировать правила iptables перед применением в production

Такая настройка обеспечит базовый уровень безопасности сервера, минимизируя риски несанкционированного доступа.

🔐 Дополнительные меры:

  • Настройка SSH-доступа по ключам вместо пароля
  • Использование UFW (если iptables кажется сложным)
  • Мониторинг с помощью Zabbix/Grafana для отслеживания атак