Aktuelle Änderungen - Suchen:

Wichtige Seiten

Hilfestellungen

Externe Links

Alle Inhalte dieses Wikis, soweit nicht anders angegeben, unter Creative Commons CC-BY-SA

FreiheitsfooÜberTor-UnsereOnion-Services

Unsere Freiheitsfoo-Seiten sind seit dem 10.01.2016 auch direkt über Tor erreichbar:

Zu Debugging-Zwecken wird derzeit noch auf den Servern, welche die Kommunikation zwischen Freiheitsfoo und dem Tor-Netzwerk hersetellen protokolliert!

Blog:

Wiki:

1.  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:

1.1  Konfigurationen

torrc
$ 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

2.  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 nur noch Fehler beim Zugriff auf freiheitsfoo.de. gar nichts mehr.

2.1  Suchen-Ersetzen

Absolute 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;

2.2  Zertifikat

4grifreiheityou3 läuft wieder: LetsEncrypt-Zertifikat wurde nachgepflegt

3.  Mehr Tips zum Onions einrichten

https://help.riseup.net/de/security/network-security/tor/onionservices-best-practices

Bearbeiten - Versionen - Druckansicht - Aktuelle Änderungen - Suchen
Zuletzt geändert am 11.04.2016 21:24 Uhr