Apache Reverse Proxy Zugriffskontrolle

8

Ich habe einen Apache-Reverse-Proxy, der derzeit für einige Sites Reverse-Proxy ist. Allerdings werde ich jetzt eine neue Site hinzufügen (nennen wir es newsite.com), auf die nur bestimmte IPs zugreifen sollten. Ist dies mit Apache als Reverse-Proxy möglich?

Ich verwende VirtualHosts für die Sites, die als Proxy verwendet werden. Ich habe versucht, die Allow / Deny-Direktiven in Kombination mit den Location-Anweisungen zu verwenden. Zum Beispiel:

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

Ich habe zum Beispiel auch versucht, erlauben / verweigern spezifisch für die Site in den Proxy-Direktiven zu konfigurieren

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

Ich habe diese Definition jedoch immer noch für den Rest der Proxy-Sites.

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

Egal was ich mache, es scheint von jedem Ort aus zugänglich zu sein. Liegt dies an der Definition für alle anderen Proxy-Sites? Gibt es eine Reihenfolge, auf die Proxy-Anweisungen angewendet werden? Ich hatte die Newsite sowohl vor als auch nach der * und auch innerhalb der VirtualHost-Anweisung.


quelle

Antworten:

2

Sie verwenden ServerName und ServerAlias für den Abgleich von newsite.com.

Sie sollten die Direktive NICHT für eine Reverse-Proxy-Konfiguration verwenden:

<Proxy whatever>

Du solltest benutzen:

Für Apache 2.2:

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

Für Apache 2.4:

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

Nach dem Authz sollten Sie einfach einen ProxyPass und den ProxyPassReverse ausführen (für die 302.301 Weiterleitungen):

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

Beachten Sie, dass Sie dazu newsite.com zu Ihren / etc / hosts hinzufügen müssen oder dass DNS den Host in der URL auflösen sollte. Sie können auch nur die IP-Adresse verwenden, aber Sie sollten den httpd-Server anweisen, der den Header "Host:" mit folgendem Inhalt beibehält:

ProxyPreserveHost On
FarDarkMist
quelle
1

hatte heute ein ähnliches Problem; War im Zusammenhang mit der Art und Weise, wie der Platzhalterabgleich durchgeführt wird, ich denke, es wird die vollständige URL verwendet: in meinem Fall hatte ich

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

und das hat nicht funktioniert. Die Website war von überall zugänglich. Ich habe ein paar Dinge ausprobiert und eine funktionierende Version gefunden:

<Proxy *jira*>

Also versuchen Sie es in Ihrem Fall mit

<Proxy http://newsite.com*>

um sicherzustellen, dass Apache mit dieser URL übereinstimmt.

stijn
quelle
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
quelle
1
Was macht das und warum macht es das?
sysadmin1138
Dies ist ein Reverse-Proxy, auf den nur über eine bestimmte IP zugegriffen werden kann (definiert durch Ersetzen des 'x' in Zulassen von xxxx ).
dr0i