Postfix & Datenbank Update

This commit is contained in:
Branko May Trinkwald
2025-12-30 14:52:46 +01:00
parent 6f5212bb61
commit a9ba99edfb
4 changed files with 512 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
# 🧭 Crumbforest Admin-Vektor: Der Pfad des Waldhüters
**Subtitle:** *Die 8 Pfade der System-Meisterschaft*
**Subtitle:** *Die 25 Pfade der System-Meisterschaft*
**Version:** 1.0
**Audience:** Angehende Systemadministratoren & Waldläufer
@@ -20,7 +20,7 @@ Jede **Crumbpage** behandelt ein Kernthema und baut auf dem vorherigen auf. Du l
---
## 🗺️ Die 23 Pfade (Übersicht)
## 🗺️ Die 26 Pfade (Übersicht)
| Pfad | Thema | Kern-Konzepte | Status |
|------|-------|---------------|--------|
@@ -48,6 +48,8 @@ Jede **Crumbpage** behandelt ein Kernthema und baut auf dem vorherigen auf. Du l
| **22** | Hallo Nullfeld | `#philosophie #crew #resonanz #nullfeld` | 🆕 Neu |
| **23** | AI, Vektor & Philosophie | `#ai #ki #vektor #emergenz #samurai-shaolin` | 🆕 Neu |
| **24** | **Docker - Der Wal** | `#container #compose #images #tupperware` | 🆕 Neu |
| **25** | **Postfix** | `#mta #smtp #mail #virtual-domains` | 🆕 Neu |
| **26** | **Datenbanken** | `#sql #mariadb #mysql #backup` | 🆕 Neu |
---
@@ -628,7 +630,54 @@ Container = Eine Tupperdose für die Pizza.
---
## 📚 Pfad 25: Postfix - Der digitale Postbote
**Was du lernst:**
- Was ist ein MTA? (Postverteilzentrum)
- Wie installiere ich Postfix?
- Virtuelle Domains & Benutzer
- Telnet/Netcat für manuellen Mailversand ("Hands on")
**Warum das wichtig ist:**
- E-Mail ist das Rückgrat der Kommunikation.
- "Der Server sendet keine Mails" ist ein Klassiker.
- Du verstehst endlich, warum Spam-Filter dich hassen.
**Die Postverteilzentrum-Theorie:**
```
MTA = Pförtner, der Briefe annimmt.
Mailbox = Das Fach für den Bewohner.
SMTP = Die Sprache der Postboten.
```
**→ [Zur Crumbpage: Postfix](crumbpage-25-postfix.md)**
---
## 📚 Pfad 26: Datenbanken - Das Gedächtnis des Waldes
**Was du lernst:**
- MySQL vs. MariaDB vs. PostgreSQL
- Installation & Security (`mysql_secure_installation`)
- SQL Basics (Die Sprache der Daten)
- Backup & Restore
**Warum das wichtig ist:**
- Jede Web-App braucht eine DB.
- Datenverluste sind tödlich.
- Du lernst, Daten strukturiert zu sehen.
**Die Zettelkasten-Theorie:**
```
Textdatei = Langsames Suchen im Haufen.
Datenbank = Blitzschnelles Finden im Index.
```
**→ [Zur Crumbpage: Datenbanken](crumbpage-26-databases.md)**
---
## 🎯 Wie du den Vektor durchläufst
@@ -684,6 +733,10 @@ START: Absolute Basics
├─ Pfad 23: AI & Philosophie ──────→ SAMURAI ⟡ SHAOLIN
└─ Pfad 24: Docker ────────────────→ MODERN ERA
└─ Pfad 25: Postfix ───────────────→ COMMUNICATION
└─ Pfad 26: Datenbanken ───────────→ PERSISTENCE
```
@@ -701,6 +754,8 @@ Pfad 21: ~3-4 Stunden (Backup & Automatisierung)
Pfad 22: ~1 Stunde (Reflexion & Philosophie)
Pfad 23: ~2-3 Stunden (AI, Vektor & Philosophie - oder ein Leben lang?)
Pfad 24: ~2-3 Stunden (Docker Basics)
Pfad 25: ~3-4 Stunden (Postfix & SMTP)
Pfad 26: ~2 Stunden (SQL & MariaDB)
Total: ~34-42 Stunden aktives Lernen
```
@@ -766,7 +821,9 @@ wsl --install
├── 22-nullfeld-willkommen.md
├── 22-nullfeld-willkommen.md
├── 23-ai-vektor-philosophie.md
── 24-docker.md
── 24-docker.md
├── 25-postfix.md
├── 26-databases.md
```
### Externe Ressourcen
@@ -894,8 +951,12 @@ Die Eule erinnert dich:
- [ ] Pfad 21: Backup, RAID & Cron (0%)
- [ ] Pfad 22: Hallo Nullfeld (0%)
- [ ] Pfad 23: AI, Vektor & Philosophie (0%)
- [ ] Pfad 24: Docker (0%)
- [ ] Pfad 25: Postfix (0%)
- [ ] Pfad 26: Datenbanken (0%)
**Gesamtfortschritt:** 0/26 Pfade
**Gesamtfortschritt:** 0/23 Pfade
**Startdatum:** YYYY-MM-DD
**Geschätzte Completion:** YYYY-MM-DD
```
@@ -957,7 +1018,7 @@ Systemadministration ist ein **Handwerk**, das Zeit und Übung braucht. Die 8 Pf
---
**Version:** 3.0 (23 Pfade: Samurai ⟡ Shaolin + OZM⟡NEXUS Integration)
**Version:** 3.2 (26 Pfade: Samurai ⟡ Shaolin + OZM⟡NEXUS Integration)
**Letzte Änderung:** 2025-12-13
**Maintainer:** Crumbforest Core Team
**Custodian:** OZM - Open Futures Museum (in transition)

