CGIConfig v0.24

Firewall-/Forwarding-Setup für Linux-Router via CGI
http://www.itamservices.de/fli4l

1. Inhalt

  1. Inhalt
  2. Disclaimer
  3. Installationshinweise für FLi4L ab v2.0pre3
    1. Voraussetzungen
    2. Installation
  4. Konfiguration und Funktionsumfang
    1. online hosts
    2. firewall state
    3. advanced firewall state
    4. portforwarding state
    5. advanced portforwarding state
    6. Wichtiger Hinweis
    7. Variablen in der cgiconfig.txt
  5. Automatisierung
  6. Schlusswort
  7. History
  8. Roadmap
  9. Wishlist

2. Disclaimer

Ich übernehme keinerlei Verantwortung für eventuelle Schäden, die durch dieses Skript verursacht werden könnten. Die Benutzung erfolgt ausdrücklich auf eigene Verantwortung.

3. Installationshinweise für FLi4L ab v2.0pre3

3.1 Voraussetzungen

3.2 Inatallation

Man entpacke das Archiv und kopiere alles in das FLi4L-Basisverzeichnis - fertig. Nun noch eine neue Diskette erstellen oder den Router per imonc updaten, und schon kann man loslegen.

Wenn man die Dateien per ftp hochgeladen hat muss man noch darauf achten, dass die CGIs ausführbar sind. Am einfachsten führt man dazu ein

