Контроль доступа обратного прокси Apache


8

У меня есть обратный прокси-сервер Apache, который в настоящее время является обратным прокси для нескольких сайтов. Однако сейчас я собираюсь добавить новый сайт (назовем его newsite.com), который должен быть доступен только для определенных IP-адресов. Это выполнимо, используя Apache в качестве обратного прокси?

Я использую VirtualHosts для сайтов, которые прокси. Я попытался использовать директивы Allow / Deny в сочетании с инструкциями Location. Например:

<VirtualHost *:80>  
Servername newsite.com   
<Location http://newsite.com>
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Location>
<IfModule rewrite_module>
 RewriteRule ^/$ http://newsite.internal.com [proxy]
</IfModule>

Я также попытался настроить разрешение / отклонение специально для сайта в директивах прокси, например

<Proxy http://newsite.com/>
  Order deny,allow
  Deny from all
  Allow from x.x.x.x
</Proxy>

У меня все еще есть это определение для остальных прокси-сайтов.

<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>

Независимо от того, что я делаю, это кажется доступным из любого места. Это из-за определения для всех других прокси сайтов? Есть ли порядок, к которому применяются директивы прокси. У меня был новостной сайт как до, так и после *, а также в заявлении VirtualHost.

Ответы:


2

Вы используете ServerName и ServerAlias для соответствия newsite.com.

Вы должны НЕ использовать для обратного прокси - сервера конфигурации директивы:

<Proxy whatever>

Вы должны использовать:

Для Apache 2.2:

<Location />
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Location>

Для Apache 2.4:

<Location />
   <RequireAny>
       Require             ip x.x.x.x/255.255.255.0
       Require ...
   </RequireAny>
</Location>

После выполнения Authz вы просто должны сделать ProxyPass и ProxyPassReverse (для перенаправлений 302,301):

ProxyPass /  http://newsite.com/
ProxyPassReverse /  http://newsite.com/

Имейте в виду, что при этом вам нужно добавить newsite.com в ваш / etc / hosts или что dns должен разрешить хост в URL. Вы также можете использовать только IP-адрес, но вы должны указать серверу httpd, который сохраняет заголовок «Host:»:

ProxyPreserveHost On

1

была похожая проблема сегодня; Был связан с тем, как выполняется сопоставление с подстановочными знаками, я думаю, что он использует полный URL: в моем случае я имел

<Proxy /jira*>
  Order allow,deny
  Deny from all
</Proxy>
ProxyPass /jira https://myhost.com

и это не сработало. Сайт был доступен из любой точки мира. Я попробовал пару вещей и нашел рабочую версию:

<Proxy *jira*>

Так что в вашем случае попробуйте с

<Proxy http://newsite.com*>

чтобы убедиться, что Apache соответствует этому URL.


0
<VirtualHost *:80>
    Servername newsite.com

    <Proxy *>
            Order Deny,Allow
            Deny from all
            Allow from x.x.x.x
    </Proxy>

    ProxyPass /  http://newsite.com/
    ProxyPassReverse /  http://newsite.com/

</VirtualHost>

1
Что это делает, и почему это к нему?
sysadmin1138

Это обратный прокси-сервер, доступный только по определенному IP-адресу (определяется путем подстановки «x» в « Разрешить из хххх» ).
dr0i
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.