Onion-Services von nextcloud und forgejo kommen sich in die Quere #52

Closed
opened 2024-02-21 10:19:48 +01:00 by qbi · 11 comments
Owner

Auf lagerkrautgibt es zwei Onion-Dienste:

  1. http://kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion für https://git.kraut.space
  2. http://jd3vodji36spb6ynznjflpalodxnasjwlgebfwei6sgxlp7fbvowakad.onion für https://cloud.kraut.space

Im Moment kommen sich die beiden in die Quere. Hier muss die Konfiguration angepasst werden. Im Moment funktioniert der Onion-Service für die NextCloud nicht.

Auf `lagerkraut`gibt es zwei Onion-Dienste: 1. http://kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion für https://git.kraut.space 2. http://jd3vodji36spb6ynznjflpalodxnasjwlgebfwei6sgxlp7fbvowakad.onion für https://cloud.kraut.space Im Moment kommen sich die beiden in die Quere. Hier muss die Konfiguration angepasst werden. Im Moment funktioniert der Onion-Service für die NextCloud nicht.
qbi added the
Kind/Bug
Priority
Medium
labels 2024-02-21 10:19:48 +01:00
qbi self-assigned this 2024-02-21 10:19:48 +01:00
qbi added this to the IT-Infrastruktur project 2024-02-21 10:19:48 +01:00
Author
Owner

Ich habe das jetzt so gelöst, dass der Onion-Service und Webserver über Port 9080 für Forgejo verbunden sind. Wenn also jemand https://git.kraut.space aufruft, wird mittels Onion-Location-Header informiert, dass die Seite auf http://kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion:9080/ zu finden ist. Der Tor-Browser springt dann automatisch zu der Adresse.

Die Seite http://jd3vodji36spb6ynznjflpalodxnasjwlgebfwei6sgxlp7fbvowakad.onion/ wird nach wie vor über Port 80 abgewickelt und bedurfte keiner Änderungen.

Ich habe das jetzt so gelöst, dass der Onion-Service und Webserver über Port 9080 für Forgejo verbunden sind. Wenn also jemand https://git.kraut.space aufruft, wird mittels `Onion-Location`-Header informiert, dass die Seite auf http://kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion:9080/ zu finden ist. Der Tor-Browser springt dann automatisch zu der Adresse. Die Seite http://jd3vodji36spb6ynznjflpalodxnasjwlgebfwei6sgxlp7fbvowakad.onion/ wird nach wie vor über Port 80 abgewickelt und bedurfte keiner Änderungen.
qbi closed this issue 2024-02-26 15:47:06 +01:00
Owner

Was kam sich in die quere? Tor oder nginx?

Was kam sich in die quere? Tor oder nginx?
Author
Owner

Der Aufruf einer Onion-Domain wird an Tor weitergeleitet. In dem Fall geht http://jd3vodji36spb6ynznjflpalodxnasjwlgebfwei6sgxlp7fbvowakad.onion/ zum lokalen Tor-Daemon auf Port 80. Der nimmt den Request entgegen und ist so eingestellt, dass er den lokal (127.0.0.1 oder ::1) an Port 80 weitergibt. Der Daemon auf Port 80 verwertet nun die Anfrage. Im Falle des Webservers.

Man könnte auch so etwas wie eotk oder onionspray einsetzen. Damit lassen sich die Anfragen geschickter handhaben. Das war mir an der Stelle nur zuviel Einrichtungsaufwand.

Der Aufruf einer Onion-Domain wird an Tor weitergeleitet. In dem Fall geht http://jd3vodji36spb6ynznjflpalodxnasjwlgebfwei6sgxlp7fbvowakad.onion/ zum lokalen Tor-Daemon auf Port 80. Der nimmt den Request entgegen und ist so eingestellt, dass er den lokal (127.0.0.1 oder ::1) an Port 80 weitergibt. Der Daemon auf Port 80 verwertet nun die Anfrage. Im Falle des Webservers. Man könnte auch so etwas wie [`eotk`](https://github.com/alecmuffett/eotk) oder [`onionspray`](https://tpo.pages.torproject.net/onion-services/onionspray/) einsetzen. Damit lassen sich die Anfragen geschickter handhaben. Das war mir an der Stelle nur zuviel Einrichtungsaufwand.
Owner

Verstehe ich das richtig, dass der tor-daemon das Request via [::1]:80 an nginx schiebt, und der nun im Request keinen passenden Host-Header für einen seiner vserver sieht, da das einfach im Request fehlt???

Verstehe ich das richtig, dass der tor-daemon das Request via `[::1]:80` an `nginx` schiebt, und der nun im Request keinen passenden `Host`-Header für einen seiner vserver sieht, da das einfach im Request fehlt???
Author
Owner

Die Onion-Services können für unterschiedliche TCP-basierte Dienste verwendet werden und reichen die Daten einfach an den TCP-Port weiter. Das heißt, Tor weiß nichts, vom nginx.

