Назад | Перейти на главную страницу

Лучший способ использовать большой черный список IP-адресов для запрета доступа к веб-серверу?

Есть ли эффективный и простой способ использования Черный список IP (как этот, но, возможно, в 2-3 раза больше, что нельзя упростить для CIDR), чтобы запретить доступ к веб сервер (либо lighttpd, либо Apache) с использованием стандартного программного обеспечения / пользовательского пространства (без перекомпиляции ядра) на Linux?

Насколько мне известно Deny правила в конфигурации Apache и iptables иметь линейное время поиска. Существуют модули ядра, которые эффективно обрабатывают большие списки IP-адресов, но их установка требует исправления ядра.

Вы можете попробовать использовать моблок (google it - пока не могу добавлять ссылки, новый пользователь). Отключите все загруженные черные списки и используйте только созданный вами локальный черный список. Возможно, вам потребуется добавить поддержку NFQUEUE (netlink queue) в ваше ядро, но она может уже быть там по умолчанию.

Общая настройка такова: для всех SYN-пакетов на портах, которые вы хотите фильтровать, используйте действие NFQUEUE netfilter, чтобы подтолкнуть их к моблоку в пользовательском пространстве. Moblock выполняет эффективное сопоставление и отправляет ответ ACCEPT или DROP на netlink.

Формат файла конфигурации моблока довольно прост: в каждой строке укажите имя и диапазон IP-адресов в виде 123.123.123.42-123.123.124.56. Когда moblock загружает диапазоны, он создает эффективную структуру данных для сопоставления с этими диапазонами. Когда пакет отбрасывается из-за совпадения, имя диапазона и фактический IP-адрес источника регистрируются (или нет, если вы отключите регистрацию совпадений).

Я использовал моблок в его конфигурации по умолчанию (загруженные списки блокировки) примерно с 230000 IP. диапазоны, и не наблюдали заметного снижения производительности (хотя фильтрация только пакета SYN важна для снижения трафика ядра / пользовательского пространства).

Одно предостережение: если моблок не запущен, я считаю, что действие NFQUEUE по умолчанию - DROP, что приводит к отказу в обслуживании вашего приложения. Тем не менее, у меня моблок работал без проблем более 6 месяцев. Тем не менее, вы можете настроить зонд мониторинга, который будет предупреждать вас, если заведомо исправный IP-адрес больше не может подключиться к: 80 на вашем сервере. Вы определенно не хотите использовать moblock для фильтрации ssh, если вы явно не добавили в белый список некоторые доверенные IP-адреса для восстановления в netfilter.

AFAIK запрещает правила в конфигурации Apache и iptables имеют линейное время поиска.

Вроде, как бы, что-то вроде. Вы можете использовать цепочки в IPTables, чтобы разбить его, т.е. упрощенный подход заключался бы в наличии цепочки для каждого блока адресов класса A (например, 1.0.0.0/8, 2.0.0.0/8 и т. Д.) И правил для этого блока внутри цепочки, что значительно сокращает время поиска (т.е. в худшем случае ~ 200 оценок правил для перехода к правилу класса A, а затем любое количество правил в этом блоке. Вы также можете использовать "iptables -L -v -n", чтобы увидеть какие наборы правил оцениваются наиболее интенсивно, и переместите их на первое место.Есть другие лучшие способы сделать это, это описано в документации iptables.

Да, в вашей системе должен быть /etc/hosts.allow. Взгляните, у него есть несколько очень простых примеров блокировки IP-адресов даже для каждой службы.

Короче говоря, в /etc/hosts.allow:

ALL : ALL : allow

httpd : /etc/hosts.httpd.deny : deny

sshd : /etc/hosts.sshd.deny : deny

Я думаю, вы не сможете этого сделать, не загрузив ядро.

ipset кажется хорошим решением.

Цитата с его веб-страницы:

Если хочешь

  • хранить несколько IP-адресов или номеров портов и сравнивать их с коллекцией по iptables одним махом;
  • динамически обновлять правила iptables для IP-адресов или портов без потери производительности;
  • выражать сложные наборы правил на основе IP-адресов и портов с помощью одного правила iptables и получать преимущества от скорости наборов IP

тогда ipset может быть подходящим инструментом для вас.

Вы также можете сделать это в .htaccess

Вот пример, который блокируется пользователем, но идея та же: http://jetfar.com/trap-content-scraper-spam-harvester-bots-using-honeypot-wordpress-htaccess/

AFAIK запрещает правила в конфигурации Apache и iptables имеют линейное время поиска.

Я бы попробовал это, а затем провел бы небольшое тестирование, прежде чем вы исключите это - влияние может быть незаметным, и его будет очень легко поддерживать.

Точно так же вы можете попробовать добавить список в /etc/hosts.deny

Я бы не стал предполагать, что быстрее, не тестируя сначала оба.

Ура / Ричи