Я использую fail2ban на всех серверах с общедоступными службами, и мне интересно:
- Существует ли простой способ обмена запрещенными IP-адресами между хостами, которые я контролирую?
- Есть ли служба сбора и публикации этих данных?
Я получаю бесчисленные попытки входа в систему с первого дня установки этого сервера.
Ответы:
Однажды я увидел систему централизации данных fail2ban на этом сайте и создал модифицированную версию. База данных такая же, но я изменил и создал несколько скриптов.
Моя система имеет 4 компонента:
база данных fail2ban
Это база данных MySQL, содержащая только одну таблицу
erp_core_fail2ban
:fail2ban.php
Каждый раз, когда хост забанен, он заполняет базу данных:
cron2ban
Вы помещаете это в crontab каждую минуту. Он извлечет последние добавленные хосты и забанит их.
PHPConfig
Этот файл идет в / etc / fail2ban и имеет конфигурацию базы данных и выбор тюрьмы.
Создайте эти файлы и измените конфигурацию с fail2ban:
После строки с
actionban = .....
новой строкой, вставленной для вызова скрипта PHP:/root/fail2ban.php <name> <protocol> <port> <ip>
Использование этой структуры на всех ваших серверах гарантирует, что каждый раз, когда один хост блокируется на одном сервере, все остальные серверы также будут его блокировать.
источник
Поэтому я провел ряд исследований о том, как это сделать после того, как один и тот же ip-адрес попал в мой кластер веб-серверов один за другим. Поскольку я использую AWS, я подумал, что может быть простой способ, и он прекрасно работает в первые два дня тестирования 5 серверов.
Первое, что я рекомендую, это временно отключить SELinux, мы разберемся с ним в конце. Я не эксперт SELinux, но то, что я сделал, работает до сих пор.
Основное требование - общий источник файлов, я использую AWS EFS. Как только новый диск подготовлен и смонтирован, я изменил logtarget в /etc/fail2ban/fail2ban.conf на подпапку на диске EFS.
Затем я написал простой фильтр и поместил его в /etc/fail2ban/filter.d/fail2ban-log.conf
Добавлен фильтр в /etc/fail2ban/jail.local
Потом перезапустил fail2ban
Все идет нормально! Нет, самая болезненная часть - это SELinux. После того, как я позволил fail2ban немного поработать, я запустил эту команду, которая пропустит fail2ban через фильтры.
Audit2allow скажет вам, чтобы запустить эту команду
Я все еще проверяю свои журналы SELinux тут и там, чтобы увидеть, есть ли еще отказы. Если у кого-нибудь есть совет, как получить этот чистый SELinux другим методом, это было бы здорово.
На этом этапе я все еще получал ошибки при перезапуске fail2ban. Существует ошибка при использовании action = action_mwl в jail.local. После небольшого поиска я нашел это, которое работает до сих пор. Из того, что я прочитал, из-за разрывов строк в директиве logpath, указывающих на несколько файлов. Я пробовал с запятыми, пробелами и т. Д. С action_mwl ничего не получалось.
Не забудьте снова включить SELinux!
источник
Я только что реализовал это, и до сих пор, кажется, работает хорошо. Однако мне пришлось обновить некоторые из php, потому что сценарии в исходном ответе используют устаревшие функции.
Вот обновленные скрипты
phpconfig.php
fail2ban.php
cron2ban.php
Кроме того, где бы вы ни размещали действие fail2ban.php, оно должно иметь отступ, равный строке над ним. Например:
В противном случае fail2ban не запустится. Я надеюсь, что это помогает любому, кто пытается развернуть это.
источник
Альтернативой
fail2ban
является DenyHosts, который поставляется с функцией синхронизации. Установка очень похожаfail2ban
, см . Учебник Cyberciti для более подробной информации .Проблема заключается в том, что служба синхронизации централизована, а исходный код на стороне сервера, по-видимому, недоступен, поэтому вы не можете легко запустить собственную службу DenyHosts, и вам приходится полагаться на сторонних разработчиков (что может подойти для некоторых случаи использования).
источник
Да и да. Оба могут быть сделаны.
Вам нужно найти подходящий механизм, чтобы поделиться списком IP-адресов. Например, если вы используете AWS, вы можете воспользоваться s3. Вы можете использовать rsync между хостами Linux или базу данных, общую для всех хостов. Вы можете запустить сервис с вашим любимым языком программирования, который предоставляет спокойный API, выбор за вами.
С точки зрения совместного использования списка общедоступным союзником, вы можете создать веб-сайт и разместить простой текстовый файл, некоторые уже предоставляют такие списки (не из источников, которые я знаю). Как создать свой собственный сайт / сервис, было бы за рамками ответа, однако это не должно быть очень сложно сделать.
источник
Достаточно ручная настройка будет состоять в том, чтобы изменить конфигурацию, которая вызывает
iptables
обновление правил, чтобы она вызывала собственный сценарий, который просматривает список хостов (считывается из файла?) И выполняетiptables
вызовы для каждого через SSH. Вам потребуется авторизация на основе ключей между всеми хостами, настроенными для этого. Инструменты автоматизации администратора, такие как puppet, могут упростить настройку и обслуживание. Это будет не очень эффективно, но если вы не увидите огромное количество зондирующего трафика (и / или у вас не будет большого количества хостов), то я уверен, что это будет достаточно хорошо. Если у вас есть только несколько хостов, вам даже не нужно перебирать файл: настройте каждый так, чтобы он вызывал только остальных по порядку. Сценарий будет минимальным.Без сомнения, есть много способов. Пусть приведенный выше скрипт (-ы) перенесет данные в БД, и клиенты будут с них читать, опрашивая новые правила и запуская их по мере их поступления. Простое «запустить правило таким, каким вы его видите» не будет идеальным, если многие хосты предоставляют информацию, например, в этом случае:
но это не должно быть серьезной проблемой, и если вы станете немного умнее с базой данных, вы сможете более аккуратно управлять несколькими отправками, если решите, что это того стоит.
Запуск этого как общедоступной службы откроет вам мир административных хлопот, хотя:
источник