15.6 TCP Wrappers

Written by: Tom Rhodes.

Οποιοσδήποτε που έχει κάποια οικειότητα με το inetd(8) θα έχει πιθανών ακούσει σε κάποιο σημείο για τους TCP Wrappers. Ωστόσο μόνο λίγοι φαίνεται να κατανοούν πλήρως την χρησιμότητά τους σε ένα δικτυακό περιβάλλον. Φαίνεται ότι όλοι θέλουν να εγκαταστήσουν ένα firewall για να χειρίζεται τις συνδέσεις δικτύου. Ενώ το firewall έχει μια ευρεία ποικιλία από χρήσεις, υπάρχουν κάποια πράγματα που το firewall δεν μπορεί να χειριστεί όπως η αποστολή κειμένου πίσω σε αυτόν που άνοιξε την σύνδεση. Το λογισμικό TCP Wrappers κάνει αυτό και πολλά άλλα. Στις επόμενες ενότητες θα συζητήσουμε πολλά από τα χαρακτηριστικά του TCP Wrappers και όταν είναι κατάλληλο, θα δώσουμε γραμμές με παραδείγματα ρυθμίσεων.

Το λογισμικό TCP Wrappers επεκτείνει τις δυνατότητες του inetd ώστε να παρέχει υποστήριξη για κάθε εξυπηρετητή δαίμονα κάτω από τον έλεγχό του. Με αυτήν την μέθοδο είναι δυνατόν να παρέχεται υποστήριξη σύνδεσης, επιστροφής μηνυμάτων σε συνδέσεις, να επιτρέπεις σε δαίμονα να δέχεται μόνο εσωτερικές συνδέσεις, κλπ. Ενώ κάποια από αυτά μπορούν να παρέχονται εφαρμόζοντας ένα firewall, αυτό όχι μόνο θα προσθέσει ένα επιπλέον επίπεδο ασφαλείας αλλά θα πάει και πέρα από το σύνολο ελέγχου που ένα firewall μπορεί να παράσχει.

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

Αφού αυτό είναι μια επέκταση στις ρυθμίσεις του inetd, ο αναγνώστης αναμένεται να έχει διαβάσει την ενότητα inetd configuration.

Σημείωση: Ενώ τα προγράμματα που τρέχουν από το inetd(8) δεν είναι ακριβώς «δαίμονες», παραδοσιακά καλούνται δαίμονες. Αυτόν τον όρο θα χρησιμοποιήσουμε ΄πίσης και σε αυτήν την ενότητα.

15.6.1 Αρχική Ρύθμιση

Η μόνη απαίτηση για την χρήση του TCP Wrappers στο FreeBSD είναι να εξασφαλίσετε ότι ο εξυπηρετητής inetd έχει εκκινήσει από το αρχείο rc.conf με την επιλογή -Ww, αυτό είναι και η εξ΄ορισμού ρύθμιση. Φυσικά, σωστή ρύθμιση του αρχείου /etc/hosts.allow αναμένεται επίσης, αλλιώς ο syslogd(8) θα δώσει μηνύματα στα αρχεία καταγραφής του συστήματος σε αυτές τις περιπτώσεις.

Σημείωση: Αντίθετα με άλλες εφαρμογές του TCP Wrappers, η χρήση του αρχείου hosts.deny έχει αποδοκιμαστεί. Όλες οι επιλογές ρυθμίσεων θα πρέπει να γίνονται στο αρχείο /etc/hosts.allow.

Στην πιο απλή ρύθμιση, οι πολιτικές σύνδεσης του δαίμονα έχουν τεθεί ώστε είτε να επιτρέπουν είτε να μπλοκάρουν συνδέσεις ανάλογα με τις επιλογές στο αρχείο /etc/hosts.allow. Η εξ' ορισμού επιλογή στο FreeBSD είναι να επιτρέπεται μια σύνδεση σε κάθε δαίμονα που έχει εκκινήσει με την εντολή inetd. Η αλλάγη αυτού θα συζητηθεί μόνο μετά την κάλυψη των βασικών ρυθμίσεων.

