Transparenter Proxy

Aufgabe und Motivation

Unterstützung im Linux-Kern

/usr/src/linux/Documentation/networking/tproxy.txt

Wichtig ist es, dass sowohl Punkt 1: "Lokale sockets" wie auch dann Punkt 2 vollzogen werden. Ich habe dieses zuerst als Alternativen aufgefasst, aber dies funktioniert nicht.

Folgendes Script dient als Test zur Zensur unserer Infnet-Seite:

#!/bin/bash
cmd=$1
case $cmd in
  start)
    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
    ip rule add fwmark 1 lookup 100
    ip route add local 0.0.0.0/0 dev lo table 100
    # Zensur der Infnet-Seite
    iptables -t mangle -A PREROUTING -p tcp -d 80.150.88.13/32 --dport 80 -j TPROXY --tproxy-mark 0x1/0x1  --on-port 2000 
  ;;
  stop)
    iptables -t mangle -F
    iptables -t mangle -X DIVERT
    ip rule delete fwmark 0x1
    ip route flush table 100
  ;;
  show)
    iptables -t mangle -L
    ip rule show
    ip route show table 100
    ;; 
  *)
     echo "Usage: $0 start|stop|show"
  ;;
esac

Versuch mit bischlauch

Das obige Script leitet die TCP-Verbindungen statt auf 80.150.88.13/32 auf Port 2000 auf den selben Rechner weiter. Dort muss

bischlauch -trans 2000
gestartet sein.
Die option -trans fuehrt zur Einschaltung der socket-Option (SOL_IP, IP_TRANSPARENT) wie in /usr/src/linux/Documentation/networking/tproxy.txt spezifiziert.

Und siehe da, man kann nun dem Aufrufer etwas schreiben ...

Interessant ist folgendes:

 # netstat -n -t 
Aktive Internetverbindungen (ohne Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 80.150.88.13:80         192.168.1.20:45927      TIME_WAIT
Man sieht, dass netstat die entführte Adresse als eine seiner Localen Adresse ausgibt !

Wenn man einen Server ohne die socket-Option (SOL_IP, IP_TRANSPARENT) startet (wie bischlauch 2000 ohne Option -trans), bleibt der client im connect(2) hängen, d.h. die IP-Pakete werden wahrscheinlich beim Server verworfen.


Rudolf Weber Informatik- und Netzwerkverein Ravensburg e.V