Hallo liebe Freetz-Gemeinde,
ich habe offenkundig ein Problem mit iptables, denn die von mir gesetzten Regeln greifen offenbar nicht (oder nur sehr unzuverlässig).
Ich möchte den Tor-Socks Proxy wie auch Privoxy für einen Clienten fix voreinstellen.
Dazu habe ich in der rc.custom folgendes eingetragen:
Der erste Teil dient dazu, sämtliche Anfragen an Port 80 (also http, kein https - das kann Privoxy im intercepted-mode nicht händeln) nach Privoxy umzuleiten:
iptables -t nat -A PREROUTING -p tcp -i lan -s 192.168.3.10 --dport 80 -j REDIRECT --to 8118
mit
[ -z "$(grep accept-intercepted-requests /var/mod/etc/privoxy/config)" ] && echo "accept-intercepted-requests 1" >> /var/mod/etc/privoxy/config
wird der intercepted mode von Privoxy überhaupt erst aktiviert (eine schlauere Möglichkeit als die rc.custom scheint es dazu offenbar nicht zu geben, oder?). Im Webinterface lassen sich keine Optionen an die Config anhängen. Witziger Weise scheint DAS offenbar soweit zu funktionieren. Das reicht mir aber natürlich nicht
Nun möchte ich diesem Clienten nämlich auch .onion-Domains zugänglich machen.
Dafür habe ich zunächst in der torrc folgende Änderungen vorgenommen (wieder via rc.custom, anders gehts ja scheinbar nicht??):
[ -z "$(grep VirtualAddrNetwork /var/mod/etc/tor/torrc)" ] && echo "VirtualAddrNetwork 10.192.0.0/10" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsOnResolve /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsOnResolve 1" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsSuffixes /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsSuffixes .exit,.onion" >> /var/mod/etc/tor/torrc
[ -z "$(grep TransPort /var/mod/etc/tor/torrc)" ] && echo "TransPort 9040" >> /var/mod/etc/tor/torrc
[ -z "$(grep DNSPort /var/mod/etc/tor/torrc)" ] && echo "DNSPort 9053" >> /var/mod/etc/tor/torrc
Also das lokale Netz konfiguriert, auf die die .onions gemappt werden sollen, und noch weitere Änderungen vorgenommen, die laut verschiedenen Seiten im Netz immer gleich oder ähnlich beschrieben sind).
Nun läuft also lokal ein DNS auf Port 9053, außerdem kann ich lokal auf der Fritzbox auch auf .onion-Domains connecten (getestet mit Telnet).
ABER: Ich will ja nicht lokal connecten, sondern der Client soll das tun.
Daher hab ich mir noch folgende iptables-Regeln überlegt:
iptables -t nat -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 53 -j REDIRECT --to-ports 9053
>> Leitet die DNS-Anfragen von der IP auf den 9053 auf dem Router um (also den lokalen TOR-DNS).
iptables -t nat -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --syn -j REDIRECT --to-ports 9040
>>Leitet alles was sonst noch von der IP kommt auf 9040 auf dem Router um.
iptables -t filter -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --dport 9040 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 9053 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --dport 9053 -j ACCEPT
iptables -t filter -A OUTPUT ! -o lo -s 192.168.3.10 -j DROP
>>Am Ende noch ein paar Regeln, die den Traffic zurücksenden bzw. Droppen, falls er wo anders hin möchte.
So.
Nun bin ich mir leider überhaupt nicht sicher, ob die Regeln richtig sind (scheinbar ja nicht, es klappt ja nicht), bzw. etwas genauer:
--ob der Syntax korrekt ist (insbesondere mit dem -s IP bin ich mir da nicht sicher)
--ob die Reihenfolge der Regeln korrekt ist?
Ich bin kein großer Iptables-Experte (bzw. meine letzten größeren Versuche mit Firewalls waren mit pf auf OpenBSD, und das fand ich einfacher ).
Es wäre toll wenn mir noch jemand ein paar Tips geben könnte. Danke!
Hier nochmals die gesamte rc.custom am Stück:
modprobe ip_tables
modprobe iptable_filter
modprobe x_tables
modprobe xt_tcpudp
modprobe ipt_REDIRECT
modprobe ip_nat
modprobe iptable_nat
iptables -t nat -A PREROUTING -p tcp -i lan -s 192.168.3.10 --dport 80 -j REDIRECT --to 8118
[ -z "$(grep accept-intercepted-requests /var/mod/etc/privoxy/config)" ] && echo "accept-intercepted-requests 1" >> /var/mod/etc/privoxy/config
[ -z "$(grep VirtualAddrNetwork /var/mod/etc/tor/torrc)" ] && echo "VirtualAddrNetwork 10.192.0.0/10" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsOnResolve /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsOnResolve 1" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsSuffixes /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsSuffixes .exit,.onion" >> /var/mod/etc/tor/torrc
[ -z "$(grep TransPort /var/mod/etc/tor/torrc)" ] && echo "TransPort 9040 IsolateClientAddr IsolateClientProtocol IsolateDestAddr" >> /var/mod/etc/tor/torrc
[ -z "$(grep DNSPort /var/mod/etc/tor/torrc)" ] && echo "DNSPort 9053" >> /var/mod/etc/tor/torrc
iptables -t filter -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --dport 9040 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 9053 -j ACCEPT
iptables -t nat -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 53 -j REDIRECT --to-ports 9053
iptables -t nat -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --syn -j REDIRECT --to-ports 9040
iptables -t nat -A OUTPUT -p tcp -d 10.192.0.0/10 -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT ! -o lo -s 192.168.3.10 -j DROP
ich habe offenkundig ein Problem mit iptables, denn die von mir gesetzten Regeln greifen offenbar nicht (oder nur sehr unzuverlässig).
Ich möchte den Tor-Socks Proxy wie auch Privoxy für einen Clienten fix voreinstellen.
Dazu habe ich in der rc.custom folgendes eingetragen:
Der erste Teil dient dazu, sämtliche Anfragen an Port 80 (also http, kein https - das kann Privoxy im intercepted-mode nicht händeln) nach Privoxy umzuleiten:
iptables -t nat -A PREROUTING -p tcp -i lan -s 192.168.3.10 --dport 80 -j REDIRECT --to 8118
mit
[ -z "$(grep accept-intercepted-requests /var/mod/etc/privoxy/config)" ] && echo "accept-intercepted-requests 1" >> /var/mod/etc/privoxy/config
wird der intercepted mode von Privoxy überhaupt erst aktiviert (eine schlauere Möglichkeit als die rc.custom scheint es dazu offenbar nicht zu geben, oder?). Im Webinterface lassen sich keine Optionen an die Config anhängen. Witziger Weise scheint DAS offenbar soweit zu funktionieren. Das reicht mir aber natürlich nicht
Nun möchte ich diesem Clienten nämlich auch .onion-Domains zugänglich machen.
Dafür habe ich zunächst in der torrc folgende Änderungen vorgenommen (wieder via rc.custom, anders gehts ja scheinbar nicht??):
[ -z "$(grep VirtualAddrNetwork /var/mod/etc/tor/torrc)" ] && echo "VirtualAddrNetwork 10.192.0.0/10" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsOnResolve /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsOnResolve 1" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsSuffixes /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsSuffixes .exit,.onion" >> /var/mod/etc/tor/torrc
[ -z "$(grep TransPort /var/mod/etc/tor/torrc)" ] && echo "TransPort 9040" >> /var/mod/etc/tor/torrc
[ -z "$(grep DNSPort /var/mod/etc/tor/torrc)" ] && echo "DNSPort 9053" >> /var/mod/etc/tor/torrc
Also das lokale Netz konfiguriert, auf die die .onions gemappt werden sollen, und noch weitere Änderungen vorgenommen, die laut verschiedenen Seiten im Netz immer gleich oder ähnlich beschrieben sind).
Nun läuft also lokal ein DNS auf Port 9053, außerdem kann ich lokal auf der Fritzbox auch auf .onion-Domains connecten (getestet mit Telnet).
ABER: Ich will ja nicht lokal connecten, sondern der Client soll das tun.
Daher hab ich mir noch folgende iptables-Regeln überlegt:
iptables -t nat -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 53 -j REDIRECT --to-ports 9053
>> Leitet die DNS-Anfragen von der IP auf den 9053 auf dem Router um (also den lokalen TOR-DNS).
iptables -t nat -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --syn -j REDIRECT --to-ports 9040
>>Leitet alles was sonst noch von der IP kommt auf 9040 auf dem Router um.
iptables -t filter -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --dport 9040 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 9053 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --dport 9053 -j ACCEPT
iptables -t filter -A OUTPUT ! -o lo -s 192.168.3.10 -j DROP
>>Am Ende noch ein paar Regeln, die den Traffic zurücksenden bzw. Droppen, falls er wo anders hin möchte.
So.
Nun bin ich mir leider überhaupt nicht sicher, ob die Regeln richtig sind (scheinbar ja nicht, es klappt ja nicht), bzw. etwas genauer:
--ob der Syntax korrekt ist (insbesondere mit dem -s IP bin ich mir da nicht sicher)
--ob die Reihenfolge der Regeln korrekt ist?
Ich bin kein großer Iptables-Experte (bzw. meine letzten größeren Versuche mit Firewalls waren mit pf auf OpenBSD, und das fand ich einfacher ).
Es wäre toll wenn mir noch jemand ein paar Tips geben könnte. Danke!
Hier nochmals die gesamte rc.custom am Stück:
modprobe ip_tables
modprobe iptable_filter
modprobe x_tables
modprobe xt_tcpudp
modprobe ipt_REDIRECT
modprobe ip_nat
modprobe iptable_nat
iptables -t nat -A PREROUTING -p tcp -i lan -s 192.168.3.10 --dport 80 -j REDIRECT --to 8118
[ -z "$(grep accept-intercepted-requests /var/mod/etc/privoxy/config)" ] && echo "accept-intercepted-requests 1" >> /var/mod/etc/privoxy/config
[ -z "$(grep VirtualAddrNetwork /var/mod/etc/tor/torrc)" ] && echo "VirtualAddrNetwork 10.192.0.0/10" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsOnResolve /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsOnResolve 1" >> /var/mod/etc/tor/torrc
[ -z "$(grep AutomapHostsSuffixes /var/mod/etc/tor/torrc)" ] && echo "AutomapHostsSuffixes .exit,.onion" >> /var/mod/etc/tor/torrc
[ -z "$(grep TransPort /var/mod/etc/tor/torrc)" ] && echo "TransPort 9040 IsolateClientAddr IsolateClientProtocol IsolateDestAddr" >> /var/mod/etc/tor/torrc
[ -z "$(grep DNSPort /var/mod/etc/tor/torrc)" ] && echo "DNSPort 9053" >> /var/mod/etc/tor/torrc
iptables -t filter -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --dport 9040 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 9053 -j ACCEPT
iptables -t nat -A OUTPUT -p udp -s 192.168.3.10 -m udp --dport 53 -j REDIRECT --to-ports 9053
iptables -t nat -A OUTPUT -p tcp -s 192.168.3.10 -m tcp --syn -j REDIRECT --to-ports 9040
iptables -t nat -A OUTPUT -p tcp -d 10.192.0.0/10 -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT ! -o lo -s 192.168.3.10 -j DROP