Отказаться от.htaccess с заблокированным списком IP-адресов от stopforumspam.com не работает?
Поэтому я пытаюсь использовать.htaccess, чтобы запретить большой список (50 000) подозрительных спам-IP-адресов, которые я получил с этого сайта.
размер списка составляет почти 1 МБ, когда я добавляю директиву deny from для каждого адреса в списке... но когда я применяю загруженный файл.htaccess к серверу, это приводит к невозможности загрузки страниц с ошибкой 403.
мои вопросы...
- есть ли ограничение на размер файла.htaccess?
- это лимит на количество
deny from
IP-адреса, которые могут содержаться в файле? - Есть ли лучший способ сделать то, что я пытаюсь сделать на уровне сервера (я понимаю, что я мог проверить список в веб-приложении во время отправки, но я пытаюсь узнать материал)
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.
Есть ли лучший способ сделать то, что я пытаюсь сделать на уровне сервера
Я не знаю, лучше ли это, но я предпочитаю это:
- создать для каждого IP новый файл, структурированный как
deny/198/198.51.100.201
используйте следующий код в вашем.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 файлов в папке.