Was ich vermute, dass schon der Tor-Browser bestimmte HTTP-Header strippt und die Anfrage vergleichsweise "clean" durchgereicht wird.

Die Onion-Services können für unterschiedliche TCP-basierte Dienste verwendet werden und reichen die Daten einfach an den TCP-Port weiter. Das heißt, Tor weiß nichts, vom nginx. Was ich vermute, dass schon der Tor-Browser bestimmte HTTP-Header strippt und die Anfrage vergleichsweise "clean" durchgereicht wird.
Owner

Ok, ich nehme an git auf :9080 ist ein non-issue?

Ok, ich nehme an git auf `:9080` ist ein non-issue?
Author
Owner

Was meinst du?

Was meinst du?
Owner

Ich meinte dein Ticket-Close-Comment zu der Lösung, dass git.kraut.space auf *.onion:9080 läuft.
Die Frage ist, ob das eine gültige super-good-enough-Lösung ist oder ob das eine unsaubere Notlösung ist, die es zu verbessern gilt.

Ich meinte dein Ticket-Close-Comment zu der Lösung, dass `git.kraut.space` auf `*.onion:9080` läuft. Die Frage ist, ob das eine gültige `super-good-enough`-Lösung ist oder ob das eine unsaubere Notlösung ist, die es zu verbessern gilt.
Author
Owner

Das ist eine Ich-hatte-keine-bessere-Idee-Lösung, sofern man auf die mitgelieferten Sachen setzt.

  1. Man könnte den HiddenServicePort auch auf eine Domain zeigen lassen, also (git|cloud).kraut.space. Dann würde der Abruf gegen die Domain laufen. Hier ist das "Problem", dass wir zu HTTPS umleiten und der Onion-Service nur über HTTP daher kommt.
  2. Wenn man eotk oder onionspray verwendet, kann man das besser proxyn und hat allgemein mehr Möglichkeiten. Zum einen ist das aber wieder Software, die neben irgendwelchen Paketmanagern u.ä. läuft. Zum anderen müsste man sich hier auch mehr Gedanken zu HTTPS und Zertifikaten machen. Das heißt, entweder man baut Vertrauen zu den selbst erzeugten Zertifikaten auf oder man nutzt Zertifikate von DigiCert oder HARICA, die dann aber Geld kosten.

Wenn du noch eine gute Idee hast, wie man das besser machen könnte, immer her damit. 😉

Das ist eine Ich-hatte-keine-bessere-Idee-Lösung, sofern man auf die mitgelieferten Sachen setzt. 1. Man könnte den `HiddenServicePort` auch auf eine Domain zeigen lassen, also `(git|cloud).kraut.space`. Dann würde der Abruf gegen die Domain laufen. Hier ist das "Problem", dass wir zu HTTPS umleiten und der Onion-Service nur über HTTP daher kommt. 2. Wenn man `eotk` oder `onionspray` verwendet, kann man das besser proxyn und hat allgemein mehr Möglichkeiten. Zum einen ist das aber wieder Software, die neben irgendwelchen Paketmanagern u.ä. läuft. Zum anderen müsste man sich hier auch mehr Gedanken zu HTTPS und Zertifikaten machen. Das heißt, entweder man baut Vertrauen zu den selbst erzeugten Zertifikaten auf oder man nutzt Zertifikate von DigiCert oder HARICA, die dann aber Geld kosten. Wenn du noch eine gute Idee hast, wie man das besser machen könnte, immer her damit. 😉
Owner

When in doubt about port usage, use sockets instead?


/etc/nginx/sites-available/forgejo-onion:

listen unix:/run/nginx/tor-kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion.sock;

forgejo-tor:

HiddenServicePort 80 unix:/run/nginx/tor-kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion.sock

tor-%i.service braucht something something After=nginx.service

When in doubt about port usage, use sockets instead? --- `/etc/nginx/sites-available/forgejo-onion`: ```nginx listen unix:/run/nginx/tor-kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion.sock; ``` `forgejo-tor`: ```conf HiddenServicePort 80 unix:/run/nginx/tor-kqfdxjpzqt345qplxy6yrgkj4rotfokskmxyqz5a4t4yewg6n62ea2ad.onion.sock ``` `tor-%i.service` braucht something something `After=nginx.service`
Author
Owner

tor-%i.service braucht something something After=nginx.service

In dem Falle würde ich sagen, dass das nur der tor@forgejo.service braucht. Andere Services bauen evtl. nicht auf nginx auf.

Vielen Dank für den Hint. Ich habe das so umgesetzt.

> `tor-%i.service` braucht something something `After=nginx.service` In dem Falle würde ich sagen, dass das nur der `tor@forgejo.service` braucht. Andere Services bauen evtl. nicht auf `nginx` auf. Vielen Dank für den Hint. Ich habe das so umgesetzt.
Sign in to join this conversation.
No milestone
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Krautspace/Unkraut#52
No description provided.