URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6014
[ Назад ]

Исходное сообщение
"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"

Отправлено sofree , 01-Окт-08 16:51 
ОС - 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 с которого соединяюсь]

Если я лезу на апач "напрямую" через 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/11...

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


Содержание

Сообщения в этом обсуждении
"apache + mod_rpaf + .htaccess"
Отправлено HaMiL , 02-Окт-08 17:10 
Мне проще перекопить нашу статью с кор.википедии. На ней не один сервер сейчас работает :))
===============================================================================

Итак, чтобы пофиксить проблему с реальными айпишниками клиентов при использовании связки nginx+apache2, нужн-то всего лишь поставить один модуль к апачу и прописать 3 строки в конфигах.

Чтоб избавится от неудобства необходимо лишь доставить модуль mod_rpaf2 к Apache 2.x.x

[root@server /]# whereis mod_rpaf2
mod_rpaf2: /usr/ports/www/mod_rpaf2
[root@server /]# cd /usr/ports/www/mod_rpaf2

Дальше стандартно:

[root@server /]# make install clean

В httpd.conf (конфиг файл Apache) ищем строку:

#LoadModule rpaf_module libexec/apache2/mod_rpaf.so

Де-коментим строку (путь к .so файлу может отличаться)

Далее в тот-же файл httpd.conf в самый низ дописываем 2 строки

RPAFproxy_ips 127.0.0.
RPAFEnable On

Первая строка - это IP прокси (может быть белым IP адресом), вторая - говорит Apache, что rpaf нужно использовать. Что делает rpaf? Он из заголовка X-Forwarded-for делает REMOTE_ADDR.

Собственно остается в конфиге nginx’а в разделе server (виртуального хоста, не в location'e Proxy-преедачи) дописать такие строки:

proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

Далее перезагружаем Apache и nginx

[root@server /]# apachectl restart
[root@server /]# /etc/rc.d/nginx restart

=========================================
Всё.


"apache + mod_rpaf + .htaccess"
Отправлено sofree , 02-Окт-08 17:25 
>Мне проще перекопить нашу статью с кор.википедии. На ней не один сервер
>сейчас работает :))
>===============================================================================
>
>Итак, чтобы пофиксить проблему с реальными айпишниками клиентов при использовании связки nginx+apache2,
>нужн-то всего лишь поставить один модуль к апачу и прописать 3 строки в конфигах.

копипастить не надо. Сам не одну статью прочёл про это. Повторюсь, что
это всё уже сделано и mod_rpaf установлен и ИПы нормально обрабатываются - и в скриптах php и в access_log Apache.

А не работает в .htaccess - allow, deny директивы для ip адресов.
Сами попробуйте, если у Вас apache 2.2 и mod_rpaf - положите .htaccess файл где пропишите deny from [ваш ip].
Опять таки, если к backend`у обратиться "напрямую" http://ext_ip:port, то .htaccess нормально обрабатывается... Поэкспериментируйте. У меня такой баг имеет место.


"apache + mod_rpaf + .htaccess"
Отправлено Alex , 13-Окт-08 15:37 
>Сами попробуйте, если у Вас apache 2.2 и mod_rpaf - положите .htaccess
>файл где пропишите deny from [ваш ip].
>Опять таки, если к backend`у обратиться "напрямую" http://ext_ip:port, то .htaccess нормально обрабатывается...
>Поэкспериментируйте. У меня такой баг имеет место.

На 2.0 такая же проблема.
Вы как-нибудь решили???


