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.


la source

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
FarDarkMist
la source
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.

stijn
la source
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
la source
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