Η βασική ρύθμιση έχει συνήθως την μορφή daemon : address : action. Όπου daemon είναι το όνομα του δαίμονα που ο inetd έχει εκκινήσει. Το λεκτικό address μπορεί να είναι ένα ισχύων όνομα υπολογιστή, μια IP διεύθυνση ή μια IPv6 διεύθυνση κλεισμένη σε αγκύλες ([ ]). Το πεδίο action μπορεί να είναι allow ή deny για να επιτρέψει ή όχι την πρόσβαση αντίστοιχα. Έχετε υπόψη σας ότι η ρύθμιση λειτουργεί με ταίριασμα πρώτου κανόνα σημασίας, που σημαίνει ότι το αρχείο ρυθμίσεων διαβάζεται σε αύξουσα σειρά για ένα ταίριασμα με κανόνα. Όταν ένα ταίριασμα βρεθεί ο κανόνας εφαρμόζεται και το διάβασμα του αρχείου σταματά.

Αρκετές άλλες επιλογές υπάρχουν που όμως θα τις εξηγήσουμε σε μια επόμενη ενότητα. Μια απλή γραμμή ρύθμισης μπορεί εύκολα να φτιαχτεί από αυτές τις πληροφορίες μόνο. Για παράδειγμα, για να επιτραπούν POP3 συνδέσεις μέσω του δαίμονα mail/qpopper, η παρακάτω γραμμές θα πρέπει να προσαρττηθούν στο αρχείο hosts.allow:

# This line is required for POP3 connections:
qpopper : ALL : allow

Αφού προσθέσετε αυτή τη γραμμή, ο inetd θα πρέπει να επανεκκινηθεί. Αυτό μπορεί να γίνει με την χρήση της εντολής kill(1) ή με την παράμετρο restart στην εντολή /etc/rc.d/inetd.

15.6.2 Προχωρημένες Ρυθμίσεις

Το TCP Wrappers έχει και προχωρημένες επιλογές επίσης, αυτές θα σας επιτρέψουν περισσότερο έλεγχο στον τρόπο που οι συνδέσεις χειρίζονται από το σύστημα. Σε μερικές περιπτώσεις μπορεί να είναι καλή ιδέα η επιστροφή ενός σχολίου σε συγκεκριμένες συνδέσεις υπολογιστών ή δαιμόνων. Σε άλλες περιπτώσεις, ίσως να πρέπει ένα αρχείο καταγραφής να γραφεί ή ένα email να σταλεί στον διαχειριστή. ’λλες περιπτώσεις μπορεί να απαιτούν την χρήση μια υπηρεσίας για τοπικές συνδέσεις μόνο. Αυτά όλα είναι δυνατά μέσω της χρήσης των επιλογών ρυθμίσεων που είναι γνωστές ως wildcards, επεκτάσεις χαρακτήρων και εκτελέσεις εξωτερικών εντολών. Οι επόμενες δύο ενότητες γράφηκαν για να καλύψουν αυτές τις περιπτώσεις.

15.6.2.1 Εξωτερικές Εντολές

Θεωρείστε μια κατάσταση όπου μια σύνδεση πρέπει να απορριφθεί και πρέπει να σταλεί ένας λόγος σε αυτόν που προσπάθησε να συνδεθεί. Πώς μπορεί να γίνει αυτό; Αυτή η ενέργεια είναι δυνατή χρησιμοποιώντας την επιλογή twist. Όταν μια προσπάθεια για σύνδεση γίνει, η επιλογή twist θα κληθεί να εκτελέσει μια εντολή κελύφους ή ένα σενάριο εντολών. Ένα παράδειγμα υπάρχει ήδη στο αρχείο hosts.allow :

# The rest of the daemons are protected.
ALL : ALL \
        : severity auth.info \
        : twist /bin/echo "You are not welcome to use %d from %h."

Αυτό το παράδειγμα δείχνει ότι το μήνυμα, «You are not allowed to use daemon from hostname.» θα επιστραφεί για κάθε δαίμονα που δεν έχει ρυθμιστεί προηγουμένως στο αρχείο πρόσβασης. Αυτό είναι ιδιαίτερα χρήσιμο για την αποστολή απάντησης πίσω σε αυτόν που ξεκίνησε την σύνδεση αμέσως μετά την απόρριψη της σύνδεσης που εγκαταστήθηκε. Σημειώστε ότι το μήνυμα που επιστρέφεται πρέπει να περικλείεται σε αποστρόφους ", δεν υπάρχουν εξαιρέσεις σε αυτόν τον κανόνα.

