Self-hosting op het Dark Web

Deze site is nu bereikbaar via Tor als een hidden service, op een .onion-adres dat alleen binnen het Tor-netwerk wordt opgelost.

Je kunt de site openen in de Tor Browser. Er is geen certificeringsinstantie (CA), geen DNS en geen openbaar IP-adres—het adres is direct afgeleid van een publieke sleutel, en de verbinding is end-to-end versleuteld door Tor zelf.

Tor verzendt en versleutelt je verkeer terwijl het via duizenden door vrijwilligers beheerde servers gaat, zodat geen enkele partij kan koppelen wie je bent aan wat je doet; een hidden service breidt die anonimiteit uit naar de server zelf. Het is gebouwd door het non-profit Tor Project, dat mensenrechten en vrijheden bevordert via vrije software en open netwerken, zodat iedereen het internet kan gebruiken zonder tracking, surveillance en censuur. Het netwerk werkt alleen omdat mensen het gebruiken, dus overweeg hen te steunen of een relay te draaien—je bijdrage helpt miljoenen mensen om elke dag veilig en privé online te blijven.

De hidden service

Installeer Tor en richt een hidden service naar een lokale poort. Bewerk hiervoor /etc/tor/torrc:

HiddenServiceDir /var/lib/tor/blog/
HiddenServicePort 80 127.0.0.1:8080

De directory moet een toegewezen pad zijn dat eigendom is van Tor—niet je webroot. Tor slaat de private sleutel en het hostname-bestand van de service hier op en eist dat het eigenaar is van deze map (chmod 700, gebruiker debian-tor). Als je Tor naar je site-bestanden laat wijzen, weigert Tor op te starten.

Start Tor opnieuw op en lees het gegenereerde adres:

$ sudo systemctl restart tor@default
$ sudo cat /var/lib/tor/blog/hostname
dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion

De site serveren

Tor stuurt poort 80 van de onion-dienst door naar 127.0.0.1:8080, dus de webserver hoeft alleen daar te luisteren. Voeg hiervoor een nginx server-block toe—zonder TLS, zonder HTTP/2 en zonder QUIC, aangezien Tor via gewoon TCP communiceert en zijn eigen versleuteling verzorgt.

server {
    listen 127.0.0.1:8080;
    server_name dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion;
    root /srv/tor.david.alvarezrosa.com;
    index index.html;
    error_page 404 /404/index.html;

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

Laad nginx opnieuw en de site is live op Tor.

Bouwen voor de onion-omgeving

Een statische site verwerkt de basis-URL in absolute links. Een build voor het normale internet (clearnet) zou bezoekers dus terugsturen naar het clearnet-domein, zelfs wanneer de site via Tor wordt geserveerd. De oplossing is om een tweede kopie te bouwen met de onion-URL als basis-URL:

$ hugo --minify --baseURL="http://dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion/"

De deploy-pipeline doet dit automatisch: elke push bouwt de site één keer per doel—clearnet en Tor—en rsynct beide naar hun eigen webroot, zodat de twee synchroon blijven lopen zonder handmatig werk.

Zie First Steps on a New Server voor de onderliggende machine; de volledige configuratie staat in mijn homelab-repository, en de repository van de site bevat de GitHub Actions-workflow die de Tor-kopie bouwt en implementeert.

Dat is alles. Je kunt deze site via Tor lezen op: dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion