Что делает этот модуль #
fail2ban — это страж, который следит за логами вашего сервера и, обнаружив попытки вредоносного доступа (например, множество неудачных вводов пароля по SSH), автоматически банит виновную IP на некоторое время. Каждый отслеживаемый сервис организован в отдельный джейл (например sshd).
Модуль fail2ban даёт вам контроль над этими банами во время выполнения, избавляя от необходимости помнить синтаксис fail2ban-client: смотрите состояние джейлов, выводите список кто забанен, проверяйте, заблокирована ли конкретная IP, баньте или разбаньте вручную, снимайте блокировку сразу со всех в экстренной ситуации и перезагружайте конфигурацию после изменения.
Этот модуль работает с уже установленным и запущенным fail2ban. Все подкоманды запрашивают или изменяют состояние сервиса, поэтому им нужны права root (используйте sudo). Если вы заблокировали доступ по собственной IP, сразу переходите к экстренной разблокировке.
Типовые задачи #
Выберите, что нужно сделать. В каждом рецепте команда уже готова — просто замените IP или джейл на свои и нажмите Копировать.
1
Посмотреть состояние и джейлы
Одним взглядом проверьте, активен ли fail2ban и сколько IP забанено.
Подключитесь по SSH к серверу под пользователем ubuntu и запросите общее состояние:
$ sudo imaxe fail2ban statusНужен вывод, читаемый машиной, для скрипта или панели? Добавьте --json:
$ sudo imaxe fail2ban status --jsonsshd) и число забаненных IP в каждом из них.2
Посмотреть, какие IP забанены
Выведите активные баны по всем джейлам или по одному конкретному.
Все забаненные IP по всем джейлам сразу:
$ sudo imaxe fail2ban bannedИнтересует только один джейл? Укажите его аргументом:
$ sudo imaxe fail2ban banned sshd3
Проверить, забанена ли IP
Узнайте, в каких джейлах заблокирован конкретный адрес.
Запросите напрямую по IP; вам скажут, в каких джейлах она забанена:
$ sudo imaxe fail2ban check 203.0.113.74
Забанить или разбанить IP
Вручную заблокируйте вредоносный адрес или освободите легитимного пользователя.
Забаньте IP в конкретном джейле (если джейл всего один, он определится сам):
$ sudo imaxe fail2ban ban 203.0.113.7 --jail sshdЗабанили кого-то легитимного? Разбаньте его сразу из всех джейлов:
$ sudo imaxe fail2ban unban 203.0.113.7imaxe fail2ban check для той же IP.5
Разблокировать всё (экстренно)
Вы заблокировали себе доступ: освободите все IP во всех джейлах.
Если ваша собственная IP попала под бан и нужно срочно вернуть доступ, разбаньте их все. Добавьте --yes, чтобы пропустить подтверждение:
$ sudo imaxe fail2ban unban-all --yesПосле изменения конфигурации джейлов перезагрузите её, чтобы она применилась:
$ sudo imaxe fail2ban reloadunban-allЭто разрушительная операция над банами: она снимает блокировку со всех IP, включая вредоносные. Используйте её только для восстановления доступа в экстренной ситуации и потом проверьте состояние командой imaxe fail2ban status.
Синопсис #
imaxe fail2ban <subcomando> [<ip>|<jail>] [--jail JAIL] [flags]Все подкоманды требуют прав root (используйте sudo), потому что запрашивают или изменяют состояние fail2ban через fail2ban-client. Добавьте --json к status, banned или check, чтобы получить вывод, читаемый машиной, пригодный для скриптинга.
Подкоманды #
| Подкоманда | Что делает | Значимые флаги |
|---|---|---|
| status | Состояние fail2ban: активность, джейлы и число забаненных IP по джейлам. | --json |
| banned | Выводит забаненные IP (по всем джейлам или по одному конкретному). | --json |
| check | Показывает, в каких джейлах забанена IP. | --json |
| ban | Вручную банит IP в джейле. | --jail |
| unban | Разбанивает IP из всех джейлов. | — |
| unban-all | ЭКСТРЕННО: разбанивает ВСЕ IP из всех джейлов. | --yes |
| reload | Перезагружает конфигурацию fail2ban (проверяет jail.local). | — |
Аргументы и флаги #
| Аргумент / Флаг | Тип | По умолчанию | Описание |
|---|---|---|---|
| <ip> обяз. | string | — | IP, с которой работаем. Обязательна в check, ban и unban. |
| <jail> | string | все | В banned — конкретный джейл для вывода. Без аргумента выводятся все джейлы. |
| --jail | string | авто | В ban — джейл назначения бана. Если джейл всего один, определяется сам. |
| --yes | bool | false | В unban-all — подтверждает без вопроса (разрушительная операция над банами). |
| --json | bool | false | В status/banned/check — выдаёт результат в виде JSON в stdout. |
Файлы и пути #
| Путь | Содержимое |
|---|---|
| /etc/fail2ban/jail.local | Локальная конфигурация fail2ban: активные джейлы, время бана и пороги. То, что проверяет reload. |
| /var/run/fail2ban/fail2ban.sock | Управляющий сокет, через который fail2ban-client общается с сервисом. |
| /var/log/fail2ban.log | Лог самого fail2ban: баны, разбаны и перезагрузки. |
Коды возврата и логи #
Каждый запуск возвращает код, который можно проверить командой echo $? — удобно для цепочек в скриптах:
Следите за логом в реальном времени во время отладки:
$ sudo journalctl -u fail2ban -f
$ sudo tail -f /var/log/fail2ban.logУстранение неполадок #
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Выходит SERVICE (код 3) | fail2ban остановлен или сокет не отвечает. | Запустите сервис командой systemctl start fail2ban и повторите. |
| Выходит JAIL (код 4) | Джейл из --jail не существует, либо их несколько и определить нельзя. | Посмотрите джейлы командой imaxe fail2ban status и укажите правильный в --jail. |
| Выходит RELOAD (код 5) | В jail.local есть синтаксическая ошибка. | Исправьте /etc/fail2ban/jail.local и снова запустите reload. |
| Я заблокировал себе доступ по SSH | Ваша собственная IP набрала ошибок и попала под бан в sshd. | Другим способом разбаньте её командой unban или снимите все баны через unban-all --yes. |
Застряли с модулем Fail2ban?
Напишите нам, приложив вывод «imaxe <module> status --json», и мы быстро ответим.