FLI4L - OPT_PORTBLOCK by Daniel Sokoll <fli4l@sirsocke.de>
---------------------------------------------------------------------------------

OPT_PORTBLOCK: Portgruppen per Webinterface ffnen bzw. sperren

Die Grundidee hinter OPT_PORTBLOCK ist die abwechselnde Benutzung von Programmen,
welche verschiedene Ports nutzen.

Damit man sich nicht merken mu, welches Programm nun welche Ports im einzelnen
nutzt kann man mit OPT_PORTBLOCK Portgruppen anlegen und ihnen Namen geben.

Beispiel:
Man nutzt gelegentlich drei verschiedene Programme:
- FTP		ports: 21/tcp
- Programm_2	ports: 410/tcp, 410/udp und 411/udp
- Programm_3	ports: 417:419/tcp und 113/tcp (fr ident)

Wenn man jetzt nur eins diese Programme benutzt wre es besser wenn die Ports der
Anderen gesperrt wren.

Mit OPT_PORTBLOCK kein Problem: Webinterface aufrufen und per Mausklick die Port-
Gruppen schlieen.

HINWEIS: Bestehende Verbindungen ber einen mit PORTBLOCK gesperrten Port werden
nicht unterbrochen. 

HINWEIS: Die in diesem Beispiel verwendeten Ports sind rein FIKTIV und sind nicht
in die eigene konfiguration zu bernehmen (dank an Jens-Oliver S.)!

WICHTIG! OPT_PORTBLOCK richtet keine Portforwardings ein! Es steuert nur die Ports!
Informationen zum Forwarding: /doc/deutsch/opt/portfw.html

Seit Version 1.3 sind die HTTPd-Rechte gesetzt (Siehe HTTPd-Doku: httpd.txt):
Bereich: portblock
Recht: action



--- WICHTIG! Vorarbeiten --------------------------------------------------------

Als erstes mssen alle Ports die mit opt_portblock gesteuert weden sollen mit
Firewallregeln in der BASE.TXT ausgenommen werden (nicht sperren).

Beispiel BASE.TXT (fr ftp[21], auth[113], 410/411 und 417 bis 419):

FIREWALL_DENY_PORT_N='5'	               	#no. of ports to reject/deny
FIREWALL_DENY_PORT_1='0:20		REJECT'	#privileged ports: reject or deny
FIREWALL_DENY_PORT_2='22:112 		REJECT'	#privileged ports: reject or deny
FIREWALL_DENY_PORT_3='114:409		REJECT'	#privileged ports: reject or deny
FIREWALL_DENY_PORT_4='412:416		REJECT'	#privileged ports: reject or deny
FIREWALL_DENY_PORT_5='420:1023		REJECT'	#privileged ports: reject or deny

Weitere Informationen unter /doc/deutsch/html/2_firewall.html



--- Die Variablen ---------------------------------------------------------------

OPT_PORTBLOCK='yes'	# Werte: [ yes / no ]
	Soll das Opt-Paket installiert werden?


PB_PORTRULE_N='X'	# Werte: [ ZAHL ]
	Anzahl der Regeln welche verwaltet werden sollen


PB_PORTRULE_X='ftp'	# Werte: [ SERVICE / PORT / PORTRANGE ]
	Name des Service / Portnummer / Portrange
	Gibt an, welcher Port oder Service fr Zugriffe aus dem Internet gesperrt
	werden soll. Hier ist sehr wichtig: gibt es in der /ETC/SERVICES einen
	Port-Namen mu dieser hier angegeben werden.
	Beispiele fr Services: 
	Port:	Service:
	21/tcp	ftp
	80	www
	113/tcp	auth
	Dabei mu auf Gross- und Kleinschreibung geachtet werden!
	Ansonsten wird die Portnummer angegeben.

	Beispiel Port 113 / tcp und udp:
	Dabei mssen zwei Regeln definiert werden: siehe Beispiel Regel 3 und 4. 

	Sollen mehrere Ports auf einmal gesperrt werden:
	'417:419' bedeutet Ports 417 - 419, also die Ports 417, 418 und 419.

  	TOOL: unter /doc/deutsch/opt/portblock liegt ein HTML/Javascript-Tool mit
	      dem man Portnummern auf Services testen kann: servicecheck.html


PB_PROTOCOL_X='tcp'	# Werte: [ tcp / udp / both ]
	Wahl des Protokolls: tcp, udp oder beide (both)
	Wenn man sehr auf sicherheit bedacht ist, dann blockt man am besten alles
	( alles auf 'both' ), aber VORSICHT:
	Wenn ein Service ( /ETC/SERVICES ) gesperrt werden soll, dann darf NUR
	das Protokoll angegeben werden, welches in der /ETC/SERVICES angegeben
	ist, sonst kann es zu Fehlermeldungen und Fehlfunktionen kommen. 

  	TOOL: unter /doc/deutsch/opt/portblock liegt ein HTML/Javascript-Tool mit
	      dem man Portnummern auf Services testen kann: servicecheck.html

PB_DIRECTIO_X='both'	# Werte: [ in / out / both ]
	Wahl der Firewallrichtung: 
        in: Vom Internet ins Intranet
        out: Vom privaten Netz ins Internet
        both: Beide Richtungen blocken
        
        WICHTIG: Wenn einseitige Richtungsangaben [ IN / OUT ] gemacht werden, dann
        wird als inneres Netzwerk die Angabe der MASQ_NETWORK aus der CONFIG/BASE.TXT
        im Abschnitt Masquerading genutz. Bei mehreren Netzwerken kann es deshalb zu
        Problemen kommen ( Dank an Andi ). 
        HINWEIS: Die Richtungsangaben beziehen sich auf den Server und nicht auf die
        Clients. Also bedeutet "in" vom internet in das Lokale Netzwerk und "out" aus
        den Netzwerk in das Internet (Dank an Snake85). 

PB_GROUPCOUNT_N='X'	# Werte: [ ZAHL ]
	Anzahl der Gruppen welche verwaltet werden sollen


PB_GROUP_NAME_X='FTP'	# Werte: [ NAME ]
	Name dieser Gruppe ( Wird im Webinterface angezeigt )


PB_GROUPRULES_X='Y'	# Werte: [ REGELNUMMERN ]
	Regel(n) in dieser Gruppe.
	Mehrere Regeln werden mit ';' getrennt angegeben, z.B. '6;7'
	Sollen die Regeln von 3 bis 5 zugewiesen werden: "3-5"
	Auch Kompinationen sind mglich: z.B.: "1;3-5;8", das bedeutet eine Zuweisung
	der Regeln 1, 3, 4, 5 und 8 zu dieser Gruppe.
	ACHTUNG!
	Es ist zwar mglich eine Regel mehreren Gruppen zuzuordnen, allerdings kann es
	dann zu Fehlerhaften Statusmeldungen kommen.


PB_BLOCK_AUTO_X='yes'	# Werte: [ yes / no ]
	Soll diese Gruppe beim booten automatisch geblockt werden?


PB_GROUP_USER_X='all'	# Werte: [ ZAHL / all / none ]
	Nur der Benutzer ZAHL sieht den Status und darf nderungen vornehmen, wobei
	ZAHL die Nummer X des Benutzers in HTTPD_USER_X in der CONFIG/HTTPD.TXT ist.
	Soll jeder Benutzer (meit gibt es nur einen) diese Gruppe sehen und steuern
	knnen,	dann ist PB_GROUP_USER_X='all' zu setzten. Soll diese Gruppe nicht
	angezeigt werden: PB_GROUP_USER_X='none' ( also kein Benutzer )


PB_BLOCKTYPE='REJECT'	# Werte: [ REJECT / DENY ]
	Art des blockens: 'REJECT' (ablehnen) oder 'DENY' (ignorieren)


PB_NETWORK='192.168.10.0/24'	# Werte: [ NETZWERK ]
	Netzwerk, welches angesprochen werden soll, wenn PB_DIRECTIO_X='in' oder
	PB_DIRECTIO_X='out'.
	Ist PB_DIRECTIO_X='both', dann dann werden die Regeln von 0.0.0.0/0 nach
	0.0.0.0/0 (also von berall nach berall) angelegt.


PB_SHOW_DETAILS='yes'	# Werte: [ yes / no ]
        Gibt an, ob bei jeder Gruppe ein Details-Button erstellt werden soll, mit
        dem man sich die Gruppenregeln anzeigen lassen kann.


PB_SWAP_BLOCK_COLORS='no' # Werte: [ yes / no ]
	Gibt an, welche Farben fr offene bzw. geschlossene Ports verwendet werden
	sollen:
	no:	grn=geschlossen / rot=offen
	yes:	grn=offen / rot=geschlossen


PB_LANGUAGE='de'	# Werte: [ de / en ]
	Gibt an welche Sprache im Webinterface benutzt werden soll:
	deutsch oder englisch


PB_LOGGING='yes'	# Werte: ['yes' / 'no']
	Gibt an ob die im HTTPd ausgefrten nderungen in einem Logfile angezeigt
	werden sollen


PB_LOGUSER='all'	# Werte: [ ZAHL / all / none ]
	Nur der Benutzer ZAHL sieht den Button "Logfile ansehen", wobei	ZAHL die
	Nummer X des Benutzers in HTTPD_USER_X in der CONFIG/HTTPD.TXT ist.
	Soll jeder Benutzer den Logfile sehen knnen, dann ist PB_LOGUSER='all'
	zu setzten. Soll dieser Button nicht angezeigt werden: PB_LOGUSER='none'


PB_LOGFILE='/var/log/log.portblock'	# Werte: [ PFAD UND DATEI ]
	Gibt den Namen und den Speicherort fr die Logdatei an



# --- Optional package: pbscript ---

OPT_PBSCRIPT='no'	# Werte: [ yes / no ]
	Installiert ein Shellscript, welches z.B. mit opt_easycron Portgruppen
	Zeitgesteuert ffnen/blocken kann. (Siehe pbscript-Doku: PBSCRIPT.TXT)



# --- Optional package: pbstatus ---

OPT_PBSTATUS='no'	# Werte: [ yes / no ]
	Installiert die Zusatzfunktionen um einen Befehl auszufhren, wenn alle
        Gruppen geblockt sind, bzw. einen anderen Befehl wenn mindestens eine
        Gruppe geffnet ist. (Siehe pbstatus-Doku: PBSTATUS.TXT)

PBSTATUS_SCRIPT_OPEN    # Werte: [ Befehl ]
        Nur norwendig wenn OPT_PBSTATUS='yes'! 
        (Siehe pbstatus-Doku: PBSTATUS.TXT)

PBSTATUS_SCRIPT_CLOSED  # Werte: [ Befehl ]
        Nur norwendig wenn OPT_PBSTATUS='yes'!
        (Siehe pbstatus-Doku: PBSTATUS.TXT)



--- Sonstiges -------------------------------------------------------------------

In der Datei /var/run/portblock.status wird der aktuelle Status [ open/closed ]
der Portblock-Gruppen gespeichert. Sie ist fr Bastler gedacht, die den Status
der einzelnen Gruppen z.B. mit OPT_LPTLED verarbeiten wollen.
Einfach die Datei mit ". /var/run/portblock.status" ins Script holen und die
Variablen verarbeiten. Die Variablen:
GROUP_1='close' -> Die Gruppe 1 ist geschlossen 
GROUP_2='open'  -> Die Gruppe 2 ist offen
...
allblocked='no' -> Alle Gruppen geschlossen [yes/no]? 

