Простая защита от DDoS в FreeBSD

У меня много запросов из дата-центров на мой веб-сервер во FreeBSD, и иногда у меня возникают проблемы с производительностью моих веб-проектов. Добавление в список IPFW всех дата-центров IP невозможно.

Я не хочу использовать большие системы Anti-DDoS, вместо этого хочу создать bash-скрипт для получения соединений с моим сервером, фильтровать по IP и добавлять в IP-таблицу IPFW IP-адреса, которые теперь подключаются более чем в 5 потоках. Или может быть создание нескольких таблиц в IPFW и добавление по таблицам:

  • 0 < 5: — ничего
  • 5 < 10: — таблица 1 (бан 15 минут)
  • 10 < 15: — Таблица 2 (30 минут бана)
  • 15 < 20: — Таблица 3 (60 минут бана)
  • больше 20: — таблица 4 (запрет на 1 день)

Фильтр по IP должен пропускать IP-адреса Google и других поисковых систем по имени хоста.

Это мой скрипт для соединений grep и сортировки:

netstat -nptcp | egrep -v 'Active|Address' | awk '{print $5}' | cut -d. -f 1-4 | sort | uniq -c | sort -n | tail -n 30

Разбор файлов журналов — это тоже плохая идея, потому что файл журналов иногда бывает большим, и мне нужно на дополнительных ресурсах веб-сервера разбирать и сортировать.

Итак, я уже подумал, может быть, создание этого скрипта на PHP? Но если PHP падает, сервер не будет защищен.

Есть ли еще какие-то соображения, о которых мне нужно знать?

4

Решение

Выполнение этой работы на PHP будет плохой идеей; если у вас есть опыт работы с нижеприведенными скриптовыми интерфейсами, я настоятельно рекомендую это сделать; в противном случае у вас нет другого выбора, кроме PHP, в котором это можно сделать без особых проблем.

Сбой PHP-скрипта не такая уж большая проблема по сравнению с проблемами, перечисленными ниже.

  1. Вам нужно будет дать разрешение суперпользователя вашему PHP-скрипту, чтобы он мог получить доступ к системным ресурсам, что может быть очень плохо, если ваш сервер подключен к сети.
  2. PHP не сможет выполнять задачи системного уровня, такие как доступ к списку сетевых подключений, фильтрация и добавление их в конфигурацию брандмауэра для блокировки или так далее; это будет очень больно делать это.

Возможно, вы захотите попробовать BASH / Perl / Python, в зависимости от того, что вам удобно, и создать отдельный скрипт в песочнице (создайте пользователя и добавьте для него разрешение в sudoers только для необходимых задач и держите его подальше от пользователя, выполняющего вебсервер или любая другая задача в интернете)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]