Initial Commit

This commit is contained in:
Patrick Asmus
2026-04-26 21:05:42 +02:00
parent aa64871408
commit 6c2a6dc12b
8 changed files with 683 additions and 22 deletions
+96
View File
@@ -0,0 +1,96 @@
# Konfiguration
Die Konfigurationsdatei befindet sich unter:
```
/opt/ssh-login-notifier/config.conf
```
Nach der Installation kann sie jederzeit bearbeitet werden:
```bash
sudo nano /opt/ssh-login-notifier/config.conf
```
Änderungen werden **sofort** beim nächsten SSH-Login wirksam — kein Neustart nötig.
## Benachrichtigungsmethoden
| Schlüssel | Werte | Beschreibung |
|---|---|---|
| `NOTIFICATION_METHODS` | `email`, `ntfy`, `email,ntfy` | Kommasepariert für mehrere Methoden |
## E-Mail Einstellungen
| Schlüssel | Beschreibung | Beispiel |
|---|---|---|
| `EMAIL_RECIPIENT` | Empfänger-Adresse | `admin@example.com` |
| `EMAIL_FROM` | Absender-Adresse | `noreply@example.com` |
| `EMAIL_SUBJECT_PREFIX` | Betreff-Prefix (Hostname wird angehängt) | `SSH Login` |
> Voraussetzung: Ein funktionierender Mail-Versand auf dem System (siehe [Voraussetzungen](prerequisites.md)).
## ntfy Einstellungen
| Schlüssel | Beschreibung | Beispiel |
|---|---|---|
| `NTFY_SERVER` | Server-URL (ohne `/` am Ende) | `https://ntfy.example.com` |
| `NTFY_TOPIC` | Topic-Name | `ssh-login` |
| `NTFY_PRIORITY` | Priorität (15) | `3` |
| `NTFY_TAGS` | Emoji-Tags, kommasepariert | `warning,computer` |
| `NTFY_AUTH_TOKEN` | Bearer-Token (leer = keine Auth) | `tk_abc123` |
### ntfy Prioritäten
| Wert | Bedeutung |
|---|---|
| `1` | Minimum |
| `2` | Niedrig |
| `3` | Standard |
| `4` | Hoch |
| `5` | Maximum (dringend) |
## Erweiterte Einstellungen
| Schlüssel | Werte | Beschreibung |
|---|---|---|
| `GEO_LOOKUP` | `true` / `false` | IP-Standort über ip-api.com abfragen |
## Beispielkonfigurationen
### Nur ntfy (einfachste Variante)
```conf
NOTIFICATION_METHODS=ntfy
NTFY_SERVER=https://ntfy.example.com
NTFY_TOPIC=ssh-alerts
NTFY_PRIORITY=4
NTFY_TAGS=warning,skull
NTFY_AUTH_TOKEN=tk_dein_token
GEO_LOOKUP=true
```
### Nur E-Mail
```conf
NOTIFICATION_METHODS=email
EMAIL_RECIPIENT=admin@example.com
EMAIL_FROM=server@example.com
EMAIL_SUBJECT_PREFIX=SSH Login
GEO_LOOKUP=true
```
### Beides kombiniert
```conf
NOTIFICATION_METHODS=email,ntfy
EMAIL_RECIPIENT=admin@example.com
EMAIL_FROM=server@example.com
EMAIL_SUBJECT_PREFIX=SSH Login
NTFY_SERVER=https://ntfy.example.com
NTFY_TOPIC=ssh-alerts
NTFY_PRIORITY=3
NTFY_TAGS=warning,computer
NTFY_AUTH_TOKEN=
GEO_LOOKUP=false
```
+69
View File
@@ -0,0 +1,69 @@
# Voraussetzungen
## Betriebssystem
- Debian 11+ (Bullseye oder neuer)
- Ubuntu 20.04+
- Andere Debian-basierte Distributionen sollten ebenfalls funktionieren
Architektur: x64 (amd64) und ARM (arm64/armhf) werden unterstützt.
## Abhängigkeiten
### Pflicht
| Paket | Zweck | Prüfung |
|---|---|---|
| `curl` | ntfy-Benachrichtigungen und Geo-Lookup | `command -v curl` |
> Das Installationsscript installiert fehlende Pflicht-Abhängigkeiten automatisch.
### Optional (für E-Mail)
Mindestens **eines** der folgenden Mail-Tools muss installiert und konfiguriert sein:
| Tool | Paket | Anmerkung |
|---|---|---|
| `mail` | `mailutils` oder `bsd-mailx` | Am weitesten verbreitet |
| `msmtp` | `msmtp` + `msmtp-mta` | Leichtgewichtig, gut für Relay |
| `sendmail` | `postfix` oder `sendmail` | Vollständiger MTA |
Das Script erkennt automatisch welches Tool verfügbar ist (Reihenfolge: mail → sendmail → msmtp).
### Optional (für Geo-Location)
Die Geo-Location nutzt die kostenlose API von [ip-api.com](http://ip-api.com). Dafür ist keine Registrierung oder API-Key nötig.
**Einschränkungen:**
- Maximal 45 Anfragen pro Minute
- Nur für nicht-kommerzielle Nutzung
- Funktioniert nur mit öffentlichen IPs (lokale IPs wie 192.168.x.x liefern kein Ergebnis)
Die Geo-Location kann in der `config.conf` deaktiviert werden (`GEO_LOOKUP=false`).
## Shell-Kompatibilität
Das Script wird über `/etc/profile.d/` eingebunden und bei jedem interaktiven Login ausgeführt.
| Shell | Unterstützt | Mechanismus |
|---|---|---|
| Bash | Ja | `/etc/profile.d/` wird nativ geladen |
| Zsh (oh-my-zsh) | Ja | `/etc/zsh/zprofile` sourct `/etc/profile` auf Debian/Ubuntu |
| Sh / Dash | Ja | `/etc/profile.d/` wird nativ geladen |
| Fish | Nein | Fish sourct `/etc/profile` nicht |
> **Hinweis:** Nur SSH-Verbindungen lösen eine Benachrichtigung aus. Lokale Logins, `su`, `sudo` und nicht-interaktive Verbindungen (SCP, SFTP, Monitoring-Tools wie PRTG) werden ignoriert.
## Funktionsweise
Das Installationsscript legt eine kleine Datei in `/etc/profile.d/` ab:
```bash
# /etc/profile.d/ssh-login-notify.sh
[ -n "$SSH_CONNECTION" ] && [ -x /opt/ssh-login-notifier/ssh-login-notify.sh ] && . /opt/ssh-login-notifier/ssh-login-notify.sh
```
Diese Zeile prüft:
1. Ist `$SSH_CONNECTION` gesetzt? (Nur bei SSH-Logins der Fall)
2. Ist das Hauptscript vorhanden und ausführbar?
3. Wenn ja → Hauptscript im Hintergrund ausführen (Login wird nicht verzögert)