поэтому я пытаюсь использовать .htaccess, чтобы заблокировать большой список (50 000) IP-адресов подозрительного спама, которые я получил от этот сайт.
список имеет размер почти 1M, когда я добавляю директиву deny from для каждого адреса в списке ... но когда я применяю загруженный файл .htaccess к серверу, он блокируется, и страницы не загружаются с ошибкой 403.
мои вопросы...
deny from
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 файлов в папке.
Нет никаких ограничений на размер файла .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.