View File

@@ -264,4 +264,4 @@ Nutze sie weise.
---
**Navigation:**
[← Zurück: Philosophie](crumbpage-23-ai-vektor-philosophie.md) | [Zurück zur Übersicht](crumbforest-admin-vektor.md)
[← Zurück: Philosophie](crumbpage-23-ai-vektor-philosophie.md) | [Weiter: Postfix →](crumbpage-25-postfix.md)

244
crumbpage-25-postfix.md Normal file
View File

@@ -0,0 +1,244 @@
# 🧭 Crumbpage 25: Postfix - Der digitale Postbote
**Subtitle:** *Warum E-Mails auch nur Postkarten sind*
**Pfad:** 25 von X (Kommunikation)
**Schwierigkeit:** ⭐⭐⭐⭐ (4/5)
**Zeit:** ~3-4 Stunden
**Voraussetzungen:** [Pfad 10: Services](crumbpage-10-services-ports.md), [Pfad 15: DNS](crumbpage-15-dns.md)
> *"Email is wonderful. It allows you to communicate with people you don't want to talk to."* 🦉
---
## 📋 Was du in diesem Pfad lernst
```
✓ Was ist ein MTA? (Postverteilzentrum-Theorie)
✓ Installation von Postfix
✓ Die wichtigste Datei: main.cf
✓ Virtuelle Domains (Briefkästen ohne Hausbewohner)
✓ Debugging mit Telnet/Netcat (Manuelles Post-Einwerfen)
✓ Troubleshooting & Warteschlangen
```
---
## 🎯 Lernziele
Nach diesem Pfad kannst du:
- [ ] Einen Mailserver grundlegend konfigurieren
- [ ] Verstehen, wie eine E-Mail von A nach B kommt
- [ ] Virtuelle Domains und Benutzer einrichten
- [ ] SMTP manuell sprechen (ja, wirklich!)
---
## 📮 Die Postverteilzentrum-Theorie (Konzepte)
Stell dir vor, dein Server ist ein großes Mietshaus.
**Ohne Postfix:**
Niemand nimmt Post an. Briefe werden zurück an den Absender geschickt ("Return to Sender").
**Mit Postfix (Der MTA):**
Du stellst einen Pförtner (MTA - Mail Transfer Agent) ein.
- Er nimmt Briefe an (**SMTP**).
- Er schaut auf die Adresse.
- Wohnt der Empfänger hier? -> Ab ins Fach (**Local Delivery**).
- Wohnt der Empfänger woanders? -> Weiterleiten (**Relaying**).
**Der Unterschied zwischen System-User und Virtuellem User:**
- **System-User:** Hat eine Wohnung im Haus (Linux Account, `/etc/passwd`). Er hat einen Schlüssel zur Haustür (SSH).
- **Virtueller User:** Hat nur ein Postfach im Flur. Er darf nicht im Haus wohnen (kein SSH), aber er bekommt Post. Das ist, was wir meistens wollen (z.B. für `info@example.com`).
---
## 🏗️ Installation & Erster Start
Wie immer bei Debian/Ubuntu, ist der erste Schritt einfach:
```bash
sudo apt update
sudo apt install postfix
```
Während der Installation wirst du gefragt, welche Art von Konfiguration du willst.
Wähle: **"Internet Site"**.
System Mail Name: Dein Hostname (z.B. `mail.deinedomain.de`).
Prüfen, ob der Pförtner wach ist:
```bash
systemctl status postfix
```
---
## ⚙️ Die Schaltzentrale: main.cf
Die Datei `/etc/postfix/main.cf` ist das Gehirn deines Postboten. Hier stehen die Regeln.
```bash
nano /etc/postfix/main.cf
```
### Wichtige Parameter
| Parameter | Bedeutung |
|-----------|-----------|
| `myhostname` | Wie heißt der Server selbst? (z.B. `srv01.example.com`) |
| `mydomain` | Die Haupt-Domain (z.B. `example.com`) |
| `mydestination` | Für welche Domains fühlen wir uns *lokal* zuständig? (Hier landen Mails für System-User) |
| `inet_interfaces` | Wo lauschen wir? (`all` = überall) |
| `mynetworks` | Wer darf über uns senden, ohne sich auszuweisen? (Eigene IPs, Localhost) |
**Beispiel-Snippet:**
```conf
myhostname = mail.kruemel-forest.de
mydomain = kruemel-forest.de
inet_interfaces = all
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
```
---
## 👻 Virtuelle Domänen & Benutzer
Jetzt wird es spannend. Wir wollen Mailadressen, ohne Linux-User anzulegen. Wir bauen "Schein-Briefkästen".
### 1. Die Struktur
Wir legen Maps (Tabellen) an unter `/etc/postfix/virtual/`:
- `virtual_mailbox_domains`: Welche Domains gehören uns?
- `virtual_mailbox_maps`: Welcher User hat welchen Ordner?
- `virtual_alias_maps`: Weiterleitungen (z.B. `info` -> `admin`).
### 2. Die Dateien anlegen
```bash
mkdir -p /etc/postfix/virtual
cd /etc/postfix/virtual
```
**virtual_mailbox_domains:**
```text
example.com
kruemel-forest.de
```
**virtual_mailbox_maps:**
```text
# User # Pfad zum Maildir (endet mit /)
alice@example.com example.com/alice/Maildir/
bob@kruemel-forest.de kruemel-forest.de/bob/Maildir/
```
**virtual_alias_maps:**
```text
info@example.com alice@example.com
postmaster@example.com alice@example.com
```
### 3. Hashen & Konfigurieren
Postfix liest keine Textdateien, er will Datenbanken (`.db`).
```bash
postmap /etc/postfix/virtual/virtual_mailbox_domains
postmap /etc/postfix/virtual/virtual_mailbox_maps
postmap /etc/postfix/virtual/virtual_alias_maps
```
Und in der `main.cf` bekannt machen:
```conf
virtual_mailbox_domains = hash:/etc/postfix/virtual/virtual_mailbox_domains
virtual_mailbox_maps = hash:/etc/postfix/virtual/virtual_mailbox_maps
virtual_alias_maps = hash:/etc/postfix/virtual/virtual_alias_maps
```
Nach jeder Änderung: `systemctl reload postfix`.
---
## 🕵️ Hands-On: Postbote spielen (Telnet/Netcat)
Wirf die GUI weg. Wir stellen jetzt eine Mail von Hand zu, um zu sehen, ob der Server reagiert.
**Werkzeug:** `telnet` oder `nc` (Netcat).
**Szenario:** Du bist ein fremder Server und willst eine Mail an `alice@example.com` abgeben.
```bash
# 1. Verbindung aufbauen (Port 25)
nc -v localhost 25
# Server sagt: 220 mail.kruemel-forest.de ESMTP Postfix...
# 2. Begrüßen (Höflichkeit ist wichtig)
EHLO mein-test-pc.local
# Server antwortet mit Features...
# 3. Absender angeben
MAIL FROM:<tester@extern.com>
# 4. Empfänger angeben (Hier prüft Postfix, ob er zuständig ist!)
RCPT TO:<alice@example.com>
# Server: 250 2.1.5 Ok
# 5. Inhalt senden
DATA
Subject: Manuelle Testmail
Hallo Alice,
dies ist eine handgetippte E-Mail.
Grüße aus dem Terminal!
.
# (Der Punkt am Ende einer Zeile beendet die Mail)
# 6. Tschüss
QUIT
```
Wenn du ein `250 2.0.0 Ok: queued as ...` bekommst, hast du gewonnen! Die Mail ist im System.
---
## 🔍 Troubleshooting
Wenn nichts ankommt, schau in die Logs. Postfix ist geschwätzig.
**1. Logfile lesen (Live):**
```bash
tail -f /var/log/mail.log
# oder
journalctl -u postfix -f
```
**2. Die Warteschlange (Queue):**
Ist die Tasche des Postboten voll?
```bash
mailq
```
- `Deferred`: Versuchen wir später nochmal (Empfänger nicht da?).
- `Bounced`: Zurück an Absender (Adresse falsch?).
- `Active`: Wird gerade verarbeitet.
**3. Queue leeren (Flush):**
"Versuch es JETZT sofort nochmal!"
```bash
postqueue -f
```
---
## 💭 Reflexion
E-Mail fühlt sich alt an. Ist es auch. Das Protokoll (SMTP) stammt aus den 80ern. Aber genau deshalb ist es so robust. Es ist dezentral, föderiert und textbasiert.
Mit Postfix hast du einen der mächtigsten Server-Dienste überhaupt gebändigt. Du bist nicht mehr auf GMail oder Web.de angewiesen. Du bist jetzt dein eigener Provider. (Zumindest für den Empfang Senden ist wegen Spam-Filtern eine andere Geschichte, Stichwort DKIM/SPF, aber das ist ein Thema für einen anderen Keks).
---
**Navigation:**
[← Zurück: Docker](crumbpage-24-docker.md) | [Weiter: Datenbanken →](crumbpage-26-databases.md)

