Server-Sicherheit · 10 min read · Dec 02, 2025
Erweiterung des Perfect Servers - Debian Squeeze [ISPConfig 3] - Seite 5
11. Härtung Ihres Systems
Zunächst sollten Sie sicherstellen, dass Sie das Sicherheitsniveau auf Hoch gesetzt haben, im Serverkonfiguration - Web (Tab) des ISPConfig3-Panels.
Die folgenden Anweisungen sind nur eine Demonstration. Bitte verstehen Sie sie vollständig (indem Sie die Dokumentation im Internet lesen), bevor Sie sie anwenden und verwenden.
Im Allgemeinen, wenn Sie ihnen folgen, können Sie den Datenverkehr auf bestimmten Ports begrenzen, SYN-Verbindungen reduzieren und Eindringlinge verhindern, die bekannte schlechte Pakete verwenden. Um sie anzuwenden, erstellen Sie den Ordner /root/scripts (falls er nicht existiert) und die folgenden 5 Dateien. (loadfw, unloadfw, IPs, fwrules und reloadfail2ban). Die erste enthält das Skript zum Laden der Regeln, die zweite das Skript zum Entladen der Regeln, die dritte enthält die “SCHLECHTEN” IPs und die “SCHLECHTEN” Netzwerke, die vierte die benutzerdefinierten Regeln und die fünfte einige Befehle zum Neuladen von allem (einschließlich fail2ban).
mkdir /root/scripts
touch /root/scripts/loadfw
touch /root/scripts/unloadfw
touch /root/scripts/IPs
touch /root/scripts/fwrules
touch /root/scripts/reloadfail2ban
cd /root/scripts
nano loadfw
Fügen Sie Folgendes ein:
#!/bin/bash
# Einfaches iptables IP/Subnetz-Ladeskript
# ----------------------------------------------------------
cd /root/scripts/
IPT=/sbin/iptables
DROPMSG="fwBLOCKED "
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)
while read fwrule
do
$IPT -I INPUT $fwrule
done < /root/scripts/fwrules
for ipblock in $BADIPS
do
$IPT -I INPUT -s $ipblock -j DROP
$IPT -I INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"
done
Bearbeiten Sie unloadfw:
nano unloadfwFügen Sie Folgendes ein:
#!/bin/bash
# Einfaches iptables IP/Subnetz-Entladeskript
# ---------------------------------------------------------
cd /root/scripts/
IPT=/sbin/iptables
DROPMSG="fwBLOCKED "
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)
while read fwrule
do
$IPT -D INPUT $fwrule
done < /root/scripts/fwrules
for ipblock in $BADIPS
do
$IPT -D INPUT -s $ipblock -j DROP
$IPT -D INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"doneBearbeiten Sie IPs:
nano IPsFügen Sie die lästigen IPs ein (z. B. IPs, die mehrfach von fail2ban gesperrt wurden) oder ganze Netzwerke. Sie können hier jederzeit IPs oder Netzwerke hinzufügen, aber bevor Sie eine Änderung vornehmen (insbesondere wenn Sie etwas entfernen), müssen Sie “/root/scripts/unloadfw” ausführen. Danach können Sie die Datei bearbeiten, IPs oder Netzwerke einfügen und schließlich müssen Sie “/root/scripts/loadfw” ausführen (siehe unten)
#IP
x.y.z.w
x.q.a.r
#netzwerke
d.r.t.h/24
#mailserver
a.g.h.j(Sie können http://www.countryipblocks.net verwenden, um die Netzwerke zu sehen, die mit jedem Land verbunden sind). Bearbeiten Sie fwrules:
nano fwrulesFügen Sie Folgendes ein (und alles andere, das in die INPUT-Kette eingefügt (-I) oder gelöscht (-D) werden kann. Die Regeln sind für Server mit einer einzigen Netzwerkschnittstelle (eth0). Bitte ändern Sie sie, um Ihren Bedürfnissen gerecht zu werden (z. B. ändern Sie eth0, wenn Ihre Netzwerkschnittstelle anders ist).
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50022 -j DROP
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50022 -j LOG --log-prefix "LMfwport50022"
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --set --name fw50022
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50000 -j DROP
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50000 -j LOG --log-prefix "LMfwport50000"
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --set --name fw50000
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw10000 -j DROP
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw10000 -j LOG --log-prefix "LMfwport10000"
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --set --name fw10000
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw25 -j DROP
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw25 -j LOG --log-prefix "LMfwport25"
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --set --name fw25
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw110 -j DROP
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw110 -j LOG --log-prefix "LMfwport110"
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --set --name fw110
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50443 -j DROP
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50443 -j LOG --log-prefix "LMfwport50443"
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --set --name fw7443
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw22 -j DROP
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw22 -j LOG --log-prefix "LMfwport22"
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name fw22
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw20 -j DROP
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw20 -j LOG --log-prefix "LMfwport20"
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --set --name fw20
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw21 -j DROP
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw21 -j LOG --log-prefix "LMfwport21"
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --set --name fw21
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw143 -j DROP
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw143 -j LOG --log-prefix "LMfwport143"
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --set --name fw143
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw53 -j DROP
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw53 -j LOG --log-prefix "LMfwport53"
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --set --name fw53
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw443 -j DROP
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw443 -j LOG --log-prefix "LMfwport443"
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --set --name fw443
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw8081 -j DROP
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw8081 -j LOG --log-prefix "LMfwport8081"
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --set --name fw8081
-p icmp -j DROP
-p icmp -m limit --limit 2/s -j ACCEPT
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j DROP
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn80"
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j DROP
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn443"
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j DROP
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn50443"
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn50022"
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn22"
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j DROP
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn50000"
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j DROP
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn10000"
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn25"
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn20"
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn21"
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn110"
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn143"
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn53"
-i eth0 -p tcp --tcp-flags ALL ALL -j DROP
-i eth0 -p tcp --tcp-flags ALL ALL -j LOG --log-level 4 --log-prefix "FLAAfw"
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-level 4 --log-prefix "FINGfw"
-i eth0 -f -j DROP
-i eth0 -f -m limit --limit 6/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "FRAGfw"
-i eth0 -p tcp --tcp-flags ALL NONE -j DROP
-i eth0 -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULLfw"
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMASfw"
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-level 4 --log-prefix "SYNRTSfw"
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-level 4 --log-prefix "SYNRTSACKfw"
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-level 4 --log-prefix "SYNRTSYNSfw"
-i eth0 -p tcp ! --syn -m state --state NEW -j DROP
-i eth0 -p tcp ! --syn -m state --state NEW -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "DROSYNCfw"Bearbeiten Sie reloadfail2ban:
nano reloadfail2banFügen Sie Folgendes ein:
#!/bin/bash
/etc/init.d/fail2ban restart
sleep 2
/root/scripts/unloadfw
sleep 2
/root/scripts/loadfwBeachten Sie, dass das Skript reloadfail2ban nur die benutzerdefinierten Regeln in fwrules entlädt, fail2ban neu startet und die Regeln in fwrules erneut lädt. Es führt keinen vollständigen Neustart der Firewall durch. Bevor Sie die Regeln in dieser Datei (oder der IPs-Datei) bearbeiten, entladen Sie sie mit unloadfw. Die Rolle von reloadfail2ban besteht darin, die Funktionalität von fail2ban zu testen.
Führen Sie schließlich aus:
chmod 700 reloadfail2ban
chmod 700 unloadfw
chmod 700 loadfw
/root/scripts/reloadfail2ban
Wenn Sie möchten, dass die benutzerdefinierten Regeln nach jedem Neustart geladen werden, fügen Sie die Zeile: /root/scripts/loadfw am Ende von /etc/init.d/rc.local ein:
nano /etc/init.d/rc.local
und fügen Sie hinzu:
[...]
/root/scripts/loadfw(D)DoS Deflate ist ein leichtgewichtiges Bash-Shell-Skript, das dazu dient, den Prozess der Blockierung eines Denial-of-Service-Angriffs zu unterstützen. Es erstellt eine Liste von IP-Adressen, die mit dem Server verbunden sind, zusammen mit ihrer Gesamtzahl an Verbindungen. Es ist eine der einfachsten und am leichtesten zu installierenden Lösungen auf Softwareebene.
IP-Adressen mit mehr als einer vorkonfigurierten Anzahl von Verbindungen werden automatisch in der Firewall des Servers blockiert, die entweder iptables oder die Advanced Policy Firewall (APF) sein kann. Um (D)DoS Deflate zu installieren:
cd /tmp
wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh
Bearbeiten Sie /usr/local/ddos/ddos.conf und wenden Sie die folgenden Änderungen an, die die APF-Firewall deaktivieren und iptables verwenden, Ereignisse an root per E-Mail senden und IPs mit mehr als 100 Verbindungen pro Minute blockieren.
[...]
APF_BAN=0
EMAIL_TO="root"
NO_OF_CONNECTIONS=100
[...] Die obigen Punkte sind nur eine Reihe von Vorschlägen. Sie können sie nach Belieben erweitern.
Die Implementierung ist nur ein Ansatz von vielen. Sie können eine Firewall-Lösung wie APF, Shorewall usw. verwenden. Ich wäre erfreut, mehr verschiedene Ansätze in Verbindung mit diesem einzubeziehen.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.