Есть ли эффективный и простой способ использования Черный список 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
Я бы не стал предполагать, что быстрее, не тестируя сначала оба.
Ура / Ричи