Вопрос или проблема
Я некоторое время использовал 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 обеспечит более лаконичное управление безопасностью. Помните, что правильная настройка и тестирование вашей конфигурации является ключом к обеспечению стабильной работы вашего сервера.