Η 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.
Η έκδοση 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.
Εκτελέστε make install.
Ο εξ ορισμού κατάλογος εγκατάστασης είναι ο /usr/local/etc. Μπορείτε να τον αλλάξετε (εγώ όχι) σε ένα πιο ασφαλές κατάλογο. Διάλεξα να αλλάξω τη πρόσβαση στο κατάλογο αυτό με chmod 700.
Όλα αυτά που έμειναν τώρα είναι η τελική ρύθμιση του firewall
Τώρα αρχίζει η πραγματική διασκέδαση. Πρέπει να μάθουμε :-) το σύστημα να καλεί αυτές τις νέες υπηρεσίες και να δημιουργεί τους πίνακες για τον έλεγχό τους.
Δεν πρόκειται να δοκιμάσω να ξαναγράψω το εγχειρίδιο της TIS FWTK, εδώ. Θα σας δείξω τις ρυθμίσεις που ανακάλυψα δουλεύοντας και θα εξηγήσω τα προβλήματα που βρήκα και πώς τα ξεπέρασα.
Υπάρχουν τρία αρχεία που ρυθμίζουν αυτά τα χειριστήρια
Για να πάρετε τη FWTK λειτουργική, θα πρέπει να επεξεργαστήτε αυτά τα αρχεία από το τελευταίο προς τα πάνω. Επεξεργάζοντας τα αρχεία των υπηρεσιών χωρίς το inedt.conf ή το 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.
Εδώ είναι πλήρες ένα αρχείο /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
Εδώ είναι που ξεκινούν όλα. Όταν ένας πελάτης συνδεθεί στο 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