"apache + mod_rpaf + .htaccess"
Отправлено sofree , 13-Окт-08 22:23 
>>Сами попробуйте, если у Вас apache 2.2 и mod_rpaf - положите .htaccess
>>файл где пропишите deny from [ваш ip].
>>Опять таки, если к backend`у обратиться "напрямую" http://ext_ip:port, то .htaccess нормально обрабатывается...
>>Поэкспериментируйте. У меня такой баг имеет место.
>
>На 2.0 такая же проблема.
>Вы как-нибудь решили???

Нет, не решил. Зато выяснилось, что этот баг имеет место. Думаю, автору mod_rpaf надо показать данный "баг"


"apache + mod_rpaf + .htaccess"
Отправлено qwerty , 14-Окт-08 16:47 
Apache/2.2.9 проблем нет, но 1 отличие, у меня блок deny allow описан внутри httpd.conf  



"apache + mod_rpaf + .htaccess"
Отправлено sofree , 14-Окт-08 20:12 
>Apache/2.2.9 проблем нет, но 1 отличие, у меня блок deny allow описан
>внутри httpd.conf

А можно с .htaccess попробовать? Всего лишь маленький файлик...


"apache + mod_rpaf + .htaccess"
Отправлено qwerty , 28-Окт-08 11:51 
>>Apache/2.2.9 проблем нет, но 1 отличие, у меня блок deny allow описан
>>внутри httpd.conf
>
>А можно с .htaccess попробовать? Всего лишь маленький файлик...

Работает нормально,

Order deny,allow
Deny from all
Allow from 127.0.0.1 172.16.0.4

пускает только с 172.16.0.4


"apache + mod_rpaf + .htaccess"
Отправлено sofree , 31-Дек-08 00:31 
>[оверквотинг удален]
>>
>>А можно с .htaccess попробовать? Всего лишь маленький файлик...
>
>Работает нормально,
>
>Order deny,allow
>Deny from all
>Allow from 127.0.0.1 172.16.0.4
>
>пускает только с 172.16.0.4

Появилась возможность проверить баг. И так локальная сеть, Apache/2.2.10 (Fedora core 10 rus), ip=10.1.1.1 на котором крутится апач. Апач висит на 8080 (бэкэнд), а на 80 слушает nginx (фронтэнд)

И так:
[root@fc test]# cat /var/www/html/test/.htaccess
Order deny,allow
Deny from all
Allow from 10.1.1.3

Комп, с которого запрашиваю - 10.1.1.3.

Случай 1.
http://10.1.1.1/test/
Forbidden

You don't have permission to access /test/ on this server.
Apache/2.2.10 (Fedora) Server at 10.1.1.1 Port 80
Лог: 10.1.1.3 - - [31/Dec/2008:00:28:28 +0300] "GET /test/ HTTP/1.0" 403 281 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.8.1.17) Gecko/20080829 SeaMonkey/1.1.12"

Случай 2.
http://10.1.1.1:8080/test/
Index of /test
[ICO]    Name    Last modified    Size    Description
[DIR]    Parent Directory         -
Apache/2.2.10 (Fedora) Server at 10.1.1.1 Port 8080
Лог: 10.1.1.3 - - [31/Dec/2008:00:29:12 +0300] "GET /test/ HTTP/1.1" 200 688 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.8.1.17) Gecko/20080829 SeaMonkey/1.1.12"


Прихожу к выводу, что баг прогрессирует!


"apache + mod_rpaf + .htaccess"
Отправлено Ярослав , 31-Июл-09 20:32 
А у меня получилось победить эту проблему

http://binblog.ru/2009/07/apache-mod_rpaf-htaccess/

>[оверквотинг удален]
>http://10.1.1.1:8080/test/
>Index of /test
>[ICO] Name Last modified Size Description
>[DIR] Parent Directory   -
>Apache/2.2.10 (Fedora) Server at 10.1.1.1 Port 8080
>Лог: 10.1.1.3 - - [31/Dec/2008:00:29:12 +0300] "GET /test/ HTTP/1.1" 200 688 "-"
>"Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.8.1.17) Gecko/20080829 SeaMonkey/1.1.12"
>
>
>Прихожу к выводу, что баг прогрессирует!


"apache + mod_rpaf + .htaccess"
Отправлено sofree , 01-Авг-09 01:27 
>А у меня получилось победить эту проблему
>
>http://binblog.ru/2009/07/apache-mod_rpaf-htaccess/
>

Вот бы хорошо, чтобы автор мода
http://stderr.net/apache/rpaf/
обратил внимание на патч и подправил исходники.


"apache + mod_rpaf + .htaccess"
Отправлено vinzz , 15-Окт-09 09:15 
>>А у меня получилось победить эту проблему
>>
>>http://binblog.ru/2009/07/apache-mod_rpaf-htaccess/
>>
>
>Вот бы хорошо, чтобы автор мода
>http://stderr.net/apache/rpaf/
>обратил внимание на патч и подправил исходники.

этот патч решил одну проблему, но добавил другую:
теперь в конструкциях наподобие "header( 'Location: /newpath/' );" апачь возвращает не domain.com/newpath, а МОЙ-IP-АДРЕС/newpath

МОЙ-IP-АДРЕС - это ип с которого коннект, именно клиентского компьютера на котором открыт браузер. идеи?


"apache + mod_rpaf + .htaccess"
Отправлено angelina , 10-Дек-09 11:06 
>этот патч решил одну проблему, но добавил другую:
>теперь в конструкциях наподобие "header( 'Location: /newpath/' );" апачь возвращает не domain.com/newpath,
>а МОЙ-IP-АДРЕС/newpath
>
>МОЙ-IP-АДРЕС - это ип с которого коннект, именно клиентского компьютера на котором
>открыт браузер. идеи?

это не поможет? mod_realip http://sysoev.ru/mod_realip/


"apache + mod_rpaf + .htaccess"
Отправлено Avari , 21-Окт-10 21:21 
> это не поможет? mod_realip http://sysoev.ru/mod_realip/

Поможет только тем, у кого апач 1.3. О чём вполне ясно написано у Сысоева. Для апача2 только mod_rpaf. Лично я категорический сторонник apache2.


"apache + mod_rpaf + .htaccess"
Отправлено Kirill , 22-Окт-10 11:13 
>[оверквотинг удален]
>>>
>>
>>Вот бы хорошо, чтобы автор мода
>>http://stderr.net/apache/rpaf/
>>обратил внимание на патч и подправил исходники.
> этот патч решил одну проблему, но добавил другую:
> теперь в конструкциях наподобие "header( 'Location: /newpath/' );" апачь возвращает не
> domain.com/newpath, а МОЙ-IP-АДРЕС/newpath
> МОЙ-IP-АДРЕС - это ип с которого коннект, именно клиентского компьютера на котором
> открыт браузер. идеи?

а этот глюк исправили?
нашел кто-нибудь как исправить?


"apache + mod_rpaf + .htaccess"
Отправлено baddan , 21-Апр-11 14:56 
> а этот глюк исправили?
> нашел кто-нибудь как исправить?

на debian работает
Server version: Apache/2.2.9 (Debian)
Server built:   Dec 11 2010 21:34:00
nginx version: nginx/0.6.32


на CentOS отказывается
Server version: Apache/2.2.3
Server built:   Jan 31 2011 17:50:30
nginx: nginx version: nginx/1.0.0

REMOTE_ADDR везде коректно правится. в логах тоже казывается правильный ip, но в centos не работает, в debian работает. в обоих практически одинаково настроены сайты. Видимо в 2.2.9 есть какието изменения которые исправляют проблему.


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено SatanaClause , 09-Авг-11 13:36 
Добрый день,

только что наткнулся на эту проблему. Смотрю ничего не изменилось c того времени.

.htaccess с кодом не работает

order deny,allow
deny from all
allow from 111.111.111.111

Решение простое, заменить mod_rpaf на mod_extract_forwarded

1. инсталируем EPEL из http://fedoraproject.org/wiki/EPEL
http://download.fedoraproject.org/pub/epel/5/i386/epel-relea...

2. инсталируем mod_extract_forwarded
yum install --enablerepo=epel mod_extract_forwarded.i386

4. коректируем конфиг /etc/httpd/conf.d/mod_extract_forwarded.conf

по сути он стандартный, только меняем значени MEFaccept на нужное

MEFaccept 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/11...
> Кто-нибудь проверьте пожалуйста на практике, может у меня где-то ошибка.
> Есть ли какие-нибудь решения? Может стоит автору rpaf обратить внимание на такой
> "баг".


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено AL , 02-Мрт-12 15:43 
Вы неправильно задаёте конструкцию Order. Последовательность должна быть другой и после запятой недолжно быть пробелов.

Правильно так:
Order Deny,Allow
Deny From all
Allow From 10.1.1.1

и всё работает как надо.

Для справки. Как обрабатываются эти дериктивы:

Order Allow,Deny
Сперва, проверяются все директивы Allow; по крайней мере одна должна соответствовать, или запрос отвергается. Далее, провеляются все директивы Deny. Если какие-либо соответствуют, то запрос отвергается. В конце, любой запрос, который не соответствует директиве Allow или Deny отвергается по умолчанию.

Order Deny,Allow
Сперва, проверяются все директивы Deny; если какая-либо соответствует, то запрос отвергается, если нет соответствия в директиве Allow. Любой запрос, который не соответствует директиве Allow или Deny пропускается.


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено Alan , 02-Мрт-12 15:49 
Спасибо, но тут не в этом дело, mod_rpaf просто неподдерживает этого, так же как и аторизации. Рещение - mod_extract_forwarded.

"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено ALex_hha , 09-Мрт-12 01:23 
> Спасибо, но тут не в этом дело, mod_rpaf просто неподдерживает этого, так
> же как и аторизации. Рещение - mod_extract_forwarded.

# cat .htaccess
Order Deny,Allow
Deny From all
Allow From xxx.xxx.238.231

xxx.xxx.157.114 - - [08/Mar/2012:23:17:12 +0200] "GET /test/ HTTP/1.0" 403 283 "-" "Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"

xxx.xxx.238.231 - - [08/Mar/2012:23:17:27 +0200] "GET /test/ HTTP/1.0" 200 61688 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"

[Thu Mar 08 23:17:12 2012] [error] [client xxx.xxx.157.114] client denied by server configuration: /var/www/vhosts/domain.com.ua/test/

CentOS-6.2

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Feb 13 2012 22:31:42

# apachectl -t -D DUMP_MODULES | grep rpaf
Syntax OK
rpaf_module (shared)

# nginx -v
nginx version: nginx/0.8.54

ЧЯДНТ?


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено alan , 09-Мрт-12 01:42 
Возможно mod_rpaf или apache версия играет роль, мы для семя пометили модуль как ненадежный и отказались от его использования. mod_extract_forwarded http://www.openinfo.co.uk/apache/index.html на боевый машинах с хостингом используется пол года, проблем нет, версии разные.

>[оверквотинг удален]
> CentOS-6.2
> # httpd -v
> Server version: Apache/2.2.15 (Unix)
> Server built:   Feb 13 2012 22:31:42
> # apachectl -t -D DUMP_MODULES | grep rpaf
> Syntax OK
>  rpaf_module (shared)
> # nginx -v
> nginx version: nginx/0.8.54
> ЧЯДНТ?


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено ALex_hha , 09-Мрт-12 02:20 
> Возможно mod_rpaf или apache версия играет роль, мы для семя пометили модуль
> как ненадежный и отказались от его использования. mod_extract_forwarded http://www.openinfo.co.uk/apache/index.html
> на боевый машинах с хостингом используется пол года, проблем нет, версии
> разные.

Возможно, в 2.4 есть так же модуль http://httpd.apache.org/docs/2.4/mod/mod_remoteip.html


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено PavelR , 16-Мрт-12 17:01 
> Возможно mod_rpaf или apache версия играет роль, мы для семя пометили модуль
> как ненадежный и отказались от его использования. mod_extract_forwarded

Версия mod_rpaf играет роль. Используйте 0.6 или патченную 0.5.


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено PavelR , 30-Мрт-12 00:10 
> Спасибо, но тут не в этом дело, mod_rpaf просто неподдерживает этого, так
> же как и аторизации. Рещение - mod_extract_forwarded.

Выше, в https://www.opennet.ru/openforum/vsluhforumID8/6014.html#17 верно написали, как правильно пользоваться директивами (Order / Allow / Deny) .htaccess

Ссылка на оф документацию: http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order

Небольшая проверка показывает, что директивы .htaccess отрабатывают идентично как при наличии, так и при отсутствии mod_rpaf-0.6.


"Не работает allow, deny, когда apache + mod_rpaf + .htaccess"
Отправлено baddan , 04-Май-12 18:25 
debian 6.0

модуль mod_extract_forwarded не удалось скомпилить и подключить по нормальному иза ошибки какойто с прокси, в принцыпе там в исходнике правится #define, но почемуто после этого не стало работать, то что работало в centos.

вот что получилось и работает.
rpaf.conf
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 184.xx.xx.xxx 127.0.0.1
</IfModule>

Nginx. 1.2
site.net
server {
<------>listen   80;
<------>server_name site.net *.site.net;

<------>root   /home/www/tube/site.net/public_html;

#<----->access_log /home/www/tube/site.net/log/ng-acc.log;
<------>error_log /home/www/tube/site.net/log/ng-err.log;

            location / {
                proxy_pass         http://184.xx.xx.xx:81;
                proxy_redirect     default;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header    REMOTE_ADDR     $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size       500m;
                client_body_buffer_size    128k;
                proxy_connect_timeout      90;
                proxy_send_timeout         900;
                proxy_read_timeout         900;
                proxy_buffer_size   4k;
                proxy_buffers              4 32k;
                proxy_busy_buffers_size    64k;
                proxy_temp_file_write_size 64k;
                charset         off;
                track_uploads proxied 30s;
            }

            location ^~ /contents/videos/ {
                flv;
                root /home/www/tube/site.net/public_html;
                internal;
            }

            location ^~ /contents/videos_sources/ {
                root /home/www/tube/site.net/public_html;
                internal;
            }

            location ^~ /contents/albums/sources/ {
                root /home/www/tube/site.net/public_html;
                internal;
            }

            location ^~ /contents/albums/main/700x525/ {
                root /home/www/tube/site.net/public_html;
                internal;
            }

            location ~* ^.+\.(gif|jpg|mpg|mp3|mpeg|avi)$ {
                valid_referers none blocked site.net *.site.net;
                if ($invalid_referer) {
                    return   403;
                }
                root /home/www/tube/site.net/public_html;
            }

    location ^~ /admin/include/get_upload_status.php  {
<------>report_uploads                  proxied;
#<----->upload_progress_header          hash;
<------>upload_progress_jsonp_output;
    }
}

--------------------------------
Order Allow,Deny
с пробелом без пробелом в обратном порядке и вовсе без ordera обрабатывается одинаково.
всем удачи.