Fail2ban — это инструмент защиты. После срабатывания ограничений он создает правила брандмауэра для блокировки IP-адресов. Он обеспечивает надежную защиту от таких сценариев, как подбор пароля ssh и исчерпание пароля ftp/http. Его основные функции сводятся к следующему.
Дистрибутив | Команда установки |
---|---|
Arch | pacman -Sy fail2ban/yay -Sy fail2ban |
CentOS/Redhat | yum install -y fail2ban |
Debian | apt-get install fail2ban |
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py install
Это установит error2ban в каталог библиотеки Python. Исполняемый скрипт размещается в /usr/bin, а каталог конфигурации — в /etc/fail2ban.
Если взять в качестве примера Debian, то другие дистрибутивы примерно такие же, а названия отдельных параметров могут отличаться.
Путь к файлу конфигурации по умолчанию — /etc/fail2ban. Из соображений безопасности лучше всего сохранить конфигурацию по умолчанию, чтобы при возникновении проблем было удобно выполнить откат и сравнить исходную конфигурацию.
cd /etc/fail2ban
cp jail.conf jail.local
cp fail2ban.conf fail2ban.local
После этого нам останется только настроитьjail.local
иfail2ban.local
Эти два файла также действительны。
[DEFAULT]
#Этот параметр — забеленный сегмент сети и IP. Это может быть доменное имя, сегмент сети или отдельный IP-адрес, разделенный пробелами.
ignoreip = 127.0.0.1/8 ::1
#Установите интервал блокировки, как показано ниже. Это означает 10 минут, которые могут быть секундами (с), минутами (м), часами (ч), днями (дни). Без единиц измерения значение по умолчанию — с и -1. означает перманентную блокировку.
bantime = 10m
#Интервал обнаружения,в интервале,когда>=maxtretryУстановите количество неудач,затем активируйте ограничение,Доступ запрещен.
findtime = 10m
#Находим максимальное количество неудач за время
maxretry = 5
Вернитесь к файлу конфигурации jali.local.,оказаться[sshd]
модуль,и добавьте строку для включения этого модуля:
[sshd]
enabled = true
port = 22 #sshport
logpath = /var/log/auth.log #Путь к журналу
backend = %(sshd_backend)s #фоновый менеджер,По умолчанию systemd берет на себя управление,Никакой модификации не требуется
enabled = true
表示启用此модуль。В то же время, как указано выше[DEFAULT]
Конфигурацию можно понимать как глобальные параметры.,Действительно для всех сервисных модулей,Конечно, вы также можете добавить параметры в определенные сервисные модули.,Локальные переменные имеют более высокий приоритет, чем глобальные переменные.,например:
[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-адрес, к которому осуществляется доступ, будет заблокирован, а локальный адрес обратной связи и некоторые сегменты интрасети будут исключены.
systemctl restart fail2ban #Перезапустить службу
Проверьте модули, которые Fail2ban включил:
fail2ban-client status
fail2ban-client status sshd #Показать подробную информацию о конкретных модулях
Используйте гидру для имитации истощения SSH:
Видно, что Fail2ban успешно заблокировал атакующий IP-адрес. С точки зрения iptables, служба Fail2ban добавила ввод ssh-порта во вход iptables. Существует четкое правило запрета перехода к списку ссылок f2b-sshd, отклоняющее его. трафик злоумышленника и ответ на icmp: Порт недоступен:
В это время атакующий хост использует nping для обнаружения и явно получает эхо-сигнал о недостижимости порта:
Используйте разбан, чтобы разблокировать IP
fail2ban-client unban 192.168.1.16
fail2ban-client unban --all #Разблокировать все
Используйте команду htpasswd, чтобы зашифровать пароль и записать его в файл:
printf "Rokas:$(openssl passwd -1 Rokasyang)\n" >/etc/nginx/htpasswd #Имя пользователя Rokas, пароль Rokasyang
Добавьте базовую проверку в корневой путь файла конфигурации nginx и прочитайте пароль файла htpasswd:
location / {
auth_basic "Rokas auth";
auth_basic_user_file /etc/nginx/htpasswd;
try_files $uri $uri/ =404;
}
Затем перезапустите nginx и смоделируйте запрос через Curl. Видно, что только после ввода имени пользователя и пароля можно успешно войти:
Все правила фильтрации Fail2ban находятся в каталоге /etc/fail2ban/filter.d. Например, упомянутый выше sshd по умолчанию читает файл sshd.conf в этом каталоге.
Та же причина,jail.localв файле конфигурацииnginx-http-auth
модуль也有对应命名的filterдокумент,Но правила сопоставления внутри не соответствуют нашему реальному сценарию.
существовать/etc/fail2ban/filter.dДобавить новый в каталогnginx-auth.conf
документ,Напишите следующие правила:
[Definition]
failregex= <HOST> -.*- .*HTTP/1.* 401 .*$
ignoreregex =
Измените Jail.local и включите модуль nginx-http-auth:
[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
fail2ban-client reload
После того, как клиенту трижды не удалось войти в систему, в четвертом разе в соединении было отказано:
На этом этапе Fail2ban успешно заблокировал IP-адрес клиента:
Аналогично добавьте новый файл правил в каталог /etc/fail2ban/filter.d, например nginx-limit-request.conf:
[Definition]
failregex = <HOST>.*-.*-.*$
ignoreregex =
Включите nginx-limit-req:
[nginx-limit-req]
enabled = true
port = http,https
filter= nginx-limit-request
logpath = /var/log/nginx/access.log
bantime = 1d
findtime = 1m
maxretry = 10
Перезагрузкой может быть конкретный модуль. Если ни один модуль не подключен, будут перезагружены все включенные модули:
fail2ban-client reload nginx-limit-req
Прошел 11 симуляционных тестов и в 11-й раз получил отказ в доступе:
Как и ожидалось, Fail2ban предоставил бану IP-адрес клиента:
Из приведенных выше примеров также можно легко понять конфигурацию защиты других служб. Конечно, некоторые службы имеют собственную защиту. Например, модуль conn_limit nginx может ограничить частоту доступа, если вы можете использовать собственную защиту. , вам больше не нужно использовать Fail2ban.
Поставляется с PDF-версией: