Как можно заблокировать IP-адреса злоумышленников, основываясь на определённым путям в HTTP-запросах к веб-серверу?

Привет, всем! Я настроил Fail2Ban для защиты SSH, и он работает отлично — успешно блокирует нежелательные подключения. Однако меня беспокоят проблемы, связанные с NGINX или Caddy, где наблюдаются множество попыток взлома: запросы к `/.git/`, `../../../root`, `/Hey! We hire developers at example.com!/$EOF`, `tvoya_mamka/` и так далее. Это вызывает микро-DDOS и создает лишний шум в логах, что крайне неудобно.

У меня такой вопрос: <b>существует ли готовый WAF/Fail2Ban с предустановленными и регулярно обновляемыми известными паттернами</b> (их же, по сути, тысячи), который можно было бы просто развернуть и не беспокоиться о его работе и обновлении? Приятно было бы, если бы он также предоставлял отчеты о своей деятельности через Prometheus с помощью экспортера.

Я попробовал искать в интернете, но в большинстве случаев встречаю проекты, которые требуют настройки с нуля. Наиболее близкий вариант — это <a href="https://github.com/fabriziosalmi/caddy-waf" rel="nofollow">caddy-waf</a>, однако его <a href="https://github.com/fabriziosalmi/caddy-waf/issues/16" rel="nofollow">нужно пересобирать</a> под свою версию и, к тому же, WAF там фактически пуст. Что касается NGFW, они слишком сложны, а IPTables не предназначены для этой задачи. Fail2Ban требует самостоятельного наполнения и настройки для чтения логов Caddy.

Неужели нет готового решения для небольшого сервера?
  • 22 января 2025 г. 18:24
Ответы на вопрос 2
Привет! Понимаю ваши беспокойства относительно защиты вашего веб-сервера. Действительно, наличие большого числа нежелательных запросов создает нагрузку и потенциальные уязвимости. Вот несколько решений и подходов, которые могут помочь вам в борьбе с подобными угрозами:

### 1. **Готовые решения WAF**
Есть несколько WAF (Web Application Firewall), которые могут предоставить уже готовые правила и шаблоны для блокировки известных угроз:

- **ModSecurity** — это популярный WAF, который можно использовать с NGINX или Apache. Он поддерживает набор правил OWASP ModSecurity Core Rule Set (CRS), который регулярно обновляется. Вы можете настроить его для работы с вашим веб-сервером и использовать готовые правила для защиты от известных угроз.

- **Cloudflare** — если вы можете использовать сервисы CDN, такие как Cloudflare, они предлагают встроенный WAF с предустановленными правилами для остановки множества распространённых атак.

- **Sucuri** — также предоставляет WAF как услугу и может защитить ваш сайт от множества угроз, при этом обеспечивая отчетность.

### 2. **Fail2Ban с пользовательскими фильтрами**
Если вы хотите использовать Fail2Ban, вы можете создать свои собственные фильтры для NGINX или Caddy, основываясь на паттернах в логах. Например:

1. Создайте файл фильтра для Fail2Ban (например, `/etc/fail2ban/filter.d/nginx-custom.conf`):

   ```ini
   [Definition]
   failregex = ^<HOST>.*"(.*(\/\.git\/|\/\.\.|\/Hey! We hire developers|\/tvoya_mamka\/).*?)"
   ignoreregex =
   ```

2. Настройте jail для этого фильтра в `/etc/fail2ban/jail.local`:

   ```ini
   [nginx-custom]
   enabled = true
   filter = nginx-custom
   action = iptables[name=nginx-custom, port=http, protocol=tcp]
   logpath = /var/log/nginx/access.log
   maxretry = 3
   banaction = iptables-multiport
   findtime = 60
   bantime = 3600
   ```

После этого Fail2Ban будет отслеживать указанные паттерны и блокировать IP-адреса по заданным критериям.

### 3. **Прометей и Экспортеры**
Чтобы интегрировать ваши решения с Prometheus, вы можете использовать экспортеры, такие как:

- **Pushgateway**: Если вы используете скрипты для мониторинга состояния вашего сервера, вы можете отправлять данные о заблокированных IP-адресах в Pushgateway, откуда Prometheus может их забирать.

- **Встраивание с помощью метрик**: Если используете ModSecurity, вы можете исследовать, есть ли доступны метрики для интеграции с Prometheus. Некоторые решения могут иметь встроенные экспортеры.

### 4. **Автоматизированные обновления**
Если вы используете ModSecurity, вы можете настроить систему для автоматического обновления правил, используя cron для регулярного скачивания обновлений с GitHub или другого места.

### Заключение
Каждое из этих решений имеет свои плюсы и минусы. Ваш выбор зависит от того, насколько глубоко вы хотите погрузиться в настройку и администрирование. Если вам нужно решение "из коробки", смотрите в сторону облачных WAF, таких как Cloudflare или Sucuri. Если вы предпочитаете больше контроля, используйте ModSecurity в связке с Fail2Ban и настройте фильтры под свои нужды.
Похожие вопросы