Не работает в .htaccess директивы allow, deny, когда apache + mod_rpaf как backend

sofree
На сайте с 06.11.2007
Offline
38
16722

ОС - Fedora 7.

Имеется схема nginx 0.6.31 + apache 2.2.6 + mod_rpaf 0.6.

apache работает как backend, слушает на 8080 порту.

nginx слушает на 80 и всё, кроме статики отдаёт apache.

rpaf настроен. В access_log пишутся "реальные" IP.

Заметил такую странную вещь, если есть .htaccess файл и я в корень сайта кладу например:

order allow,deny

allow from [ip с которого соединяюсь]

deny from all

Апач даёт

Forbidden

You don't have permission to access...

Хотя казалось бы указано allow from [ip с которого соединяюсь]

Если я лезу на апач "напрямую", минуя nginx, через http://external_ip:8080/, то правило в .htaccess отрабатывает корректно - я вижу странчку.

Что примечательно, если .htaccess выглядит так

order allow,deny

allow from [ip с которого соединяюсь]

allow from 127.0.0.1

deny from all

и соединяюсь к nginx (а он в свою очередь к apache) через http://external_ip/ - получаю страничку! Нету никакого Forbidden!..

Т.о., прихожу к выводу что mod_rpaf не работает в конструкциях .htaccess и передаёт ip frontend`а (в моём случае 127.0.0.1).

Поискал в инете, нашёл только один подобный случай для настроек виртуал хоста:

http://www.apsis.ch/pound/pound_list/archive/2007/2007-01/1169244573000

Кто-нибудь проверьте пожалуйста на практике, может у меня где-то ошибка.

Есть ли какие-нибудь решения? Может стоит автору rpaf обратить внимание на такой "баг"?

Почитай http://www.liex.ru/service_info.htm (http://www.liex.ru/service_info.htm) и заработай! Не знаешь как раздобыть список страниц сайта, находящихся в кэше яндекса? Посмотри на сервис http://ya-cache.net.ru (http://ya-cache.net.ru).
O
На сайте с 13.08.2008
Offline
26
#1
sofree:

Кто-нибудь проверьте пожалуйста на практике, может у меня где-то ошибка.
Есть ли какие-нибудь решения? Может стоит автору rpaf обратить внимание на такой "баг"?

Имею мнение, что mod_rpaf меняет адрес на уровне логгирования и забивания переменных сессии, но не трогает проверку по адресу в allow/deny.

Outsourcenow.ru: оттюним ваш веб-сервер. 100 млн. запросов в сутки - наш размерчик!
sofree
На сайте с 06.11.2007
Offline
38
#2

Как я могу ещё установить, на виртуальном хостинге РБК fe36-1.hc.ru, работает nginx + Apache 1.3. Так вот так allow, deny отрабатывается нормально. Но там стоит модуль скорее всего mod_realip - http://sysoev.ru/mod_realip/

Данный баг проверили бы те, у кого есть возможность. Просто написать .htaccess - и посмотреть результат...

Если баг такой есть, то, думаю, надо написать автору mod_rpaf, чтобы разобрался... Ведь у Игоря Сысоева всё получилось с Apache 1.3.

P
На сайте с 08.03.2007
Offline
250
#3

Баг есть. Лечится так: кладём в .htaccess или ещё куда-то

SetEnvIf Remote_Addr "^10\.11\.12\.13" realremoteaddr
Order Deny,Allow
Deny from all
allow from env=realremoteaddr

10.11.12.13 - ip адрес друзей.

http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html

M
На сайте с 19.09.2007
Offline
112
#4
sofree:
****
Апач даёт
Forbidden
You don't have permission to access...
Хотя казалось бы указано allow from [ip с которого соединяюсь]
**

а в еррор_логе какой ип получил 403 при этом?

когда апач у вас висит не на 127.0.0.1 коннект с "самой себя " машины (от нгинкса) к нему пойдет с реалИП апача, а не с 127 0 0 1

есть у меня rpaf , правда апачик /2.0.63

LoadModule rpaf_module modules/mod_rpaf-2.0.so

RPAFenable On

RPAFproxy_ips 127.0.0.1 (адрес апача собственно)

и в ингинксе

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

может натолкнет на что-либо..

S
На сайте с 25.11.2008
Offline
11
#5

Pilat, большое спасибо. Работает!

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#6

Тут обсуждалась эта проблема и альтернативное решение.

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
RAS
На сайте с 27.11.2005
Offline
126
RAS
#7

Делается по возможности или в .htaccess, как написали выше.

Или патчится mod_rpaf:

static void register_hooks(apr_pool_t *p) {

ap_hook_post_read_request(change_remote_ip, NULL, NULL, APR_HOOK_MIDDLE);
}

меняем APR_HOOK_MIDDLE на APR_HOOK_FIRST

Администрируем сервера, впс, вдс. Ускоряем загрузку сайтов - DLE, Word Press, Joomla, Modx... Настраиваем безопасность. Ручная чистка rootkit/malware/вирусов. (/ru/forum/867860) Разработка - shell/bash/sh/python/perl.
K2
На сайте с 20.11.2007
Offline
14
#8
RAS:

Или патчится mod_rpaf:

static void register_hooks(apr_pool_t *p) {

ap_hook_post_read_request(change_remote_ip, NULL, NULL, APR_HOOK_MIDDLE);
}


меняем APR_HOOK_MIDDLE на APR_HOOK_FIRST

Может быть у меня какой-то не такой исходный код, однако в 0.6 уже по умолчанию идет ARP_HOOK_FIRST. Но это все равно не спасает.

В топике, ссылку на который привел Boris A Dolgov, приведен код модуля mod_realip2, в котором обсуждаемая проблема отсутствует.

qwartyr
На сайте с 19.10.2007
Offline
40
#9

как вариант - подобный функционал есть в nginx, так что там можно легко реализовать конструкции вида

allow from [ip с которого соединяюсь]

allow from 127.0.0.1

deny from all

через

ngx_http_access_module

как пример

location / {

deny 192.168.1.1;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

deny all;

}

профессиональное администрирование серверов (http://www.unixsupport.ru) отзывы (http://www.free-lance.ru/users/qwartyr/opinions/) на free-lance.ru
H
На сайте с 21.09.2008
Offline
25
#10

Лучше поставить mod_realip2, в принципе тут уже Boris A Dolgov посоветовал.

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