Control de acceso de proxy inverso de Apache


8

Tengo un proxy inverso de Apache que actualmente es proxy inverso para algunos sitios. Sin embargo, ahora voy a agregar un nuevo sitio (llamémoslo newsite.com) al que solo ciertas IP pueden acceder. ¿Es factible usar Apache como proxy inverso?

Yo uso VirtualHosts para los sitios que están siendo proxy. He intentado usar las directivas Permitir / Denegar en combinación con las declaraciones de Ubicación. Por ejemplo:

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

También he intentado configurar permitir / denegar específicamente para el sitio en las directivas de Proxy, por ejemplo

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

Sin embargo, todavía tengo esta definición para el resto de los sitios proxy.

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

No importa lo que haga, parece ser accesible desde cualquier lugar. Esto se debe a la definición de todos los demás sitios proxy. ¿Hay un orden al que se aplican las directivas de Proxy? He tenido el sitio de noticias uno antes y después del * uno, y también dentro de la declaración VirtualHost.

Respuestas:


2

Está utilizando ServerName y ServerAlias para hacer coincidir newsite.com.

NO debe usar para una configuración de proxy inverso la directiva:

<Proxy whatever>

Deberías usar:

Para apache 2.2:

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

Para apache 2.4:

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

Después de hacer el Authz, simplemente debe hacer un ProxyPass y el ProxyPassReverse (para los redireccionamientos 302,301):

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

Tenga en cuenta que con esto necesita agregar newsite.com a su / etc / hosts o que dns debería resolver el host en la url. También puede usar solo la dirección IP, pero debe indicar al servidor httpd que conserva el encabezado "Host:" con:

ProxyPreserveHost On

1

Tuve un problema similar hoy; Estaba relacionado con la forma en que se realiza la coincidencia de comodines, creo que usa la URL completa: en mi caso tuve

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

Y esto no funcionó. El sitio fue accesible desde cualquier lugar. Intenté un par de cosas y encontré una versión que funciona:

<Proxy *jira*>

Así que en tu caso prueba con

<Proxy http://newsite.com*>

para asegurarse de que apache coincida con esa 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
¿Qué hace esto y por qué?
sysadmin1138

Es un proxy inverso al que solo puede acceder una determinada IP (se debe definir sustituyendo la 'x' en Permitir desde xxxx ).
dr0i
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.