Повторяет "Отклонить от хххх" и "Разрешить от всех" правильно

Я использую следующий синтаксис для блокировки некоторых IP-адресов из моего файла.htaccess:

DirectoryIndex index.php
order allow,deny
deny from 17.18.19.0
deny from 18.17.19.1
allow from all

и теперь я не уверен, смогу ли я вообще использовать это:

DirectoryIndex index.php
order allow,deny
deny from 18.17.19.1
allow from all
deny from 18.15.19.1
allow from all
deny from 18.18.19.1
allow from all

так я могу просто повторить эту структуру?

deny from x.x.x.x
allow from all

почему я спрашиваю? Потому что я нашел php-скрипт, который просто добавляет "Отклонить" в конце файла, и я не уверен, что мне нужна строка "разрешить из всех".

это может быть просто так?

DirectoryIndex index.php
order allow,deny
allow from all
deny from 17.18.19.0
deny from 18.17.19.1
deny from ... etc.

1 ответ

Решение

Прежде всего, эта страница документации хорошо объясняет вещи.

Следующая цитата взята из документации mod_authz_host

Директива Order вместе с директивами Allow и Deny управляет трехпроходной системой контроля доступа. При первом прохождении обрабатываются все директивы Allow или все Deny, как указано в директиве Order. Второй проход анализирует остальные директивы (Запретить или Разрешить). Третий проход применяется ко всем запросам, которые не соответствуют ни одному из первых двух.

Обратите внимание, что все директивы Allow и Deny обрабатываются, в отличие от типичного брандмауэра, где используется только первое совпадение. Последнее совпадение является эффективным (в отличие от типичного межсетевого экрана). Кроме того, порядок появления строк в файлах конфигурации не имеет значения - все разрешенные строки обрабатываются как одна группа, все запрещающие строки рассматриваются как другая, а состояние по умолчанию рассматривается само по себе.

Другими словами, если у вас есть Order Allow,Denyсначала все обработает Allow директивы, то все Deny директивы. Вы, вероятно, можете понять, что это не имеет значения, если у вас есть 1 Allow from all или 100 Allow from all директивы. Окончательный результат тот же, но при наличии 100 из этих директив вашему серверу потребуется больше времени для обработки. Затем он обработает все запрещающие директивы и при необходимости перезапишет только что выданное разрешение.

Поэтому вам просто нужен Order Allow,Deny директива и только одна Allow from all директивы. Какой бы скрипт вы ни использовали, можете просто добавить Deny директивы, как он считает нужным, и все будет работать, как ожидалось.

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