Contrôle d'accès proxy inverse Apache


8

J'ai un proxy inverse Apache qui est actuellement un proxy inverse pour quelques sites. Cependant, je vais maintenant ajouter un nouveau site (appelons-le newsite.com) qui ne devrait être accessible que par certaines adresses IP. Est-ce faisable en utilisant Apache comme proxy inverse?

J'utilise VirtualHosts pour les sites faisant l'objet d'une procuration. J'ai essayé d'utiliser les directives Allow / Deny en combinaison avec les instructions Location. Par exemple:

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

J'ai également essayé de configurer allow / deny spécifiquement pour le site dans les directives Proxy, par exemple

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

J'ai toujours cette définition pour le reste des sites mandataires cependant.

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

Peu importe ce que je fais, il semble accessible de partout. Est-ce à cause de la définition de tous les autres sites proxy. Existe-t-il un ordre auquel il applique les directives Proxy. J'ai eu le nouveau site avant et après le *, ainsi que dans la déclaration VirtualHost.

Réponses:


2

Vous utilisez ServerName et ServerAlias pour faire correspondre newsite.com.

Vous ne devez PAS utiliser pour une configuration de proxy inverse la directive:

<Proxy whatever>

Tu devrais utiliser:

Pour apache 2.2:

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

Pour apache 2.4:

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

Après avoir fait l'Authz, vous devez simplement faire un ProxyPass et le ProxyPassReverse (pour les redirections 302,301):

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

Gardez à l'esprit qu'avec cela, vous devez ajouter newsite.com à votre / etc / hosts ou que le DNS devrait résoudre l'hôte dans l'url. Vous pouvez également utiliser l'adresse IP uniquement, mais vous devez indiquer au serveur httpd qui préserve l'en-tête "Host:" avec:

ProxyPreserveHost On

1

eu un problème similaire aujourd'hui; Était lié à la façon dont la correspondance des caractères génériques est effectuée, je pense qu'elle utilise l'URL complète: dans mon cas, j'avais

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

et cela n'a pas fonctionné. Le site était accessible de n'importe où. J'ai essayé quelques trucs et j'ai trouvé une version fonctionnelle:

<Proxy *jira*>

Donc, dans votre cas, essayez avec

<Proxy http://newsite.com*>

pour vous assurer qu'apache correspond à cette 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'est-ce que cela fait et pourquoi le fait-il?
sysadmin1138

C'est un proxy inverse qui n'est accessible que par une certaine IP (à définir en remplaçant le «x» dans Allow from xxxx ).
dr0i
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.