current state

This commit is contained in:
J4nis05 2024-06-24 20:48:13 +02:00
parent 9938284494
commit f52a6b79c7
27 changed files with 995 additions and 2 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
Wireguard/keys

87
ChatGPT-WireGuard.md Normal file
View File

@ -0,0 +1,87 @@
Certainly! Here's a step-by-step guide to set up policy-based routing for your scenario:
### Step 1: Enable IP Forwarding
1. Edit the sysctl configuration file:
```bash
sudo nano /etc/sysctl.conf
```
2. Uncomment or add the following line to enable IP forwarding:
```
net.ipv4.ip_forward = 1
```
3. Save and close the file.
4. Apply the changes:
```bash
sudo sysctl -p
```
### Step 2: Configure Policy-Based Routing
1. Create routing tables and rules for each domain.
```bash
# Create a new routing table for foo.com
echo "200 foo" >> /etc/iproute2/rt_tables
# Add a route to the foo.com routing table
sudo ip route add foo.com via 10.10.10.10 table foo
# Add a rule to use the foo.com routing table for traffic destined to foo.com
sudo ip rule add to 10.10.10.10 lookup foo
```
```bash
# Create a new routing table for bar.com
echo "201 bar" >> /etc/iproute2/rt_tables
# Add a route to the bar.com routing table
sudo ip route add bar.com via 10.10.10.20 table bar
# Add a rule to use the bar.com routing table for traffic destined to bar.com
sudo ip rule add to 10.10.10.20 lookup bar
```
### Step 3: Test the Configuration
1. Test connectivity to each domain from an external source to ensure that traffic is routed correctly.
### Step 4: Make Configuration Persistent (Optional)
1. Create a script to apply the routing rules on system startup. For example, create a script named `policy-routing.sh`:
```bash
sudo nano /etc/network/if-up.d/policy-routing.sh
```
2. Add the following contents to the script:
```bash
#!/bin/bash
# Add routing tables and rules
echo "200 foo" >> /etc/iproute2/rt_tables
ip route add foo.com via 10.10.10.10 table foo
ip rule add to 10.10.10.10 lookup foo
echo "201 bar" >> /etc/iproute2/rt_tables
ip route add bar.com via 10.10.10.20 table bar
ip rule add to 10.10.10.20 lookup bar
```
3. Make the script executable:
```bash
sudo chmod +x /etc/network/if-up.d/policy-routing.sh
```
4. The script will be automatically executed whenever a network interface is brought up.
### Notes:
- Ensure that the routing tables and rules are set up correctly. Errors can lead to misrouted traffic or network connectivity issues.
- Regularly monitor and test the setup to ensure it continues to function as expected, especially after system updates or changes to network configurations.
This guide should help you set up policy-based routing on your VPS to forward traffic based on domain names without relying on `iptables`. Adjust the configurations as necessary for your specific network setup and requirements.

View File

