Onion-Location ist eine einfache Möglichkeit, eine Onion-Seite bei den Benutzern bekannt zu machen. Du kannst entweder einen Webserver so konfigurieren, dass er eine Onion-Location-HTTP-Kopfzeile mitgibt, oder ein HTML-<meta>-Attribut in der Webseite hinzufügen.

Damit der Header gültig ist, müssen die folgenden Bedingungen erfüllt sein:

  • Der Onion-Location-Wert muss eine gültige URL mit „http:“- oder „https:“-Protokoll und einem .onion-Hostnamen sein.
  • Die Webseite, die den Onion-Location-Header definiert, muss über HTTPS bereitgestellt werden.
  • Die Webseite, die den Onion-Location-Header definiert, darf keine Onion-Seite sein.

Die Befehle auf dieser Seite zur Verwaltung des Web-Servers basieren auf Debian-ähnlichen Betriebssystemen und können von anderen Systemen abweichen. Prüf die Dokumentation deines Webservers und deines Betriebssystems.

Apache

Um diese Kopfzeilen in Apache 2.2 oder höher zu konfigurieren, musst du die Module headers und rewrite aktivieren und die Virtual-Host-Datei der Website bearbeiten.

Schritt 1. Aktiviere Kopfzeilen, Rewrite der Module, dann neu laden von Apache2

 $ sudo a2enmod headers rewrite

 $ sudo systemctl reload apache2

Wenn du eine Fehlermeldung erhältst, ist etwas schiefgelaufen und du kannst nicht fortfahren, bis du herausgefunden hast, warum es nicht funktioniert hat.

Schritt 2. Füge die Onion-Location-Kopfzeilen zur Konfigurationsdatei deines virtuellen Hosts hinzu

Header set Onion-Location "http://your-onion-address.onion%{REQUEST_URI}s"

wobei deine-Onion-Adresse.onion die Adresse des Onion-Dienstes, den du umleiten möchtest, und {REQUEST_URI} die Pfadkomponente des angeforderten URI ist, z.B. „/index.html“.

Virtual-Host-Beispiel:

     <VirtualHost *:443>
       ServerName <your-website.tld>
       DocumentRoot /path/to/htdocs

       Header set Onion-Location "http://your-onion-address.onion%{REQUEST_URI}s"

       SSLEngine on
       SSLCertificateFile "/path/to/www.example.com.cert"
       SSLCertificateKeyFile "/path/to/www.example.com.key"
     </VirtualHost>

Schritt 3. Lade Apache neu

Lade den Apache2-Dienst neu, damit deine Konfigurationsänderungen wirksam werden:

 $ sudo systemctl reload apache2 

Wenn du eine Fehlermeldung erhältst, ist etwas schiefgelaufen und du kannst nicht fortfahren, bis du herausgefunden hast, warum es nicht funktioniert hat.

Schritt 4. Teste deine Onion-Location

Um zu testen, ob Onion-Location funktioniert, rufe z. B. die HTTP-Header der Website ab:

 $ wget --server-response --spider your-website.tld

Suche den Eintrag onion-location und die Adresse des Onion-Dienstes. Oder öffne die Website im Tor-Browser, und eine lila Pille erscheint in der Adressleiste.

Nginx

Um Onion-Location-Kopfzeilen zu konfigurieren, sollte der Dienstbetreiber zunächst einen Onion-Dienst konfigurieren.

Schritt 1. Erstelle einen Onion-Dienst, indem du Folgendes in torrc einstellst:

HiddenServiceDir /var/lib/tor/hs-my-website/
HiddenServiceVersion 3
HiddenServicePort 80 unix:/var/run/tor-hs-my-website.sock

Schritt 2. Website-Konfigurationsdatei bearbeiten

Füge in /etc/nginx/conf.d/<your-website>.conf die Onion-Location-Kopfzeilen und die Adresse des Onion-Dienstes hinzu. Zum Beispiel:

    add_header Onion-Location http://<your-onion-address>.onion$request_uri;

