Reverse Proxies

Reverse Proxies haben oft einen entscheidenden Nachteil. Es müssen auf den Servern auf die Anfragen verteilt werden sollen Anpassungen vorgenommen werden. Das betrifft beispielsweise das Logging. Damit der Webserver die richtige Adresse im Logfile vermerkt muss hier auf X-Forwardedfor umgestellt werden

Schwieriger und vor allem fehleranfälliger sind beliebte IP-Access Rules wie

Order Deny, Allow
Deny from All
Allow 

Da der Reverse Proxy meisst im internen Netzt steht sind plötzlich interne Ressources für alle Internet-Teilnehmer sichtbar.
Die Probleme würde eine transparenter Reverse Proxy lösen. Also ein Proxy bei dem die Clients die IP-Adresse des anfragenden Rechners sehen können.


Die Seagate Dockstar ist eine schönes Spielzeug für einen schmalen Taler Um den Reverse Proxy HAProxy transparent zu konfigurieren sind folgende Schritte notwendig

opkg install iptables-mod-tproxy iptables-mod-ipopt iptables-mod-conntrack-extra iptables-mod-nat-extra
opkg install haproxy

Bei dieser Konfiguration muss darauf geachtet werden, dass Server die gebalanced werden sollen die HAProxy Maschine als Gateway benutzen. Es muss als jedweder Verkehr über diesen fliessen.

Die Netz-Konfig dafür könnte wie folgt aussehen:

config 'interface' 'lan'
        option 'ifname' 'eth0'
        option 'proto' 'static'
        option 'type'   'none'
        option 'ipaddr' '192.168.1.1'
        option 'netmask' '255.255.255.0'
        
config 'interface' 'mgmt'
        option 'ifname' 'eth0.111'
        option 'proto' 'static'
        option 'type'   'bridge'
        option 'ipaddr' '192.168.0.254'
        option 'netmask' '255.255.255.0'
  1. Anfragende Clients befinden sich in lan
  2. Webserver befinden sich in VLAN 111
  3. Webserver haben als Default Gateway die 192.168.0.254 z.b. Webserver server01 192.168.0.82 Port 80

Folgende FW-Regeln sind notwendig:

#/etc/firewall.user
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
  • TCP Verbindungen werden in DIVERT geworfen
  • alles was in DIVERT landet wird mit einer 1 markiert
  • Erlaube Verkehr in DIVERT landet

Eingehende Verbindung werden also markiert, dannach an den Reverse Proxy zugestellt und dieser stellt die Anfrage transparent and dien Webserver. Jetzt muss nur noch der Rückweg gesichert werden. Dazu wäre es gut, wenn der Verkehr der mit 1 markiert wurde, wenn er vom Webserver zurückkommt als lokal behandelt werden würde, damit sich der Reverse Proxy dafür zuständig fühlt. Das lässt sich mit:

#/etc/rc.local
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

erledigen

Zuguterletzt braucht die Konfiguration des HAProxy eine Anpassung. So muss in dem oder den Backend die Option

source 0.0.0.0 usesrc clientip

gesetzt werden.

Der Vollständigkeit halber kommt nun die vollständige Konfiguration:

global
        uid 0
        gid 0
        daemon
 
defaults        
       mode    http
       retries 5
       maxconn         120000
       contimeout      130000
       clitimeout      130000
       srvtimeout      130000
       option  redispatch
       
listen app1
       bind :8080
       mode http
       #transparent do not use transparent until your 100 percent sure
       maxconn 200
       stats enable
       stats uri /
    
frontend  http-port-80
       bind :80
       mode http
       maxconn 5000
       option dontlognull
       default_backend www

backend www
        mode http
        balance roundrobin
        source 0.0.0.0 usesrc clientip
        server server01 192.168.0.82:80 maxconn 200 check

HAProxy kann auch transparent im TCP Modus betrieben werden. Damit lässt sich nicht nur http, sondern auch

  • HTTPS
  • SMTP, IMAP, IMAPS, POP, RDP
  • u.v.a.
  • balancen

Blog - Beiträge