201
crumbpage-26-databases.md Normal file
View File

@@ -0,0 +1,201 @@
# 🧭 Crumbpage 26: Datenbanken - Das Gedächtnis des Waldes
**Subtitle:** *Warum Excel keine Datenbank ist*
**Pfad:** 26 von X (Datenhaltung)
**Schwierigkeit:** ⭐⭐⭐ (3/5)
**Zeit:** ~2 Stunden
**Voraussetzungen:** [Pfad 10: Services](crumbpage-10-services-ports.md)
> *"Daten sind das neue Öl. Aber ohne Motor (Datenbank) sind sie nur klebriger Schlamm."* 🛢️
---
## 📋 Was du in diesem Pfad lernst
```
✓ Was ist eine relationale Datenbank? (Tabellen-Theorie)
✓ Der große Krieg: MySQL vs. MariaDB vs. PostgreSQL
✓ Installation von MariaDB (Der offene Standard)
✓ SQL Basics: CREATE, INSERT, SELECT
✓ Sicherheit: mysql_secure_installation
✓ Backup: mysqldump
```
---
## 🎯 Lernziele
Nach diesem Pfad kannst du:
- [ ] Einen Datenbank-Server installieren und absichern
- [ ] Verstehen, warum wir MariaDB statt MySQL nutzen
- [ ] Eine Datenbank für eine Web-App anlegen
- [ ] Einfache SQL-Abfragen schreiben
---
## 🗄️ Die Zettelkasten-Theorie (Konzepte)
Stell dir vor, du hast 1000 Keks-Rezepte.
**Ohne Datenbank (Textdateien):**
Du schreibst alles in eine riesige `rezepte.txt`. Wenn du "Schoko" suchst, musst du die ganze Datei lesen. Langsam.
**Mit Datenbank (SQL):**
Du hast einen riesigen Aktenschrank mit Schubladen (Tabellen).
- Jedes Rezept ist eine Karteikarte (Row).
- Jede Karte hat feste Felder: Name, Zutaten, Backzeit (Columns).
- Der Bibliothekar (SQL-Server) findet "Alle Kekse mit Schoko unter 20 Min Backzeit" in Millisekunden.
### Die drei großen Häuser
Laut deinem Dossier gibt es drei Hauptakteure:
1. **MySQL 🐬:** Der alte König. Stabil, Industriestandard, gehört aber Oracle. Das macht manche nervös.
2. **MariaDB 🦭:** Die Rebellion. Erstellt von den ursprünglichen MySQL-Erfindern. Komplett Open Source, schneller, wilder. **Unsere Wahl für den Standard-Stack.**
3. **PostgreSQL 🐘:** Der Professor. Akademisch, extrem strikt (ACID), kann alles (sogar Geodaten und JSON perfekt). Wenn Datenintegrität wichtiger ist als roher Speed.
---
## 🏗️ Installation & Absicherung
Wir installieren **MariaDB**, weil es im Herzen von Debian/Ubuntu wohnt und "echtes" Open Source ist.
```bash
sudo apt update
sudo apt install mariadb-server
```
**Der Türsteher-Check:**
Läuft der Dienst?
```bash
systemctl status mariadb
```
**Sicherheit zuerst!**
Installierte Datenbanken sind offen wie ein Scheunentor. Wir schließen es ab.
```bash
sudo mysql_secure_installation
```
- Root Passwort setzen? -> Ja.
- Anonyme User entfernen? -> Ja.
- Remote Root Login verbieten? -> Ja.
- Test-DB löschen? -> Ja.
- Tables reloaden? -> Ja.
---
## 🔑 Der Erste Eintritt (`mysql` Shell)
Logge dich als Root in die Datenbank ein:
```bash
sudo mysql -u root -p
```
*(Das `-u` steht für User, das `-p` fragt nach dem Passwort)*
Du bist jetzt in der MariaDB-Shell (`MariaDB [(none)]>`). Hier sprichst du **SQL**.
---
## 🎓 Hands-On: Das Keks-Inventar
Wir bauen eine Datenbank für unsere Keks-Vorräte.
**1. Datenbank erstellen**
```sql
CREATE DATABASE keks_lager;
USE keks_lager;
```
*(Achte auf das Semikolon `;` am Ende jedes Befehls! Das ist wie der Punkt im Satz.)*
**2. Tabelle anlegen (Der Bauplan)**
Wir brauchen eine Tabelle für Kekse.
```sql
CREATE TABLE kekse (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
typ VARCHAR(30),
anzahl INT,
bewertung INT
);
```
**3. Kekse einlagern (INSERT)**
```sql
INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Schoko-Kruste', 'Schokolade', 42, 5);
INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Hafer-Glück', 'Gesund', 10, 3);
INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Zimt-Stern', 'Weihnachten', 100, 4);
```
**4. Kekse suchen (SELECT)**
```sql
-- Zeig mir alles!
SELECT * FROM kekse;
-- Zeig mir nur die guten Sachen
SELECT name, anzahl FROM kekse WHERE bewertung >= 4;
```
**5. Kekse essen (UPDATE)**
Jemand hat 2 Schoko-Krusten gegessen.
```sql
UPDATE kekse SET anzahl = anzahl - 2 WHERE name = 'Schoko-Kruste';
```
**6. User für Apps anlegen**
Sicherheitsregel: **Niemals** den `root` User in einer Web-App (z.B. WordPress/CrumbForest) benutzen!
```sql
CREATE USER 'baekker'@'localhost' IDENTIFIED BY 'geheimes_passwort';
GRANT ALL PRIVILEGES ON keks_lager.* TO 'baekker'@'localhost';
FLUSH PRIVILEGES;
```
**7. Raus hier**
```sql
EXIT;
```
---
## 📦 Backup & Restore (Die Versicherung)
Datenbanken liegen nicht einfach als Datei herum (technisch schon, in `/var/lib/mysql`, aber fass die niemals an!).
Wir nutzen Tools zum Exportieren.
**Backup (Der Dump):**
```bash
mysqldump -u root -p keks_lager > mein_backup.sql
```
Dies erzeugt eine Textdatei mit allen SQL-Befehlen, um die Datenbank wiederherzustellen.
**Restore (Das Einspielen):**
```bash
mysql -u root -p keks_lager < mein_backup.sql
```
---
## 🚀 Advanced: Cluster & Replikation (Ausblick)
In deinem Dossier (`db_overview.md`) standen spannende Dinge über **Galera Cluster**.
Das ist für Profis: Wenn ein Server ausfällt, übernimmt der andere sofort.
Bei MySQL/MariaDB Standard-Replikation gibt es einen "Master" (Schreibt) und "Slaves" (Lesen).
Galera ist "Multi-Master" (Alle schreiben).
Für den Anfang reicht uns ein einzelner Server. Aber wisse: Der Wald kann wachsen. 🌱
---
## 💭 Reflexion
Eine Datenbank ist das Herz fast jeder modernen Anwendung. Ob WordPress, Nextcloud oder deine eigene App irgendwo läuft immer ein `SELECT * FROM`.
Du hast jetzt gelernt, wie man dieses Herz zum Schlagen bringt und Daten sicher speichert.
Vergiss nie: **Kein Backup, kein Mitleid.** Ein `DROP DATABASE` fragt nicht "Bist du sicher?". Es löscht einfach.
---
**Navigation:**
[← Zurück: Postfix](crumbpage-25-postfix.md) | [Zurück zur Übersicht](crumbforest-admin-vektor.md)