From 03511fcb3f930e42d8f1f66f7502e76225556f85 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (ws06-vm)" Date: Sun, 18 May 2025 13:13:53 +0200 Subject: [PATCH] initial --- Dockerfile | 27 ++++++ README.md | 129 +++++++++++++++++++++++++++- bin/start.sh | 13 +++ config/privoxy.config | 3 + config/torrc | 36 ++++++++ config/torrc.orig | 191 ++++++++++++++++++++++++++++++++++++++++++ docker-compose.yaml | 14 ++++ 7 files changed, 410 insertions(+), 3 deletions(-) create mode 100644 Dockerfile create mode 100644 bin/start.sh create mode 100644 config/privoxy.config create mode 100644 config/torrc create mode 100644 config/torrc.orig create mode 100644 docker-compose.yaml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e72d335 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM debian:bullseye + +RUN apt-get update && apt-get install -y \ + curl \ + gnupg2 \ + apt-transport-https \ + ca-certificates + +RUN curl -fsSL https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \ + | gpg --dearmor -o /usr/share/keyrings/tor-archive-keyring.gpg + +RUN echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org bullseye main" \ + > /etc/apt/sources.list.d/tor.list + +RUN apt-get update && apt-get install -y \ + tor \ + privoxy \ + nyx \ + deb.torproject.org-keyring && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +COPY ./bin/start.sh /start.sh +RUN chmod +x /start.sh + +EXPOSE 9001 9030 8118 + +CMD ["/start.sh"] diff --git a/README.md b/README.md index ffe6696..775c9e4 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,131 @@ -# template_repository +# 🧅 Tor Relay mit Privoxy (Docker-basiert) +Dieses Repository stellt eine vollständige Docker-Umgebung bereit, um ein **Tor Relay** mit optionalem HTTP-Proxy via **Privoxy** zu betreiben. +Es handelt sich **nicht um einen Exit Node** – der Traffic verlässt in der aktuellen Konfiguration dein Relay niemals in Richtung Internet. +Optional kann Privoxy über das Tor-Netzwerk als lokaler HTTP-Proxy verwendet werden. +--- + +## 📦 Aufbau & Features + +- Tor Relay +- Persistentes `DataDirectory` +- Privoxy als lokaler Tor-Proxy +- Nyx zur Überwachung direkt im Container enthalten +- **Optionales Docker-Image verfügbar** über: + `repo.techniverse.net/docker-hosted/tor-docker:latest` + +--- + +## 🚀 Schnellstart + +--- + +Das Projektverzeichnis sollte wie folgt aufgebaut sein: + +``` +tor-proxy/ +├── bin/ +│ └── start.sh +├── config/ +│ ├── privoxy.config +│ └── torrc +├── data/ +├── docker-compose.yaml +└── Dockerfile +``` + +--- + +## ⚙️ Konfiguration + +### `docker-compose.yaml`: + +```yaml +services: + tor-privoxy: + image: repo.techniverse.net/docker-hosted/tor-docker:latest + container_name: tor-project + hostname: tor-project + ports: + - "9001:9001" + - "9030:9030" + - "8118:8118" + volumes: + - ./data:/var/lib/tor + - ./config/torrc:/etc/tor/torrc:ro + - ./config/privoxy.config:/etc/privoxy/config:ro + restart: always +``` + +--- + +### `torrc` (Beispielkonfiguration): + +```conf +RunAsDaemon 1 +ORPort 9001 +DirPort 9030 +Nickname DEIN-NICKNAME +ContactInfo Admin +ControlPort 9051 +CookieAuthentication 1 +RelayBandwidthRate 11520 KBytes +RelayBandwidthBurst 19200 KBytes +ExitPolicy reject *:* +Log notice file /var/log/tor/notices.log +Address relay.domain.com +DataDirectory /var/lib/tor +``` + +--- + +### `privoxy.config`: + +```conf +listen-address 0.0.0.0:8118 +forward-socks5t / 127.0.0.1:9050 . +logfile /dev/stdout +``` + +--- + +## 🧪 Überwachung mit Nyx + +```bash +docker exec -it tor-project nyx +``` + +> Nyx ist ein terminalbasiertes Tor-Monitoring-Tool für Relay-Status, Traffic und Routing-Daten. + +--- + +## 🌐 Proxy-Nutzung + +Privoxy kann als Proxy in Apps oder Browsern genutzt werden: + +| Proxy-Typ | Host | Port | +|-----------|------------------------------|--------| +| HTTP | `relay.domain.com` | `8118` | + +--- + +## 🔐 Wichtige Hinweise + +- Gib **keine persönlichen Daten** in `ContactInfo` oder öffentlich preis. +- Öffne **keinen Exit-Port**, wenn du nicht weißt, was du tust. +- Betreibe Privoxy **nicht ohne Auth oder IP-Restriktion**, wenn öffentlich erreichbar. + +--- + +## 📚 Quellen & weiterführende Links + +- [Anleitung: Tor-Server in Docker](https://it-service-commander.de/tutorials/docker/tor-server-in-docker-container-auf-dem-vps-installieren/) + +--- + +🛠 Viel Spaß beim Aufbau deines eigenen Tor-Relays! -Wichtig: Link für Lizenz anpassen. @@ -11,5 +134,5 @@ Wichtig: Link für Lizenz anpassen.

