Next Previous Contents

7. Εγκαθιστώντας τον διακομιστή εξουσιοδότησης TIS

7.1 Αποκτώντας το λογισμικό

Η TIS fwtk είναι διαθέσιμη στο ftp://ftp.tis.com/.

Μην κάνετε το λάθος που έκανα εγώ. Όταν κατεβάζετε αρχεία από το TIS ΔΙΑΒΑΣΤΕ ΤΑ README. Η TIS fwtk είναι κλειδωμένη μέσα σε ένα κρυφό κατάλογο στο διακομιστή τους.Το TIS ζητά να στείλετε ένα email στο fwtk-request@tis.com με μόνο τη λέξη SEND στο σώμα του μυνήματος για να μάθετε το όνομα αυτού του κρυμμένου καταλόγου. Δεν χρειάζεται θέμα (subject) στο μήνυμα. Το σύστημά τους θα σας στείλει το όνομα αυτού του κρυφού καταλόγου (καλό για 12 ώρες) για να κατεβάσετε το πηγαίο αρχείο.

Τη στιγμή που γράφω αυτό (το HOWTO) το TIS εκδίδει την έκδοση 2.0 (beta) της FWTK. Αυτή η έκδοση φαίνεται ότι μεταγλωττίζεται καλά (με μερικές εξαιρέσεις) και τα πάντα δουλεύουν. Αυτή είναι η έκδοση που θα καλύψω εδώ. Όταν διαθέσουν το τελικό κώδικα θα ανανεώσω το HOWTO.

Για την εγκατάσταση τη FWTK, δημιουργήστε το κατάλογο fwtk-2.0 στο /usr/src. Μετακινήστε το αντίγραφο της FWTK fwtk-2.0.tar.gz) από το κατάλογό σας σε αυτόν το κατάλογο (/usr/src/fwtk-2.0) και αποσυμπιέστε το. (tar zxf fwtk-2.0.tar.gz)

Η FWTK δεν εξουσιοδοτεί (υποστηρίζει) SSL web κείμενα αλλά υπάρχει ένα πρόσθετο (add on) γι' αυτή γραμμένο από τον Jean-Christophe Touvet. Είναι διαθέσιμο στο ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z. Ο Touvet δεν υποστηρίζει αυτό το κώδικα

Χρησιμοποιώ μία τροποποιημένη έκδοση που περιλαμβάνει πρόσβαση για Netscape ασφαλείς διακομιστές νέων γραμμένο από τον Eric Wedel. Είναι διαθέσιμη στο ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z.

Στο παράδειγμά μας θα χρησιμοποιήσω την έκδοση του Eric Wedel.

Για να το εγκαταστήσετε, απλά δημιουργήστε το ssl-gw κατάλογο στο /usr/src/fwtk-2.0 και βάλτε τα αρχεία εκεί μέσα.

Όταν εγκατέστησα αυτή τη πύλη απαίτησε μερικές αλλαγές πριν μεταγλωττιστεί μαζί με την υπόλοιπη εργαλειοθήκη.

Η πρώτη αλλαγή ήταν στο ssl-gw.c αρχείο. Βρήκα ότι δεν περιελάμβανε ένα χρήσιμο περιελαμβανόμενο (included) αρχείο.

  #if defined(__linux)
  #include        <sys/ioctl.h>
  #endif

Δεύτερον δεν έρχεται με Makefile. Αντέγραψα ένα έξω από τους άλλους καταλόγους πυλών και αντικατέστησα το όνομα της πύλης με το ssl-gw.

7.2 Μεταγλωττίζοντας την TIS FWTK

Η έκδοση 2.0 της FWTK μεταγλωττίζεται πολύ πιο εύκολα από οποιαδήποτε παλαιότερη έκδοση. Βρίσκω ακόμα μερικά πράγματα που χρειάζεται να αλλαχθούν πριν η BETA έκδοση μπορεί να μεταγλωττιστεί καθαρά. Ελπίζω αυτές οι αλλαγές να γίνουν στη τελική έκδοση.

Για τη διόρθωσή τους, ξεκινήστε αλλάζοντας το /usr/src/fwtk/fwtk κατάλογο και αντιγράψτε το Makefile.config.linux πάνω από το Makefile.config

