Лучше, быстрее, надежнее / Хабр
Про fail2ban написано уже много, в том числе и на хабре. Эта статья немного о другом — как сделать защиту им еще надежнее и о еще пока неизвестных в широких кругах новых функциях fail2ban. Добавлю сразу — речь пойдет пока про development branch, хотя уже долго проверенный в бою.Краткое вступление
В большинстве своем fail2ban устанавливается из дистрибутива (как правило это какая-нибудьТак вот, сподвигнуть на написание этого поста меня заставил случай, произошедший с одним сервером моего хорошего знакомого. Классика жанра — пришла абуза, за ней вторая и пошло поехало. Хорошо еще злоумышленник попался ленивый — логи не потер, да и повезло еще крупно, что logrotate был настроен, чтобы хранить логи месяцами.
Оказалось все довольно банально, подобрали пароль к его админской почте, который по совместительству был паролем для ssh (естественно без ключа). Не рут, но судоер, со всеми вытекающими. Первый его вопрос был: как подобрали — у меня же fail2ban там. И вот здесь как раз засада: не все представляют себе, что подбором паролей сегодня занимаются уже не отдельные компьютеры, а целые бот-сети, кстати поумневшие донельзя. Так вот по логам выяснили, что тут как раз такой случай: перебирала бот-сеть, причем на практике выяснившая его настройки в fail2ban (maxRetry=5, findTime=600 и banTime=600). Т.е. чтобы избежать бана, сеть делала 4 попытки в течении 10 минут с каждого IP. На минуточку в сети порядка 10 тысяч уникальных IP = что-то более 5 с половиной миллионов паролей в сутки.
Подробнее на «ремонте» останавливаться не буду — это история долгая, и вообще тема для отдельной статьи. Скажу только, что все почистили и все разрешилось малой кровью, да и отделался он практически «легким» испугом.
Так вот, мысль написать статью возникла после того, как мне (частично заслужено) было высказано: «Так ты про такое знал и ничего не сказал, не предупредил. Да еще и решение есть и не поделился. Ну и сволочь ты». Короче, посему посту — быть.
Мой fail2ban
К безопасности «своих» серверов я отношусь чрезвычайно серьезно. Кроме того же fail2ban, всегда кастомного донельзя, у меня там и мониторинг и еще куча всего. Меня просто реально бесит, что из-за бестолковой серой массы, позволяющей брать под контроль бот-сетей свое железо, приходится убивать уйму времени на защиту (и постоянное сопровождение и контроль ее в дальнейшем). Кстати, чтобы минимизировать этот контроль, я и участвую активно в разработке и fail2ban, да и других проектов от безопасности.Так вот, моя последняя расширенная версия [sebres:ban-time-incr], позволяет вывести этот назойливый зоопарк раз и навсегда (ну или пока они снова не приспособятся). Это фишка довольно часто обсуждалась всем коммюнити, но как-то руки не доходили. У меня оно жило в виде отдельных скриптов и каких-то кастомных изменений, пока не оформилось в готовый функционал.
Если коротко, то система, запоминая плохие IP адреса, позволяет каждый раз динамически (экспоненциально) увеличивать время блокировки (banTime) в зависимости от количества предыдущих запретов (banCount). При этом также каждый раз уменьшая количество (maxRetry) возможных провальных попыток (failure) до следующего бана. Наглядно это можно увидеть на следующем примере:
2014-09-23 20:05:31,146 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (10 # 5 days, 8:04:55 -> 2014-09-29 04:10:24) 2014-09-23 20:05:31,120 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-23 20:20:29) 2014-09-23 15:30:32,625 fail2ban. actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-20 23:24:14,620 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (9 # 2 days, 16:06:18 -> 2014-09-23 15:30:31) 2014-09-20 23:24:14,569 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-20 23:39:13) 2014-09-20 21:10:36,708 fail2ban.actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-19 13:03:03,377 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (8 # 1 day, 8:07:34 -> 2014-09-20 21:10:36) 2014-09-19 13:03:03,361 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-19 13:18:02) 2014-09-19 12:38:17,743 fail2ban.actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-18 20:13:23,647 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (7 # 16:24:55 -> 2014-09-19 12:38:17) 2014-09-18 20:13:23,620 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 20:28:22) 2014-09-18 20:07:06,053 fail2ban.actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-18 12:03:53,282 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (6 # 8:03:14 -> 2014-09-18 20:07:05) 2014-09-18 12:03:53,266 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 12:18:51) 2014-09-18 11:22:40,704 fail2ban.actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-18 07:11:12,200 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (5 # 4:09:43 -> 2014-09-18 11:20:54) 2014-09-18 07:11:12,160 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 07:26:11) 2014-09-18 06:47:46,618 fail2ban.actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-18 04:37:29,972 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (4 # 2:02:16 -> 2014-09-18 06:39:44) 2014-09-18 04:37:29,967 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 04:52:28) 2014-09-18 04:32:49,491 fail2ban.actions [named-refused] Unban XXX. XXX.XX.XXX 2014-09-18 02:55:05,706 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (3 # 1:23:31 -> 2014-09-18 04:18:35) 2014-09-18 02:55:05,698 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 03:10:04) 2014-09-18 01:18:37,976 fail2ban.actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-18 00:40:09,592 fail2ban.observer [named-refused] Increase Ban XXX.XXX.XX.XXX (2 # 0:38:30 -> 2014-09-18 01:18:37) 2014-09-18 00:40:09,548 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 00:55:07) 2014-09-17 22:47:05,872 fail2ban.actions [named-refused] Unban XXX.XXX.XX.XXX 2014-09-17 22:32:05,804 fail2ban.actions [named-refused] Ban XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-17 22:47:05)
Ниже можно увидеть, как новый функционал отразился на решении собственно банить IP XXX.XXX.XX.XXX. В примере параметр maxRetry установлен равным 5. Так мы видим, что пока IP не признан плохим он был первый раз забанен после 5-ти попыток, второй раз, уже как плохой — после 3-х (каждая попытка была засчитана за 2), третий и т.д. — после 2-х (попытка идет за 3) и четвертый раз забанен сразу после первой попытки (считается сразу за 5-ть):
2014-09-18 04:37:29,155 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-18 04:37:28, 3 # -> 5, Ban 2014-09-18 04:37:29,148 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-18 04:37:28 ...... 2014-09-18 02:55:04,790 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-18 02:55:04, 2 # -> 3, Ban 2014-09-18 02:55:04,763 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-18 02:55:04 2014-09-18 02:22:37,683 fail2ban.observer [named-refused] Found XXX.Без этой логики подсчета failure, умные бот-сети научились подстраивать свою работу так, чтобы просто не попадать в бан. Когда я допилил таки и эту логику и выкатил в продакшн, за считанные дни я избавился практически от всей той нечисти, которую привык видеть годами в своих логах. Например, сейчас средний нормальный ежедневный прирост моих auth.log где то в районе 20-50 строк, раньше на некоторых серверах он был в сотни и тысячи раз больше.XXX.XX.XXX, bad - 2014-09-18 02:22:37, 2 # -> 3 2014-09-18 02:22:37,648 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-18 02:22:37 ...... 2014-09-18 00:40:08,908 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-18 00:40:08, 1 # -> 2, Ban 2014-09-18 00:40:08,625 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-18 00:40:08 2014-09-17 23:48:54,404 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-17 23:48:53, 1 # -> 2 2014-09-17 23:48:54,397 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 23:48:53 2014-09-17 22:49:04,647 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-17 22:49:03, 1 # -> 2 2014-09-17 22:49:04,620 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 22:49:03 ...... 2014-09-17 22:32:05,593 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 22:32:05 2014-09-17 22:06:29,952 fail2ban.filter [named-refused] Found XXX.XXX. XX.XXX - 2014-09-17 22:06:29 2014-09-17 21:47:43,439 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 21:47:42 2014-09-17 20:43:41,490 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 20:43:40 2014-09-17 16:44:35,130 fail2ban.filter [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 16:44:34
Пока что это development branch, лежит pull request-ом, релиз запланирован пока в версии 0.9.2.
Кому интересно, почитать подробнее про реализацию и историю решения можно здесь — Ban time incr by sebres · Pull Request #716 · fail2ban/fail2ban.
Однако пока эта версия ляжет апдейтом на ваш сервер, пройдет еще немало времени — пока релиз выйдет в mainline, пока его в дистрибутивы возьмут… История длинная, например тот же debian все еще использует 0.8.x — собственно поэтому и статья. Так что качаем руками, устанавливаем… профит.
Взять эту версию можно здесь fail2ban-ban-time-incr.zip (sebres master branch).
Порт для debian-ов: ban-time-incr-debian.zip (merged master debian branch, и хоть и не main line — буду стараться по возможности поддерживать ветку актуальной).
Установить его довольно просто. Если у вас уже до того был fail2ban, установленный из дистрибутива, сохраняем из «/etc/fail2ban/» старые «fail2ban.local» и «jail.local» (Ну и лучше старые «fail2ban.conf» и «jail.conf»). Я бы на всякий случай (из-за возможных личных изменениях в filter и action) сохранил бы куда-нибудь весь каталог «/etc/fail2ban/».
Далее сносим старый дистрибутивный fail2ban, например:
sudo service fail2ban stop sudo apt-get remove fail2banСобственно установка:
cd /tmp unzip ~/downloads/fail2ban-ban-time-incr. zip cd fail2ban-ban-time-incr/ sudo python setup.py install[UPD] Иногда на некоторых дистрибутивах, при ручной установке, почему-то не устанавливается сервис (например нет файла
/etc/init.d/fail2ban
) — и соответственно через сервис не (авто)стартует, только через fail2ban-client start
.[Что делать…]Это можно поправить копированием из дистрибутива или например из архива (потом не забываем поправить права):cd /tmp/fail2ban-ban-time-incr-debian sudo cp /etc/init.d/fail2ban ~/init.fail2ban.org sudo cp ./files/debian-initd /etc/init.d/fail2ban chmod u+x,g+x,o+x /etc/init.d/fail2banИ проверить внутри путь к fail2ban-client (
which fail2ban-client
):— при
/usr/local/bin/fail2ban-client
— DAEMON=/usr/local/bin/$NAME-client
— при
/usr/bin/fail2ban-client
— DAEMON=/usr/bin/$NAME-client
Не забываем проверить автозапуск сервиса (update-rc. d, rcconf, file-rc… любимое подставить).
[/UPD]
Теперь чтобы заработал новый функционал, нужно в вашем jail.local в [default] (либо для каждой конкретной jail) добавить опцию: bantime.increment = true
. Пример и описание можно пока найти в «jail.conf».
Некоторое здесь кратко:
bantime.rndtime
— максимальное время, используется для добавления кbanTime
случайного времени, для предотвращения «умных» бот-сетей вычислять точное время, когда IP разблокируется снова. Примерbantime.rndtime = 10m
bantime.factor
— коэффициент для вычисления экспоненты роста для формулыbantime.formula
или множителейbantime.multipliers
, по умолчанию значение коэффициента 1, что соответствует увеличению времени запрета на 1, 2, 4, 8, 16… Увеличивая этот параметр для некоторых jail, можно увеличивать время блокировки более агрессивно.bantime.formula
— используется по умолчанию для вычисления следующего значения времени запрета, значение по умолчанию:bantime. formula = ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor
Тот же рост времени запрета будет достигнут используя множителиbantime.multipliers
равные 1, 2, 4, 8, 16, 32…
Пример более агрессивной формулы для фактора «1» и имеет те же значения роста только для фактора равного «2.0 / 2.885385″:bantime.formula = ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)
bantime.multipliers
— параметр может используется вместо формулы дискретно для вычисления следующего значения времени запрета. Значение множителя равное «-1» (может стоять только в конце списка) и заносит адрес в перманентный бан (до ручного разблокирования).
Пример 1:bantime.multipliers = 1 2 4 8 16 32 64
— увеличивает время запрета на 1, 2, 4,… и если последний ban count был больше последнего индекса мультипликаторов, то будет всегда использован последний множитель (64 в примере), что при факторе равном «1» и оригинальном времени запрета (10 минут) — соответствует 10. 6 часам.
Пример 2:bantime.multipliers = 1 5 30 60 300 720 1440 2880
— может использоваться для небольшого начального времени запрета (bantime = 60) — т.к. увеличение становится более агрессивным, имеем bantime равный: 1 мин, 5 мин, 30 мин, 1 час, 5 часов, 12 часов, 1 день, 2 дня соответственно.
fail2ban-client set $JAIL unbanip $IPЯ для тестирования регулярок использую fail2ban-regex, а для теста работоспособности что-нибудь типа:
logger -t 'test:auth' -i -p auth.info "pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser=admin rhost=1.2.3.4"Не забываем про старт:
sudo service fail2ban startВот собственно и все, теперь надеюсь ваш сервер стал еще чуточку защищенней. Ну а вы не ленитесь и поглядывайте все-таки в логи (доверяй, но проверяй).
P.S. Стандартная приписка: Fail2Ban is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. Короче говоря — пользуйтесь на здоровье, но на свой страх и риск…
И да пребудут ваши сервера в безопасности.
P.P.S. Да чуть не забыл, у меня тут назапланировано что-то допилить, что-то уже готово, нужно просто оформить нормально и выложить, так вот — опрос «Что по вашему следовало бы (до)делать в первую очередь».
fail2ban status — вывести статистику по блокировкам
fail2ban status позволяет получить подробную информацию по подключениям, заблокированным пакетом. Как аргумент передается имя сервиса.
Вывести список правил, используемых fail2ban на сервере
fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
По умолчанию это только SSH.
Просмотреть статус и статистику по службе sshd контролируемой fail2ban.
fail2ban-client -v status sshd
Loading configs for fail2ban under /etc/fail2ban
Loading files: [‘/etc/fail2ban/fail2ban.conf’]
Loading files: [‘/etc/fail2ban/fail2ban.conf’]
Using socket file /var/run/fail2ban/fail2ban.sock
Using pid file /var/run/fail2ban/fail2ban.pid, [INFO] logging to /var/log/fail2ban.log
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Если в момент выполнения команды есть заблокированные IP адреса, с которых шли попытки подбора паролей — они будут указаны.
Можно использовать fail2ban-client чтобы снять блокировку
fail2ban-client set ssh unbanip 111.111.111.111
Без этого она будет снята автоматически через несколько минут или десятков минут, в зависимости от настроек.
Разблокируют адреса часто через iptables напрямую, fail2ban является просто оберткой парсящим лог и добавляющим правила в iptables.
Дополнительные сервисы при необходимости добавляются в каталог /etc/fail2ban/jail.d/
ls /etc/fail2ban/jail.d/
defaults-debian.conf
В нем на Debian изначально один файл, который включает отслеживание службы SSH
cat /etc/fail2ban/jail.d/defaults-debian.conf
[sshd]
enabled = true
Можно добавить дополнительные, сама конфигурация находится в /etc/fail2ban/jail.conf. В файле есть шаблоны для phpmyadmin, zoneminder и других сервисов.
В CentOS в каталоге по умолчанию создан файл 00-firewalld.conf, он обеспечивает взаимодействие с сетевым фильтром firewalld, который используется для дистрибутива.
Иногда при помощи регулярных выражений настраивают блокировку попыток подбора пароля к административному разделу сайта и добавляют шаблон в каталог /etc/fail2ban/jail.d.
Про блокировку по адресу в iptables.
Сказать спасибоCategories: Безопасность
Fail2ban — ArchWiki
Fail2ban сканирует лог-файлы (например, /var/log/httpd/error_log
) и блокирует IP-адреса, которые показывают вредоносные признаки, такие как слишком много неудачных паролей, поиск эксплойтов и т. д. Обычно Fail2ban затем используется для обновления правила брандмауэра для отклонения IP-адресов в течение определенного периода времени, хотя также могут быть настроены любые другие произвольные действия (например, отправка электронной почты).
игнорировать
.Установка
Установите один из следующих пакетов:
- fail2ban — Последняя стабильная версия.
- fail2ban-git AUR — Последняя фиксация на мастере.
Использование
Настройка Fail2ban и включение/запуск fail2ban.service
.
fail2ban-client
Fail2ban-client позволяет отслеживать джейлы (перезагрузка, перезагрузка, статус и т. д.), просматривать все доступные команды:
$ клиент fail2ban
Для просмотра всех включенных джейлов:
# статус клиента fail2ban
Для проверки состояния тюрьмы, например. для sshd :
# fail2ban-client status sshd
Статус для джейла: sshd |- Фильтр | |- В настоящее время не удалось: 1 | |- Всего неудачно: 9 | `- Журнал соответствует: _SYSTEMD_UNIT=sshd. service + _COMM=sshd `- Действия |- В настоящее время забанено: 1 |- Всего забанено: 1 `- Список запрещенных IP-адресов: 0.0.0.0
Для компактной версии для всех джейлов, включая забаненные IP:
# fail2ban-клиент забанен
[{'sshd': ['192.168.100.50']}, {'apache-auth': []}]
Конфигурация
Эта статья или раздел нуждается в дополнении.
Причина: Добавить примечание о dbpurgeage
, см. [1]. (Обсудить в Talk:Fail2ban) Из-за возможности создания файлов Pacnew и Pacsave для /etc/fail2ban/jail.conf
во время обновления, jail.conf(5) §ФОРМАТ ФАЙЛОВ КОНФИГУРАЦИИ рекомендует пользователям создать /etc/fail2ban/jail.local
для «упрощения обновлений».
Например, чтобы изменить время бана по умолчанию на 1 день:
/etc/fail2ban/jail.local
[ПО УМОЛЧАНИЮ] bantime = 1d
Или создайте отдельные файлы name .local
в каталоге /etc/fail2ban/jail. d
, например /etc/fail2ban/jail.d/sshd.local
.
Перезагрузите fail2ban.service
, чтобы применить изменения конфигурации.
Включение джейлов
По умолчанию все джейлы отключены. Добавьте enabled = true
к джейлу, который вы хотите использовать, например чтобы включить джейл OpenSSH:
/etc/fail2ban/jail.local
[sshd] enable = true
См. #Пользовательская тюрьма SSH.
Получение оповещения по электронной почте
Если вы хотите получать электронное письмо, когда кто-то был забанен, вам необходимо настроить SMTP-клиент (например, msmtp) и изменить действие по умолчанию, как указано ниже.
/etc/fail2ban/jail.local
[ПО УМОЛЧАНИЮ] destemail = ваше имя@example.com отправитель = ваше имя@example.com # чтобы забанить и отправить электронное письмо с отчетом whois на destemail. действие = %(action_mw)s # то же, что и action_mw, но также отправляет соответствующие строки журнала #action = %(action_mwl)s
Брандмауэр и службы
По умолчанию Fail2ban использует iptables. Однако настроить большинство брандмауэров и служб несложно. Например, чтобы использовать nftables:
/etc/fail2ban/jail.local
[ПО УМОЛЧАНИЮ] запрет = nftables banaction_allports = nftables[type=allports]
См. /etc/fail2ban/action.d/
для других примеров, например. ufw.conf.
Советы и рекомендации
Пользовательская тюрьма SSH
Предупреждение: Если злоумышленник знает ваш IP-адрес, он может отправлять пакеты с поддельным заголовком источника и заблокировать ваш IP-адрес от сервера. Ключи SSH обеспечивают элегантное решение проблемы грубой силы без этих проблем.
Отредактируйте /etc/fail2ban/jail.d/sshd.local
, добавьте этот раздел и обновите список доверенных IP-адресов в игнорировать
:
/etc/fail2ban/jail.d/sshd.local
[sshd] включено = верно фильтр = sshd запрет = iptables серверная часть = системный максимальная попытка = 5 время нахождения = 1д бантайм = 2 нед ignoreip = 127. 0.0.1/8Примечание:
- Возможно, потребуется установить
LogLevel VERBOSE
в/etc/ssh/sshd_config
, чтобы разрешить полный мониторинг fail2ban, так как в противном случае могут возникнуть проблемы с паролем. быть зарегистрированы неправильно. - Fail2ban поддерживает IPv6, начиная с версии 0.10. Соответственно настройте свой брандмауэр, например. запустить/включить
ip6tables.service
. - При использовании пространств имен журналов (добавляя
LogNamespace= something
в файл модуля) вы можете заставить fail2ban читать эти журналы, установивbackend
следующим образом:backend = systemd[journalfiles="/var/log/journal /*. что-то /system.journal"]
.
- Если вы используете внешние интерфейсы iptables, такие как ufw, можно использовать
banaction = ufw
вместо использования iptables. - При использовании Shorewall можно использовать
banaction = Shorewall
, а также установитьBLACKLIST
наALL
в/etc/shorewall/shorewall.conf
, в противном случае правило, добавленное для запрета IP-адреса, будет влиять только на новые соединения.
Бэкенд Systemd: фильтрация journald
При использовании бэкенда systemd для повышения производительности настройте фильтр с journalmatch
. Например, чтобы анализировать только сообщения журнала уровня ядра:
9.*DROP_.*SRC=<АДРЕС> DST=.*$
journalmatch = _TRANSPORT=kernel
См. также systemd.journal-fields(7).
Защита службы
В настоящее время Fail2ban должен запускаться как root . Поэтому вы можете рассмотреть возможность усиления процесса с помощью systemd.
Создайте вставной файл конфигурации для fail2ban.service
:
/etc/systemd/system/fail2ban.service.d/override. conf
[Служба] Приватные устройства=да PrivateTmp=да ProtectHome=только для чтения ProtectSystem=строгий ReadWritePaths=-/var/run/fail2ban ReadWritePaths=-/var/lib/fail2ban ReadWritePaths=-/var/log/fail2ban ReadWritePaths=-/var/spool/postfix/maildrop ReadWritePaths=/run/xtables.lock CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW
Параметры CapabilityBoundingSet
CAP_DAC_READ_SEARCH
предоставят Fail2ban полный доступ для чтения ко всем каталогам и файлам. CAP_NET_ADMIN
и CAP_NET_RAW
позволяют Fail2ban работать на любом брандмауэре с интерфейсом командной строки. См. возможности (7) для получения дополнительной информации.
При использовании ProtectSystem=strict
иерархия файловой системы будет доступна только для чтения, ReadWritePaths
позволяет Fail2ban иметь доступ для записи по требуемым путям.
Создайте /etc/fail2ban/fail2ban. local
с правильным путем logtarget
:
/etc/fail2ban/fail2ban.local
[Определение] logtarget = /var/log/fail2ban/fail2ban.log
Создайте каталог /var/log/fail2ban/
как root.
Наконец, перезагрузите демон systemd, чтобы применить изменения устройства, и перезапустите fail2ban.service
.
См. также
- Использование Fail2Ban Jail для добавления пользователя в белый список
- Оптимизация фильтров Fail2Ban
- Fail2Ban и sendmail
- Fail2Ban и iptables
- Fail2Ban 0.8.3 Howto
- Мониторинг журнала fail2ban
Служба Failtoban не будет продолжать работать — Безопасность
cdsJerryw (cdsJerryw) 1
Я использую 15.0.17.37 с Asterisk 13. 38.2
Моя панель управления показывает, что служба Fail2ban не запущена. Когда я перехожу на страницу, чтобы перезапустить ее, я вижу уведомление о недавнем обновлении, поэтому я очистил кеш и обновил страницу. Я все еще не могу заставить его продолжать работать. Я даже пытался использовать совершенно другой браузер, но я все еще не могу заставить его работать. Есть ли что-то еще, что мне не хватает? Я попытался получить файл журнала при перезапуске службы, но ничего в нем не вижу, поэтому, возможно, я получаю неправильные журналы. Как мне заставить эту службу продолжать работать?
2305 [2021-07-01 10:13:38] VERBOSE[12117] chan_iax2.c: зарегистрирован IAX2 на «204.16.90.9:4569», который видит нас как xx.xxx.xxx.xx:4569 без сообщений ожидающий 2306 [2021-07-01 10:28:21] VERBOSE[12045] asterisk.c: Удаленное подключение UNIX 2307 [2021-07-01 10:28:21] VERBOSE[8592] asterisk.c: удаленное соединение UNIX разорвано 2308 [2021-07-01 10:28:21] VERBOSE[12045] asterisk.c: Удаленное подключение UNIX 2309 [2021-07-01 10:28:21] VERBOSE[8594] asterisk. c: удаленное соединение UNIX разорвано 2310 [2021-07-01 10:28:21] VERBOSE[12045] asterisk.c: Удаленное подключение UNIX 2311 [2021-07-01 10:28:21] ПОДРОБНО[8596] asterisk.c: удаленное соединение UNIX отключено
jfinstrom (Джеймс Финстром) 2
Эти журналы являются нормальными и не имеют отношения к вашей проблеме. Я считаю, что у fail2ban есть свои журналы.
cdsJerryw (cdsJerryw) 3
Знаете ли вы, как я могу получить к ним доступ, чтобы определить, почему он не работает?
Джфинстром (Джеймс Финстром) 4
Я не рядом с системой, но думаю, что /var/log/fail2ban …
cdsJerryw (cdsJerryw) 5
Самый последний журнал датирован пару дней назад. Я вижу ошибку вверху страницы?
2021-06-11 03:11:01,831 fail2ban.server [11047]: ИНФОРМАЦИЯ Цель ведения журнала изменена на /var/log/fail2ban.log для Fail2ban v0.8.14
2021-06-11 03:11:03,018 fail2ban.filter [11047]: ОШИБКА Невозможно открыть /var/log/fail2ban.log-20210325
2021-06-11 03:11:03,018 fail2ban.filter [11047]: ОШИБКА [Errno 2] Нет такого файла или каталога: ‘/var /log/fail2ban.log-20210325’
Трассировка (последний последний вызов):
Файл «/usr/share/fail2ban/server/filter.py», строка 556, в getFailures
has_content = container. open()
Файл «/usr/share/fail2ban/server /filter.py», строка 637, в open
self.__handler = open(self.__filename)
IOError: [Errno 2] Нет такого файла или каталога: ‘/var/log/fail2ban.log-20210325’ 2021-06 -28 09:19:47,633 fail2ban.server [11047]: ИНФОРМАЦИЯ Остановка всех тюрем
И так продолжается до тех пор, пока не заканчивается вот этим:
2021-06-28 09:19:48,338 fail2ban.jail [11047]: INFO Jail ‘apache-tcpwrapper’ остановлен
2021-06-28 09:19:49,257
2021-06-28 09:19:50,249 fail2ban.jail [11047]: INFO Jail ‘ssh-iptables’ остановлен ‘ остановлен
2021-06-28 09:19:51,188 fail2ban.jail [11047]: INFO Jail ‘pbx-gui’ остановлен
2021-06-28 09:19:51,596 fail2ban.jail [11047]: INFO Jail ‘звездочка -iptables’ остановлен
2021-06-28 09:19:52,410 fail2ban.jail [11047]: INFO Jail ‘vsftpd-iptables’ остановлен
2021-06-28 09:19:52,411 fail2ban.server [11047]: INFO Exiting Fail2ban
долисек (Крис Долез) 6
попробуйте удалить старые журналы и перезапустить службу
[pbx]# mv /var/log/asterisk/fail2ban.* /tmp && мв /var/log/asterisk/fail2ban-* /tmp
затем
перезапуск службы fail2ban
монитор с
состояние службы fail2ban
cdsJerryw (cdsJerryw) 7
Я сделал кое-что радикальное. Я перезапустил всю машину. Я, конечно, немного поубивал всех, но, похоже, это сработало. Fail2ban снова работает
jfinstrom (Джеймс Финстром) 8
Нет ничего хуже, чем сбросить счетчик времени безотказной работы, лол. Но иногда это необходимо
1 Нравится
(cdsJerryw) 9
Забавно, как это становится важным для нас, не так ли? Но да, мне было жаль видеть, что он был сброшен. Я езжу на Chevy Volt со средним расходом 135 миль на галлон за всю жизнь. Я ненавижу видеть дни, когда двигатель действительно запускается, хотя это та самая причина, по которой у меня есть двигатель в первую очередь.
Я просто счастлив, что это сработало. Часто перезагрузка не исправляет то, что было не так.
сорвани (Джаред Буш) 10
Большой счетчик времени безотказной работы неисправен. Откуда вы вообще знаете, что система действительно загрузится в следующий раз? Вы не знаете.
Я обновляю системы с помощью скрипта. Конец скрипта проверяет меня…
Stewart1 (Стюарт) 11
Согласен, но сама перезагрузка имеет некоторые риски и влечет за собой некоторые административные хлопоты. IMO 90 или 180 дней — разумный компромисс.
cdsJerryw (cdsJerryw) 12
Может быть, это только я, но каждый раз, когда мне приходится перезагружать систему, это нервное время. Неважно, сколько времени прошло с момента последней загрузки. Каждый раз задерживаю дыхание.
В моем случае ситуация ухудшилась из-за моих ограниченных знаний о Linux и отсутствия уверенности в том, что мои резервные копии верны или будут правильно восстановлены.