make more commits :-)

This commit is contained in:
Petar Cubela
2025-09-21 19:15:25 +02:00
parent 584265c22c
commit b1b4b12e1d
80 changed files with 1921 additions and 75 deletions

BIN
projects/sbx/student/.DS_Store vendored Normal file

Binary file not shown.

BIN
projects/sbx/student/exercises/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,137 @@
---
author: Petar Cubela
date: Thu Sep 18 2025
email: mail@petarcubela.de
title: Aufgabenblatt 00 - ssh Security und fail2ban (v1.1)
geometry: margin=2cm
output: pdf_document
---
# Aufgabenblatt 00
In diesem Blatt lernst du wichtige Grundlagen, um die Sicherheit eines Linux Servers zu gewaehrleisten.
`ssh` (_secure shell_) ist eines der wichtigsten Tools die ein Linux Administrator beherrschen sollte.
Dieses erlaubt es uns, eine Shell zu einem remote Linux (im allgemeinen Unix) System zu oeffnen,
um dann administrative Taetigkeiten am Server durch zu fuehren.
Die Authentifizierung passiert hier in der Regel mit Username und Passwort.
Es gibt aber Situationen in denen es nicht ratsam ist, Usernamen und Passwort fuer die Authentifizierung zu nutzen.
Zum Besipiel, wenn der `ssh` Port, 22, oeffentlich zuegaenglich ist, und damit jeder den _OpenSSH_ Server des Linux Servers erreichen koennte.
Ein Passwort koennte durch eine brute-force Attacke erraten werden oder durch andere Wege komprimittiert werden.
Aus dem Grunde gibt es `ssh` Key Paare, welche es uns ermoeglichen uns ohne Passwort am Server zu authentifizieren.
Einer der keys ist hier ein **privater** Schluessel, den niemand haben sollte und der immer sicher aufbewahrt werden sollte.
Der zweite key ist **public** und darf somit von anderen gesehen/gelesen werden. Der public Key wird am Linux Server
in der Datei `/home/$USER/.ssh/authorized_keys` abgelegt, waehrend der private Key am eigenen Rechner hinterlegt wird,
ebenfalls im Ordner `/home/$USER/.ssh/`. Beim Versuch sich mittels `ssh` am Ziel Server anzumelden, gleicht der Server seinen public
Key mit dem private Key des `ssh`-Clients ab und wenn die beiden zu einander passen, wird Zugang gewaehrt.
Wir lernen, wie wir ssh key Paare erzeugen und am Ziel Server zu hinterlegen, welche es uns erlauben, uns ohne Passwort an einem OpenSSH server zu authentifizieren.
Dies wird in Zukunft auch sehr nuetzlich sein, um Automatisierungstools gegen einen oder _mehrere_ Server laufen zu lassen.
Zusaetzlich lernen wir `fail2ban`, welches ein einfaches _intrusion detection system(IPS)_ ist, welches in der Lage ist Ports zu Diensten auf dem Server zu ueberwachen
und bei missbraeulichem Verhalten IP Addressen zu blocken. Zum Beispiel kann eine IP Adresse fuer eine Stunde geblockt werden, wenn der entsprechende `ssh`-Client drei mal das Passwort falsch eingibt.
Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert.
## Aufgabe 1 - ssh security and config
**a.** Erstelle ein `ssh` Key Paar auf deinem lokalen Rechner, lege den public key auf deinem remote Linux Server ab
und melde dich ohne Passwort mit `ssh` am Server an. `ssh USER@EXAMPLE.COM`.
Tools, welche gentuzt werden sollen:
- `ssh`
- `ssh-keygen` (wenn dieser Befehl benutzt wird, setze keien Passwort fuer das Key Paar, sonst musst ihr Dieses jedes mal eingeben, wenn die Keys genutzt werden)
- `ssh-copy-id`
**b.** Passe die Konfiguration des _ssh daemons_ `sshd`, unter dem Pfad `/etc/ssh/sshd_config`, so an, dass
- eine `root` Anmeldung nicht moeglich ist. (Der `root` User hat uneingeschraenkte Berechtigungen auf dem Server. Dieser sollte ueber `ssh` nie erreichbar sein.)
- die Passwort Authentifizierung nicht moeglich ist,
- und deiner Meinung nach die Sicherheit des `ssh`-Zugangs weiter erhoeht wird.
Nachdem der `ssh`-Dienst angepasst wurde, muss Dieser neugestartet werden, damit die Aenderugen geladen werden:
```bash
$ sudo systemctl restart ssh.service
$ sudo systemctl status ssh.service
```
## Aufgabe 2 - fail2ban to protect ssh
Installiere `fail2ban` und konfiguriere es so, dass
- `ssh` ein aktives `jail` ist
- bei 3 maliger Passwortfalscheingabe, die IP Adresse des Clients fuer 2 Stunden gebannt wird
Die Konfigurationsdateien von `fail2ban` sind im Pfad `/etc/fail2ban/` hinterlegt.
**Anleitung:**
Gehe wie folgt vor:
1. Installation:
```bash
sudo apt install fail2ban
```
2. Pruefe den Status des `fail2ban`-Dienstes mittels `systemd`:
```bash
$ systemctl status fail2ban.service
```
3. Lese den Inhalt einer default Konfigurations:
```bash
$ cd /etc/fail2ban/
$ head -20 jail.conf
```
4. Erstelle wie empfohlen eine _local_ jail Konfigurationsdatei:
```bash
$ cp jail.conf jail.local
```
5. Passe die `jail.local` Datei an, so dass die Vorgabe umegestzt ist.
```bash
$ sudo nano/vim jail.local
```
Recherchiere gegebenfalls im Internet, um dies umzusetzen. (Tipp: `ssh` speichert seine logs nicht mehr standardmaessig im Pfad `/var/log/`,
sondern nutzt `systemd-journald`)
6. Teste deine Konfig von einem auf dem `pve.lab.softbox.net` verfuegbaren Linux Host.
## Aufgabe 3 - nginx web server
Wir installieren hier einen der am meisten genutztne Web server auf der Welt [`nginx`](https://nginx.org/) und machen damit den ersten Schritt zu einer web page.
Installiere `nginx`:
```bash
$ sudo apt install nginx
```
Pruefe den `nginx`-Dienst via `systemctl`:
```bash
$ sudo systemctl status nginx
```
Besuche die Seite [http://student1.lab.softbox.net](http://student1.lab.softbox.net "http://student1.lab.softbox.net/"), welche dir die `nginx` welcome page zeigen sollte.
Die Konfigurationsdateien von `nginx` unter dem Pfad `/etc/nginx/` zu finden. Die `html` (+ `css` + etc.) sind in der Regel unter dem Pfad `/var/www/` zu finden,
wobei Dieser in `nginx`-Konfigurationsdateien beliebig waehlbar ist.
Pruefe auf welcher IP Adresse und welchem Port `nginx` _lauscht_ (im englischen: _listen_
```bash
$ sudo ss -tulpn | grep nginx
```
**Zusatz:** Nutze `man ss`, um dich mit dem Befehl `ss` und den gewaehlten Optionen auseinanderzusetzen. Dies ist ein sehr praktischer Befehl, der sehr haeufig genutzt wird.

Binary file not shown.

View File

@@ -0,0 +1,74 @@
---
author: Petar Cubela
date: Sep 21, 2025
email: mail@petarcubela.de
title: Aufgabenblatt 01 - base commands & user/group management (v0.1)
geometry: margin=2cm
output: pdf_document
---
# Aufgabenblatt 00 - base commands & user/group management
In diesem Blatt lernst du grudnlegende Basis Befehle fuer die Verwaltung und 'Bedienung' eines Linux Servers ohne Bildschirmumgebung.
Zusaetzlich lernst du wie User, Gruppen, Besitzrechte und Berechtigungen ersetllt und vergeben werden.
Zuletzt wir das gelernte, um selbststaendig einen git Server aufzusetzen; das hoert sich moeglicherweise komplizierter an als es ist,
aber kann mit dem zuvor gelernten schon umgesetzt werden.
Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert.
- Schreibe kurze Beschreibung zu den Grundlagen des User managements (user, groups, owner and permissions)
- erzaehle ueber die wichtigkeit dieser wenigen Befehle, welche uns ermoeglichen komplexe Dinge durchzufuehren
## Aufgabe 1 - Basisbefehl
- Lerne diese, sodass im sie im Schlaf bekannt sind.
1. cd
1. ls
1. mv
1. cp
1. rm
1. mkdir
1. rmdir
1. echo
1. cat
1. grep
1. touch
1. find
1. fdisk
1. ls***
1. cut
1. sort
1. uniq
## Aufgabe 2 - Create, modify and delete users/groups
### Notizen
- show the usage of the commands and its options:
- `useradd`
- `usermod`
- `userdel`
- `groupadd`
- `groupmod`
- `groupdel`
- teach linux ownership and permissions via `chown`,`grpown`, `chmod`
## Aufgabe 3 - git server - user/group management
Installiere git und konfiguriere einen git server. Erstelle einen dedizierten
User und eine entsprechende Gruppe `git`, mit dem Pfad zum _home_ folder, `/var/git/`.
Fuege den eigenen User zur Gruppe `git` hinzu, sodass dieser in der Lage ist,
Repositories dort abzulegen und zu verwalten. Entsprechend muessen die User/Group
Ownership und Permissions von `git`'s home folder angepasst werden.
### Notizen
- potentiel sollte auch die `umask` des Ordners angepasst werden

View File

@@ -0,0 +1,38 @@
---
author: Petar Cubela
date: Sep 21, 2025
email: mail@petarcubela.de
title: Aufgabenblatt 02 - nextcloud installation and git usage (v0.1)
geometry: margin=2cm
output: pdf_document
---
# Aufgabenblatt 02 - nextcloud installation and git repo
In diesem Blatt lernst du
Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert.
## Aufgabe 1 - Nextcloud Installation
**a.** Install dependencies
**b.** Prepare database - mariadb
**c.** Setup web server - nginx/apache
**d.** Install nextcloud source files
## Aufgabe 2 - git basics
1. `git init`
1. `git add`
1. `git commit`
1. `git remote`
1. `git push`
1. `git pull`
Write simple python 'Hello, world!' script which gets pushed to local git server from last sheet.

View File

@@ -0,0 +1,60 @@
---
author: Petar Cubela
date: Month 00, 2025
email: mail@petarcubela.de
title: Aufgabenblatt 00 - Titel (v1.0)
geometry: margin=2cm
output: pdf_document
---
# Aufgabenblatt 00
In diesem Blatt lernst du wichtige Grundlagen, um die Sicherheit eines Linux Servers zu gewaehrleisten.
`ssh` (_secure shell_) ist eines der wichtigsten Tools die ein Linux Administrator beherrschen sollte.
Dieses erlaubt es uns, eine Shell zu einem remote Linux (im allgemeinen Unix) System zu oeffnen,
um dann administrative Taetigkeiten am Server durch zu fuehren.
Die Authentifizierung passiert hier in der Regel mit Username und Passwort.
Es gibt aber Situationen in denen es nicht ratsam ist, Usernamen und Passwort fuer die Authentifizierung zu nutzen.
Zum Besipiel, wenn der `ssh` Port, 22, oeffentlich zuegaenglich ist, und damit jeder den _OpenSSH_ Server des Linux Servers erreichen koennte.
Ein Passwort koennte durch eine brute-force Attacke erraten werden oder durch andere Wege komprimittiert werden.
Aus dem Grunde gibt es `ssh` Key Paare, welche es uns ermoeglichen uns ohne Passwort am Server zu authentifizieren.
Einer der keys ist hier ein **privater** Schluessel, den niemand haben sollte und der immer sicher aufbewahrt werden sollte.
Der zweite key ist **public** und darf somit von anderen gesehen/gelesen werden. Der public Key wird am Linux Server
in der Datei `/home/$USER/.ssh/authorized_keys` abgelegt, waehrend der private Key am eigenen Rechner hinterlegt wird,
ebenfalls im Ordner `/home/$USER/.ssh/`. Beim Versuch sich mittels `ssh` am Ziel Server anzumelden, gleicht der Server seinen public
Key mit dem private Key des `ssh`-Clients ab und wenn die beiden zu einander passen, wird Zugang gewaehrt.
Wir lernen, wie wir ssh key Paare erzeugen und am Ziel Server zu hinterlegen, welche es uns erlauben, uns ohne Passwort an einem OpenSSH server zu authentifizieren.
Dies wird in Zukunft auch sehr nuetzlich sein, um Automatisierungstools gegen einen oder _mehrere_ Server laufen zu lassen.
Zusaetzlich lernen wir `fail2ban`, welches ein einfaches _intrusion detection system(IPS)_ ist, welches in der Lage ist Ports zu Diensten auf dem Server zu ueberwachen
und bei missbraeulichem Verhalten IP Addressen zu blocken. Zum Beispiel kann eine IP Adresse fuer eine Stunde geblockt werden, wenn der entsprechende `ssh`-Client drei mal das Passwort falsch eingibt.
Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert.
## Aufgabe 1 - ssh security and config
**a.** Erstelle ein `ssh` Key Paar auf deinem lokalen Rechner, lege den public key auf deinem remote Linux Server ab
und melde dich ohne Passwort mit `ssh` am Server an. `ssh USER@EXAMPLE.COM`.
Tools, welche gentuzt werden sollen:
- `ssh`
- `ssh-keygen` (wenn dieser Befehl benutzt wird, setze keien Passwort fuer das Key Paar, sonst musst ihr Dieses jedes mal eingeben, wenn die Keys genutzt werden)
- `ssh-copy-id`
**b.** Passe die Konfiguration des _ssh daemons_ `sshd`, unter dem Pfad `/etc/ssh/sshd_config`, so an, dass
- eine `root` Anmeldung nicht moeglich ist. (Der `root` User hat uneingeschraenkte Berechtigungen auf dem Server. Dieser sollte ueber `ssh` nie erreichbar sein.)
- die Passwort Authentifizierung nicht moeglich ist,
- und deiner Meinung nach die Sicherheit des `ssh`-Zugangs weiter erhoeht wird.
Nachdem der `ssh`-Dienst angepasst wurde, muss Dieser neugestartet werden, damit die Aenderugen geladen werden:
```bash
$ sudo systemctl restart ssh.service
$ sudo systemctl status ssh.service
```
*Zusatz:** Nutze `man ss`, um dich mit dem Befehl `ss` und den gewaehlten Optionen auseinanderzusetzen. Dies ist ein sehr praktischer Befehl, der sehr haeufig genutzt wird.

View File

@@ -0,0 +1,43 @@
## Tasks
Separate by different levels of difficulty. In the beginning only easier concepts should be presented.
Write guide which can be followed in order to learn and see concepts such as an manual to install a nextcloud instance.
In the process the student would learn how a mariadb database is setup. Just following some simple commands.
### Level 0
- [ ] base commands - 20 most useful commands: cd, ls, mkdir, mv, rm , cp, touch, find, grep, cat, ssh
- [x] ssh key-exchange authentication
- [x] ssh hardening - not root login, no password hardening
- [x] nginx
- [ ] user and group management
### Level 1
- [x] fail2ban-server
### Level 2
- [ ] git local and remote repo as github and internal gitea
### Level 3
- [ ] git server
- [ ] setup mysql/mariadb database
- [ ] nextcloud setup
### Level 4
- [ ] nmap
- [ ] ipcalc
- [ ] ufw
### Level 5
- [ ] simple mail server Ports: 25 (smtp), 587 (smpts), 143 (imap)
- [ ] tcpdump -> catch clear text passwd with tcpdump
- [ ] pki for mutual tls trust
- [ ] build each their own firewall/router with openbsd
- [ ] build together an firewall which will be the sbx_lab firewall