Die Konfigurationsdatei mit der Onion-Location sollte wie folgt aussehen:

server {
    listen 80;
    listen [::]:80;

    server_name <your-website.tld>;

    location / {
       return 301 https://$host$request_uri;
    }

}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name <your-website.tld>;

    # managed by Certbot - https://certbot.eff.org/
    ssl_certificate /etc/letsencrypt/live/<hostname>/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/<hostname>/privkey.pem;

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header Onion-Location http://<your-onion-address>.onion$request_uri;

    # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    access_log /var/log/nginx/<hostname>-access.log;

    index index.html;
    root /path/to/htdocs;

    location / {
            try_files $uri $uri/ =404;
    }
}

server {
        listen unix:/var/run/tor-hs-my-website.sock;

        server_name <your-onion-address>.onion;

        access_log /var/log/nginx/hs-my-website.log;

        index index.html;
        root /path/to/htdocs;
}

Schritt 3. Teste Website-Konfiguration

 $ sudo nginx -t

Der Webserver sollte bestätigen, dass die neue Syntax funktioniert:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Schritt 4. Neustart von nginx

 $ sudo nginx -s reload

Wenn du eine Fehlermeldung erhältst, ist etwas schiefgelaufen und du kannst nicht fortfahren, bis du herausgefunden hast, warum es nicht funktioniert hat.

Schritt 5. Test deiner Onion-Location

Um zu testen, ob Onion-Location funktioniert, rufe z. B. die HTTP-Header der Website ab:

 $ wget --server-response --spider your-website.tld

Suche den Eintrag onion-location und die Adresse des Onion-Dienstes. Oder öffne die Website im Tor-Browser, und eine lila Pille erscheint in der Adressleiste.

Caddy

Caddy bietet standardmäßig automatisches HTTPS, d.h. es stellt dein TLS-Zertifikat bereit und kümmert sich um die HTTP-zu-HTTPS-Umleitung für dich. Wenn du Caddy 2 verwendest, um Onion-Location-Kopfzeilen einzubinden, füge die folgende Deklaration in deine Caddy-Datei ein:

header Onion-Location http://<your-onion-address>.onion{path}

Wenn du eine statische Seite betreibst und die Onion-Adresse in einer $TOR_HOSTNAME-Umgebungsvariablen hast, wird deine Caddy-Datei wie folgt aussehen:

your-website.tld

header Onion-Location http://{$TOR_HOSTNAME}{path}
root * /var/www
file_server

Austesten: Teste es aus mit:

 $ wget --server-response --spider your-website.tld

Suche den Eintrag onion-location und die Adresse des Onion-Dienstes. Oder öffne die Webseite im Tor-Browser, und eine lila Pille erscheint in der Adressleiste.

Verwendung eines HTML-<meta>-Attributs

Das identische Verhalten von Onion-Location beinhaltet die Möglichkeit, es als HTML-<meta>-http-equiv-Attribut zu definieren. Dies kann von Webseiten verwendet werden, die es vorziehen (oder benötigen), eine Onion-Location zu definieren, indem sie den bereitgestellten HTML-Inhalt modifizieren, anstatt neue HTTP-Kopfzeilen hinzuzufügen. Die Onion-Location-Kopfzeilen wären gleichbedeutend mit <meta http-equiv="onion-location" content="http://<your-onion-service-address>.onion" />, die im HTML-Head-Element der Webseite hinzugefügt werden. Ersetze <your-onion-service-address.onion> durch den Onion-Dienst, den du umleiten möchtest.

Einschränkungen

HTML kann die angeforderte URL nicht lesen und dynamisch in den http-equiv-<meta>-Tag einfügen. Aus diesem Grund werden Nutzer immer auf die im Content-Teil des Meta-Tags angegebene .onion-URL umgeleitet, unabhängig davon, auf welcher Unterseite sie sich befinden.

Deshalb, falls möglich, empfehlen wir eine der oberen Methoden zu verwenden.

Mehr Informationen

Lies die Onion-Location-Spezifikation.