Der TIS Firewall Tool Kit (FWTK) ist erhältlich bei
ftp.tis.com
Der FWTK wird von TIS in einem versteckten Verzeichnis auf ihrem Server
bereitgehalten. TIS verlangt, daß eine E-Mail an
fwtk-request@tis.com
gesandt wird mit dem
einzigen Wort SEND
im Mailbody. Ein Subject wird nicht benötigt. TIS schickt eine E-Mail
zurück mit dem Pfad zu dem Verzeichnis, wo man den FWTK herunter laden
kann. Das Verzeichnis ist für ca. 12h zugänglich.
Zur Zeit ist die Version 2.0 beta vom FWTK aktuell, welche in diesem Beispiel hier auch verwendet wird. Wenn die endgültige Version veröffentlicht wird, gibt es auch eine neuere Version von diesem HOWTO.
Um den FWTK zu installieren muß man unter /usr/src
ein Verzeichnis mit
fwtk-2.0
anlegen. Danach das Archiv fwtk-2.0.tar.gz
dort hin
kopieren und mit tar auspacken.
Der FWTK erlaubt keine SSL Web Dokumente aber es ist ein Zusatzmodul von Jean-Christophe Touvet entwickelt worden. Erhältlich unter
ftp.edelweb.fr:/pub/contrib/fwtk/ssl-gw.tar.Z
Touvet gibt aber keine Unterstüzung zu dem Modul.
Es gibt aber eine modifizierte Version von Eric Wedel das Zugriff zu Netscape's "Secure News Server" erlaubt. Erhältlich unter
mdi.meridian-data.com:/pub/tis.fwtl/ssl-gw/ssl-gw2.tar.Z
In diesem Beispiel wird Eric Wedel's Version verwendet.
Um es zu installieren, einfach im /usr/src/fwtk-2.0
Verzeichnis einen
Ordner ssl-gw
anlegen und die Dateien dort hinkopieren. Es
braucht dann noch einige Änderungen damit es mit dem FWTK kompiliert.
Die erste Änderung ist in der ssl-gw.c
Datei, dort fehlt
noch ein Include:
#if defined(__linux) #include <sys/ioctl.h> #endif
Zweitens fehlt noch ein Makefile. Man kann eines von den anderen Gateway-Verzeichnissen kopieren und den original Gateway-Namen mit dem des ssl-gw überschreiben.
Die Version 2.0 des FWTK kompiliert viel einfacher als die älteren Versionen. Es müssen aber noch einige Änderungen gemacht werden bis die Beta-Version sauber kompiliert.
Zu Beginn muß im /usr/src/fwtk/fwtk
Verzeichnis das
Makefile.config.linux
über das originale Makefile.config
kopiert werden.
NICHT FIXMAKE BENÜTZEN. In der Anleitung steht es zwar, es zerstört aber die Makefile's in jedem Verzeichnis.
Das sed-Skript fügt ein '.' und '' zu der include-Zeile in jedem Makefile hinzu. Dieses sed-Skript funktioniert:
sed 's/^include[ ]*\([^ ].*\)/include \1/' $name .proto > $name
Im Makefile.config müssen noch zwei Änderungen gemacht werden.
Der Autor nahm sein Home-Verzeichnis als Source-Verzeichnis. Hier wird
aber in /usr/src
gearbeitet. Aus diesem Grund muß die
FWTKSRCDIR Variable umgesetzt werden.
FWTKSRCDIR=/usr/src/fwtk/fwtk
Weiterhin benützen einige Linux-Systeme die gdbm Datenbank. Im
Makefile.config
steht dbm und muß in diesem Fall auch
umgesetzt werden:
DBMLIB=-lgdbm
Die letzte Änderung ist im x-gw
.
Der Fehler in der BETA-Version ist in der
socket.c
. Um ihn zu beheben müssen folgende Zeilen gelöscht werden:
#ifdef SCM_RIGHTS /* 4.3BSD Reno and later */ + sizeof(un_name->sun_len) + 1 #endif
Wenn das ssl-gw benützt wird, muß man das Verzeichnis mit ins Makefile aufnehmen:
DIRS= smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw
Jetzt kann man make starten.
Jetzt beginnt der Spaß erst richtig! Man muß jedem System mitteilen, daß es die neuen Dienste nutzen soll und es müssen Tabellen erstellt werden, um dies zu kontrollieren.
Nun ein Beispiel für Einstellungen die erprobt sind. Danach noch Beschreibungen der Probleme die dabei auftreten können und wie man sie beseitigt.
Es gibt drei Dateien die die Kontrolltabellen enthalten:
/etc/services
/etc/inetd.conf
/usr/local/etc/netperm-table
Um die Funktion des FWTK zu gewährleisten müssen diese Dateien von Grund auf neu erstellt werden. Ein falsche Einstellung in den drei Dateien kann das Netzwerk unerreichbar machen.
Diese Datei regelt wer Zugriff auf die Dienste des TIS FWTK hat. Man soll auch den Datenverkehr zu beiden Seiten des Firewalls im Auge behalten. Der Authentifizierungsabschnitt der netperm-table zeigt wo die Datenbank zu finden ist und wer Zugriff darauf hat.
# # Proxy configuration table # # Authentication server and client rules authsrv: database /usr/local/etc/fw-authdb authsrv: permit-hosts localhost authsrv: badsleep 1200 authsrv: nobogus true # Client Applications using the Authentication server *: authserver 127.0.0.1 114
Mit der permit-hosts Zeile kann es Probleme beim sperren des
Zugriffs auf diesen Dienst geben. Eine mögliche Lösung des Problems
wäre folgende Zeile:
authsrv: permit-hosts *
Um die Datenbank zu initialisieren muß man als root das Script
./authsrv
in /var/local/etc
starten um den
"administrative user record" zu ertellen.
In der FWTK-Dokumentation ist beschrieben wie man neue User und Groups hinzufügt.
Ein Beispiel der Vorgehensweise:
# # authsrv authsrv# list authsrv# adduser admin "Auth DB admin" ok - user added initially disabled authsrv# ena admin enabled authsrv# proto admin pass changed authsrv# pass admin "plugh" Password changed. authsrv# superwiz admin set wizard authsrv# list Report for users in database user group longname ok? proto last ------ ------ ------------------ ----- ------ ----- admin Auth DB admin ena passw never authsrv# display admin Report for user admin (Auth DB admin) Authentication protocol: password Flags: WIZARD authsrv# ^D EOT #
Die telnet-gateway (tn-gw) controls sind in einer Reihenfolge und der Erste ist zu konfigurieren.
Im folgenden Beispiel ist es den Systemen im LAN erlaubt ohne Authentifikation den Firewall zu passieren. (permit-hosts 19961.2.* -passok)
Einem anderem System (196.1.2.202) wird der Zugang direkt zum Firewall gestattet ohne gleich durchgereicht zu werden. Die netacl-in.telnetd Zeile erlaubt dies.
Der Telnet timeout sollte kurz gehalten werden.
# telnet gateway rules: tn-gw: denial-msg /usr/local/etc/tn-deny.txt tn-gw: welcome-msg /usr/local/etc/tn-welcome.txt tn-gw: help-msg /usr/local/etc/tn-help.txt tn-gw: timeout 90 tn-gw: permit-hosts 196.1.2.* -passok -xok tn-gw: permit-hosts * -auth # Only the Administrator can telnet directly to the Firewall via Port 24 netacl-in.telnetd: permit-hosts 196.1.2.202 -exec /usr/sbin/in.telnetd
Die r-commands arbeiten in der selben Weise wie der telnet.
# rlogin gateway rules: rlogin-gw: denial-msg /usr/local/etc/rlogin-deny.txt rlogin-gw: welcome-msg /usr/local/etc/rlogin-welcome.txt rlogin-gw: help-msg /usr/local/etc/rlogin-help.txt rlogin-gw: timeout 90 rlogin-gw: permit-hosts 196.1.2.* -passok -xok rlogin-gw: permit-hosts * -auth -xok # Only the Administrator can telnet directly to the Firewall via Port netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind -a
Es sollte niemand Zugriff direkt auf den Firewall haben, wie es bei FTP der Fall ist. Somit darf kein FTP-Server auf dem Firewall installiert sein.
Die permit-hosts Zeile erlaubt jedem im LAN den freien Zugriff ins Internet und alle anderen müssen sich authentisieren. In den controls ist logging von jeder Datei, welche gesendet oder empfangen wird, integriert (-log { retr stor }).
Der ftp timeout reguliert wie lange es dauert bis eine schlechte Verbindung beendet wird oder wie lange eine Verbindung ohne Aktivität gehalten wird.
# ftp gateway rules: ftp-gw: denial-msg /usr/local/etc/ftp-deny.txt ftp-gw: welcome-msg /usr/local/etc/ftp-welcome.txt ftp-gw: help-msg /usr/local/etc/ftp-help.txt ftp-gw: timeout 300 ftp-gw: permit-hosts 196.1.2.* -log { retr stor } ftp-gw: permit-hosts * -authall -log { retr stor }
FTP-Verbindungen mittels Web, Gopher oder Browser werden durch den http-gw umgesetzt. Die ersten beiden Zeilen im folgenden Beispiel erzeugen einen Ordner in dem die ftp-Dateien und Web-Dokumente, die den Firewall passieren, gespeichert werden. Der Datei- und Ordner-Zugriff sollte nur root gestattet sein.
Die Web-Verbindung sollte kurz gehalten werden. Dies steuert, wie lange der Anwender bei einer schlechten Verbindung warten muß.
# www and gopher gateway rules: http-gw: userid root http-gw: directory /jail http-gw: timeout 90 http-gw: default-httpd www.afs.net http-gw: hosts 196.1.2.* -log { read write ftp } http-gw: deny-hosts *
Der ssl-gw ist ein Gateway der alles durchläßt, aus diesem Grund wird zur Vorsicht geraten. Im folgenden Beispiel wird jedem Anwender innerhalb des LANs erlaubt eine Vebindung zu allen Servern außerhalb erlaubt außer zu den Adressen 127.0.0.* und 192.1.1.* und auch nur auf den Ports 443 und 563. Diese Ports sind bekannte SSL-Ports.
# ssl gateway rules: ssl-gw: timeout 300 ssl-gw: hosts 196.1.2.* -dest { !127.0.0.* !192.1.1.* *:443:563 } ssl-gw: deny-hosts *
Im folgendem Beispiel ist die Benützung des plug-gw beschrieben um Verbindungen zu einem News-Server zu erlauben. In diesem Beispiel ist jedem Anwender im LAN nur die Verbindung zu einem System erlaubt und auch nur zum News-Port.
Die zweite Zeile erlaubt dem Newsserver die Daten zurück zum LAN passieren zu lassen.
Da die meisten News-Clients die Verbindung während dem News-Lesens bestehen lassen ist ein längerer timeout für den Newsserver zu wählen.
# NetNews Pluged gateway plug-gw: timeout 3600 plug-gw: port nntp 196.1.2.* -plug-to 199.5.175.22 -port nntp plug-gw: port nntp 199.5.175.22 -plug-to 196.1.2.* -port nntp
Der finger-gateway ist sehr einfach. Jeder Anwender innerhalb des LANs muß sich in den Firewall einloggen um den dortigen finger zu verwenden. Jeder andere bekommt einfach eine Meldung.
# Enable finger service netacl-fingerd: permit-hosts 196.1.2.* -exec /usr/libexec/fingerd netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt
Das folgende Beispiel ist eine komplette /etc/inetd.conf
Datei.
Alle unbenötigten Dienste sind auskommentiert. Es ist aus dem Grund
komplett um zu zeigen was nicht benötigt wird und wie die neuen
Dienste eingefügt werden.
#echo stream tcp nowait root internal #echo dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal # FTP firewall gateway ftp-gw stream tcp nowait.400 root /usr/local/etc/ftp-gw ftp-gw # Telnet firewall gateway telnet stream tcp nowait root /usr/local/etc/tn-gw /usr/local/etc/tn-gw # local telnet services telnet-a stream tcp nowait root /usr/local/etc/netacl in.telnetd # Gopher firewall gateway gopher stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw # WWW firewall gateway http stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw # SSL firewall gateway ssl-gw stream tcp nowait root /usr/local/etc/ssl-gw ssl-gw # NetNews firewall proxy (using plug-gw) nntp stream tcp nowait root /usr/local/etc/plug-gw plug-gw nntp #nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd # SMTP (email) firewall gateway #smtp stream tcp nowait root /usr/local/etc/smap smap # # Shell, login, exec and talk are BSD protocols. # #shell stream tcp nowait root /usr/sbin/tcpd in.rshd #login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #talk dgram udp wait root /usr/sbin/tcpd in.talkd #ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd #dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd # # Pop and imap mail services et al # #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d #imap stream tcp nowait root /usr/sbin/tcpd imapd # # The Internet UUCP service. # #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." Do not uncomment # this unless you *need* it. # #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # Finger, systat and netstat give out user information which may be # valuable to potential "system crackers." Many sites choose to disable # some or all of these services to improve security. # # cfinger is for GNU finger, which is currently not in use in RHS Linux # finger stream tcp nowait root /usr/sbin/tcpd in.fingerd #cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd #systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx #netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet # # Time service is used for clock syncronization. # #time stream tcp nowait root /usr/sbin/tcpd in.timed #time dgram udp wait root /usr/sbin/tcpd in.timed # # Authentication # auth stream tcp wait root /usr/sbin/tcpd in.identd -w -t120 authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv # # End of inetd.conf
Hier ist aller Anfang. Ein Client baut die Verbindung zu einem Firewall immer zu einem bekannten Port auf (unterhalb 1024), zum Beispiel der telnet auf Port 23. Der inet-Dämon bemerkt die Verbindung und sucht den Dienst in der /etc/services Datei. Danach startet er das Programm, welches in der /etc/inetd.conf Datei dem Dienst zugewiesen ist.
Einige der Dienste, die hier erstellt werden, sind üblicherweise nicht in
der /etc/services
Datei. Somit kann man einigen davon einen
Port eigener
Wahl zuweisen. Zum Beispiel kann man den telnet-Port vom Administrator
(telnet-a) dem Port 24 zuweisen. Man kann ihn aber auch dem Port 2323
zuweisen, je nach Belieben. Damit sich der Administrator direkt zum
Firewall verbinden kann muß er einen telnet zum Port 24, und nicht zum
Port 23, starten und wenn die netperm-table richtig aufgesetzt ist kann
man dies nur von einem Systems innerhalb des geschützten Netzwerkes tun.
telnet-a 24/tcp ftp-gw 21/tcp # this named changed auth 113/tcp ident # User Verification ssl-gw 443/tcp