Inhalt

9. Installation des TIS Proxy Servers

9.1 Beschaffung der Software

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.

9.2 Kompilieren des TIS FWTK

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.

9.3 Installation des TIS FWTK

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:

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.

Die netperm-table Datei

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

Die inetd.conf Datei

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

Die /etc/services Datei

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


Inhalt