Spätestens dann wenn man spezielle Anforderungen hat...
Und wie es Teufel will, ist mir genau dieses bei der Firewall passiert.
Denn Iptables ist zwar eine gute Firewall, leider ist sie nur lokal beschränkt.
Ich brauchte aber etwas, womit man Blacklisten führen und diese gleichzeitig auf anderen Servern wirksam werden lassen kann.
Die Lösung für dieses Problem war schnell geschrieben, jedoch sehr schnell ausgereizt, denn es kamen immer mehr Anforderungen hinzu.
So musste ein etwas anderes Konzept her, welches einen vollkommen modularen Aufbau besitzt und dadurch beliebig erweitert werden kann.
Die Lösung war dieses hier:

Ohne Module ist das Programm dumm wie Bohnenstroh.
Fügt man nun wiederum Module hinzu kann man dem Programm seine Aufgaben zuweisen.
Prinzipiell kann es alles was man mit Python so programmieren kann.
Ist dieses Programm als Drohne im Netzwerk unterwegs, kann es auch mit anderen Drohnen kommunizieren.
So ist jede Drohne in der Lage neuere Module an andere Drohnen zu verteilen, die selbiges verwenden.
Weil nun aber die Drohne durch Module ihre Funktionen bekommt, kann man auf diese Weise anderen Drohnen andere Funktionen geben oder Module synchronisieren.
Die Firewall macht von diesen Netzwerkfunktionen sehr häufigen Gebrauch um ihre globalen Black-, White-, Rangebanlisten auszutauschen.
Nun kann aber auch ein Modul auf die Funktionen eines anderen aufbauen, wie z.b. das Fail2Ban Modul.
Dieses baut direkt auf das Firewall-Modul auf, um so entweder lokale oder globale Banns zu erzeugen.
Gewährleistet wird diese interop. durch die Adressline im CP.
Naja, lange Rede kurzer Sinn.
Das Programm ist an für sich recht einfach gebaut, kann aber sehr komplex ausgebaut werden.
Multithreading ist ein absolutes MUSS für aktive Module, alles andere kann auch per Event oder passiv laufen (hier sollte man aber aufpassen, nicht das man den CP verstopft).
Fällt eine Drohne aus, gliedert sie sich beim anfahren wieder in das Netzwerk ein.
Es besteht aber auch die Möglichkeit direkte 3-Dimensionale Netzwerke zu bauen, indem man Hauptknoten festlegt.
Finden kann man es hier:

Wenn Fragen zu diesem Programm aufkommen, fragt einfach, denn das ganze zu beschreiben ist wesentlich schwerer als es zu programmieren.
PS: Die vorhandene Authroutine ist nur zur Demonstration und nicht für die Praxis gedacht.
Wenn man ein CLI braucht, sollte man das Modul CLI mit einbinden






