Source IP based virtual host with mod_jk


In diesem Artikel erkläre ich, wie man mit Linux, dem apache2 Webserver und IPTables basierend auf der Quell IP verschiedene mod_jk Worker anspricht.

Dazu definieren wir im apache2 Webserver verschiedene virtuelle Hosts und verändern mit IPTables die Zielports der jeweiligen Requests

Eine Erklärung, was mod_jk worker sind und wie sie eingerichtet werden, findet ihr unter folgendem Link Tomcat hinter apache2 Webserver

Konfiguration des Webservers

Das prinzipielle Vorgehen, um diese Anforderung umzusetzen, ist, das wir verschiedene virtualhosts auf verschiedenen Ports definieren und über IPTables Zugriffe von bestimmten IP Adressen auf bestimmte Ports umleiten.

Listen 80
Listen 1234


        Listen 443



        Listen 443


Die Zeile

Listen 1234

muss der Datei hinzugefügt werden.

Als nächstes erstellen wir eine Datei unter /etc/apache2/sites-available und bennenen sie z.B. als loadbalancer.


    ServerAdmin webmaster@localhost
    
          JkMount /PATH/* MODJKWORKER1
    



    ServerAdmin webmaster@localhost
    
          JkMount /PATH/* MODJKWORKER2
    

Damit haben wir 2 virtuelle Hosts definiert, der eine läuft auf Port 80, der andere auf Port 1234. Zugriffe über Port 80 werde an den MODJKWORKER1 geleitet, Zugriffe über Port 1234 werden an den MODJKWORKER2 geleitet.

Konfiguration der Firewall Regeln mit IPTables

Jetzt müssen wir noch per IPTables die Regeln erstellen, damit Zugriffe von bestimmten IP’s/NET’s auf den Port 1234 umgeleitet werden.

Für eine IP folgenden Befehl ausführen

 iptables -A PREROUTING -t nat -p tcp -s 1.2.3.4 --dport 80 -j DNAT --to-destination :1234

oder ein Netz, entsprechend seiner Netzmaske. Heise.de – Netzmasken berechnen

iptables -A PREROUTING -t nat -p tcp -s 1.2.2.0/24 --dport 80 -j DNAT --to-destination :1234

Damit wird der Zugriff von der IP 1.2.3.4 und die Zugriffe aus dem Netz 1.2.2.0/255.255.255.0 an den 2. virtuellen Host geleitet, der sie an den entprechenden Worker weiterleitet. Alle anderen Zugriffe gehen über den ersten virtuellen Host.