Отказаться от.htaccess с заблокированным списком IP-адресов от stopforumspam.com не работает?

Поэтому я пытаюсь использовать.htaccess, чтобы запретить большой список (50 000) подозрительных спам-IP-адресов, которые я получил с этого сайта.

размер списка составляет почти 1 МБ, когда я добавляю директиву deny from для каждого адреса в списке... но когда я применяю загруженный файл.htaccess к серверу, это приводит к невозможности загрузки страниц с ошибкой 403.

мои вопросы...

  1. есть ли ограничение на размер файла.htaccess?
  2. это лимит на количество deny from IP-адреса, которые могут содержаться в файле?
  3. Есть ли лучший способ сделать то, что я пытаюсь сделать на уровне сервера (я понимаю, что я мог проверить список в веб-приложении во время отправки, но я пытаюсь узнать материал)

2 ответа

Решение

Размер файла.htaccess не ограничен, кроме пределов размера файла ОС (обычно 2 ГБ или более). Однако при использовании файлов.htaccess возникают серьезные проблемы с производительностью из-за того, что Apache обрабатывает их рекурсивно (обход дерева каталогов) при каждой загрузке страницы. Фактически, Apache рекомендует не использовать.htaccess, за исключением случаев, когда это абсолютно необходимо, например, нет доступа к конфигурации верхнего уровня.

Стандартный способ обработки IP-блокировки заключается в iptablesвстроенный брандмауэр Linux. Вы можете использовать другие приложения для управления iptables, такие как Fail2ban. Посмотрите этот пост в блоге, чтобы узнать, как сделать это с Fail2ban на постоянной основе. Вы также можете заблокировать их, добавив маршрут: route add -host 192.168.0.123 reject, Помните, что вы можете использовать целые классы IP-адресов со всеми из них, поэтому вместо перечисления 192.168.0.1, 192.168.0.2,... 192.168.0.254 вы можете указать сеть: 192.168.0.0/24.

Какой бы метод вы ни использовали, помните, что нужно быть очень осторожным, чтобы не блокировать себя, особенно от таких служб, как SSH.

Есть ли лучший способ сделать то, что я пытаюсь сделать на уровне сервера

Я не знаю, лучше ли это, но я предпочитаю это:

  1. создать для каждого IP новый файл, структурированный как deny/198/198.51.100.201
  2. используйте следующий код в вашем.htaccess для блокировки IP:

    RewriteCond %{REMOTE_ADDR} ^([0-9]{1,3})\.
    RewriteCond /usr/www/{your_path}/deny/%1/%{REMOTE_ADDR} -f
    RewriteRule . - [F]
    

Я никогда не тестировал его, но отказываюсь верить, что быстрее сравнивать каждый запрос с 50000 IP-адресов, а не пользоваться кешем inode файловой системы. Или строит Apache индекс перечисленных IP-адресов?!

В конце концов, мне было не интересно это знать, потому что я использую эту технику, чтобы предложить своим посетителям капчу, чтобы разблокировать себя, если они были заблокированы случайно. Другие методы (allow, deny, iptables...) не предлагал такой функциональности.

Примечание: я использовал подпапку для первого блока ip, чтобы избежать более 32000 файлов в папке.

Другие вопросы по тегам