/*********************************************************/ /* ----------------------------------------------------- */ /* Firewall in OS/2 TCP/IP V 4.1 und h”her konfigurieren */ /* Funktionen: Filter ADD DELET MOVE VIEW */ /* A-Net GmbH Zumikon, www.anetgmbh.ch */ /* ----------------------------------------------------- */ /* Version 0.5 */ /* ----------------------------------------------------- */ /* */ /* WICHTIG: Benutzung auf eigene Gefahr !!! */ /* */ /*********************************************************/ /*********************************************************/ /* ----------------------------------------------------- */ /* Voraussetzungen prfen (Treiber, fwfiltrs.cnf, OS/2) */ /* ----------------------------------------------------- */ /*********************************************************/ /* -------------------------------------------------------------- */ /* Bootlaufwerk feststellen und prfen, ob fwfiltrs.cnf existiert */ /* -------------------------------------------------------------- */ do forever os2c = strip(left(stream('c:\os2\cmd.exe','c','query exists'),1)) os2d = strip(left(stream('d:\os2\cmd.exe','c','query exists'),1)) os2e = strip(left(stream('e:\os2\cmd.exe','c','query exists'),1)) os2f = strip(left(stream('f:\os2\cmd.exe','c','query exists'),1)) /* mehrere OS/2 Installationen? */ i = '0' if os2c <> '' then i = i + 1 if os2d <> '' then i = i + 1 if os2e <> '' then i = i + 1 if i == '1' then do /* ein OS/2 gefunden */ letter = os2c||os2d||os2e||os2f say '' say 'OS/2 gefunden auf' letter':' leave end /* do */ if i > '1' then do forever say '' say 'Es wurden mehrere OS/2 Installationenen gefunden auf' os2c os2d os2e os2f say 'Bitte geben Sie das gewnschte Laufwerk an: ' pull letter if letter = 'C' | letter = 'D' | letter = 'E' | letter = 'F' | letter = 'G' then leave say 'ungltige Auswahl' end /* do forever */ if i = '0' then do say '' say 'Es wurde kein OS/2 gefunden auf C: D: E: F:' say 'Installation wird abgebrochen' pull . Exit end /* do */ end /* do forever */ /* OS/2 gefunden, FilterFile suchen */ filter = stream(letter':\mptn\etc\security\fwfiltrs.cnf','c','query exists') if filter = '' then do say '------------------------------------------------------' say 'kein Filter-File gefunden' say 'Falls wirklich TCP/IP V 4.1 oder h”her installiert ist' say 'kann ein neues File ' letter':\mptn\etc\security\fwfiltrs.cnf erstellt werden' say ' Soll dies geschehen (j/n)?' pull answer if answer = 'N' then EXIT if answer = 'J' then do '@echo off' 'md ' letter':\MPTN > nul' 'md ' letter':\MPTN\ETC > nul' 'md ' letter':\MPTN\ETC\SECURITY > nul' 'echo # OS/2 FirewallFilter (generiert A-Net GmbH) > ' letter':\mptn\etc\security\fwfiltrs.cnf' end /* if */ end /* do */ else say 'Filterfile ' letter':\mptn\etc\security\fwfiltrs.cnf gefunden' /* Secure Interface suchen, falls nicht vorhanden, leeres File erstellen */ fwsec = stream(letter':\mptn\etc\fwsecad.cnf','c','query exists') if fwsec = '' then do say '------------------------------------------------------' say 'kein File mit den IP-Adressen sicherer Interfaces gefunden' say 'soll das File automatisch erstellt werden? ' letter':\mptn\etc\fwsecad.cnf erstellt werden' say ' Soll dies geschehen (j/n)?' pull answer if answer = 'N' then EXIT if answer = 'J' then do '@echo off' 'echo 127.0.0.1 > ' letter':\mptn\etc\fwsecad.cnf' end /* if */ end /* do */ else say 'SecureAdapter-File ' letter':\mptn\etc\fwsecad.cnf gefunden' /* ------------------------------------------- */ /* wichtige Variabeln mit Pfaden und Filenamen */ /* ------------------------------------------- */ drive = letter':\mptn\etc\security\' /* Filter-Standardverzeicnis */ infile = 'fwfiltrs.cnf' /* Filter-Konfigurations-File */ outfile = 'fwfiltrs.new' /* neues Filter-file */ configsys = letter':\config.sys' configsav = letter':\config.fw0' 'echo off' 'if exist ' drive||outfile ' erase ' drive||outfile say '' /* -------------------------------------------------- */ /* Testen, ob FWIP.SYS geladen ist */ /* -------------------------------------------------- */ fwip = '0' do while lines(configsys)>0 line = translate(strip(linein(configsys))) if left(line,6)<> 'DEVICE' then iterate if pos('FWIP.SYS',line) >0 then fwip = '1' /* Treiber gefunden */ end call stream configsys,'c','close' /* File schliessen */ if fwip = '0' then do say '' say '------------------------------------------------------' say 'Treiber fr OS/2 Firewall ist nicht installiert' say 'Soll der Treiber FWIP.SYS in der config.sys eingetragen werden (j/n)?' pull answer if answer = 'J' then do if stream(letter':\MPTN\PROTOCOL\FWIP.SYS','c','query exists') = ''then do say '************************************************************' say 'FWIP.SYS Treiber nicht gefunden, CONFIG.SYS nicht ge„ndert ' say 'Sind Sie sicher, dass TCP/IP 4.1 oder h”her installiert ist?' say 'Der Firewall wird so nicht funktionieren !' say 'Filter k”nnen aber trotzdem definiert werden,' say 'fr ein anderes System.' say '************************************************************' say '' beep(450,50) end /* if */ else do 'copy ' configsys configsav /* alten CONFIG.SYS sichern */ 'echo REM Treiber fuer OS/2 Firewall >>'letter':\CONFIG.SYS' 'echo DEVICE='letter':\MPTN\PROTOCOL\FWIP.SYS >>'letter':\CONFIG.SYS' say '' say 'Achtung: Treiber wird erst nach einem Neustart aktiv!' say 'alter ' configsys 'wurde unter ' configsav 'gesichert' say '' end /* else */ end /* do */ end /* do */ /******************************************************/ /* -------------------------------------------------- */ /* Funktion w„hlen ADD DELETE EDIT MOVE */ /* -------------------------------------------------- */ /******************************************************/ nextone: do forever say '' say '-------------------- Funktion w„hlen --------------------' say 'W„hlen sie eine Funktion:' say '1 = neues Filter hinzufgen' say '2 = altes Filter l”schen' say '3 = Filter verschieben (werden von oben nach unten abgearbeitet)' say '4 = Filter ansehen (interpretiert, ohne reine Kommentarzeilen)' say '5 = Firewall starten/updaten mit diesen Regeln' say '6 = Programm beenden' say '---------------------------------------------------------' pull answer if answer > '0' & answer < 7 then leave /* gltige Eingabe ? */ say '' say 'W„hlen Sie 1, 2, 3, 4, 5 oder 6' beep(450,50) end /*do forever */ /* Verzeigung zur gew„hlten Funktion */ if answer = '1' then do todo = 'add' signal addfilter end /* if */ if answer = '2' then do todo = 'del' signal delfilter end /* if */ if answer = '3' then do todo = 'move' signal movefilter end /* if */ if answer = '4' then do todo = 'view' signal viewfilter end /* if */ if answer = '5' then do 'call cfgfilt -u -i' signal nextone end /* if */ if answer = '6' then NOP exit /******************************************************/ /* -------------------------------------------------- */ /* Filter hinzufgen */ /* -------------------------------------------------- */ /******************************************************/ addfilter: /* comment */ say 'Kommentar zum Filter: ' say '--------------------' pull comment say '' /* action */ do forever say 'gewnschte Aktion:' say '------------------' say ' 1 = sperren (default)' say ' 2 = zulassen' pull action if action = '' then action = '1' say '' if action = '1' then leave if action = '2' then leave say '*********************' say 'Ungltige Auswahl' action say '*********************' say '' beep(440,50) end /* do forever */ action = word('deny permit',action) /* Zahlenwert in Wort umsetzen */ /* sourceip */ do forever say 'IP-Adresse des Absenders (leer: jede Adresse):' say '----------------------------------------------' pull sourceip say '' if sourceip == '' then sourceip = '0.0.0.0' parse var sourceip ip1 '.' ip2 '.' ip3 '.' ip4 ok = '1' if ip1 < '0' then ok = '0' if ip1 > '255' then ok = '0' if ip2 < '0' then ok = '0' if ip2 > '255' then ok = '0' if ip3 < '0' then ok = '0' if ip3 > '255' then ok = '0' if ip4 < '0' then ok = '0' if ip4 > '255' then ok = '0' if ok == '1' then leave say '*******************************************************************' say 'ungltige IP-Adresse, nur vier Werte zwischen 0 und 255 mit Punkten' say 'z.B. 10.2.45.0' say '*******************************************************************' say ' ' beep(440,50) end /* do forever */ /* sourcemask */ do forever say 'Subnetmask des Absenders (Nummer von 1 bis 9 eingeben):' say '-------------------------------------------------------' say '1 = 0.0.0.0 (alle Adressen)' say '2 = 255.255.255.255 (einzelner Host)' say '3 = 255.255.255.0' say '4 = 255.255.0.0' say '5 = 255.0.0.0' say '6 = 255.255.255.128' say '7 = 255.255.255.192' say '8 = 255.255.255.224' say '9 = 255.255.254.0' pull sourcemask say '' ok = '1' if sourcemask < '1' then ok = '0' if sourcemask > '9' then ok = '0' if ok == '1' then leave say '*******************************************************************' say 'ungltiger Wert, nur 1 bis 9 m”glich' say '*******************************************************************' say ' ' beep(440,50) end /* do forever */ select when sourcemask == '1' then sourcemask = '0.0.0.0' when sourcemask == '2' then sourcemask = '255.255.255.255' when sourcemask == '3' then sourcemask = '255.255.255.0' when sourcemask == '4' then sourcemask = '255.255.0.0' when sourcemask == '5' then sourcemask = '255.0.0.0' when sourcemask == '6' then sourcemask = '255.255.255.128' when sourcemask == '7' then sourcemask = '255.255.255.192' when sourcemask == '8' then sourcemask = '255.255.255.224' when sourcemask == '9' then sourcemask = '255.255.254.0' otherwise NOP end /* select */ /* destip */ do forever say 'IP-Adresse des Empf„ngers (leer: jede Adresse):' say '-----------------------------------------------' pull destip say '' if destip == '' then destip = '0.0.0.0' parse var destip ip1 '.' ip2 '.' ip3 '.' ip4 ok = '1' if ip1 < '0' then ok = '0' if ip1 > '255' then ok = '0' if ip2 < '0' then ok = '0' if ip2 > '255' then ok = '0' if ip3 < '0' then ok = '0' if ip3 > '255' then ok = '0' if ip4 < '0' then ok = '0' if ip4 > '255' then ok = '0' if ok == '1' then leave say '*******************************************************************' say 'ungltige IP-Adresse, nur vier Werte zwischen 0 und 255 mit Punkten' say 'z.B. 10.2.45.0' say '*******************************************************************' say ' ' beep(440,50) end /* do forever */ /* destmask */ do forever say 'Subnetmask des Empf„ngers (Nummer von 1 bis 9 eingeben):' say '--------------------------------------------------------' say '1 = 0.0.0.0 (alle Adressen)' say '2 = 255.255.255.255 (einzelner Host)' say '3 = 255.255.255.0' say '4 = 255.255.0.0' say '5 = 255.0.0.0' say '6 = 255.255.255.128' say '7 = 255.255.255.192' say '8 = 255.255.255.224' say '9 = 255.255.254.0' pull destmask say '' ok = '1' if destmask < '1' then ok = '0' if destmask > '9' then ok = '0' if ok == '1' then leave say '*******************************************************************' say 'ungltiger Wert, nur 1 bis 9 m”glich' say '*******************************************************************' say ' ' beep(440,50) end /* do forever */ select when destmask == '1' then destmask = '0.0.0.0' when destmask == '2' then destmask = '255.255.255.255' when destmask == '3' then destmask = '255.255.255.0' when destmask == '4' then destmask = '255.255.0.0' when destmask == '5' then destmask = '255.0.0.0' when destmask == '6' then destmask = '255.255.255.128' when destmask == '7' then destmask = '255.255.255.192' when destmask == '8' then destmask = '255.255.255.224' when destmask == '9' then destmask = '255.255.254.0' otherwise NOP end /* select */ /* protocol */ do forever say 'Protokoll eigeben: ' say '-------------------' say 'all, tcp, tcp/ack, udp, icmp, ospf, ipip, esp, ah' say '(ipip = IP in IP, esp = encapsulatin security, ah = authentication header)' parse pull protocol say '' ok = '0' if protocol = 'all' then ok = '1' if protocol = 'tcp' then ok = '1' if protocol = 'tcp/ack' then ok = '1' if protocol = 'udp' then ok = '1' if protocol = 'icmp' then ok = '1' if protocol = 'ospf' then ok = '1' if protocol = 'ipip' then ok = '1' if protocol = 'esp' then ok = '1' if protocol = 'ah' then ok = '1' if ok ='1' then leave say '**********************' say 'Ungltige Auswahl' protocol say '**********************' say '' beep(440,50) end /* do forever */ /* srcopcode */ do forever say 'Vergleichsoperator fr Sender-Port eingeben: ' say '---------------------------------------------' say 'any (jeder beliebige Port)' say 'eq (gleich)' say 'gt (gr”sser als)' say 'lt (kleiner als)' say 'neq (nicht gleich)' say 'ge (gr”sser oder gleich)' say 'le (kleiner oder gleich)' parse pull srcopcode say '' ok = '0' if srcopcode = 'any' then ok = '1' if srcopcode = 'eq' then ok = '1' if srcopcode = 'gt' then ok = '1' if srcopcode = 'lt' then ok = '1' if srcopcode = 'neq' then ok = '1' if srcopcode = 'ge' then ok = '1' if srcopcode = 'le' then ok = '1' if ok ='1' then leave say '**********************' say 'Ungltige Auswahl' srcopcode say '**********************' say '' beep(440,50) end /* do forever */ /* srcport */ do forever if srcopcode == 'any' then do srcport = '0' leave end /* if*/ say 'Absender-Port eingeben (1 bis 65535): ' say '--------------------------------------' say '(21 = FTP File Transfer)' say '(23 = Telnet)' say '(25 = SMTP, Mail versenden)' say '(37 = Time Server)' say '(53 = DNS, Domain Name Server)' say '(79 = Finger)' say '(80 = HTTP, Browser)' say '(110 = POP3, Mail abholen)' say '(139 = NetBios Session)' say '(161 = SNMP)' parse pull srcport say '' ok = '1' if srcport < '1' then ok = '0' if srcport > '65535' then ok = '0' if ok ='1' then leave say '**********************' say 'Ungltige Auswahl' srcport say '**********************' say '' beep(440,50) end /* do forever */ /* destopcode */ do forever say 'Vergleichsoperator fr Empf„nger-Port eingeben: ' say '------------------------------------------------' say 'any (jeder beliebige Port)' say 'eq (gleich)' say 'gt (gr”sser als)' say 'lt (kleiner als)' say 'neq (nicht gleich)' say 'ge (gr”sser oder gleich)' say 'le (kleiner oder gleich)' parse pull destopcode say '' ok = '0' if destopcode = 'any' then ok = '1' if destopcode = 'eq' then ok = '1' if destopcode = 'gt' then ok = '1' if destopcode = 'lt' then ok = '1' if destopcode = 'neq' then ok = '1' if destopcode = 'ge' then ok = '1' if destopcode = 'le' then ok = '1' if ok ='1' then leave say '**********************' say 'Ungltige Auswahl' destopcode say '**********************' say '' beep(440,50) end /* do forever */ /* destport */ do forever if destopcode == 'any' then do destport = '0' leave end /* if*/ say 'Empf„nger-Port eingeben (1 bis 65535): ' say '---------------------------------------' say '(21 = FTP File Transfer)' say '(23 = Telnet)' say '(25 = SMTP, Mail versenden)' say '(37 = Time Server)' say '(53 = DNS, Domain Name Server)' say '(79 = Finger)' say '(80 = HTTP, Browser)' say '(110 = POP3, Mail abholen)' say '(139 = NetBios Session)' say '(161 = SNMP)' parse pull destport say '' ok = '1' if destport < '1' then ok = '0' if destport > '65535' then ok = '0' if ok ='1' then leave say '**********************' say 'Ungltige Auswahl' destport say '**********************' say '' beep(440,50) end /* do forever */ /* interface */ do forever say 'Adapter w„hlen: ' say '----------------' say '1 = alle Adapter (default) (= both)' say '2 = sichere Adapter, internes LAN (= secure)' say '3 = unsichere Adapter, zum Internet hin (= non-secure)' parse pull interface say '' if interface == '' then interface = '1' ok = '1' if interface < '1' then ok = '0' if interface > '3' then ok = '0' if ok == '1' then leave say '**********************' say 'Ungltige Auswahl' interface say '**********************' say '' beep(440,50) end /* do forever */ interface = word('both secure non-secure',interface) /* Zahl in Wort umsetzen */ /* routing */ do forever say 'Routing w„hlen: ' say '----------------' say '1 oder leer = alle Pakete (= both)' say '2 = nur Pakete zu/von diesem PC (= local)' say '3 = nur Pakete, die hinduchlaufen (= route)' parse pull routing say '' if routing == '' then routing = '1' ok = '1' if routing < '1' then ok = '0' if routing > '3' then ok = '0' if ok == '1' then leave say '**********************' say 'Ungltige Auswahl' routing say '**********************' say '' beep(440,50) end /* do forever */ routing = word('both local route',routing) /* Zahl in Wort umsetzen */ /* direction */ do forever say 'Richtung der Pakete w„hlen: ' say '----------------------------' say '1 oder leer = ein- und ausgehende Pakete (= both)' say '2 = nur eingehende Pakete (= inbound)' say '3 = nur abgehende Pakete (= outbound)' parse pull direction say '' if direction == '' then direction = '1' ok = '1' if direction < '1' then ok = '0' if direction > '3' then ok = '0' if ok == '1' then leave say '**********************' say 'Ungltige Auswahl' direction say '**********************' say '' beep(440,50) end /* do forever */ direction = word('both inbound outbound',direction) /* Zahl in Wort umsetzen */ /* log */ say 'Sollen diese Pakete geloggt werden? (j/n): ' say '-------------------------------------------' say 'leer = nein' pull log say '' if log == 'J' then log = 'l=yes' else log = 'l=no' /* fragment */ do forever say 'Wie sollen fragmentierte Pakete behandelt werden? ' say '--------------------------------------------------' say '1 oder leer = Regel gilt fr ganze Paket und Fragmente' say '2 = Regel gilt nur fr ganze Pakete' say '3 = Regel gilt nur fr Fragmente und Fragment-Header' say '4 = Regel gilt nur fr Fragment-Header und ganze Pakete' pull fragment say '' if fragment == '' then fragment = '1' ok = '1' if fragment < '1' then ok = '0' if fragment > '4' then ok = '0' if ok == '1' then leave say '**********************' say 'Ungltige Auswahl' fragment say '**********************' say '' beep(440,50) end /* do forever */ fragment = word('f=yes f=no f=only f=headers',fragment) /* Zahl in Wort umsetzen */ /* tunnelid */ do forever say 'Tunnel-ID (nur fr VPN notwendig): ' say '(bei VPN-Tunneln mssen die Pakete von einem weiteren Filter' say 'durchgelassen werden)' say '-----------------------------------' say 'leer = keine Tunnel-ID (=default)' pull tunnelid say '' if tunnelid == '' then leave /* keine VPN Definition */ if tunnelid > '0' & tunnelid < '1000000' then leave /* Id gltig */ say '*****************************************' say 'Tunnel-ID muss zwischen 0 und 999999 sein' say '*****************************************' beep(450,50) end /* do forever */ tunnelid = 't='tunnelid /* Eingegebene Werte anzeigen */ say '------------------------- Kontrollanzeige neues Filter ------------------------' say 'Kommentar: ' comment say 'Aktion: ' action say 'Sender-IP: ' sourceip ' Sender-Mask: ' sourcemask say 'Empf„nger-IP ' destip ' Empf„nger-Mask: ' destmask say 'Protokoll: ' protocol say 'SenderOPcode: ' srcopcode ' Sender-Port: ' srcport say 'Empf„ngerOPcode: ' destopcode ' Empf„nger-Port: ' destport say 'Adapter: ' interface say 'Routing: ' routing say 'Richtung: ' direction say 'Log: ' log say 'Fragmentieren: ' fragment say 'TunnelID: ' tunnelid say '-------------------------------------------------------------------------------' say '' do forever say 'Filter ok (j/n)?' pull neu if neu == 'N' then signal addfilter /* Filter verwerfen und neu fragen */ if neu == 'J' then leave say 'Bitte nur j oder n' end /* do forever */ /* neue Zeile im fwfiltrs.cnf lautet: */ linenew = action sourceip sourcemask destip destmask protocol srcopcode srcport destopcode destport interface routing direction log fragment tunnelid '#' comment say '' /********************************************************************/ /* ---------------------------------------------------------------- */ /* Filter-File anpassen */ /* Filter einfgen, l”schen, verschieben, je nach Wert von todo */ /* ---------------------------------------------------------------- */ /********************************************************************/ delfilter: movefilter: /* -------------------------------------------------- */ /* Filterfile lesen */ /* -------------------------------------------------- */ /* Filter-File zeilenweise einlesen und anzeigen */ say '' say '------------------------- bestehende Filter (gekrzt) -------------------------' inserted = '0' j = '0' /* Z„hler fr Anzahl Seiten */ do while lines(drive||infile) <> '0' do i = 1 to 10 /* Z„hler fr Filterzeile in Seite */ line.i=linein(drive||infile) parse var line.i linesub '#' comment parse var line.i teil1 't=' tunnel ' ' teil2 if tunnel <> '' then tunnel = 't='tunnel linesub = substr(linesub,1,77) /* nur erste 77 Zeichen anzeigen */ say 'Zeile:' j*10+i comment tunnel /* um Zeilen-Umbruch zu vermeiden */ say ' 'linesub end /* do */ say '-------------------------------------------------------------- Seite' j+1 '-------' do forever if inserted = '1' then leave /* neues Filter bereits eingefgt */ if todo = 'add' then say 'Zeilennummer des neuen Filters oder w fr weiter eingeben' if todo = 'del' then say 'Zeilennummer des zu l”schenden Filters oder w fr weiter eingeben' if todo = 'move' then say 'Zeilennummer des zu verschiebenden Filters oder w fr weiter eingeben' if todo = 'edit' then say 'Zeilennummer des zu „ndernden Filters oder w fr weiter eingeben' pull zeile if zeile = 'W' then leave if zeile > j*10 & zeile < j*10+11 then leave say 'ungltige Zeilennummer ' beep(440,50) end /* do forever */ /* beim Verschieben Ziel-Zeilennummer abfragen */ if todo = 'move' & zeile <> 'W' then do zeilefrom = zeile - 10 * j linemove = line.zeilefrom /* zu verschiebende Zeile speichern */ do forever say 'Auf welche Zeile soll das Filter verschoben werden?' pull zeilemove if zeilemove > j*10 & zeilemove < j*10+11 then leave say 'ungltige Zeilennummer ' beep(440,50) end /* do forever */ end /* do */ do i = 1 to 10 if i+j*10 = zeile & todo = 'add' then do call lineout drive||outfile,linenew /* neue Zeile einfgen */ inserted = '1' end /* if */ if i+j*10 = zeilemove & todo = 'move' then do call lineout drive||outfile,linemove /* zu verschiebende Zeile einfgen */ inserted = '1' end /* if */ if i+j*10 = zeile & todo = 'del' then do line.i = '' /* Zeile l”schen */ inserted = '1' end /* if */ if i+j*10 = zeile & todo = 'move' then do line.i = '' /* zu verschiebende Zeile am alten Ort l”schen */ inserted = '1' end /* if */ if line.i <> '' then do call lineout drive||outfile,line.i /* bestehende Zeile schreiben */ end /* if */ end /* do i = */ j = j + 1 end /* while lines */ do i = 1 to 10 /* Zeilen Array l”schen */ line.i = '' end /* do i= */ /* Files schliessen */ call stream drive||infile,'c','close' call stream drive||outfile,'c','close' /* neus Filterfile kopieren */ 'copy ' drive||outfile drive||infile 'erase ' drive||outfile if todo = 'add' & zeile <> 'W' then say 'neues Filter auf Zeile' zeile 'eingefgt' if todo = 'del' & zeile <> 'W' then say 'Filter in Zeile' zeile 'gel”scht' if todo = 'edit' & zeile <> 'W' then say 'Filter in Zeile' zeile 'ge„ndert' if zeile = 'W' then say 'keine Žnderung' /* Rcksprung zur Funktionsauswahl */ signal nextone /* -------------------------------------------------- */ /* Ende Filter hinzufgen/l”schen/verschieben */ /* -------------------------------------------------- */ /******************************************************/ /* -------------------------------------------------- */ /* Filter interpretiert ansehen */ /* -------------------------------------------------- */ /******************************************************/ viewfilter: /* Filter-File zeilenweise einlesen und interpretieren */ i = '0' do while lines(drive||infile) line=linein(drive||infile) i = i + 1 if pos('#',line) = 1 then NOP /* Kommentarzeilen berlesen */ else do parse var line rest '#' comment comment = strip(comment) rest = strip(rest) /* Blanks entfernen */ parse var line action ' ' rest if action == 'deny' then action = 'deny ' rest = strip(rest) /* Blanks entfernen */ parse var rest sourceip ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest sourcemask ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest destip ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest destmask ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest protocol ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest srcopcode ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest srcport ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest destopcode ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest destport ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest interface ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest routing ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest direction ' ' rest rest = strip(rest) /* Blanks entfernen */ parse var rest rest1 'l=' log ' ' rest2 log = 'l=' || strip(log) /* Blanks entfernen */ if log == 'l=' then log = '' /* leerlassen, fals Paramter fehlt */ parse var rest rest1 'f=' fragment ' ' rest2 fragment = 'f=' || strip(fragment) if fragment == 'f=' then fragment = '' /* leerlassen, falls Parameter fehlt */ parse var rest rest1 't=' tunnelid ' ' rest2 tunnelid = 't=' || strip(tunnelid) if tunnelid = 't=' then tunnelid = '' /* leerlassen, falls Parameter fehlt */ /* Eingelesene Werte anzeigen */ say '------------------------- Kontrollanzeige des Filters' i '---------------------' say 'Kommentar: ' comment say 'Aktion: ' action say 'Sender-IP: ' sourceip ' Sender-Mask: ' sourcemask say 'Empf„nger-IP ' destip ' Empf„nger-Mask: ' destmask say 'Protokoll: ' protocol say 'SenderOPcode: ' srcopcode ' Sender-Port: ' srcport say 'Empf„ngerOPcode: ' destopcode ' Empf„nger-Port: ' destport say 'Adapter: ' interface say 'Routing: ' routing say 'Richtung: ' direction say 'Log: ' log say 'Fragmentieren: ' fragment say 'Tunnel-ID: ' tunnelid say '-----------------------------------------------------------------------------' pull . end /* else do */ end /* do while */ /* Files schliessen */ call stream drive||infile,'c','close' /* Rcksprung zur Funktionsauswahl */ signal nextone