Я использую длинный черный список CIDR, чтобы заблокировать доступ к сайту из нескольких стран, но мне нужно разрешить определенные IP-адреса в пределах заблокированных диапазонов CIDR. Вот отрывок из моего файла conf (это тот порядок, который я сейчас пытаюсь, хотя я также пытался переместить строки «разрешить» над строками «запретить»):
order allow,deny
deny from 27.116.56.0/22
deny from 58.147.128.0/19
deny from 61.5.192.0/20
deny from 83.140.0.0/16
# ...
allow from 83.140.19.38
Черный список работает нормально, но строки «разрешить» не учитываются, помещаю я их выше раздела «запретить» или ниже. Есть ли какая-то другая конфигурация, которая мне нужна, чтобы это работало? Документация Apache заставила меня поверить в то, что «разрешить» должно стоять после «запретить», но, похоже, в любом случае это не дает прямого ответа на этот вопрос.
Раздел руководства Apache на mod_authz_host поучительно здесь. Порядок ваших разрешений и запретов не имеет значения. С участием order allow,deny
, вы должны сопоставить хотя бы одну директиву allow и no deny, чтобы ваш запрос был принят. Я думаю ты хочешь order deny,allow
.
Apache сначала обрабатывает все директивы Deny и все Allow. Затем проходит через них правила сопоставления на основе оператора Order - последний матч выигрывает. Это означает, что ваш deny from 83.140.0.0/16
правило будет совпадать после ваш allow from 83.140.19.38
правило, и вам отказано в доступе. Чтобы решить эту проблему, измените порядок на Order Deny,Allow
.