-License License | Matrix Matrix | Matrix Mastodon +License License | Matrix Matrix | Matrix Mastodon

\ No newline at end of file diff --git a/bin/start.sh b/bin/start.sh new file mode 100644 index 0000000..6d3e7f0 --- /dev/null +++ b/bin/start.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +tor -f /etc/tor/torrc & + +sleep 10 + +if [ -t 1 ]; then + echo "Starte Nyx zur Überwachung von Tor..." + nyx & +fi + +exec privoxy --no-daemon /etc/privoxy/config diff --git a/config/privoxy.config b/config/privoxy.config new file mode 100644 index 0000000..ee92d82 --- /dev/null +++ b/config/privoxy.config @@ -0,0 +1,3 @@ +listen-address 0.0.0.0:8118 +forward-socks5t / 127.0.0.1:9050 . +logfile /dev/stdout diff --git a/config/torrc b/config/torrc new file mode 100644 index 0000000..01c8520 --- /dev/null +++ b/config/torrc @@ -0,0 +1,36 @@ +## Tor Relay Konfiguration – Middle Relay ohne Exit +## Erstellt für Patrick / techniverse.net + +RunAsDaemon 1 + +## === ORPort: Annahme eingehender Verbindungen von anderen Relays === +ORPort 9001 + +## === Nickname für dein Relay === +Nickname DEIN-NICKNAME + +## === Kontaktinfo für Fehlermeldungen (z. B. Abuse Reports) === +ContactInfo Admin + +## === ControlPort: Schnittstelle für Tools wie Nyx / Steuerung === +ControlPort 9051 +CookieAuthentication 1 + +## === Bandbreitenlimitierung === +RelayBandwidthRate 11520 KBytes # 90 Mbit/s dauerhaft +RelayBandwidthBurst 19200 KBytes # 150 Mbit/s für kurze Bursts + +## === ExitPolicy: Kein Exit-Traffic erlauben (Middle-Only Relay!) === +ExitPolicy reject *:* + +## === Directory Mirror: Anderen Relays/Clients Tor-Metadaten bereitstellen === +DirPort 9030 # Erlaubt, dass dein Node Verzeichnisdaten spiegelt + +## === Logging (optional, empfehlenswert) === +Log notice file /var/log/tor/notices.log + +# === (optional) Wenn du einen DNS-Namen für dein Relay hast === +Address relay.domain.com + +# === (optional) DataDirectory explizit setzen, sonst Standard (z. B. /var/lib/tor) === +DataDirectory /var/lib/tor diff --git a/config/torrc.orig b/config/torrc.orig new file mode 100644 index 0000000..d9f67cc --- /dev/null +++ b/config/torrc.orig @@ -0,0 +1,191 @@ +## Configuration file for a typical Tor user +## Last updated 9 October 2013 for Tor 0.2.5.2-alpha. +## (may or may not work for much older or much newer versions of Tor.) +## +## Lines that begin with "## " try to explain what's going on. Lines +## that begin with just "#" are disabled commands: you can enable them +## by removing the "#" symbol. +## +## See 'man tor', or https://www.torproject.org/docs/tor-manual.html, +## for more options you can use in this file. +## +## Tor will look for this file in various places based on your platform: +## https://www.torproject.org/docs/faq#torrc + +## Tor opens a socks proxy on port 9050 by default -- even if you don't +## configure one below. Set "SocksPort 0" if you plan to run Tor only +## as a relay, and not make any local application connections yourself. +#SocksPort 9050 # Default: Bind to localhost:9050 for local connections. +#SocksPort 192.168.0.1:9100 # Bind to this address:port too. + +## Entry policies to allow/deny SOCKS requests based on IP address. +## First entry that matches wins. If no SocksPolicy is set, we accept +## all (and only) requests that reach a SocksPort. Untrusted users who +## can access your SocksPort may be able to learn about the connections +## you make. +#SocksPolicy accept 192.168.0.0/16 +#SocksPolicy reject * + +## Logs go to stdout at level "notice" unless redirected by something +## else, like one of the below lines. You can have as many Log lines as +## you want. +## +## We advise using "notice" in most cases, since anything more verbose +## may provide sensitive information to an attacker who obtains the logs. +## +## Send all messages of level 'notice' or higher to /var/log/tor/notices.log +#Log notice file /var/log/tor/notices.log +## Send every possible message to /var/log/tor/debug.log +#Log debug file /var/log/tor/debug.log +## Use the system log instead of Tor's logfiles +#Log notice syslog +## To send all messages to stderr: +#Log debug stderr + +## Uncomment this to start the process in the background... or use +## --runasdaemon 1 on the command line. This is ignored on Windows; +## see the FAQ entry if you want Tor to run as an NT service. +#RunAsDaemon 1 + +## The directory for keeping all the keys/etc. By default, we store +## things in $HOME/.tor on Unix, and in Application Data\tor on Windows. +#DataDirectory /var/lib/tor + +## The port on which Tor will listen for local connections from Tor +## controller applications, as documented in control-spec.txt. +#ControlPort 9051 +## If you enable the controlport, be sure to enable one of these +## authentication methods, to prevent attackers from accessing it. +#HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C +#CookieAuthentication 1 + +############### This section is just for location-hidden services ### + +## Once you have configured a hidden service, you can look at the +## contents of the file ".../hidden_service/hostname" for the address +## to tell people. +## +## HiddenServicePort x y:z says to redirect requests on port x to the +## address y:z. + +#HiddenServiceDir /var/lib/tor/hidden_service/ +#HiddenServicePort 80 127.0.0.1:80 + +#HiddenServiceDir /var/lib/tor/other_hidden_service/ +#HiddenServicePort 80 127.0.0.1:80 +#HiddenServicePort 22 127.0.0.1:22 + +################ This section is just for relays ##################### +# +## See https://www.torproject.org/docs/tor-doc-relay for details. + +## Required: what port to advertise for incoming Tor connections. +#ORPort 9001 +## If you want to listen on a port other than the one advertised in +## ORPort (e.g. to advertise 443 but bind to 9090), you can do it as +## follows. You'll need to do ipchains or other port forwarding +## yourself to make this work. +#ORPort 443 NoListen +#ORPort 127.0.0.1:9090 NoAdvertise + +## The IP address or full DNS name for incoming connections to your +## relay. Leave commented out and Tor will guess. +#Address noname.example.com + +## If you have multiple network interfaces, you can specify one for +## outgoing traffic to use. +# OutboundBindAddress 10.0.0.5 + +## A handle for your relay, so people don't have to refer to it by key. +#Nickname ididnteditheconfig + +## Define these to limit how much relayed traffic you will allow. Your +## own traffic is still unthrottled. Note that RelayBandwidthRate must +## be at least 20 KB. +## Note that units for these config options are bytes per second, not bits +## per second, and that prefixes are binary prefixes, i.e. 2^10, 2^20, etc. +#RelayBandwidthRate 100 KB # Throttle traffic to 100KB/s (800Kbps) +#RelayBandwidthBurst 200 KB # But allow bursts up to 200KB/s (1600Kbps) + +## Use these to restrict the maximum traffic per day, week, or month. +## Note that this threshold applies separately to sent and received bytes, +## not to their sum: setting "4 GB" may allow up to 8 GB total before +## hibernating. +## +## Set a maximum of 4 gigabytes each way per period. +#AccountingMax 4 GB +## Each period starts daily at midnight (AccountingMax is per day) +#AccountingStart day 00:00 +## Each period starts on the 3rd of the month at 15:00 (AccountingMax +## is per month) +#AccountingStart month 3 15:00 + +## Administrative contact information for this relay or bridge. This line +## can be used to contact you if your relay or bridge is misconfigured or +## something else goes wrong. Note that we archive and publish all +## descriptors containing these lines and that Google indexes them, so +## spammers might also collect them. You may want to obscure the fact that +## it's an email address and/or generate a new address for this purpose. +#ContactInfo Random Person +## You might also include your PGP or GPG fingerprint if you have one: +#ContactInfo 0xFFFFFFFF Random Person + +## Uncomment this to mirror directory information for others. Please do +## if you have enough bandwidth. +#DirPort 9030 # what port to advertise for directory connections +## If you want to listen on a port other than the one advertised in +## DirPort (e.g. to advertise 80 but bind to 9091), you can do it as +## follows. below too. You'll need to do ipchains or other port +## forwarding yourself to make this work. +#DirPort 80 NoListen +#DirPort 127.0.0.1:9091 NoAdvertise +## Uncomment to return an arbitrary blob of html on your DirPort. Now you +## can explain what Tor is if anybody wonders why your IP address is +## contacting them. See contrib/tor-exit-notice.html in Tor's source +## distribution for a sample. +#DirPortFrontPage /etc/tor/tor-exit-notice.html + +## Uncomment this if you run more than one Tor relay, and add the identity +## key fingerprint of each Tor relay you control, even if they're on +## different networks. You declare it here so Tor clients can avoid +## using more than one of your relays in a single circuit. See +## https://www.torproject.org/docs/faq#MultipleRelays +## However, you should never include a bridge's fingerprint here, as it would +## break its concealability and potentionally reveal its IP/TCP address. +#MyFamily $keyid,$keyid,... + +## A comma-separated list of exit policies. They're considered first +## to last, and the first match wins. If you want to _replace_ +## the default exit policy, end this with either a reject *:* or an +## accept *:*. Otherwise, you're _augmenting_ (prepending to) the +## default exit policy. Leave commented to just use the default, which is +## described in the man page or at +## https://www.torproject.org/documentation.html +## +## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses +## for issues you might encounter if you use the default exit policy. +## +## If certain IPs and ports are blocked externally, e.g. by your firewall, +## you should update your exit policy to reflect this -- otherwise Tor +## users will be told that those destinations are down. +## +## For security, by default Tor rejects connections to private (local) +## networks, including to your public IP address. See the man page entry +## for ExitPolicyRejectPrivate if you want to allow "exit enclaving". +## +#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports but no more +#ExitPolicy accept *:119 # accept nntp as well as default exit policy +#ExitPolicy reject *:* # no exits allowed + +## Bridge relays (or "bridges") are Tor relays that aren't listed in the +## main directory. Since there is no complete public list of them, even an +## ISP that filters connections to all the known Tor relays probably +## won't be able to block all the bridges. Also, websites won't treat you +## differently because they won't know you're running Tor. If you can +## be a real relay, please do; but if not, be a bridge! +#BridgeRelay 1 +## By default, Tor will advertise your bridge to users through various +## mechanisms like https://bridges.torproject.org/. If you want to run +## a private bridge, for example because you'll give out your bridge +## address manually to your friends, uncomment this line: +#PublishServerDescriptor 0 \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..6d9200a --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,14 @@ +services: + tor-privoxy: + image: repo.techniverse.net/docker-hosted/tor-docker:latest + container_name: tor-project + hostname: tor-project + ports: + - "9001:9001" + - "9030:9030" + - "8118:8118" + volumes: + - ./data:/var/lib/tor + - ./config/torrc:/etc/tor/torrc:ro + - ./config/privoxy.config:/etc/privoxy/config:ro + restart: always