Προειδοποίηση: Είναι δυνατό να ξεκινήσει μια επίθεση άρνησης υπηρεσίας στον εξυπηρετητή αν ο επιτιθέμενος, ή η ομάδα αυτών πλημμυρίσει αυτόυς τους δαίμονες με αιτήσεις για σύνδεση.

Μια άλλη δυνατότητα είναι να χρησιμοποιήσετε την επιλογή spawn σε τέτοιες περιπτώσεις. Όπως και η επιλογή twist, η επιλογή spawn απορρίπτει την σύνδεση και μπορεί να χρησιμοποιηθεί για την εκτέλεση εξωτερικών εντολών κελύφους ή σεναρίων. Ωστόσο η επιλογή spawn δεν θα στείλει μια απάντηση πίσω σε αυτόν που ξεκίνησε την σύνδεση. Για παράδειγμα, θεωρείστε την παρακάτω γραμμή ρύθμισης:

# We do not allow connections from example.com:
ALL : .example.com \
	: spawn (/bin/echo %a from %h attempted to access %d >> \
	  /var/log/connections.log) \
	: deny

Με αυτή την ρύθμιση θα απορριφθούν όλες οι προσσπάθειες σύνδεσης από το πεδίο *.example.com, ταυτόχρονα θα καταγραφούν το όνομα Η/Υ, η IP διεύθυνση και ο δαίμονας με τον οποίο προσπάθησαν να αποκτήσουν πρόσβαση, στο αρχείο /var/log/connections.log.

Εκτός από τους χαρακτήρες αντικατάστασης που ήδη εξηγήσαμε παραπάνω, π.χ. %a, υπάρχουν και μερικοί άλλοι. Βλέπετε την σελίδα hosts_access(5) του εγχειριδίου για νια πλήρη λίστα.

15.6.2.2 Επιλογές Μπαλαντέρ

Έως εδώ το παράδειγμα ALL χρησιμοποιήθηκε συνεχώς σε όλα τα παραδείγματα. Άλλες επιλογές υπάρχουν οι οποίες μπορούν να επεκτείνουν την λειτουργικότητα λίγο περισσότερο. Για παράδειγμα, το ALL μπορεί να χρησιμοποιηθεί για να ταιριάξει κάθε παρουσία ενός δαίμονα, ενός χώρου (domain) ή μιας IP διεύθυνσης. Ένας άλλος μπαλαντέρ διαθέσιμος είναι το PARANOID που μπορεί να χρησιμοποιηθεί για να ταιριάξει κάθε host που παρέχει μια IP διεύθυνση η οποία μπορέι να έχει χαλκευθεί. Με άλλα λόγια, το paranoid μπορεί να χρησιμοποιηθεί για να καθορίσει την λήψη μιας ενέργειας όποτε γίνεται μια σύνδεση από μια IP διεύθυνση που διαφέρει από το όνομα υπολογιστή. Το παρακάτω παράδειγμα μπορεί να ρίξει λίγο περισσότερο φώς σε αυτή την συζήτηση:

# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : deny

Σε αυτό το παράδειγμα όλες οι αιτήσεις για σύνδεση στο sendmail οι οποίες έχουν μια IP διεύθυνση που διαφέρει από το όνομα υπολογιστή θα απορριφθούν.

Προσοχή: Η χρήση του PARANOID μπορεί να σακατέψει πολύ τους εξυπηρετητές αν ο πελάτης ή ο εξυπηρετητής έχει μια κακή εγκατάσταση του DNS. Η διακριτικότητα του διαχειριστή συνίσταται.

Για να μάθετε περισσότερα σχετικά με τους μπαλαντέρ και την αντίστοιχή τους λειτουργικότηατ, βλέπετε την σελίδα του εγχειριδίου hosts_access(5).

Πριν να λειτουργήσει οποιαδήποτε γραμμή ρύθμισης από τις παραπάνω, η πρώτη γραμμή ρύθμισης θα πρέπει να γίνει σχόλιο στο αρχείο hosts.allow. Αυτό έχει ήδη σημειωθεί στην έναρξη αυτής της ενότητας.

Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την <questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.