Конфигурация и приложение безопасности Fail2Ban — широкие возможности настройки и поддержка нескольких сервисов.
Конфигурация и приложение безопасности Fail2Ban — широкие возможности настройки и поддержка нескольких сервисов.

Предисловие

Fail2ban — это инструмент защиты. После срабатывания ограничений он создает правила брандмауэра для блокировки IP-адресов. Он обеспечивает надежную защиту от таких сценариев, как подбор пароля ssh и исчерпание пароля ftp/http. Его основные функции сводятся к следующему.

  • Избегайте атак грубой силой
  • Просмотр журналов ошибок проверки
  • Автоматически создавать правила брандмауэра для блокировки IP-адресов
  • Поддержка нескольких сервисов
  • Широкие возможности настройки

1. Установка

1. Установка исходного кода программного обеспечения.

Дистрибутив

Команда установки

Arch

pacman -Sy fail2ban/yay -Sy fail2ban

CentOS/Redhat

yum install -y fail2ban

Debian

apt-get install fail2ban

2. Установка исходного кода
Язык кода:shell
копировать
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py install

Это установит error2ban в каталог библиотеки Python. Исполняемый скрипт размещается в /usr/bin, а каталог конфигурации — в /etc/fail2ban.

2. Подробное объяснение конфигурации или параметров.

1. Резервное копирование конфигурации

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

Путь к файлу конфигурации по умолчанию — /etc/fail2ban. Из соображений безопасности лучше всего сохранить конфигурацию по умолчанию, чтобы при возникновении проблем было удобно выполнить откат и сравнить исходную конфигурацию.

Язык кода:shell
копировать
cd /etc/fail2ban
cp jail.conf jail.local
cp fail2ban.conf fail2ban.local

После этого нам останется только настроитьjail.localиfail2ban.localЭти два файла также действительны。

Подробности конфигурации 2.jali.local
Язык кода:shell
копировать
[DEFAULT]
#Этот параметр — забеленный сегмент сети и IP. Это может быть доменное имя, сегмент сети или отдельный IP-адрес, разделенный пробелами.
ignoreip = 127.0.0.1/8 ::1

#Установите интервал блокировки, как показано ниже. Это означает 10 минут, которые могут быть секундами (с), минутами (м), часами (ч), днями (дни). Без единиц измерения значение по умолчанию — с и -1. означает перманентную блокировку.
bantime  = 10m

#Интервал обнаружения,в интервале,когда>=maxtretryУстановите количество неудач,затем активируйте ограничение,Доступ запрещен.
findtime  = 10m

#Находим максимальное количество неудач за время
maxretry = 5

3. Защита безопасности SSH

1. Включите модуль sshd.

Вернитесь к файлу конфигурации jali.local.,оказаться[sshd]модуль,и добавьте строку для включения этого модуля:

Язык кода:shell
копировать
[sshd]
enabled = true
port    = 22                 #sshport
logpath = /var/log/auth.log  #Путь к журналу
backend = %(sshd_backend)s   #фоновый менеджер,По умолчанию systemd берет на себя управление,Никакой модификации не требуется

enabled = true 表示启用此модуль。В то же время, как указано выше[DEFAULT]Конфигурацию можно понимать как глобальные параметры.,Действительно для всех сервисных модулей,Конечно, вы также можете добавить параметры в определенные сервисные модули.,Локальные переменные имеют более высокий приоритет, чем глобальные переменные.,например:

Язык кода:shell
копировать
[sshd]
enabled = true
port    = 22
logpath = /var/log/auth.log
backend = %(sshd_backend)s
ignoreip = 127.0.0.1/8 ::1 10.10.0.0/16 172.16.0.0/16
bantime = 60m
findtime = 1m
maxretry = 5

Приведенная выше конфигурация указывает, что если вход в систему SSH не удастся пять раз в течение одной минуты, IP-адрес, к которому осуществляется доступ, будет заблокирован, а локальный адрес обратной связи и некоторые сегменты интрасети будут исключены.

2. Запустите фейл2бан.
Язык кода:shell
копировать
systemctl restart fail2ban  #Перезапустить службу

Проверьте модули, которые Fail2ban включил:

Язык кода:shell
копировать
fail2ban-client status
fail2ban-client status sshd #Показать подробную информацию о конкретных модулях
3. Имитировать ssh-взлом методом перебора

