Блокировка доступа по IP к конкретной странице

12
Brat_Sergij
На сайте с 26.11.2015
Offline
362
1817

Добрый день. Есть сайт на Wordpress. Регулярно с целого ряда IP-адресов только на одну страницу сайта идет отправка массового числа обращений (до 5 в секунду), что приводит в резкому росту нагрузки на сервер.

Вопрос: как можно запретить группе IP-адресов доступ не ко всему сайту, а только к отдельной странице? Вроде бы это можно сделать через HTACCESS, но ни я не обладаю соответствующими знаниями, ни хостер (они говорят, что это не их проблема, а я должен решать её сам).

Нагуглил такую конструкцию, которую надо дописать в HTACCESS:

RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$ - IP, который надо блокировать

RewriteCond %{REQUEST_URI} ^stranica-primer\.html - страница, к которой надо блокировать доступ

RewriteRule ^.*$ - [F]

Однако почему-то данная конструкция у меня не работает... Помогите разобраться, пожалуйста.

SeVlad
На сайте с 03.11.2008
Offline
1609
#1
Brat_Sergij:
ак можно запретить группе IP-адресов доступ не ко всему сайту, а только к отдельной странице? Вроде бы это можно сделать через HTACCESS, но ни я не обладаю соответствующими знаниями, ни хостер (они говорят, что это не их проблема, а я должен решать её сам).

Закрыть от всех, кроме нужных (в Allow from)

<Files "wp-login.php">
Order Deny,Allow
Deny from all
Allow from xxx.xxx.xxx.xxx
Allow from xxx.xxx.xxx.xxx
</Files>

Открыть всем, кроме некоторых (Deny from ):

<Files "wp-login.php">
Order Allow, Deny
Allow from all
Deny from xxx.xxx.xxx.xxx
Deny from xxx.xxx.xxx.xxx
Deny from xxx.xxx.xxx.xxx
</Files>
Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
J
На сайте с 20.02.2014
Offline
120
jkm
#2

В переменной %{REQUEST_URI} адрес начинается с /.

RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$

RewriteCond %{REQUEST_URI} ^/stranica-primer\.html

RewriteRule ^.*$ - [F]

Можно чуть сократить.

RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$

RewriteRule ^stranica-primer\.html$ - [F]

Используя флаг [OR] можно добавить ещё правил с ip.


RewriteCond %{REMOTE_ADDR} ^11\.22\.22\.22$ [OR]
RewriteCond %{REMOTE_ADDR} ^33\.22\.22\.22$ [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$
RewriteRule ^stranica-primer\.html$ - [F]


RewriteCond %{REMOTE_ADDR} =11.22.22.22 [OR]
RewriteCond %{REMOTE_ADDR} =33.22.22.22 [OR]
RewriteCond %{REMOTE_ADDR} =85.26.232.185
RewriteRule ^stranica-primer\.html$ - [F]

Ну и ставить блокировку выше остальных правил.

Brat_Sergij
На сайте с 26.11.2015
Offline
362
#3

SeVlad, это не то.

jkm, спасибо. Перепробовал все Вами указанные варианты, в итоге рабочим оказался почему-то только такой:

RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

При остальных вариантах указанная страница нормально открывалась.

Может подскажете еще, как мне теперь не вносить весь список IP через [OR], а корректно сгруппировать их? Вот список плохих IP на сегодня:

85.26.165.34

85.26.165.40

85.26.232.185

85.26.232.185

85.26.232.223

85.26.233.237

85.26.234.144

85.26.234.144

85.26.235.245

85.26.235.86

Т.е. есть общая подсеть 85.26.165.*, 85.26.232-235.*

Как правильно в RewriteCond %{REMOTE_ADDR} указать диапазоны в данном случае?

Правильно ли будет указать таким образом:

RewriteCond %{REMOTE_ADDR} ^85\.26\.165\.$ [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.$ [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.233\.$ [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.234\.$ [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.235\.$
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]


А если надо заблокировать все IP, начинающиеся с 85.26.*.*, правильно ли будет указать:
RewriteCond %{REMOTE_ADDR} ^85\.26\.$
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

J
На сайте с 20.02.2014
Offline
120
jkm
#4

Для 85.26.165.*, 85.26.232-235.*


RewriteCond %{REMOTE_ADDR} ^85\.26\.165\. [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.23[2-5]\.
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

А если надо заблокировать все IP, начинающиеся с 85.26.*.*


RewriteCond %{REMOTE_ADDR} ^85\.26\.
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]
Brat_Sergij
На сайте с 26.11.2015
Offline
362
#5

jkm, а если в исходном варианте стоит значок $ в конце IP-адреса:

RewriteCond %{REMOTE_ADDR} ^85\.26\.232\.185$
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

, то здесь его уже не надо ставить?

RewriteCond %{REMOTE_ADDR} ^85\.26\.165\. [OR]
RewriteCond %{REMOTE_ADDR} ^85\.26\.23[2-5]\.
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

и

RewriteCond %{REMOTE_ADDR} ^85\.26\.
RewriteCond %{REQUEST_URI} /kak-vybrat-cvet-rozy\.html
RewriteRule .* - [F]

?

Что $ вообще обозначает? Спасибо.

S
На сайте с 30.09.2016
Offline
469
#6
Brat_Sergij:
Что $ вообще обозначает?

Конец фразы. Дальше никаких символов нет.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
J
На сайте с 20.02.2014
Offline
120
jkm
#7

^ - обозначает начало строки.

$ - обозначает конец строки.

RewriteCond %{REMOTE_ADDR} ^85\.26\.

Тут проверяется, что ip начинается на 85.26. и остальная часть может быть любой, так что $ тут не нужен.

Brat_Sergij
На сайте с 26.11.2015
Offline
362
#8

Sitealert, jkm, понял. Спасибо! :)

SeVlad
На сайте с 03.11.2008
Offline
1609
#9
Brat_Sergij:
это не то.

Это как раз то что ты просил - закрыть. А не отвревратить, нагрузив ненужной работой апач.

Но дело хозяйское.

Brat_Sergij
На сайте с 26.11.2015
Offline
362
#10
SeVlad:
Это как раз то что ты просил - закрыть. А не отвревратить, нагрузив ненужной работой апач.
Но дело хозяйское.

При помощи указанной Вами конструкции можно закрыть доступ к статическим страницам, которые представляют собой реальные файлы. В Wordpress страницы публикаций формируются динамически, и именно поэтому указанная конструкция не работает.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий