Wichtige Seiten Hilfestellungen Externe Links Alle Inhalte dieses Wikis, soweit nicht anders angegeben, unter Creative Commons CC-BY-SA |
Main /
FreiheitsfooÜberTor-UnsereOnion-ServicesUnsere Freiheitsfoo-Seiten waren seit dem 10.01.2016 auch direkt über Tor erreichbar: Da aktuelle Tor-Versionen die alten Onion-Service-Adressen nicht mehr unterstützen sind oafadq2h6kxeaahu.onion und 74i677egkh3zlk6r.onion nicht mehr aktiv. Blog: Wiki: Kleine technische Dokumentation (oafadq2h6kxeaahu und 74i677egkh3zlk6r)Sobald Zeit ist, soll die technische Dokumentation noch einmal überarbeitet werden. Hier nun aber erst einmal die Konfiguration im Schnelldurchlauf. Die jeweils ersten Adressen laufen, technisch bedingt, über einen Privoxy auf einer anderen Maschine. Dieser dient als Proxy und stellt einerseits die Freiheitsfoo-Seiten über das Tor-Netzwerk bereit, andererseits leitet er Nutzeranfragen über eine TLS-gesicherte Verbindung zum eigentlichen Server weiter. Das Zertifikat ist mittels Certificate-Pinning gegen böswilligen Austausch geschützt. Tor, stunnel und Privoxy laufen in einem ElectroBSD-Jail, das über pf mit der Außenwelt verbunden ist: $ jls -j freiheitsfoo JID IP Address Hostname Path 26 127.0.1.10 freiheitsfoo /usr/jails/freiheitsfoo $ grep freiheitsfoo /etc/pf.conf freiheitsfoo_jail = 127.0.1.10 nat on $ext_if from { $elektrobier1_jail, $freiheitsfoo_jail } to any -> $ext_ip_2 Die Privoxy-Version ist 3.0.24, frühere Versionen unterstützen "+forward-override{forward-webserver ...}" noch nicht. Bei den anderen Anwendungen ist die Version nicht so wichtig. Im folgenden sind hier nun einmal kurz die verwendeten Konfigurationen notiert: Konfigurationentorrc$ cat /usr/jails/freiheitsfoo/usr/local/etc/tor/torrc SocksPort 0 RunAsDaemon 1 LogMessageDomains 1 LogTimeGranularity 1 Log notice file /var/log/tor/notices.log #Log debug file /var/log/tor/debug.log HiddenServiceDir /var/db/tor/freiheitsfoo-wiki-hs HiddenServicePort 80 127.0.0.1:8118 HiddenServiceDir /var/db/tor/freiheitsfoo-de-hs HiddenServicePort 80 127.0.0.1:8118 Privoxy .action$ cat /usr/jails/freiheitsfoo/usr/local/etc/privoxy/freiheitsfoo.action {+block{Hostname not white-listed}} / # Forward to stunnel port that is forwarding to freiheitsfoo.de {-block \ +filter{freiheitsfoo-hs} \ +server-header-filter{freiheitsfoo-hs} \ +client-header-filter{freiheitsfoo-wiki-hs} \ +forward-override{forward-webserver 127.0.0.1:80} \ } 74i677egkh3zlk6r.onion/ # Forward to stunnel port that is forwarding to freiheitsfoo.de {-block \ +filter{freiheitsfoo-hs} \ +server-header-filter{freiheitsfoo-hs} \ +client-header-filter{freiheitsfoo-de-hs} \ +forward-override{forward-webserver 127.0.0.1:81} \ } oafadq2h6kxeaahu.onion Privoxy .filter$ cat /usr/jails/freiheitsfoo/usr/local/etc/privoxy/freiheitsfoo.filter CLIENT-HEADER-FILTER: freiheitsfoo-wiki-hs Rewrite client headers from 74i677egkh3zlk6r.onion to wiki.freiheitsfoo.de s@74i677egkh3zlk6r\.onion@wiki.freiheitsfoo.de@ig FILTER: freiheitsfoo-hs Rewrite URLs in content from wiki.freiheitsfoo.de and freiheitsfoo.de to the hidden services s@(['" ])https?://wiki\.freiheitsfoo\.de@$1http://74i677egkh3zlk6r.onion@ig s@(['" ])https?://(www\.)?freiheitsfoo\.de@$1http://oafadq2h6kxeaahu.onion@ig CLIENT-HEADER-FILTER: freiheitsfoo-de-hs Rewrite client headers from oafadq2h6kxeaahu.onion to freiheitsfoo.de s@oafadq2h6kxeaahu\.onion@freiheitsfoo.de@ig SERVER-HEADER-FILTER: freiheitsfoo-hs Rewrite URLs in server headers from wiki.freiheitsfoo.de and freiheitsfoo.de to the hidden services s@([<'" ])https?://wiki\.freiheitsfoo\.de@$1http://74i677egkh3zlk6r.onion@ig s@([<'" ])https?://(www\.)?freiheitsfoo\.de@$1http://oafadq2h6kxeaahu.onion@ig stunnel$ cat /usr/jails/freiheitsfoo/usr/local/etc/stunnel/stunnel.conf setuid = stunnel setgid = nogroup ; PID file is created inside the chroot jail (if enabled) pid = /var/run/stunnel/stunnel.pid #debug = info debug = debug output = /var/log/stunnel.log sslVersion = TLSv1.2 CAFile = /usr/local/etc/stunnel/freiheitsfoo.pem Verify = 3 [freiheitsfoo.de] client = yes accept = 81 connect = 178.63.68.97:443 sni = freiheitsfoo.de [wiki.freiheitsfoo.de] client = yes accept = 80 connect = 178.63.68.97:443 sni = wiki.freiheitsfoo.de Kleine technische Dokumentation (4grifreiheityou3)Blog: Wiki: 4grifreiheityou3.onion läuft auf Linux. torrc-server ... HiddenServiceDir /srv/tor_hs/hserver4-4grifre/ HiddenServicePort 443 127.0.0.1:10444 HiddenServicePort 80 127.0.0.1:10081 TransPort 9400 DNSPort 5400 ... Die Dokuqualität bei nginx ist mies. Beispiele sind rar und mager. Oft ist nicht klar, wie ein Stringargument einer Anweisung interpretiert wird oder wie escapen kann oder muss. So klappt's: nginx.conf user xxx; error_log /var/log/xxx/nginx_error.log notice; events { worker_processes 1; worker_priority 15; worker_connections 1024; } http { server_names_hash_bucket_size 64; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 127.0.0.1:10081; error_log /var/log/xxx/4grifreiheityou3.onion.log; # access_log /var/log/xxx/4grifreiheityou3.onion_access.log; access_log off; server_name 4grifreiheityou3.onion; return 301 https://$server_name$request_uri; } ssl_certificate /srv/4grifreiheityou3.onion/ssl/cert.pem; ssl_certificate_key /srv/4grifreiheityou3.onion/ssl/key.pem; ssl_session_cache shared:SSL_firstName:1m; ssl_session_timeout 5m; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; ssl_prefer_server_ciphers on; proxy_connect_timeout 10; proxy_send_timeout 15; proxy_read_timeout 20; server { server_tokens off; server_name 4grifreiheityou3.onion; server_name_in_redirect off; port_in_redirect off; listen 127.0.0.1:10444 ssl; error_log /var/log/xxx/4grifreiheityou3.onion.log; # access_log /var/log/xxx/4grifreiheityou3.onion_access.log; access_log off; proxy_ssl_server_name on; location / { proxy_ssl_session_reuse on; proxy_ssl_trusted_certificate /srv/4grifreiheityou3.onion/ssl/ffsc.pem; proxy_ssl_verify on; proxy_ssl_verify_depth 4; proxy_http_version 1.1; gunzip on; gzip_disable "."; proxy_buffering off; proxy_set_header Referer ""; proxy_set_header Accept-Encoding ""; proxy_pass https://freiheitsfoo.de/; proxy_set_header Host freiheitsfoo.de; sub_filter_types *; sub_filter_once off; sub_filter freiheitsfoo.de 4grifreiheityou3.onion; proxy_redirect https://4grifreiheityou3.onion https://freiheitsfoo.de; proxy_redirect http://4grifreiheityou3.onion https://freiheitsfoo.de; } location ~ /\. { deny all; } } server { server_tokens off; server_name wiki.4grifreiheityou3.onion; server_name_in_redirect off; port_in_redirect off; listen 127.0.0.1:10444 ssl; error_log /var/log/xxx/4grifreiheityou3.onion.log; # access_log /var/log/xxx/4grifreiheityou3.onion_access.log; access_log off; proxy_ssl_server_name on; client_body_temp_path /var/cache/xxx/4grifreiheityou3/clientbody; location / { proxy_ssl_session_reuse on; proxy_ssl_trusted_certificate /srv/4grifreiheityou3.onion/ssl/ffsc.pem; proxy_ssl_verify on; proxy_ssl_verify_depth 4; proxy_http_version 1.1; gunzip on; gzip_disable "."; proxy_buffering off; proxy_set_header Referer ""; proxy_set_header Accept-Encoding ""; proxy_pass https://wiki.freiheitsfoo.de/; proxy_set_header Host freiheitsfoo.de; subs_filter action='https?://wiki.freiheitsfoo.de action='https://wiki.4grifreiheityou3.onion r; subs_filter href='https?://wiki.freiheitsfoo.de href='https://wiki.4grifreiheityou3.onion r; subs_filter href='https?://freiheitsfoo.de href='https://4grifreiheityou3.onion r; subs_filter src='https?://wiki.freiheitsfoo.de src='https://wiki.4grifreiheityou3.onion r; subs_filter src='https?://freiheitsfoo.de src='https://4grifreiheityou3.onion r; subs_filter_types text/html text/css text/xml; proxy_redirect https://wiki.4grifreiheityou3.onion https://wiki.freiheitsfoo.de;; proxy_redirect http://wiki.4grifreiheityou3.onion https://wiki.freiheitsfoo.de; proxy_cookie_domain 4grifreiheityou3.onion freiheitsfoo.de; proxy_pass_header Set-Cookie; proxy_pass_header P3P; location ~ /\. { deny all; } } proxy_cache_path /var/cache/xxx/nginx levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; } } Weiterleitung (Proxy-Requests gehen wieder durch Tor) iptables -A OUTPUT ! -d 127.0.0.1/32 -p udp -m owner --uid-owner xxx -j REDIRECT --to-ports 5400 iptables -A OUTPUT ! -d 127.0.0.1/32 -p tcp -m owner --uid-owner xxx -j REDIRECT --to-ports 9400 iptables -A OUTPUT -p udp -m owner --uid-owner xxx -j ACCEPT iptables -A OUTPUT -p tcp -m owner --uid-owner xxx -j ACCEPT iptables -A OUTPUT -m owner --uid-owner xxx -j DROP nginx sollte chroot laufen Optimierungsversuch: upstream freiheitsfoo.de { server freiheitsfoo.de:443; keepalive 600; } upstream wiki.freiheitsfoo.de { server wiki.freiheitsfoo.de:443; keepalive 600; } ... location { proxy_set_header Connection "Keep-Alive"; Geloggt werden Suchen-ErsetzenAbsolute Links nach *.freiheitsfoo.de sollten auf .onion umgeschrieben werden, um die korrekte Funktion des Wiki (ohne Zurückspringen auf nicht .onion) zu garantieren. Privoxy macht das toll. Für nginx gibt es https://github.com/yaoweibin/ngx_http_substitutions_filter_module Ich hab es mit dem Modul neu compiliert und siehe da: statt sub_filter_once off; sub_filter freiheitsfoo.de 4grifreiheityou3.onion; # bloß nicht! subs_filter action='https?://wiki.freiheitsfoo.de action='https://wiki.4grifreiheityou3.onion r; subs_filter href='https?://wiki.freiheitsfoo.de href='https://wiki.4grifreiheityou3.onion r; subs_filter href='https?://freiheitsfoo.de href='https://4grifreiheityou3.onion r; subs_filter src='https?://wiki.freiheitsfoo.de src='https://wiki.4grifreiheityou3.onion r; subs_filter src='https?://freiheitsfoo.de src='https://4grifreiheityou3.onion r; subs_filter_types text/html text/css text/xml; Zertifikat4grifreiheityou3 läuft wieder: LetsEncrypt-Zertifikat wurde nachgepflegt Mehr Tips zum Onions einrichtenhttps://help.riseup.net/de/security/network-security/tor/onionservices-best-practices |