Используйте гидру для имитации истощения SSH:

Видно, что Fail2ban успешно заблокировал атакующий IP-адрес. С точки зрения iptables, служба Fail2ban добавила ввод ssh-порта во вход iptables. Существует четкое правило запрета перехода к списку ссылок f2b-sshd, отклоняющее его. трафик злоумышленника и ответ на icmp: Порт недоступен:

В это время атакующий хост использует nping для обнаружения и явно получает эхо-сигнал о недостижимости порта:

4. Снятие ограничений вручную

Используйте разбан, чтобы разблокировать IP

Язык кода:shell
копировать
fail2ban-client unban 192.168.1.16
fail2ban-client unban --all  #Разблокировать все

4. Защита входа в систему HTTP

1. Подготовьте среду моделирования.

Используйте команду htpasswd, чтобы зашифровать пароль и записать его в файл:

Язык кода:shell
копировать
printf "Rokas:$(openssl passwd -1 Rokasyang)\n" >/etc/nginx/htpasswd  #Имя пользователя Rokas, пароль Rokasyang

Добавьте базовую проверку в корневой путь файла конфигурации nginx и прочитайте пароль файла htpasswd:

Язык кода:shell
копировать
location / {
                auth_basic "Rokas auth";
                auth_basic_user_file /etc/nginx/htpasswd;
                try_files $uri $uri/ =404;
        }

Затем перезапустите nginx и смоделируйте запрос через Curl. Видно, что только после ввода имени пользователя и пароля можно успешно войти:

2. Настроить фильтр

Все правила фильтрации Fail2ban находятся в каталоге /etc/fail2ban/filter.d. Например, упомянутый выше sshd по умолчанию читает файл sshd.conf в этом каталоге.

Та же причина,jail.localв файле конфигурацииnginx-http-authмодуль也有对应命名的filterдокумент,Но правила сопоставления внутри не соответствуют нашему реальному сценарию.

существовать/etc/fail2ban/filter.dДобавить новый в каталогnginx-auth.confдокумент,Напишите следующие правила:

Язык кода:shell
копировать
[Definition]
failregex= <HOST> -.*- .*HTTP/1.* 401 .*$
ignoreregex =

Измените Jail.local и включите модуль nginx-http-auth:

Язык кода:shell
копировать
[nginx-http-auth]
enabled = true
port    = 80,443
filter = nginx-auth  #Правила фильтрации относятся к вновь созданному файлу nginx-auth.conf в каталоге filter.d.
logpath = /var/log/nginx/access.log  #путь к журналу доступа nginx
bantime = 60m
findtime = 1m
maxretry = 3
3. Перезагрузите Fail2ban-клиент.
Язык кода:shell
копировать
fail2ban-client reload
4. Тест моделирования

После того, как клиенту трижды не удалось войти в систему, в четвертом разе в соединении было отказано:

На этом этапе Fail2ban успешно заблокировал IP-адрес клиента:

5. Ограничение частоты HTTP-доступа

1. Добавить новый фильтр

Аналогично добавьте новый файл правил в каталог /etc/fail2ban/filter.d, например nginx-limit-request.conf:

Язык кода:shell
копировать
[Definition]
failregex = <HOST>.*-.*-.*$
ignoreregex =
2. Настройте Jail.local

Включите nginx-limit-req:

Язык кода:shell
копировать
[nginx-limit-req]
enabled = true
port    = http,https
filter= nginx-limit-request
logpath = /var/log/nginx/access.log
bantime = 1d
findtime = 1m
maxretry = 10
3. Перезагрузите Fail2ban-клиент.

Перезагрузкой может быть конкретный модуль. Если ни один модуль не подключен, будут перезагружены все включенные модули:

Язык кода:shell
копировать
fail2ban-client reload nginx-limit-req
4. Тест моделирования

Прошел 11 симуляционных тестов и в 11-й раз получил отказ в доступе:

Как и ожидалось, Fail2ban предоставил бану IP-адрес клиента:

Подвести итог

Из приведенных выше примеров также можно легко понять конфигурацию защиты других служб. Конечно, некоторые службы имеют собственную защиту. Например, модуль conn_limit nginx может ограничить частоту доступа, если вы можете использовать собственную защиту. , вам больше не нужно использовать Fail2ban.

Поставляется с PDF-версией:

Конфигурация и приложение безопасности Fail2ban

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose