17. August 2025
Mit einem Cronjob wollte eine Bash-Datei einfach nicht nach dem Booten meines Raspberry Pi mit Raspian als Betriebssystem automatisch starten. Es geht auch anders und zuverlässiger. Nachfolgend eine Anleitung, die mit Hilfe von claude.ai erstellt wurde.

Ausgangssituation: Unter /usr/local/bin/startapiban.sh befindet sich die startapiban.sh:
#!/bin/bash while true do /usr/local/bin/apiban.sh sleep 3600 done
Die macht nichts anderes als die apiban.sh alle 3600 Sekunden – also jede Stunde – zu starten. Die apiban.sh ist ein Programm für Asterisk, um IP-Adressen zu sperren, die das APIBAN-Netzwerk mit Hilfe von „Honigfallen“ entdeckt und sie in eine Blackliste aufnimmt, die regelmäßig an alle verteilt wird, die APIBAN nutzen. Diese IP-Adressen werden automatisch in iptables eingetragen. Es sind IP-Adressen von SIP-Scannern, die einen Asterisk-Server schädigen oder lahmlegen könnten. Manche wollen auf Kosten andere telefonieren. Die apiban.sh empfängt regelmäßig Aktualisierungen der Blacklist und trägt die neu entdeckten bösartigen IP-Adressen in iptables ein, bevor sie überhaupt zuschlagen können. Bei mir funktioniert APIBAN seit Jahren perfekt.
Angenommen wir sind im Urlaub und nicht da. Daheim ist 5 Minuten Stromausfall. Der Raspberry fällt aus und fährt wieder hoch, allerdings ohne APIBAN. Wichtig ist deshalb, dass die startapiban.sh und somit die apiban.sh nach dem Booten automatisch startet. So gehen wir vor, wenn wir Systemd Service einsetzen wollen:
Erstelle eine Service-Datei:
sudo nano /etc/systemd/system/startapiban.service
Diese Datei erhält alle Rechte unter root.
Füge folgenden Inhalt ein:
[Unit] Description=Apiban Service for Asterisk After=multi-user.target network.target # Warten auf Netzwerk ist wichtig für Apiban [Service] Type=simple ExecStart=/usr/local/bin/startapiban.sh User=pi Group=pi Restart=on-failure RestartSec=30 # Längere Restart-Zeit, da Apiban auf Netzwerk angewiesen ist # Falls der Service länger zum Starten braucht: TimeoutStartSec=60 [Install] WantedBy=multi-user.target
Da Apiban auf Netzwerkverbindung angewiesen ist, habe ich network.target
hinzugefügt. Das stellt sicher, dass das Netzwerk verfügbar ist, bevor der Service startet.
Die restlichen Schritte wie folgt:
sudo systemctl daemon-reload sudo systemctl enable startapiban.service sudo systemctl start startapiban.service
So startet dein Apiban-Service automatisch beim Boot und wird bei Fehlern automatisch neu gestartet – perfekt für einen Sicherheitsdienst wie Apiban!
Nun den Service überprüfen:
# Status anzeigen sudo systemctl status startapiban.service # Logs anzeigen sudo journalctl -u startapiban.service -f
Bei mir gabs folgende „komische“ Ausgabe:
root@raspberrypi:/home/pi# journalctl -u startapiban.service -f -- Logs begin at Sun 2025-08-17 16:04:32 CEST. -- Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist Aug 17 16:04:59 raspberrypi startapiban.sh[833]: iptables v1.8.2 (nf_tables): Chain 'APIBAN' does not exist
Das Skript funktioniert aber trotzdem einwandfrei. Wir können das im Log oder iptables überprüfen. Verschiedene Methoden, um die Anzahl der Einträge in der APIBAN Chain zu zählen:
sudo iptables -L APIBAN | grep -c "DROP" sudo iptables -L APIBAN -n | tail -n +3 | wc -l sudo iptables -L APIBAN -n | awk '/DROP/ {count++} END {print count+0}' sudo iptables -L APIBAN -n -v | tail -n +3 | wc -l
Mein Ergebnis:
root@raspberrypi:/home/pi# sudo iptables -L APIBAN -n | awk '/DROP/ {count++} END {print count+0}' 1679 root@raspberrypi:/home/pi#
Wow! 1679 blockierte IP-Adressen! Das zeigt deutlich, wie wichtig und effektiv ein Apiban-Setup ist. Ohne diesen Schutz hätten all diese 1679 IPs versuchen können, ein Asterisk-System anzugreifen.
Zur Einordnung:Das sind wahrscheinlich hauptsächlich SIP-Scanner und Brute-Force-Angreifer. Viele davon versuchen VoIP-Systeme zu kompromittieren für Toll-Fraud (teure Auslandsgespräche auf deine Kosten). Die Anzahl zeigt, dass das System definitiv im Visier von Angreifern steht.
Mehr zu APIBAN:
|
APIBAN schützt SIP-Telefon-Server automatisch vor bösartigen Angriffen aus dem Internet – 2. Februar 2023: APIBAN ist ein kostenloser Dienst, der zum Beispiel für Asterisk-SIP-Server laufend aktualisierte Blacklists böswilliger IP-Adressen zur Verfügung stellt, die automatisch in regelmäßigen Abständen in Iptables eingetragen werden. Dies bewerkstelligt ein kleines Skript. Damit die Blacklist in Iptables nicht zu groß wird, bleiben nur die 250 neuesten Einträge in Iptables bestehen. Ältere Einträge werden automatisch aus Iptables entfernt. Man muss sich um die Pflege der Blacklists im Idealfall nicht mehr kümmern. – weiter – |