chmod 777 /usr/local/htdocs/*.cgi
an der Router-Konsole oder per telnet/ssh aus.

4. Funktionsumfang

Ich denke, prinzipiell sind die beiden Skripte größtenteils selbsterklärend. main_cgiconfig.cgi zeigt den momentanen Zustand an und bildet die "Schaltzentrale". Seinerseits ruft es die cgiconfig_switch.cgi auf, welche dann die eigentlichen Änderungen vornimmt.

4.1 online hosts

Hiermit erhält man eine Liste aller in der base.txt eingetragenen Clients, sowie aller Hosts, die vom Router per DHCP konfiguriert wurden mit ihrem online-/offline-Status, sowie eine Übersicht, welcher Host wieviel traffic produziert.

4.2 firewall-state

Hier hat man die Möglichkeit, den Internet-Zugang clientweise zu gestatten/zu verweigern. Wird ein Client gesperrt, dann werden die portforwarding-Funktionen von 'ipmasqadm portfw', die unter "portforwarding-state" verfügbar sind, für den entsprechenden Host automatisch ebenfalls deaktiviert.

Man hat die Möglichkeit, einen Host jeweils 'gelb' oder 'rot' zu sperren. 'gelb' bedeutet 'forward deny', der Zugriff auf den Router selbst wird also weiterhin erlaubt - also auch auf eventuelle Proxy-Server. Will man einen Host also 'definitiv' sperren, so kann man für ihn mit 'rot' auch ein 'input deny' auslösen - dann ist jeglicher Zugriff zum Router gesperrt. Diese Funktion ist aber bei DHCP-Clients mit Vorsicht zu genießen, diese werden dann auf einmal 'vergesslich' und sind u.U. vom LAN aus gar nicht mehr ansprechbar.

In die Textfelder "custom-IP" können IPs von Rechnern eingegeben werden, die nicht angezeigt werden. In der Liste erscheinen automatisch alle Hosts aus der base.txt und solche, die vom Router per DHCP konfiguriert worden sind.

Vorsicht: Wird der Host rot gesperrt, von dem aus cgiconfig angesprochen wird, ist jegliche Kommunikation mit dem Router unmöglich, da alle Verbindungen über das TCP-Protokoll abgelehnt werden (imonc (port 5000), Netzwerkumgebung/Samba (ports 137-139), ftp (port 21), httpd/webfrontend/cgiconfig(!) (port 80))

4.3 advanced firewall-state

Diese Maske habe ich erstellt, um mir ewiges Getippe im telnet zu ersparen... An dieser Stelle seien einige ipchains-HowTo's erwähnt, deren EINGÄNGIGES STUDIUM UNUMGÄNGLICH UND ABSOLUT ERFORDERLICH IST, bevor hier Hand angelegt wird, es geht hier um die Sicherheit Ihrer Daten!

Die Einträge der chains können auch wieder per Mausklick gelöscht werden. In der Liste der momentan maskierten Verbindungen kann jede Verbindung (in beide Richtungen) per Mausklick gesperrt werden.

4.4 portforwarding-state

zeigt an, welche Ports auf welchen Client im Netz weitergeleited werden. Ist ein Host im Firewall-Setup deaktiviert, so blinkt hier der entsprechende Host rot. Im Dropdown-Listenfeld kann man eine Anwendung auswählen, für die die Ports geforwardet werden sollen. Diese Liste kann selbst spielend erweitert werden, indem man im Verzeichnis htdocs/fwrd_modules einfach eine Datei mit dem Namen des Programms anlegt.

Ihr Inhalt sieht folgendermaßen aus:

  1. Zeile: protocol source_port destination_port
  2. Zeile: protocol source_port destination_port
  3. evtl. weitere...

Textfelder "custom-IP" s. firewall state

Achtung: Alle Standard-Forwardings (d.h. dies gilt nicht für die Advanced-Forwardings) können nur im Online-Zustand vorgenommen werden und müssen, sofern sie noch erwünscht sind, nach jeder (Wieder-) Einwahl erneut vorgenommen werden, da nach jeder Abwahl alle Forwardings gelöscht werden. Bei der (Wieder-) Einwahl werden nur die Forwardings aus der base.txt und der cgiconfig.txt aktiviert. (Außerdem wird aufgrund der Syntax von 'ipmasqadm portfw' immer die aktuelle WAN-IP des Routers zum Einstellen des Forwardings benötigt.)

Über die Auswahl "init default portforwarding/shutdown portforwarding" kann das Portforwarding manuell an- und abgeschaltet werden. Dabei werden beim Anschalten die Forwardings aus der base.txt, der cgiconfig.txt und - sofern manuell modifiziert - auch aus der portfw.sh aktiviert, beim Abschalten werden die autofw- und portfw-tables geflushed.

4.5 advanced forwarding-state

Dies ist das Pendant zu "advanced firewall state". Leider werden hier nur die geforwardeten Ports aufgelistet, die über 'ipmasqadm portfw' geforwardet wurden, da ich bislang noch keine einfach Möglichkeit gefunden habe, die Forwarding-Tabelle von 'ipmasqadm autofw' auszulesen. Es gibt zwar die Datei /proc/net/ip_masq/autofw, jedoch stehen die Ports und Adressen hier nicht im Dezimalsystem. In der Liste der geforwardeten Ports ist jeder Eintrag per Mausklick entfernbar.

4.6 Wichtiger Hinweis zu den advanced-setups

Die Advanced-Setups sind mit Vorsicht zu genießen! Wenn man sich nicht auskennt, öffnet man Hackern Tür und Scheunentor zum eigenen System oder man sperrt sich gar selbst aus. Des weiteren kann die Integrität des Zusammenspiels zwischen dem Standard-Firewall-Setup und dem Standard-Portworwarding-Setup nicht mehr gewährleisted werden, sobald etwas in den Advanced-Setups geändert wird. Ich denke nicht, dass ich hier großß irgendwelche "Kontrollmechanismen" schreiben werde, da die Möglichkeiten der versierten Nutzung derart vielschichtig sind, das sie eigentlich kaum fassbar sind; wären sie es, würden sie für einen Profi-Benutzer den Funktionsumfang nur schmälern bzw. könnte er sich bei Bedarf diese Mechanismen dann auch selbst stricken. Ein Otto-Normalverbraucher, der Schutzmechanismen "bräuchte", sollte ohnehin lieber die Finger von den Advanced-Setups lassen.

4.7 Variablen in der cgiconfig.txt

Seit das Portforwarding nicht mehr direkt über die portfw.sh eingestellt wird, sondern über die base.txt, finde ich das Ganze etwas unübersichtlicher. (Und das ist ausdrücklich meine ganz persönliche Meinung.) Ab der 0.19b gibt es jedenfalls die Möglichkeit, auch in der cgiconfig.txt port-forwardings einzustellen, und zwar in Anlehnung an die forwarding-modules, die auch im Web-Interface von cgiconfig verwendet werden.

Außerdem habe ich beschlossen, die hosts-Sperrungen auch über die cgiconfig.txt zu ermöglichen, da die in der base.txt unter forward-deny-host eingetragenen hosts nicht als offline dargestellt werden. Das hat folgenden Grund:
Läuft auf dem Router ein Proxy-Server, so ist es u.U. trotzdem möglich, Internet-Zugriff zu erhalten. Deshalb verwendet cgiconfig für die Sperrung nicht die forward-chain (wie die von der base.txt gesteuerte /etc/rc.d/fwrules), sondern die input-chain. Daher ist eine Erkennung, ob ein host über die base.txt gesperrt wurde für cgiconfig (noch?) nicht möglich.

OPT_CGICONFIG='yes' das CGIConfig-Package an-/ausschalten  
CGICONFIG_FWL_N='2' Anzahl der zu sperrenden Hosts
CGICONFIG_FWL_1='ftp 192.168.6.1 2' Modus (1=forward deny; 2=input deny, s.o.) und IP-Adresse des hosts
CGICONFIG_FWL_2='enterprise 1' bzw. DNS-Name des hosts
CGICONFIG_FWRD_N='2' Anzahl der forwardings
CGICONFIG_FWRD_1='ftp 192.168.6.1' forwarding des "ftp-moduls" auf die IP 192.168.6.1
CGICONFIG_FWRD_2='icq enterprise' forwarding des "icq-moduls" auf den Rechner mit dem DNS-Namen "enterprise"

Die Art des forwarding-setups von cgiconfig hat vor allem dann den deutlichen Vorteil der Übersichtlichkeit, wenn man mehrere Dienste im LAN nach außen hin anbieten will, die jeweils mehrere Ports benötigen, z.B. will man ICQ auf 5 Clients im LAN laufen lassen. Dann kann man sich einfach fünf zusätzliche Module (icq_1, icq_2, icq_3...) erstellen und mit 5 Zeilen aktivieren:

CGICONFIG_FWRD_N='5' Anzahl der forwardings
CGICONFIG_FWRD_1='icq_1 192.168.6.1' Modul 'icq_1' auf 192.168.6.1 forwarden
CGICONFIG_FWRD_2='icq_2 192.168.6.2' Modul 'icq_2' auf 192.168.6.1 forwarden
CGICONFIG_FWRD_3='icq_3 192.168.6.3' usw...
CGICONFIG_FWRD_4='icq_4 192.168.6.4'  
CGICONFIG_FWRD_5='icq_5 192.168.6.5'  

5. Automatisierung

Hierfür wird OPT_EASYCRON benötigt.

Es können im Prinzip alle Aktionen, die durch die cgiconfig_switch ausgeführt werden, automatisiert werden. Wie cron zu bedienen ist, erkläre ich hier nicht extra, dafür gibt es genügend andere Resourcen. Zur Vorgehensweise. Man erstellt einen neuen Cron-Job, an die Stelle des Befehls schreibt man Folgendes:

Mit html=0 kann schließlich der ganze HTML-Mist unterdrückt werden, so dass nur noch plain text im syslog erscheint.

6. Schlusswort

Bug-Reports und Verbesserungsvorschläge bitte an u.a. eMail-Adresse richten, dafür bin ich jederzeit offen und dankbar. Denkt daran, verbessert werden kann nur etwas durch gemeinsames Zusammenarbeiten. Ich hoffe, Euch mit diesen Skripts die Router-Konfiguration ein wenig bequemer zu machen. Ich versuche mit dem Weiterentwickeln am Ball zu bleiben. Also öfters mal am Wochenende reinschauen dürfte sich lohnen ;-)

7. History

8. Roadmap

9. Wishlist

MfG,

Daniel H. Reichelt
fli4l@itamservices.de