fail2ban с iptables-persistent

Вопрос или проблема

Я некоторое время использовал fail2ban и недавно установил iptables-persistent, используя его с ipset для черного списка (есть один конкретный IP, который постоянно атакует эту машину). Сохранение ipset/iptables потребовало немного усилий на Ubuntu, но эта часть, похоже, работает. Теперь моя проблема следующая:

Когда я перезагружаю машину, мой (релевантный) iptables выглядит так:

Цепочка INPUT (политика ACCEPT 682 пакета, 84744 байта)
 pkts bytes target     prot opt in     out     source               destination
  347 23254 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set blacklist src
  347 23254 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22

Цепочка f2b-sshd (2 ссылки)
 pkts bytes target     prot opt in     out     source               destination
  694 46508 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

При этом я также заметил, что netfilter-persistent.service был отмечен как "loaded failed failed" в systemctl, несмотря на то, что он явно загрузил файлы правил. Я попытался отредактировать свою службу fail2ban, чтобы она загружалась ПОСЛЕ netfilter-persistent, и теперь netfilter-persistent отмечен как "loaded active exited"… но правила все еще дублируются (по-видимому, f2b создает правила независимо от того, существуют ли они уже)

Ручное редактирование этого файла каждый раз, когда я запускаю iptables-save, чтобы удалить записи f2b, вероятно, является приемлемым вариантом (особенно учитывая, что последствия не так уж и серьезны, если я забуду это сделать), но мне интересно, есть ли лучший вариант?

Одно решение уже пришло мне в голову, но это… немного хакерский вариант, на мой взгляд. Создайте следующий файл и запустите его. Он полагается на то, что записи f2b — и никакие другие — все содержат “f2b”, а этот скрипт запускается вместо iptables-save напрямую…

~/bin£ cat saveFilteredIptables.sh
#!/usr/bin/zsh
sudo iptables-save | perl -ne 'print if !/f2b/'
~/bin£

Ответ или решение

Использование Fail2Ban с iptables-persistent на Ubuntu

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

Проблема

Как вы заметили, после перезагрузки вашей системы с установленными Fail2Ban и iptables-persistent, наблюдаются дублирующиеся правила в таблицах iptables. Эти проблемы могут быть связаны с тем, как и когда загружаются правила firewall. Особенно наглядно это видно в вашем случае, когда правила Fail2Ban (обозначенные как f2b) добавляются независимо от существования старых правил, что приводит к дублированию.

Далее, проблема с пометкой службы netfilter-persistent как "failed failed" указывает на то, что при запуске возникли ошибки, что также может повлиять на порядок инициализации правил iptables.

Возможные решения

1. Настройка порядка инициализации правил:

Важно убедиться, что службы запускаются в правильном порядке. Вы уже начали это делать, изменив .service файл для Fail2Ban, чтобы он загружался после netfilter-persistent. Рекомендуется установить зависимость, добавив следующую строку в секцию [Unit] вашего Fail2Ban сервиса:

After=netfilter-persistent.service
Requires=netfilter-persistent.service

Таким образом, Fail2Ban будет гарантированно ждать, пока netfilter-persistent загрузит свои правила перед тем, как добавлять свои собственные.

2. Устранение дублирования правил:

Для устранения дублирования правил можно использовать несколько подходов:

  • Скрипт для очистки дубликатов: Вы можете создать скрипт, который будет запускаться после загрузки, проверяя и удаляя дублирующие правила. Например:
#!/bin/bash
iptables -D INPUT -m set --match-set blacklist src -j DROP 

Поместите его в cron или добавьте в скрипты запуска, чтобы он выполнялся автоматически.

  • Фильтрация при сохранении: Как вы упомянули, вы можете использовать ваш скрипт saveFilteredIptables.sh для фильтрации правил. Этот метод менее идеален, так как требуются дальнейшие манипуляции, но он вполне рабочий.

3. Использование ipset вместе с iptables:

Если ваш основной приоритет — это блокировка определенного IP-адреса, использование ipset будет более эффективным. Убедитесь, что правила на блокировку IP-адресов включены в заблокированный список до вызова Fail2Ban, так чтобы это правило не дублировалось. Добавьте создание ipset за пределами Fail2Ban в ‘netfilter-persistent’ так, чтобы оно всегда было применено до любых других правил.

Заключение

Интеграция Fail2Ban с iptables-persistent требует внимательного относжения к деталям конфигурации. Целесообразно устанавливать правильные зависимости для служб и следить за порядком их инициализации. Устранение дублирования правил можно решить с помощью скриптов, и, в конечном итоге, использование ipset обеспечит более лаконичное управление безопасностью. Помните, что правильная настройка и тестирование вашей конфигурации является ключом к обеспечению стабильной работы вашего сервера.

Оцените материал
Добавить комментарий

Капча загружается...