@ -0,0 +1,109 @@
Projektinitallisierungsantrag nach Vorlage von Hermes-gibb zum Projekt Raspydock.
#### Zweck des Dokuments
Der Projektinitialisierungsauftrag bildet die verbindliche Grundlage für die Freigabe der Phase Initialisierung. Er ist die Vereinbarung zwischen Auftraggeber und Projektleiter.
#### Projektübersicht
| Name | Value |
| ----------------- | ------------------------------------------------------------- |
| **Status** | Fertig |
| **Projektname** | Raspydock |
| **Projektleiter** | Nadja Ehrengruber |
| **Auftraggeber** | Janik Wyder |
| **Autoren** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli |
| **Verteiler** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli, Janik Wyder |
#### Änderungskontrolle, Prüfung, Genehmigung
| Version | Datum | Beschreibung, Bemerkung | Name oder Rolle |
| ------- | ---------- | ------------------------ | --------------- |
| 0.1 | 30.01.2024 | Dokument erstellt | Alle |
| 1.0 | 06.02.2024 | Dokument Fertig & abgabe | Alle |
#### Glossar
| Begriff / Abkürzung | Bedeutung |
| ------------------- | ------------------------------------- |
| bilateral | Im Gespräch Informationen austauschen |
#### Referenzen
| Referenz | Titel, Quelle |
| -------- | ------------- |
| \[1\] | ~~keine~~ |
| \[2\] | ~~keine~~ |
| \[3\] | ~~keine~~ |
### Inhalt
- [1. Ausgangslage](#Ausgangslage)
- [2. Ziele](#Ziele)
- [3. Rahmenbedingungen](#Rahmenbedingungen)
- [4. Aufwand](#Aufwand)
- [5. Kosten](#Kosten)
- [6. Termine](#Termine)
- [7. Ressourcen](#Ressourcen)
- [8. Kommunikation](#Kommunikation)
- [9. Risiken](#Risiken)
### Ausgangslage
Beim Projekt «Raspydock» geht es darum, auf einem Rasperry Pi Docker zu implementieren und darin verschiedene Services anzubieten, beziehungsweise laufen zu lassen. Wir stehen vor folgender Problemstellung, die wir bearbeiten werden:
Wir wollen Leuten, die nicht technisch versiert sind, das Hosten eines Programmes, eines Services oder einer Webseite, vereinfachen.
Um für die soeben genannte Herausforderung eine geeignete Lösung zu erarbeiten, wurden bereits einige Leistungen im Voraus erbracht. Janis Rölli, unser Projektmitglied mit dem meisten projektbezogenen Know-How, besitzt bereits die benötigte Hardware dazu. Ausserdem haben wir gemeinsamen Austausch die Idee ausgearbeitet und sie auch schon mit unserer Lehrperson, Gerhard Beutler besprochen.
### Ziele
Mit der Initialisierungsphase wollen wir mehrere Ziele erreichen. Einerseits wollen wir eine klare Ausgangslage für das Projekt schaffen. Andererseits wollen wir unsere Ziele in der Initialisierungsphase klar definieren. Die Grundlagen sowie der Auftrag des Projekts sollen ausgearbeitet und korrekt benannt werden. Zudem wollen wir die Rahmenbedingungen definieren. Als Produkt der Initialisierungsphase werden wir am Ende ein Dokument mit der Studie und eines mit dem Zeitplan haben.
### Rahmenbedingungen
Wir haben für die Initialisierung administrative, organisatorische, zeitliche und methodische Rahmenbedingungen. Wichtig ist, dass wir in der Projektgruppe gut organisiert sind und dass wir die Führung der Initialisierungsdokumente klar zuordnen. Wir können uns für diese Projektphase nach den Vorlagen, die wir von der gibb erhielten, richten. Als Projektmethode wurde HERMES vordefiniert, danach planen wir unser Projekt und gehen dementsprechend vor. Zeitlich sind für die Initialisierung drei Wochen vorgesehen.
### Aufwand
Wir rechnen mit einem Aufwand von etwa 11h es werden für die Initialisierung keine neuen Materialien benötigt. Jegliche Materialien z.B. (Notebooks, Software) sind bereits vorhanden.
### Kosten
Während der Initialisierungsphase werden keine Kosten anfallen, da die Mitarbeiter aus dem Projektteam nicht für die Arbeit entschädigt werden.
### Termine
| KW | Was? |
| ------- | --------------------------------------------------------------- |
| 10 | Abschluss der Initialisierungsphase |
| 12 | Abschluss der Konzeptphase |
| 20 | Abschluss der Realisierungsphase |
| 22 | Abschluss der Einführungsphase |
| 23 | Abschluss des Schlussberichts und Vorbereitung der Präsentation |
| 24 / 25 | Präsentation des Projekts |
| 26 | Reserve |
### Ressourcen
Während der Initialisierungsphase werden wir fast keine Ressourcen der Schule und keine vom Betrieb verwenden. Ausschliesslich das WLAN und die Word-Vorlagen des Moduls werden gebraucht werden. Dazu werden wir auf Feedback und Beratung von Herr Gerhard Beutler zurückgreifen.
Auf welche (im Betrieb oder der Schule) vorhandenen Ressourcen wird während der Initialisierungsphase zugegriffen?
### Kommunikation
Janik Wyder unser Auftraggeber und unser Team sind die Stakeholder des Projektes. Unser Team muss nicht informiert werden da wir das Projekt durchführen, aber Janik wird jede Woche bilateral informiert.
Ausserdem wird unser Lehrer Jede Woche im Unterricht über unsere Fortschritte informiert.
### Risiken
Die folgenden Risiken sind nach Eintretenswahrscheinlichkeit von 1 10 und dem Mass der Auswirkung von 1 10 beurteilt. In der letzten Spalte haben wir die zu ergreifenden Massnahmen beschrieben.
| Risiko | Eintretens-wahrscheinlichkeit | Mass der Auswirkung | Massnahmen |
| -------------------------------------------- | ----------------------------- | ------------------- | ---------- |
| Initialisierungsantrag wird nicht angenommen | 2 | 10 | Initialisierungsantrag sauber erstellen, bearbeiten und am Ende noch einmal überprüfen. |
| Hardwaredefekt | 5 | 5 | Damit dies nicht eintrifft, gehen wir sorgfältig mit der Hardware um. |
| Hackerangriff | | 3 | Wir werden auf die Sicherheit achten, zum Beispiel von der Schule aus per VPN daran arbeiten. Falls ein Hackerangriff geschieht, würden wir das Gerät neu aufsetzen. |
| Überschwemmung bei Janis zuhause | 1 | 8 | Da die Eintretenswahrscheinlichkeit im Winter sehr klein ist, werden wir hier keine Massnahmen ergreifen. |
| Projekt am Schluss wird nicht abgenommen | 4 | 1-10 | Auftraggeber ausreichend und oft über den Fortschritt informieren und sein Feedback einbauen. Damit es nicht eintrifft, bearbeiten wir die Projektphasen engagiert und korrekt. Für die Kunden hätte dieses Risiko eine grosse Auswirkung, da es nicht abgeschlossen werden würde. Für uns eine kleine, da für die Modulnote vor allem die Dokumentation und die Umsetzung bewertet wird. |
**Hiermit erteilt der Auftraggeber den Auftrag zur Durchführung der Initialisierungsphase des Projektes:**
> Unterschrift Auftraggeber (Janik Wyder) erfolgte: Gleis 2, HBF Bern, 06.02.2024
> Unterschrift Projektleitering (Nadja Ehrengruber) erfolgte: Bern, 13.02.2024

View File

@ -0,0 +1,213 @@
Initialisierungs Studie nach Vorlage von Hermes-gibb
#### Zweck des Dokuments
Die Initialisierungsstudie bewertet Machbarkeit, Erfolgsaussichten und definiert erste Richtlinien für Projekte durch grundlegende Analysen und Bewertungen, um den Startpunkt festzustellen und potenzielle Risiken anzugehen.
#### Projektübersicht
| Name | Value |
| ----------------- | ------------------------------------------------------------- |
| **Status** | In Arbeit |
| **Projektname** | Raspydock |
| **Projektleiter** | Nadja Ehrengruber |
| **Auftraggeber** | Janik Wyder |
| **Autoren** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli |
| **Verteiler** | Florian Lehmeier, Nadja Ehrengruber, Janis Rölli, Janik Wyder |
#### Änderungskontrolle, Prüfung, Genehmigung
| Version | Datum | Beschreibung, Bemerkung | Name oder Rolle |
| ------- | ---------- | ----------------------- | --------------- |
| 0.1 | 13.02.2024 | Dokument erstellt | Nadja |
| | | | |
| | | | |
| | | | |
#### Glossar
| Begriff / Abkürzung | Bedeutung |
| ------------------- | --------- |
| | |
#### Referenzen
| Referenz | Titel, Quelle |
| -------- | ------------- |
| \[1\] | ~~keine~~ |
| \[2\] | ~~keine~~ |
| \[3\] | ~~keine~~ |
### Inhalt
- [1 - Situationsanalyse](#1---situationsanalyse)
- [1.1 - Ausgangslage](#11---ausgangslage)
- [1.2 - Stärken](#12---stärken)
- [1.3 - Schwächen](#13---schwächen)
- [2 - Ziele](#2---ziele)
- [2.1 - Rahmenbedingungen](#21---rahmenbedingungen)
- [2.2 - Abgrenzung](#22---abgrenzung)
- [3 - Liste der Stakeholder](#3---liste-der-stakeholder)
- [4 - Anforderungen](#4---anforderungen)
- [5 - Lösungsvarianten](#5---lösungsvarianten)
- [5.1 - Variantenübersicht](#51---variantenübersicht)
- [5.2 - Beschreibung der Varianten](#52---beschreibung-der-varianten)
- [6 - Bewertung der Varianten (Tabelle)](#6---bewertung-der-varianten-tabelle)
- [7 - Lösungsbeschreibung](#7---lösungsbeschreibung)
- [8 - Projektplanung](#8---projektplanung)
- [9 - Empfehlung](#9---empfehlung)
- [10 - Projektfreigabe](#10---projektfreigabe)
### 1 - Situationsanalyse
#### 1.1 - Ausgangslage
Das Hosten von Webseiten und Services erfordert viel Kapazität. Hardware, Know-How, Zeit und Geduld. Beispielsweise braucht das Hosting viel Speicherplatz, RAM und CPU-Leistung. Dies können sich nicht alle Firmen oder Einzelunternehmer leisten. Deswegen suchen sie nach Lösungen, wie sie auf eine einfache Weise ihre Webseite erstellen können. Am praktischsten ist es doch, wenn man sich gar nicht um das technische kümmern muss. Genau diese Erleichterung wollen wir unseren Kunden mit unserem Projekt bieten.
#### 1.2 - Stärken
Heutzutage gibt es eine Vielzahl von Stärken für Unternehmen oder Einzelunternehmer, die Webseiten und Services hosten möchten, ohne über umfangreiche Ressourcen oder technisches Know-how zu verfügen. Cloud-Plattformen wie AWS, Google Cloud und Microsoft Azure bieten skalierbare Hosting-Lösungen ohne hohe Hardwareinvestitionen. Website-Baukasten-Plattformen wie Wix und Squarespace ermöglichen das Erstellen ansprechender Webseiten ohne technische Vorkenntnisse. Managed Hosting-Services nehmen Unternehmen die technische Verwaltung ab. Automatisierung und DevOps-Praktiken vereinfachen die Bereitstellung und Verwaltung von Anwendungen. Die Unterstützung durch die Entwickler-Community bietet Zugang zu umfangreichen Ressourcen und Best Practices im Bereich Hosting.
Bei unserem Projekt sollten wir sicherstellen, dass einige Punkte nicht vernachlässigt werden. Dazu gehören die Benutzerfreundlichkeit, Zuverlässigkeit und Stabilität der Plattform sowie deren Skalierbarkeit und Sicherheit. Darüber hinaus sollten wir darauf achten, dass der Kundensupport und die Dokumentation weiterhin effektiv sind. Diese Aspekte sind entscheidend für den Erfolg und die Zufriedenheit unserer Kunden.
#### 1.3 - Schwächen
Es gibt an der heutigen Situation auch Schwachpunkte. Diese wollen wir mit unserem Projekt verbessern.
| Nr. | Name | Beschreibung |
| --- | --------------------------------- | ------------ |
| S1 | Komplexität und technische Hürden | Viele Unternehmen und Einzelunternehmer könnten Schwierigkeiten haben, die technischen Anforderungen und Komplexitäten des Webhostings zu bewältigen. |
| S2 | Hohe Kosten | Die Einrichtung und Wartung einer Hosting-Infrastruktur kann kostspielig sein, insbesondere für Unternehmen mit begrenzten finanziellen Ressourcen. Dies können wir gut umgehen, da Janis die benötigte Hardware bereits besitzt. |
| S3 | Sicherheitsrisiken | Hosting-Infrastrukturen können anfällig für Sicherheitsbedrohungen wie Hacking und Datenverlust sein, insbesondere wenn sie nicht angemessen geschützt und gewartet werden. Darauf werden wir achtgeben, indem wir zum Beispiel von der Schule aus per VPN arbeiten werden. |
| S4 | Zeit- und Ressourcenaufwand | Die Einrichtung und Verwaltung einer Hosting-Infrastruktur erfordert Zeit und Ressourcen, die für Unternehmen und Einzelunternehmer möglicherweise knapp sind. Dies kann dazu führen, dass wichtige Ressourcen von anderen geschäftlichen Aufgaben abgezogen werden müssen, was die Effizienz und Produktivität beeinträchtigen kann. In diese Gefahr laufen wir nicht, da unsere Kernaufgabe das Projekt ist. Wir haben keine anderen geschäftlichen Aufgaben, bei welchen wir Zeit und Ressourcen verlieren könnten. |
### 2 - Ziele
**Muss-Ziele**
Im Folgenden beschreiben wir die Muss-Ziele unseres Projektes. Diese wollen wir unbedingt erreichen.
| Nr. | Beschreibung des Muss-Ziels | Behobener Schwachpunkt |
| --- | --------------------------- | ---------------------- |
| MZ1 | Möglichst lange Erhaltung der Hardware durch sorgfältigen und professionellen Umgang damit. | S2: Hohe Kosten<br><br>Es werden zusätzliche Kosten vermieden, da wir keine neue Hardware kaufen müssen. |
| MZ2 | Bis zur Kalenderwoche 22 soll eine benutzerfreundliche Website-Baukasten-Plattform implementiert werden, die es auch technisch weniger versierten Benutzern ermöglicht, ansprechende Webseiten zu erstellen. | S1: Komplexität und technische Hürden<br><br>Durch das bereits vorhandene Know-How und Recherche im Internet, können wir die benutzerfreundliche Plattform bereitstellen. |
| MZ3 | Gewährleisten der Sicherheit während des ganzen Projekts durch VPN-Verbindungen und Einhalten der Sicherheitsrichtlinien. | S3: Sicherheitsrisiken<br><br>Durch unsere Massnahmen wird die Sicherheit gewährleistet. |
| MZ4 | Implementierung einer automatisierten Hosting-Infrastruktur-Management-Lösung bis Kalenderwoche 22, die das Hosting von Websites und Services übernimmt, um den Aufwand für unsere Kunden zu reduzieren | S4: Zeit- und Ressourcenaufwand<br><br>Durch unsere Lösung erleichtern wir den Kunden die Arbeit und wir können uns ganz darauf konzentrieren, ohne daneben Zeit und Ressourcen an anderen Orten zu verlieren. |
| MZ5 | Erstellung und Abgabe aller Dokumente sowie die Vorbereitung und Haltung der Präsentation des Moduls 306. Parallel soll das Modul 300 bearbeitet werden. | |
**Kann-Ziele**
Wir haben noch einige Ziele formuliert, die wir anstreben werden, sofern wir mit den Muss-Zielen schnell vorankommen und noch verbleibende Zeit haben werden.
| Nr. | Beschreibung des optionalen Ziels |
| --- | --------------------------------- |
| OZ1 | Erstellung von Dokumentationen und Schulungsmaterial zu unserer Umgebung als PDF für die Kunden bis Kalenderwoche 25. |
| OZ2 | Integration von Analyse- und Reporting-Tools bis Kalenderwoche 22, um den Nutzern detaillierte Einblicke in die Leistung ihrer gehosteten Webseiten und Services zu bieten. |
| OZ3 | Einführung von Zwei-Faktor-Authentifizierung für unsere Plattform bis Kalenderwoche 22, um die Sicherheit zu erhöhen. |
#### 2.1 - Rahmenbedingungen
Das Projekt läuft im Rahmen des Moduls 306 der IET-gibb ab. Wir arbeiten während dem Unterricht am Dienstagmorgen daran und bei Bedarf zuhause. Die Hardware befindet sich bei Janis. Wenn wir von einem anderen Ort daran arbeiten, greifen wir per VPN darauf zu. Ausserdem organisieren wir und mündlich oder schriftlich über Teams im Projektteam. Wir sind auch immer wieder mit unserem Lehrer Gerhard Beutler im Austausch, wer als Ratgeber und Bewerter unseres Projekts tätig ist. Die zeitlichen Rahmenbedingungen sind der untenstehenden Tabelle zu entnehmen.
| KW | Was |
| ------- | --------------------------------------------------------------- |
| 10 | Abschluss der Initialisierungsphase |
| 12 | Abschluss der Konzeptphase |
| 20 | Abschluss der Realisierungsphase |
| 22 | Abschluss der Einführungsphase |
| 23 | Abschluss des Schlussberichts und Vorbereitung der Präsentation |
| 24 / 25 | Präsentation des Projekts |
| 26 | Reserve |
#### 2.2 - Abgrenzung
```
Wo sind die Grenzen Ihres Projektes? Was alles wird durch Ihr Vorhaben explizit nicht abgedeckt?
```
### 3 - Liste der Stakeholder
Von unserem Projekt sind die Personen betroffen, die in der Tabelle aufgeführt sind. Daneben ist noch zu lesen, welche Rolle sie in unserem Projekt haben.
| Wer | Rolle |
| ----------------- | ----------------------------- |
| Florian Lehmeier | Projektteammitglied |
| Janis Rölli | Projektteammitglied |
| Nadja Ehrengruber | Projektleiterin |
| Janik Wyder | Auftraggeber |
| Gerhard Beutler | Berater, Bewerter, Lehrperson |
Florian, Janis und Nadja bilden das Projektteam, Nadja wirkt als Projektleiterin. Gemeinsam wollen wir das Projekt erfolgreich durchführen. Wir sind immer wieder mit dem Auftraggeber in Kontakt. Er hat unser Projekt bereits freigegeben und wir werden ihm ebenfalls die Studie zur Kontrolle und Unterschrift vorlegen. Anschliessend werden wir die Studie an Herrn Beutler abgeben, um von ihm eine Rückmeldung zu erhalten.
### 4 - Anforderungen
| Nr. | Anforderung | Bearbeitetes Ziel |
| --- | ----------- | ----------------- |
| A1 | Regelmässige Wartung der Hardwarekomponenten, also regelmäßige Überprüfungen, Reinigungen und Aktualisierungen. | MZ1: Verlängerung der Lebensdauer der Hardware |
| A2 | Schulung des Personals in Bezug auf den sachgemäßen Umgang mit der Hardware und die Durchführung von Wartungsmaßnahmen. | MZ1: Verlängerung der Lebensdauer der Hardware |
| A3 | Regelmäßige Aktualisierung der Firmware und Treiber der Hardwarekomponenten, um die Leistung und Sicherheit zu verbessern und Kompatibilitätsprobleme zu minimieren | MZ1: Verlängerung der Lebensdauer der Hardware |
| A4 | Entwicklung eines einfach bedienbaren Systems für das Erstellen von Websites. Es soll auch von technisch weniger versierten Benutzern verstanden werden. | MZ2: Implementierung einer benutzerfreundlichen Website-Baukasten-Plattform |
| A5 | Integration einer guten Dokumentation, welche die Benutzer anleitet. | OZ1: Implementierung einer benutzerfreundlichen Website-Baukasten-Plattform |
| A6 | Einrichtung eines Virtual Private Network (VPN) für sichere Verbindungen und den Schutz vor externen Bedrohungen. | MZ3: Gewährleistung der Sicherheit während des gesamten Projekts |
| A7 | Regelmäßige Sicherheitsaudits und Kontrollen, um potenzielle Schwachstellen zu identifizieren und zu beheben. | MZ3: Gewährleistung der Sicherheit während des gesamten Projekts |
| A8 | Entwicklung einer benutzerfreundlichen Oberfläche für das Management und die Überwachung von Hosting-Ressourcen, einschließlich der automatischen Skalierung und Lastverteilung. | MZ4: Implementierung einer automatisierten Hosting-Infrastruktur-Management-Lösung |
| A9 | Ermöglichung der Verwaltung der bereitgestellten Services und Webseiten für den Kunden. | MZ4: Implementierung einer automatisierten Hosting-Infrastruktur-Management-Lösung |
### 5 - Lösungsvarianten
#### 5.1 - Variantenübersicht
```
Bis hierher haben Sie sich viele Gedanken über das eigentliche Problem und die Anforderungen an seine Lösung gemacht.
Nun ist es wichtig, dass Sie sich von Ihrer (wahrscheinlich ja schon vorhandenen) Lösungsidee distanzieren, um andere Alternativen in Betracht ziehen zu können.
Lassen Sie Ihrer Phantasie einen Spielraum und überlegen Sie sich echte Varianten für eine Lösung der Aufgabestellung.
In der Regel lassen sich mindestens drei verschiedene Lösungsvarianten finden.
```
#### 5.2 - Beschreibung der Varianten
```
Beschreiben Sie hier die gefundenen Lösungsvarianten so genau, dass auch eine aussenstehende Person mit wenig technischem Sachverständnis den weiter unten gefällten Entscheid nachvollziehen kann.
```
### 6 - Bewertung der Varianten (Tabelle)
```
Führen Sie hier Ihren möglichst objektiven Variantenentscheid durch.
Oft ist die Lösung, welche schon von Anfang an favorisiert wurde, nicht die beste.
Einen nachvollziehbaren Entscheid erreicht man z.B. mit eine Tabelle, in welcher die einzelnen Varianten einer Liste von (gewichteten) Kriterien gegenübergestellt werden (siehe auch AB 306.08).
```
### 7 - Lösungsbeschreibung
```
Beschreiben Sie nun die gefundene Lösungsvariante in allen ihren Details.
Aus welchen Komponenten besteht die Lösung (evtl. System-Skizze einbauen).
Überprüfen Sie zum Schluss anhand einer Tabelle, ob durch die gewählte Lösung auch wirklich alle Anforderungen abdecken.
```
### 8 - Projektplanung
```
Erstellen Sie hier einen (vorerst noch groben) Zeitplan für die Durchführung des Projektes (mindestens Dauer und Abschluss der einzelnen Phasen sowie wichtigste Meilensteine).
Verwenden Sie dazu eine Excel-Tabelle oder ein Gantt-Diagramm.
```
### 9 - Empfehlung
```
Empfehlen Sie hier dem Auftraggeber, den Projektentscheid zu Gunsten der ausgewählten Variante zu treffen und das Projekt freizugeben.
```
### 10 - Projektfreigabe
**Hiermit bestätigt der Auftraggeber die Freigabe des Projekts:**
> Unterschrift Auftraggeber erfolgte: \<Ort>, \<Datum>
> Unterschrift Projektleitering erfolgte: \<Ort>, \<Datum>
---

126
README.md
View File

@ -1,3 +1,125 @@
# Raspydock
# Projektarbeit Modul 306 / 300
Gruppenarbeit à la Hermes
## RaspyDock
- [01 Projektinitialisierungsantrag](Hermes/01%20Projektinitialisierungsantrag.md)
- [02 Initialisierungs Studie](Hermes/02%20Initialisierungs%20Studie.md)
## Setup
### Wireguard
Wireguard ist eine VPN Lösung und wird in diesem Projekt verwendet, um den Raspberry Pi mit dem VPS zu verbinden.
Auf dem VPS und dem Server kann Wireguard mit `apt install wireguard` installiert werden.
#### Erstellung Keys
`wg genkey | tee privatekey | wg pubkey > publickey`
#### Config VPS
```yaml
# file: /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = PRIVATE_VPS_KEY
[Peer]
PublicKey = PUBLIC_SERVER_KEY
AllowedIPs = 10.10.10.10/32
```
#### Config Raspberry Pi
```yaml
# file: /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.10/32
PrivateKey = PRIVATE_DMZ_KEY
DNS = 9.9.9.9, 149.112.112.112
[Peer]
PublicKey = PUBLIC_VPS_KEY
Endpoint = VPS_IP_ADDRESS:51820
AllowedIPs = 10.10.10.1/32
PersistentKeepalive = 25
```
#### Inbetriebnahme
Nach erstellen der Config Files müssen diese Befehle eingegeben werden
(Auf dem VPS und dem Raspberry Pi):
```bash
sudo systemctl enable wg-quick@wg0.service
sudo systemctl start wg-quick@wg0.service
```
Der Status kann mit dem Befehl `sudo systemctl status wg-quick@wg0.service` geprüft werden.
### VPN Heatlh Check
> [Health-Check.sh](Wireguard/health-check.sh)
> Abgespeichert unter `/script/wg-health-check.sh`
```sh
$> chmod +x /script/wg-health-check.sh
$> crontab -e
-> # m h dom mon dow command
-> 5 * * * * /script/wg-health-check.sh
```
Dieses Shell Script pingt den Wireguard Gateway 3 Mal hintereinander. Sollte der Ping fehlschlagen, wird der Service neu gestartet
### Hostname Ändern
hostnamectl hostname raspydock
### DNS Einträge
2 A-Records:
| Domain | IP |
| -------------- | -------------- |
| raspydock.ch | 85.215.132.141 |
| *.raspydock.ch | 85.215.132.141 |
### User vmadmin erstellen
```sh
#> useradd vmadmin
#> passwd vmadmin
New password: sml12345
Retype new password: sml12345
passwd: password updated successfully
#> usermod -aG sudo vmadmin
```
### Routing der Requests
#### VPS
##### Routing Konfigurieren
IP Forwarding Aktivieren:
```sh
$> sudo sysctl -w net.ipv4.ip_forward=1
```
Die NAT zwischen dem WireGuard Tunnel un dem Internet müssen Maskiert werden
```sh
# ens6 ist das LAN Interface mit der öffentlichen IP auf dem VPS
sudo iptables -t nat -A POSTROUTING -o ens6 -j MASQUERADE
```
##### IPTables Konfigurieren
```sh
# Traffic aus dem Wireguard Tunnel Zulassen
sudo iptables -A INPUT -i wg0 -j ACCEPT
# Verwandte oder bereits bestehende Verbindungen Zulassen
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Traffic von Wireguard zum Server Zulassen
sudo iptables -A FORWARD -i wg0 -o ens6 -d 10.10.10.10 -j ACCEPT
```
Unterlagen für das Raspydock Gruppenprojekt

23
Server/Raspi.md Normal file
View File

@ -0,0 +1,23 @@
## Hardware Setup
* Raspberry Pi 4 Model B
* 4 GB RAM
* 64 GB Micro SD (OS-Daten)
* 2 TB Samsung T7 (Externe SSD für Applikations-Daten)
## Installierte Sowftware
* Shell
* ZSH
* Oh-My-ZSH
* Management
* Cockpit
* cockpit-bridge
* cockpit-navigator
* cockpit-networkmanager
* cockpit-packagekit
* cockpit-pcp
* cockpit-storaged
* cockpit-system
* cockpit-ws
* Docker

View File

@ -0,0 +1,26 @@
version: "3.8"
services:
nginx:
image: jc21/nginx-proxy-manager:latest
container_name: nginx
restart: always
ports:
- 80:80 # HTTP Redirect Port
- 443:443 # HTTPS Redirect Port
- 81:81 # Management Port
volumes:
- nginx_data:/data
- nginx_letsencrypt:/etc/letsencrypt
environment:
- TZ=Europe/Zurich
- DISABLE_IPV6=true
networks:
default:
external: true
name: proxynet
volumes:
nginx_data:
nginx_letsencrypt:

View File

@ -0,0 +1,21 @@
# Only Service Stack not hosted on Portainer
version: "3.8"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- 9000:9000 # Web UI Port
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
networks:
default:
external: true
name: proxynet
volumes:
portainer_data:

18
Server/fstab Normal file
View File

@ -0,0 +1,18 @@
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
PARTUUID=5442d5ab-01 /boot/firmware vfat defaults 0 2
PARTUUID=5442d5ab-02 / ext4 defaults,noatime 0 1
# External Docker Data Drive Mounted on the /data directory.
UUID=eabf0e8b-2355-4bda-91d6-6390d9eaa3a7 /data ext4 defaults 0 0

10
Server/motd Normal file
View File

@ -0,0 +1,10 @@
██████╗ █████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██████╗██╗ ██╗ | Web Interface:
██╔══██╗██╔══██╗██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██╔═══██╗██╔════╝██║ ██╔╝ | Admin.RaspyDock.ch
██████╔╝███████║███████╗██████╔╝ ╚████╔╝ ██║ ██║██║ ██║██║ █████╔╝ | 192.168.1.90:9090
██╔══██╗██╔══██║╚════██║██╔═══╝ ╚██╔╝ ██║ ██║██║ ██║██║ ██╔═██╗ |
██║ ██║██║ ██║███████║██║ ██║ ██████╔╝╚██████╔╝╚██████╗██║ ██╗ | SSH Access:
╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝ | vmadmin@RaspyDock.ch

45
Server/mount-drive.sh Normal file
View File

@ -0,0 +1,45 @@
#!/bin/bash
# List Drives:
# $> lsblk
#
# List Drive UUID:
# $> blkid
#
# Umount Disk:
# $> umount device/directory
#
# Format Drive:
# $> mkfs [options] [-t type fs-options] device [size]
lsblk
# Target Device /dev/sda1
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sda 8:0 0 1.8T 0 disk
# `-sda1 8:1 0 1.8T 0 part /media/T7
sudo umount -f /dev/sda1
sudo mkfs -t ext4 /dev/sda1
# Creating filesystem with 488377976 4k blocks and 122101760 inodes
# Filesystem UUID: eabf0e8b-2355-4bda-91d6-6390d9eaa3a7
# Superblock backups stored on blocks:
# 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
# 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
# 102400000, 214990848
# Allocating group tables: done
# Writing inode tables: done
# Creating journal (262144 blocks): done
# Writing superblocks and filesystem accounting information: done
blkid
# Target Device /dev/sda1
# /dev/sda1: UUID="eabf0e8b-2355-4bda-91d6-6390d9eaa3a7" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="7c7cb417-01"
echo "UUID=eabf0e8b-2355-4bda-91d6-6390d9eaa3a7 /data ext4 defaults 0 0" >> /etc/fstab
# Adds the Drive to the fstab File
systemctl daemon-reload
mkdir /data
mount -a
# Reloads the Daemon and mounts the Drive under /data

60
Server/software-setup.sh Normal file
View File

@ -0,0 +1,60 @@
#!/bin/bash
# Full Install Script for the Lazy People
echo "Updating And Installing dependencies"
sudo apt update && sudo apt upgrade -y
sudo apt install wget curl -y
# Remove Any Pre Existing Docker Apps, Images and general configuration
echo "Removing old Docker Confgiuration"
sudo apt-get purge docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin \
docker-ce-rootless-extras -y
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc;
do sudo apt-get remove $pkg;
done
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /docker
# Add Docker's official GPG key:
echo "Installing Docker Daemon and Plug-Ins"
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Set up Docker's APT repository:
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/raspbian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# Install The Latest Version of Docker
sudo apt-get install docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin -y
# Create Docker Network
docker network create proxynet
# Install The Latest Version of Cockpit
sudo apt install cockpit \
cockpit-bridge \
cockpit-networkmanager \
cockpit-packagekit \
cockpit-pcp \
cockpit-storaged \
cockpit-system \
cockpit-ws -y
# Install Cockpit Navigator
wget https://github.com/45Drives/cockpit-navigator/releases/download/v0.5.10/cockpit-navigator_0.5.10-1focal_all.deb
apt install ./cockpit-navigator_0.5.10-1focal_all.deb

121
Server/sshd_config Normal file
View File

@ -0,0 +1,121 @@
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Include /etc/ssh/sshd_config.d/*.conf
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin Yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
KbdInteractiveAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin prohibit-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server

0
VPS/VPS.md Normal file
View File

0
VPS/fstab Normal file
View File

10
VPS/motd Normal file
View File

@ -0,0 +1,10 @@
██╗ ██╗██████╗ ███████╗ | Web Interface:
██║ ██║██╔══██╗██╔════╝ | <Not Available>
██║ ██║██████╔╝███████╗ |
╚██╗ ██╔╝██╔═══╝ ╚════██║ |
╚████╔╝ ██║ ███████║ | SSH Access:
╚═══╝ ╚═╝ ╚══════╝ | root@85.215.132.141

View File

@ -0,0 +1,30 @@
server {
server_name admin.raspydock.ch;
location / {
proxy_pass https://10.10.10.10:9090; # Raspberry Pi's IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/admin.raspydock.ch/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/admin.raspydock.ch/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = admin.raspydock.ch) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name admin.raspydock.ch;
return 404; # managed by Certbot
}

View File

@ -0,0 +1,12 @@
server {
listen 80;
server_name docker.raspydock.ch;
location / {
proxy_pass http://10.10.10.10; # Raspberry Pi's IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

View File

View File

@ -0,0 +1,12 @@
server {
listen 80;
server_name proxy.raspydock.ch;
location / {
proxy_pass http://10.10.10.10; # Raspberry Pi's IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

View File

@ -0,0 +1,5 @@
server {
listen 80;
server_name raspydock.ch;
return 301 https://docker.raspydock.ch;
}

View File

@ -0,0 +1,12 @@
server {
listen 80;
server_name suppe.raspydock.ch;
location / {
proxy_pass http://10.10.10.10; # Raspberry Pi's IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

0
VPS/sshd_config Normal file
View File

25
Wireguard/health-check.sh Normal file
View File

@ -0,0 +1,25 @@
#!/bin/bash
# Modified from https://mullvad.net/en/help/running-wireguard-router/
# and https://wiki.r-selfhosted.com/guides/virtual-private-networks/wireguard/
# ping Wireguard gateway to test for connection
# if no contact, restart!
# cron job that runs every 5 Minutes
PING=/bin/ping
## DEBIAN
SERVICE=/usr/sbin/service
tries=0
while [[ $tries -lt 3 ]]
do
if $PING -c 1 10.10.10.1
then
echo "wg works"
exit 0
fi
echo "wg fail"
tries=$((tries+1))
done
echo "wg failed 3 times - restarting tunnel"
## DEBIAN
$SERVICE wg-quick@wg0 restart

11
Wireguard/raspi.wg0.yaml Normal file
View File

@ -0,0 +1,11 @@
# file: /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.10/32
PrivateKey = PRIVATE_SERVER_KEY
DNS = 9.9.9.9, 149.112.112.112
[Peer]
PublicKey = PUBLIC_VPS_KEY
Endpoint = VPS_IP_ADDRESS:51820
AllowedIPs = 10.10.10.1/32
PersistentKeepalive = 25

9
Wireguard/vps.wg0.yaml Normal file
View File

@ -0,0 +1,9 @@
# file: /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = PRIVATE_VPS_KEY
[Peer]
PublicKey = PUBLIC_SERVER_KEY
AllowedIPs = 10.10.10.10/32

11
users.md Normal file
View File

@ -0,0 +1,11 @@
## VPS
Benutzer: **vmadmin**
Passwort: **sml12345** (nur vom internen Netzwerk, externe anmeldung erfolgt via ssh key)
## Server
Benutzer: **vmadmin**
Passwort: **sml12345**
## Portainer
Benutzer: **vmadmin**
Passwort: **csQ%FTchrEUfN8**