ΜΗΝ ΕΚΤΕΛΕΣΕΤΕ ΤΟ FIXMAKE. Οι οδηγίες λένε να το εκτελέσετε. Εάν το κάνετε θα σπάσει τα Makefiles στο κάθε κατάλογο

Δεν έχω καμία διόρθωση για το fixmake. Το πρόβλημα είναι το sed script προσθέστε ένα '.' και '' στη κάθε γραμμή που περιλαμβάνει τα Makefiles.

  sed 's/^include[        ]*\([^  ].*\)/include \1/' $name .proto > $name 

Μετά χρειάζεται να επεξεργαστούμε το αρχείο Makefile.config. Υπάρχουν δύο αλλαγές που χρειάζεται να κάνετε.

Ο συγγραφέας έθεσε ως πηγαίο κατάλογο το δικό του σπιτικό κατάλογο. Θα μεταγλωττίσουμε το κώδικά μας στο /usr/src έτσι πρέπει να αλλάξουμε τη μεταβλητή FWTKSRCDIR για να αντικατροπτίζει αυτό.

  FWTKSRCDIR=/usr/src/fwtk/fwtk

Δεύτερον, σε ορισμένα λίγα συστήματα Linux χρησιμοποιήται η βάση δεδομένων gdbm. Το Makefile.conf χρησιμοποιεί dbm. Θα χρειαστεί να αλλάξετε αυτό. Είχα για το RH 3.0.3

  DBMLIB=-lgdbm

Η τελευταία διόρθωση είναι στο x-gw. Το bug στη ΒΕΤΑ έκδοση είναι μέσα στο socket.c κώδικα. Για να το φτιάξετε σβήστε τις παρακάτω γραμμές κώδικα

  #ifdef SCM_RIGHTS  /* 4.3BSD Reno and later */
                       + sizeof(un_name->sun_len) + 1
  #endif

Εάν προσθέσετε το ssl-gw στο FWTK πηγαίο κατάλογο σας. Θα χρειαστήτε να προσθέσετε αυτό στη λίστα καταλόγων στο Makefile.

  DIRS=   smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw

Τώρα εκτελέστε το make.

7.3 Εγκαθιστώντας την TIS FWTK

Εκτελέστε make install.

Ο εξ ορισμού κατάλογος εγκατάστασης είναι ο /usr/local/etc. Μπορείτε να τον αλλάξετε (εγώ όχι) σε ένα πιο ασφαλές κατάλογο. Διάλεξα να αλλάξω τη πρόσβαση στο κατάλογο αυτό με chmod 700.

Όλα αυτά που έμειναν τώρα είναι η τελική ρύθμιση του firewall

7.4 Ρυθμίζοντας την TIS FWTK

Τώρα αρχίζει η πραγματική διασκέδαση. Πρέπει να μάθουμε :-) το σύστημα να καλεί αυτές τις νέες υπηρεσίες και να δημιουργεί τους πίνακες για τον έλεγχό τους.

Δεν πρόκειται να δοκιμάσω να ξαναγράψω το εγχειρίδιο της TIS FWTK, εδώ. Θα σας δείξω τις ρυθμίσεις που ανακάλυψα δουλεύοντας και θα εξηγήσω τα προβλήματα που βρήκα και πώς τα ξεπέρασα.

Υπάρχουν τρία αρχεία που ρυθμίζουν αυτά τα χειριστήρια

Για να πάρετε τη FWTK λειτουργική, θα πρέπει να επεξεργαστήτε αυτά τα αρχεία από το τελευταίο προς τα πάνω. Επεξεργάζοντας τα αρχεία των υπηρεσιών χωρίς το inedt.conf ή το netperm-table ρυθμισμένα σωστά μπορεί να κάνετε το σύστημά σας απροσπέλαστο.

Το αρχείο netperm-table

Αυτό το αρχείο ελέγχει ποιός μπορεί να έχει πρόσβαση στις υπηρεσίες από τη TIS FWTK. Οφείλετε να σκεφτήτε σχετικά με το κυκλοφοριακό χρησιμοποιώντας το firewall και από τις δύο πλευρές. Ο κόσμος έξω από το δίκτυό σας, οφείλει να αναγνωρίσει τους εαυτούς των πριν κερδίσουν πρόσβαση, αλλά ο κόσμος μέσα στο δίκτυό σας μπορεί να αφεθεί να περνά απλά από μέσα.

