
Zentralisierte Firewall-Steuerung
Das zentralisierte Firewall-Control bietet eine zentrale Möglichkeit, die Firewall auf mehreren Servern oder Loadbalancern zu verwalten, die iptables verwenden. So können Sie schnell Allow/Block/Del/Search für Missbrauchsbereiche usw. mit einem Befehl auf mehreren Servern durchführen. Es greift über SSH auf diese Server zu.
Es unterstützt sowohl IPv4 als auch IPv6.
Getestet auf Debian 6.x / 7.x / 8.x / 9.x, sollte aber auf jeder Distribution funktionieren.
Um die Funktionen 'precheck', 'protected' und 'findip' für IPv6 zu nutzen, muss das Python-Modul 'netaddr' installiert sein. Für IPv4 ist dies nicht erforderlich, da es Prefix-Matching auf der binären Form der IP verwendet.
Debian: apt-get install python3-netaddr
Es ist effizienter, zusätzlich zu iptables 'ipset' zu verwenden. Ipset kann verwendet werden, um Listen zu verwalten, auf die iptables verweisen und die es nutzen kann. Dies ist schneller und die Manipulation der Liste ist flexibler und die bevorzugte Methode zur Verwendung dieses Skripts.
Debian: apt-get install ipset
Da dieses Skript über SSH eine Verbindung zu den angegebenen Servern herstellt, muss ein solcher Zugriff vorhanden sein, bevor es verwendet werden kann.
Kopieren Sie die Beispielkonfiguration vom ersten Mal von cfc.cfg-example nach cfc.cfg.
Die folgenden Einstellungen können in der Konfigurationsdatei festgelegt werden:
action: legt die Aktion beim Hinzufügen einer Regel fest, Standard: DROP
checkaggrbin: Pfad zum checkaggr.py-Skript, Standard: ./checkaggr.py
cleanupconfirmation: fragt vor dem Ausführen des clean-Befehls nach Bestätigung, setzen Sie auf false für Cron-Nutzung, Standard: true
date: legt das Datumsformat für die Firewall-Kommentare fest, Standard: $(date +%d%m%Y) -> 22062016
dateipset: legt das Datumsformat für die ipset-Firewall-Kommentare fest, belassen Sie es auf der Standardeinstellung, um einige Funktionen nicht zu beeinträchtigen, Standard: $(date +%Y%m%d) -> 20160622
ipsetname: setzt den IPSET-Listennamen, Standard: blockedips
ipsetservers: setzt die Server, die IPSET anstelle von iptables verwenden, Standard: "lvs05.example.com lvs06.example.com"
fwchain: Name der Firewall-Kette zum Hinzufügen/Löschen/Suchen, Standard: INPUT
masklimit: maximale Größe der IP-Bereiche, die hinzugefügt werden können, Standard: /21
precheck: prüft, ob die hinzuzufügende IP bereits in der Firewall oder Teil eines größeren hinzugefügten Bereichs ist, kann bei großen Firewalls unter IPv6 etwas langsam sein (~25 Sek. für die Suche von 500 IP-Bereichen pro Server), Standard: true
protected: aktiviert die hinzugefügten geschützten Bereiche, Standard: true
protectedranges: IP-Bereiche, die von der 'add'-Funktion ausgeschlossen sind, normalerweise die dem lokalen Netz gehörenden Bereiche, Standard: "172.16.0.0/12 10.0.0.0/8 192.168.0.0/16"
pythonbin: Ort des verwendeten Python-Binärprogramms, Standard: /usr/bin/python3
servers: setzt die Server, die nur iptables verwenden, Standard: "lvs01.example.com lvs02.example.com lvs03.example.com lvs04.example.com"
Die IPv6-Funktionen sind mit dem Suffix '6' gekennzeichnet
Wenn Sie IPs/Bereiche mit den folgenden Befehlen eingeben, tun Sie dies in CIDR-Notation, diese wird validiert und akzeptiert nichts anderes.
add:
cfc.sh add n.n.n.n/NN '<optional comment>'
cfc6.sh add <IPv6_address_range> '<optional comment>'
Fügt die angegebene IP (den Bereich) zu den Firewalls mit der konfigurierten Aktion für den gesamten Datenverkehr von dieser Quelle hinzu. Erstellt standardmäßig einen Kommentar mit dem aktuellen Datum. Sie können einen optionalen Kommentar in einfachen Anführungszeichen hinzufügen, um z. B. einen Grund oder den Eigentümer dieses Bereichs anzugeben. Später kann auch nach diesem Kommentar gesucht werden.
addstring:
cfc.sh addstring <protocol>:<dport> <string>
cfc6.sh addstring <protocol>:<dport> <string>
Fügt einen String-Block zu iptables für ein bestimmtes Protokoll und einen Zielport hinzu. Ein praktisches Beispiel wäre das Blockieren eines User-Agents, der für einen Haufen Webserver bestimmt ist, also eine TCP-Verbindung, die für Port 80 mit dem String „Firefox/28.0“ bestimmt ist – der gesamte eingehende Datenverkehr, der diesem String in Richtung TCP-Port 80 entspricht, würde blockiert:
cfc.sh addstring tcp:80 'Firefox/28.0'
Seien Sie vorsichtig, dies kann schwerwiegende Folgen haben, wenn der String nicht spezifisch genug ist!
clean:
cfc.sh clean <older_than_number_of_days>
Löscht alle CFC-Firewall-Regeln, die älter als n Tage sind. Beachten Sie, dass dies vom Standarddatumsformat abhängt! Wenn Sie also das Datumsformat angepasst haben, müssen Sie das Skript im 'clean'-Abschnitt anpassen.
del:
cfc.sh del n.n.n.n/NN
cfc6.sh del <IPv6_address_range>
Löscht die angegebene IP (den Bereich)/Regel aus den Firewalls
delstring:
cfc.sh delstring <protocol>:<dport> <string>
cfc6.sh delstring <protocol>:<dport> <string>
Löscht einen String-Block in iptables für ein bestimmtes Protokoll und einen Zielport.
find:
cfc.sh find <string>
cfc6.sh find <string>
Durchsucht die Firewalls nach der angegebenen Zeichenfolge (Groß-/Kleinschreibung wird ignoriert), dies kann (ein Teil einer) IP / Bereich / Kommentar sein
findip:
cfc.sh findip n.n.n.n/NN
cfc6.sh findip <IPv6_address_range>
Durchsucht die Firewalls, ob die angegebene IP (der Bereich) bereits Teil einer hinzugefügten Regel ist, kann bei großen Firewalls unter IPv6 etwas langsam sein (~25 Sek. für die Suche von 500 IP-Bereichen pro Server). IPv4 verwendet stattdessen Prefix-Matching auf der binären Form der IP, was etwa 500 % schneller ist; dies wird auch für die Funktionen precheck und protectedranges verwendet.
ipsethostinit:
cfc.sh ipsethostinit <server_name>
cfc6.sh ipsethostinit <server_name>
Fügt dem angegebenen Host eine IPSET-Liste und eine darauf verweisende iptables-Regel unter Verwendung der in cfc.cfg definierten Parameter hinzu. Dies muss nur einmal vor dem Hinzufügen von Firewall-Regeln durchgeführt werden.
last:
cfc.sh last <nr_of_most_recent_rules>
cfc6.sh last <nr_of_most_recent_rules>
Zeigt die letzten zu den Firewalls hinzugefügten Einträge an