Automatisches Starten von Programmen in Linux am Beispiel von APIBAN auf einem Raspi

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.

Strichzeichnung apiban
Zeichnung von ChatGPT erstellt: APIBAN schützt deinen Asterisk-SIP-Server automatisch vor SIP-Scannern mit einer ständig aktuellen Blacklist bösartiger IP-Adressen, die automatisch in iptables geladen werden, bevor sie Schaden anrichten können. Deshalb sollte APIBAN nach dem Booten automatisch starten.

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-Server durch automatisiert erstellte Blacklists, die immer auf dem aktuellsten Stand sind
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