Έτσι ο κόσμος μπορεί να αναγνωρίσει τους εαυτούς τους, ο firewall χρησιμοποιεί ένα πρόγραμμα που καλείται authsrv για να κρατά μία βάση δεδομένων τα user ID και τους κωδικούς. Το τμήμα επικύρωσης από το netperm-table ελέγχει που η βάση δεδομένων βρίσκεται και ποιός μπορεί να έχει πρόσβαση σε αυτή.

Είχα κάποια προβλήματα κλείνοντας τη πρόσβαση σε αυτή την υπηρεσία. Σημειώστε ότι η γραμμή permit-hosts που παρουσιάζω χρησιμοποιεί '*' για να δίνει σε όλους πρόσβαση. Οι σωστές ρυθμίσεις για τη γραμμή αυτή είναι '' authsrv: premit-hosts localhost εάν μπορέσετε να το παρέτε αυτό δουλεύοντας

  #
  # Proxy configuration table
  #
  # Authentication server and client rules
  authsrv:      database /usr/local/etc/fw-authdb
  authsrv:      permit-hosts *
  authsrv:      badsleep 1200
  authsrv:      nobogus true
  # Client Applications using the Authentication server
  *:            authserver 127.0.0.1 114

Για να ορίσετε τη βάση δεδομένων, γίνετε root, και εκτελέστε ./authsrv μέσα στο /var/local/etc κατάλογο για να δημιουργηθεί η εγγραφή του χρήστη που εκτελεί χρέη διαχειριστή. Εδώ είναι ένα απλό παράδειγμα.

Διαβάστε τη τεκμηρίωση της FWTK για να μάθετε πώς να προσθέτετε χρήστες και ομάδες.

    #
    # 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
    #

Το χειριστήριο της telnet πύλης (tn-gw) είναι κατευθείαν μπροστά και το πρώτο που οφείλετε να στήσετε.

Στο παράδειγμά μου, επιτρέπω σε host από το εσωτερικό του προσωπικού δικτύου να περνάει από μέσα χωρίς να επικυρώνουν τους εαυτούς τους. (permit-hosts 19961.2.* -passok) Αλλά, κάθε άλλος χρήστης πρέπει να εισάγει τα user ID και το κωδικό του για να χρησιμοποιεί τον εξουσιοδοτητή. (permit-hosts * -auth)

Επίσης επιτρέπω σε ένα άλλο σύστημα (196.1.2.202) να έχει πρόσβαση στο firewall χωρίς να περνά μέσα από το firewall στη πραγματικότητα. Οι δύο γραμμές inetacl-in.telnetd το κάνουν αυτό. Θα εξηγήσω πώς αυτές οι γραμμές καλούνται αργότερα.

Το Telnet time out οφείλεται να κρατηθεί μικρό.

  # 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

Οι r-commands δουλεύουν με τον ίδιο τρόπο όπως το 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

Δεν οφείλετε να έχετε σε κανέναν άμεση πρόσβαση στο firewall και αυτό περιλαμβάνει το FTP έτσι δεν βάζουμε το FTP, διακομιστή πάνω στο firewall.

Ξανά, οι γραμμές permit-hosts επιτρέπουν μέσα στο προστατευόμενο δίκτυο ελεύθερη πρόσβαση στο Intenet και όλοι οι άλλοι πρέπει να επικυρώσουν τους εαυτούς τους. Συμπεριέλαβα τη καταγραφή συμβάντων για κάθε αρχείο που αποστέλεται και παραλαμβάνεται για τον ελέγχό μου. (-log { retr stor })

Το ftp timeout ελέγχει πόσο θα πάρει για να ρίξει μία κακή σύνδεση τόσο όσο πόσο θα κρατήσει μία σύνδεση που έχει μείνει ανοικτή χωρίς δραστηριότητα.

  # 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 }

Web, gopher και σε browser βασισμένο ftp είναι παραμορφωμένα από τη http-gw. Οι δύο πρώτες γραμμές δημιουργούν ένα κατάλογο για αποθήκευση των ftp και web κειμένων καθώς αυτά περνούν μέσα από το firewall. Έκανα αυτά τα αρχεία να ανοίκουν στον root και τα τοποθέτησα σε ένα κατάλογο προσβάσιμο μόνο από τον root.

