Will man eine Warnseite bei einem SSH Zugang anzeigen, hilft diese Anleitung
Installieresshpass, ein Tool zur nicht-interaktiven ssh-Passwort-Authentifizierung.
So führst du den Befehl sudo ohne Passwort aus:
Du hast einen langwierigen rsync-Job oder ein Python-Skript auf einem Remote-Server laufen lassen, nur um mit anzusehen, wie es in dem Moment abstürzt, in dem deine SSH-Sitzung unterbrochen wird, und jetzt musst du dich mit nohup, screen, tmux und systemd auseinandersetzen, damit das nie wieder passiert.
Nähere Infos findest du auf Tecmint
Massive Brute-Force-/Scan-Angriffe auf den SSH-Dienst, u. a. von einzelnen IPs mit mehreren zehntausend Login-Versuchen. SSH ist bereits über Key-Auth, Non-Standard-Port und fail2ban abgesichert. Ziel dieser Maßnahme: Reduktion von Logspam, Ressourcenverbrauch und Angriffsfläche durch effizientere Blockierung auf Firewall-Ebene mittels ipset statt einzelner iptables-Regeln pro IP.
* Root- bzw. sudo-Zugriff auf den Server
* fail2ban bereits installiert und aktiv
* iptables (legacy) im Einsatz
\\ sudo apt update\\ sudo apt install ipset\\ ipset --version\\
Für IPs/Ranges, die dauerhaft und unabhängig von fail2ban gesperrt werden sollen (z. B. bekannte bösartige Hoster-Ranges):
sudo ipset create blocklist hash:\ip sudo ipset add blocklist 61.138.113.\187 sudo iptables -I INPUT -m set --match-set blocklist src -j \DROP
ipset-Sets sind standardmäßig nicht über Reboots persistent.
sudo ipset save > /etc/ipset.\conf
Kontrolle:
cat /etc/ipset.\conf
Datei: /etc/systemd/system/ipset-persistent.service
[Unit] Description=Restore ipset \rules Before=netfilter-persistent.\service After=network-pre.target [Service] Type=\oneshot ExecStart=/sbin/ipset restore -! -file /etc/ipset.conf [Install] WantedBy=multi-user.\target
sudo systemctl enable ipset-\persistent
Da neue IPs nicht automatisch in /etc/ipset.conf landen, empfiehlt sich ein Save-Service beim Shutdown.
Datei: /etc/systemd/system/ipset-save.service
[Unit] Description=Save ipset rules on \shutdown Before=shutdown.target reboot.target halt.target [Service] Type=\oneshot ExecStart=/sbin/ipset save -file /etc/ipset.\conf RemainAfterExit=yes [Install] WantedBy=halt.target reboot.target shutdown.\target
sudo systemctl enable ipset-save.\service
Hinweis: Dieser Save/Restore-Mechanismus betrifft ausschließlich das manuell gepflegte Setblocklist. Das fail2ban-eigene Set (siehe Punkt 4) wird davon bewusst nicht erfasst.
Anstatt dass fail2ban für jede gebannte IP eine eigene iptables-Regel anlegt, wird die mitgelieferte ipset-Action genutzt. Diese erstellt und verwaltet das Set (f2b-<jailname>) sowie die zugehörige iptables-Regel automatisch beim Start/Stop des Jails.
ls /etc/fail2ban/action.d/ | grep \ipset
Relevant: iptables-ipset-proto6.conf
Datei: /etc/fail2ban/jail.local
[sshd] enabled = \true port = <NICHT-STANDARD-PORT> maxretry = \3 findtime = \600 bantime = \86400 bantime.increment = \true bantime.factor = \24 bantime.maxtime = \604800 banaction = iptables-ipset-\proto6
* bantime.increment: Bannzeit verlängert sich bei wiederholten Verstößen exponentiell (Faktor 24, Cap bei 7 Tagen) * banaction: nutzt ipset statt Einzelregeln
sudo systemctl restart \fail2ban sudo fail2ban-client status \sshd
sudo ipset list f2b-\sshd sudo iptables -L INPUT -n --line-numbers | grep f2b-\sshd
sudo fail2ban-client set sshd banip 1.2.3.\4 sudo ipset list f2b-\sshd sudo fail2ban-client set sshd unbanip 1.2.3.\4
PermitRootLogin \no AllowUsers <username> MaxStartups 3:50:\10 LoginGraceTime \15
sudo iptables -A INPUT -p tcp --dport <PORT> -m conntrack --ctstate NEW -m recent --set --name \SSH sudo iptables -A INPUT -p tcp --dport <PORT> -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j \DROP
Begrenzt neue Verbindungsversuche auf 4 pro Minute je IP, unabhängig von fail2ban.
* GeoIP-Blocking (xtables-addons / nftables-Sets) für Länder ohne legitimen \Zugriffsbedarf * CrowdSec als Ergänzung/Ersatz zu fail2ban (Community-Blocklists) * Automatisches Reporting gebannter IPs an AbuseIPDB via fail2ban-Plugin
| Set | Verwaltet durch | Persistenz | Zweck |
|---|---|---|---|
| blocklist | manuell / Admin | ipset-persistent.service (Boot) | dauerhafte Sperre bekannter Angreifer |
| f2b-sshd | fail2ban (automatisch) | keine (Neuaufbau bei Jail-Start) | dynamische Bans aus Login-Versuchen |
* Migration bereits bestehender, einzeln gesetzter iptables-Bans in das neue ipset-Schema
* Entscheidung zu GeoIP-Blocking treffen
* Monitoring/Alerting bei ungewöhnlich hoher Ban-Rate einrichten
| Datum | Änderung | Autor |
|---|---|---|
| date | Ersterstellung – ipset + fail2ban-Integration | Franz |