Controle de acesso ao proxy reverso Apache

8

Eu tenho um proxy reverso do Apache que atualmente é proxy reverso para alguns sites. No entanto, agora vou adicionar um novo site (vamos chamá-lo newsite.com) que só deve ser acessível por determinados IPs. Isso é possível usando o Apache como proxy reverso?

Eu uso o VirtualHosts para os sites que estão sendo proxy. Eu tentei usar as diretivas Allow / Deny em combinação com as instruções Location. Por exemplo:

<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>

Também tentei configurar permitir / negar especificamente para o site nas diretivas de proxy, por exemplo

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

Ainda tenho essa definição para o restante dos sites em proxy.

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

Não importa o que eu faça, parece ser acessível de qualquer lugar. Isso ocorre devido à definição para todos os outros sites com proxy. Existe um pedido ao qual se aplica diretivas de proxy. Eu tive o novo site antes e depois do * one, e também dentro da instrução VirtualHost.


fonte

Respostas:

2

Você está usando o ServerName e o ServerAlias para combinar newsite.com.

Você NÃO deve usar para uma configuração de proxy reverso a diretiva:

<Proxy whatever>

Você deveria usar:

Para o apache 2.2:

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

Para o apache 2.4:

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

Depois de fazer o Authz, você deve executar um ProxyPass e o ProxyPassReverse (para os redirecionamentos 302.301):

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

Lembre-se de que, com isso, você precisa adicionar newsite.com ao seu / etc / hosts ou que o DNS deve resolver o host no URL. Você também pode usar apenas o endereço IP, mas deve instruir o servidor httpd que preserva o cabeçalho "Host:" com:

ProxyPreserveHost On
FarDarkMist
fonte
1

teve um problema semelhante hoje; Estava relacionado a como a correspondência de curinga é feita, acho que ela usa a URL completa: no meu caso, eu tinha

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

e isso não funcionou. O site estava acessível de qualquer lugar. Eu tentei algumas coisas e encontrei uma versão funcional:

<Proxy *jira*>

Então, no seu caso, tente com

<Proxy http://newsite.com*>

para garantir que o apache corresponda a esse URL.

stijn
fonte
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>
dr0i
fonte
1
O que isso faz e por que faz isso?
sysadmin1138
Esse é um proxy reverso acessível apenas por um determinado IP (a ser definido substituindo o 'x' em Permitir de xxxx ).
dr0i