Η σύνδεση Web οφείλεται να κρατηθεί μικρή. Ελέγχει πόσο ο χρήστης θα περιμένει σε μία κακή σύνδεση.

  # 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      * 

Το ssl-gw είναι πράγματι απλά μία διάβαση οποιασδήποτε πύλης. Προσέξτε με αυτό. Σε αυτό το παράδειγμα επιτρέπω στον καθένα από μέσα του προστατευόμενου δικτύου να συνδέεται σε κάθε διακομιστή έξω από το δίκτυο εκτός των διευθύνσεων 127.0.0.χχχ και 192.1.1.χχχ και μόνο στις πόρτες 443 έως 563. Οι πόρτες 443 έως 563 είναι γνωστές SSL πόρτες.

  # 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      *

Εδώ είναι ένα παράδειγμα στο πώς να χρησιμοποιήσετε το plug-gw για να επιτρέψετε συνδέσεις σε διακομιστές νέων. Σε αυτό το παράδειγμα επιτρέπω στο καθένα μέσα στο προστατεύομενο δίκτυο να συνδεθεί σε ένα μόνο σύστημα και μόνο στη πόρτα νέων του.

Η δεύτερη γραμμή επιτρέπει το διακομιστή νέων να περνά τα δεδομένα του πίσω στο προστατευόμενο δίκτυο.

Επειδή πολλοί πελάτες περιμένουν να στέκονται συνδεδεμένοι όσο ο χρήστης διαβάζει τα νέα, το timeout για διακομιστές νέων οφείλεται να είναι μεγάλο.

 
  # 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

Η πύλη finger είναι απλή. Ο καθένας μέσα στο προστατευόμενο δίκτυο πρέπει να κάνει login πρώτα και μετά επιτρέπουμε να χρησιμοποιήσουν το πρόγραμμα finger πάνω στο firewall. Όλοι οι άλλοι απλά πέρνουν ένα μήνυμα.

  # 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

Δεν έχω στήσει τις Mail και X-windows υπηρεσίες έτσι δεν περιλαμβάνω παραδείγματα. Εάν κάποιος έχει δουλέψει ένα παράδειγμα, παρακαλώ στείλτε μου email.

Το αρχείο inetd.conf

Εδώ είναι πλήρες ένα αρχείο /etc/inetd.conf. Όλες οι άχρηστες υπηρεσίες έχουν αφαιρεθεί ως σχόλια. Έχω συμπεριλάβει το πλήρες αρχείο για να δείξω τί να απενεργοποιήσετε, τόσο όσο το πώς να στήνετε τις νέες υπηρεσίες του firewall.

 
  #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

Το αρχείο /etc/services

Εδώ είναι που ξεκινούν όλα. Όταν ένας πελάτης συνδεθεί στο firewall αυτό συνδέεται σε μία γνωστή πόρτα. (μικρότερη από 1024). π.χ. Το telnet συνδέεται στη πόρτα 23. Ο inetd δαίμονας ακούει αυτή τη σύνδεση και κοιτά το όνομα αυτής της υπηρεσίας στο αρχείο /etc/services. Αυτό τότε καλεί το πρόγραμμα ορισμένο για το όνομα στο μέσα στο αρχείο /etc/inetd.conf.

Κάποιες υπηρεσίες που δημιουργούμε δεν είναι κανονικά στο αρχείο /etc/sevices. Μπορείτε να ορίσετε μερικές από αυτές σε όποια πόρτα θέλετε. π.χ. Έχω ορίσει τη telnet πόρτα του διαχειριστή (telnet-a) στη πόρτα 24. Μπορείτε να το ορίσετε στη πόρτα 2323 εάν επιθυμήτε. Για το διαχειριστή (ΕΣΕΙΣ), για να συνδέεστε άμεσα στο firewall θα χρειάζεστε να κάνετε telnet στη πόρτα 24 και όχι 23 εάν στήσετε το αρχείο netperm-table, όπως εγώ έκανα, θα είστε ικανοί να το κάνετε αυτό μόνο από το εσωτερικό του προστατευόμενου δικτύου.

 
  telnet-a        24/tcp
  ftp-gw          21/tcp           # this named changed
  auth            113/tcp   ident    # User Verification
  ssl-gw          443/tcp


Next Previous Contents