Beispiel (LED1 von OPT_LPTLED als Status der Gruppe 1) :
#!/bin/sh
. /var/run/portblock.status
if [ $GROUP_1 = 'open' ]
  echo on > /var/run/lptled/led1
else 
  echo off > /var/run/lptled/led1
fi



TOOL: 	Unter /doc/deutsch/opt/portblock liegt ein HTML/Javascript-Tool	mit dem
	man Portnummern auf Services testen kann: servicecheck.html



--- Bekannte Probleme -----------------------------------------------------------

- PortBlock ist NICHT Multi-Netzwerk-fhig!!!
- OPT_WLAN_NIC - da werden Ports gesperrt die PortBlock evtl. verwalten soll!!!
 

--- Kontakt ---------------------------------------------------------------------

fli4l@sirsocke.de
http://www.sirsocke.de


--- History/Changes -------------------------------------------------------------

25.04.2003 v1.0 Entire Version

26.04.2003 v1.1 choose tcp, udp or both at each port(range) / service
	- Angabe des Protokolls fr jeden Port / Portrange / Service mglich
	- Statusmeldungen beim Booten hinzugefgt
	- HTML-Doku hinzugefgt

29.04.2003 v1.2 create Groups
	- Umstellung auf Portgruppen mit beliebigen Gruppennamen
	 
30.04.2003 v1.3 choose language / httpd-rights
	- HTTPd-Rechte hinzugefgt
	- Sprachwahl deutsch / englisch
	- Problem mit ftp-data [20/tcp] behoben
	- Englische Doku hinzugefgt

06.05.2003 v1.4 Firewall-logging / PortBlockScript
	- Regelverste werden jetzt geloggt [wenn BASE.TXT FIREWALL_LOG='yes']
	  (thanx to freaker for hint and Beta-testing)
	- Probleme mit den Services amanda, snmp und kerberos behoben
	- PortBlockScript [z.B. fr OPT_EASYCRON] hinzugefgt
	  (thanx to K.Singer for idea)
	- Bugfixes in der Statusanzeige

08.05.2003 v1.5 keep settings on reconnect
	- Aktuelle Einstellungen bei Wiedereinwahl beibehalten/zurcksetzen
	  (thanx to freaker for idea and Beta-testing)
	- Probleme mit getrennter verwaltung von tcp und udp eines ports behoben

15.05.2003 v1.6 Userrights / Logging
	- Benutzerzuweisung fr jede Gruppe: Alle, ein Benutzer oder Niemand
	  (versteckte Gruppe)
	- Logging der PortBlockaktionen (inkl. Benutzer, IP und Zeitpunkt)
	- Tool ServiceCheck zur Doku hinzugefgt

16.08.2003 v2.0.0 Grouprules more comfortable / directions
	- Einfachere Zuweisung von vielen Regeln zu einer Gruppe
	- Firewall-Richtungszuweisung fr jede Regel mglich
	- Optik berarbeitet

25.08.2003 v2.0.0a Dokumentation of Problems with more than one lan
           (thanx to Andi for hint)

04.10.2003 v2.0.1 show details?
	- Anzeigen der Gruppenregel ja/nein
        - Dokumentation berarbeitet (thanx to Snake85 and Jens-Oliver S.)

17.10.2003 v2.0.1a HTML-Doku fixed
	- Fehler in der HTML-Dokumentation behoben

04.11.2003 v2.0.2 Ethernetrouter possible / PortBlockStatus 
	- PortBlock ist nun Ethernetroutertauglich, da keine IPUP / IPDOWN mehr
        - OPT_PBSTATUS um ein Script auszufhren, wenn alle Ports geschlossen sind,
          bzw. ein anderes Script, wenn mindestens ein Port offen ist
        - Aktueller Zustand der Gruppen aus Datei auswertbar, z.B. fr OPT_LPTLED  
