IPTables und Portumleitung Apache2

IPTables und Portumleitung Apache2

Ich verwende Apache, um eine Subdomäne auf einen Port ( mod_proxy, mod_proxy_http, mod_proxy_ajp) umzuleiten, und IP-Tabellen, um den direkten Portzugriff außer auf mich und den lokalen Server einzuschränken.

Meine IP-Tabellen sehen folgendermaßen aus:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:tproxy
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:http-alt
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:webmin
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:webmin

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Der Kontext, den ich in diesem Beitrag verwenden werde, ist:

Sonatype Nexus:nexus.example.com => example.com:8081

Jenkins CI:jenkins.example.com => example.com:8080

Webmin:webmin.example.com => example.com:10000

Was bei mir derzeit funktioniert, ist, dass es keinen direkten Portzugriff außer für mich gibt. Ich möchte auch, dass das lokale System auf Ports zugreifen kann, und das ist, glaube ich, das, was ich jetzt habe. Ich verwende es mod_proxy_ajpfür Jenkins CI und Webmin und mod_proxy_httpfür Sonatype Nexus.

Wenn ich direkte Ports besuche, wird jeder dieser Dienste problemlos geladen. Wenn ich jemand anderen gebeten habe, die Dienste zu laden, kann er das nicht, also funktioniert es.

Wenn ich jetzt jedoch versuche, auf eine der Subdomänen zuzugreifen, werde ich nicht endend geladen (Endlosschleife?).

Wenn ich jedoch ein Tracert auf der Subdomäne ausführe, endet es einwandfrei, sodass ich die Endlosschleife streichen kann.

Hier ist meine Sonatype Nexus Apache-Virtual-Host-Konfiguration:

<VirtualHost *:80>
        ServerName nexus.majornoob.com
        ServerAlias www.nexus.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:8081/
        ProxyPassReverse / http://localhost:8081/
        ProxyPassReverseCookiePath / /
        ErrorLog /var/www/majornoob/error-nexus.log
        LogLevel warn
        CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>

und hier ist mein Jenkins:

<VirtualHost *:80>
        ServerName jenkins.majornoob.com
        ServerAlias www.jenkins.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / ajp://127.0.0.1:8080/
        ProxyPassReverse / ajp://127.0.0.1:8080/
        ProxyPassReverseCookiePath / /

        ErrorLog /var/www/majornoob/error-jenkins.log

        LogLevel warn

        CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>

Diese beiden Beispiele für virtuelle Hosts verwenden mod_proxy_ajpbzw. mod_proxy_http.

Kann mir jemand helfen herauszufinden, warum ich eine unendliche Last bekomme?

Danke.

bearbeiten:Kümmern Sie sich nicht um die Endlosschleife. Nach einiger Zeit erhielt ich die Fehlermeldung „503 Service Unavailable“.

Antwort1

Die iptables-Regeln werden der Reihe nach ausgewertet, von oben nach unten, wie gedruckt. Ihr Problem besteht darin, dass die Proxy-Verbindung von localhost stammt, was dieser Regel entspricht:

DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy

localhostist nicht c-24-7-..., also wird die Verbindung abgebrochen. Das Proxy-Modul läuft irgendwann ab; wenn die Regel REJECT statt DROP wäre, würden Sie viel schneller eine Fehlermeldung erhalten (weil Sie explizit abgelehnt würden, anstatt dass der Verbindungsversuch einfach verschwindet).

Die Lösung ist ganz einfach: Ordnen Sie die Regeln so an, dass „Akzeptieren von lokalem Host“ vor „Ablehnen von irgendwo anders“ steht. (IP-Routing stimmt am genauesten überein, aber da iptables mehrstufig ist, ist das nicht unbedingt definiert.)

Ich würde im Allgemeinen empfehlen, eine erste Regel zu haben, die die gesamte Localhost-Kommunikation zulässt (über die Loopback-Schnittstelle, nur für den Fall, dass jemand etwas Seltsames über das Ethernet versucht); versuchen Sie hinzuzufügen

iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT

-Ium ( ) das oben in der Liste einzufügen .

verwandte Informationen