Σύνδεση Μέσω Τηλεφώνου και Τείχος Προστασίας στο FreeBSD

$FreeBSD: doc/el_GR.ISO8859-7/articles/dialup-firewall/article.sgml,v 1.20 2008/12/08 03:10:51 keramida Exp $

Το FreeBSD είναι ένα κατοχυρωμένο εμπορικό σύμβολο του FreeBSD Foundation.

Πολλές από τις λέξεις ή φράσεις οι οποίες χρησιμοποιούνται από τους κατασκευαστές ή τους πωλητές τους για να διακρίνουν τα προϊόντα τους θεωρούνται εμπορικά σύμβολα. Όπου αυτές εμφανίζονται σε αυτό το κείμενο και για όσες από αυτές γνωρίζει η Ομάδα Ανάπτυξης του FreeBSD ότι είναι πιθανόν να είναι εμπορικά σύμβολα, θα δείτε ένα από τα σύμβολα: «™» ή «®».

Αυτό το άρθρο περιγράφει πως μπορείτε να ρυθμίσετε ένα τείχος προστασίας (firewall) χρησιμοποιώντας μια PPP σύνδεση μέσω τηλεφώνου στο FreeBSD με το IPFW. Πιο συγκεκριμένα, περιγράφει τη ρύθμιση ενός τείχους προστασίας σε μια σύνδεση μέσω τηλεφώνου που έχει δυναμική IP διεύθυνση. Αυτό το κείμενο δεν ασχολείται με το πως θα ρυθμίσετε την αρχική σας σύνδεση μέσω PPP. Για περισσότερες πληροφορίες σχετικά με τις ρυθμίσεις μιας σύνδεσης μέσω PPP δείτε τη σελίδα βοήθειας ppp(8).


1 Πρόλογος

Αυτό το κείμενο περιγράφει την διαδικασία που χρειάζεται για να ρυθμίσετε ένα τείχος προστασίας στο FreeBSD όταν η IP διεύθυνση δίνεται δυναμικά από τον ISP σας. Παρόλο που έχω προσπαθήσει να κάνω αυτό το κείμενο όσο το δυνατόν πιο πλήρες και σωστό, είστε ευπρόσδεκτοι να στείλετε τις διορθώσεις, τα σχόλια ή τις προτάσεις σας στη διεύθυνση του συγγραφέα: .


2 Παράμετροι του πυρήνα

Για να μπορέσετε να χρησιμοποιήσετε το IPFW, πρέπει να ενσωματώσετε την σχετική υποστήριξη στον πυρήνα σας. Για περισσότερες πληροφορίες σχετικά με τη μεταγλώττιση του πυρήνα, δείτε το τμήμα ρυθμίσεων του πυρήνα στο Εγχειρίδιο. Θα πρέπει να προσθέσετε τις παρακάτω επιλογές στις ρυθμίσεις του πυρήνα σας για να ενεργοποιήσετε την υποστήριξη για το IPFW:

options IPFIREWALL

Ενεργοποιεί τον κώδικα τείχους προστασίας του πυρήνα.

Σημείωση: Αυτό το κείμενο θεωρεί ότι έχετε εγκαταστήσει την έκδοση 5.X του FreeBSD ή μια πιο πρόσφατη. Αν χρησιμοποιείτε την έκδοση 4.X, τότε θα πρέπει να ενεργοποιήσετε την επιλογή IPFW2 και να διαβάσετε τη σελίδα βοήθειας ipfw(8) για περισσότερες πληροφορίες σχετικά με την επιλογή IPFW2. Προσέξτε ιδιαίτερα το τμήμα USING IPFW2 IN FreeBSD-STABLE.

options IPFIREWALL_VERBOSE

Στέλνει τα μηνύματα για τα κατάλληλα πακέτα στο log του συστήματος.

options IPFIREWALL_VERBOSE_LIMIT=500

Βάζει κάποιο όριο στις φορές που κάποια εγγραφή θα καταγράφεται. Έτσι μπορείτε να καταγράφετε τα μηνύματα από το τείχος προστασίας χωρίς τον κίνδυνο να γεμίσουν τα αρχεία καταγραφής του συστήματός σας αν δεχτείτε κάποια επίθεση. Το όριο 500 μηνυμάτων είναι μια αρκετά λογική τιμή, αλλά μπορείτε να προσαρμόσετε αυτή την τιμή ανάλογα με τις απαιτήσεις του δικού σας δικτύου.

options IPDIVERT

Ενεργοποιεί τα divert sockets, που θα δούμε αργότερα τι κάνουν.

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


3 Αλλαγές στο /etc/rc.conf για να φορτώνεται το τείχος προστασίας

Για να ενεργοποιείται το τείχος προστασίας κατά την εκκίνηση του συστήματος και για να ορίσετε το αρχείο με τους κανόνες του τείχους προστασίας, πρέπει να ενημερώσετε το αρχείο /etc/rc.conf. Απλά προσθέστε τις παρακάτω γραμμές:

firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"

Για περισσότερες πληροφορίες σχετικά με τη σημασίας καθεμιάς από αυτές τις γραμμές, ρίξτε μια ματιά στο /etc/defaults/rc.conf και διαβάστε την man σελίδα rc.conf(5)


4 Ενεργοποιήστε την Ενσωματωμένη Μετάφραση Διευθύνσεων του PPP

Για να επιτρέψετε σε άλλα μηχανήματα του δικτύου σας να συνδέονται με τον έξω κόσμο μέσω του FreeBSD, χρησιμοποιώντας το ως «πύλη», θα πρέπει να ενεργοποιήσετε την ενσωματωμένη μετάφραση διευθύνσεων του PPP (NAT). Για να γίνει αυτό, προσθέστε στο αρχείο /etc/rc.conf τις παρακάτω γραμμές:

ppp_enable="YES"
ppp_mode="auto"
ppp_nat="YES"
ppp_profile="προφίλ_της_σύνδεσης"

Στη θέση του προφίλ_της_σύνδεσης πρέπει να βάλετε το όνομα της σύνδεσής σας, όπως το έχετε αποθηκεύσει στο αρχείο /etc/ppp/ppp.conf.


5 Οι κανόνες του firewall

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

Ας αρχίσουμε όμως με τις βασικές αρχές ενός κλειστού τείχους προστασίας. Ένα κλειστό τείχος προστασίας απαγορεύει κατ' αρχήν κάθε σύνδεση. Ο διαχειριστής μπορεί ύστερα να προσθέσει κανόνες για να επιτρέψει μόνο συγκεκριμένες συνδέσεις να περνάνε από το τείχος προστασίας. Η πιο συνηθισμένη σειρά των κανόνων σε ένα κλειστό τείχος είναι: πρώτα οι κανόνες που επιτρέπουν μερικές συνδέσεις, και τέλος οι κανόνες που απαγορεύουν οποιαδήποτε άλλη σύνδεση. Η λογική πίσω από αυτό είναι ότι πρώτα βάζετε τους κανόνες που επιτρέπουν πράγματα να περάσουν και ύστερα όλα τα άλλα απαγορεύονται αυτόματα.

Φτιάξτε, λοιπόν, ένα κατάλογο στον οποίο θα αποθηκεύονται οι κανόνες του τείχους προστασίας. Σε αυτό το άρθρο χρησιμοποιούμε ως παράδειγμα τον κατάλογο /etc/firewall. Αλλάξτε κατάλογο μέσα σε αυτόν και δημιουργήστε το αρχείο fwrules που το όνομά του είχαμε γράψει στο rc.conf. Σημειώστε πως μπορείτε να αλλάξετε το όνομα του αρχείου αυτού σε ότι θέλετε. Αυτός ο οδηγός δίνει αυτό το όνομα σαν παράδειγμα και μόνο.

Ας δούμε τώρα ένα παράδειγμα τείχους προστασίας με αρκετά επεξηγηματικά σχόλια.

# Define the firewall command (as in /etc/rc.firewall) for easy
# reference.  Helps to make it easier to read.
fwcmd="/sbin/ipfw"

# Define our outside interface.  With userland-ppp this
# defaults to tun0.
oif="tun0"

# Define our inside interface.  This is usually your network
# card.  Be sure to change this to match your own network 
# interface.
iif="fxp0"

# Force a flushing of the current rules before we reload.
$fwcmd -f flush

# Divert all packets through the tunnel interface.
$fwcmd add divert natd all from any to any via tun0

# Check the state of all packets.
$fwcmd add check-state

# Stop spoofing on the outside interface.
$fwcmd add deny ip from any to any in via $oif not verrevpath

# Allow all connections that we initiate, and keep their state,
# but deny established connections that don't have a dynamic rule.
$fwcmd add allow ip from me to any out via $oif keep-state
$fwcmd add deny tcp from any to any established in via $oif

# Allow all connections within our network.
$fwcmd add allow ip from any to any via $iif

# Allow all local traffic.
$fwcmd add allow all from any to any via lo0
$fwcmd add deny all from any to 127.0.0.0/8
$fwcmd add deny ip from 127.0.0.0/8 to any

# Allow internet users to connect to the port 22 and 80.
# This example specifically allows connections to the sshd and a
# webserver.
$fwcmd add allow tcp from any to me dst-port 22,80 in via $oif setup keep-state

# Allow ICMP packets: remove type 8 if you don't want your host
# to be pingable.
$fwcmd add allow icmp from any to any via $oif icmptypes 0,3,8,11,12

# Deny and log all the rest.
$fwcmd add deny log ip from any to any

Τώρα έχετε ένα ολοκληρωμένο τείχος προστασίας, το οποίο συνδέσεις στις θύρες 22 και 80 και καταγράφει όλες τις άλλες συνδέσεις στο αρχείο καταγραφής του συστήματος. Πλέον είστε έτοιμοι για επανεκκίνηση. Το τείχος προστασίας θα ενεργοποιηθεί αυτόματα και θα φορτώσει τους κανόνες που προσθέσατε. Αν δε γίνει αυτό ή έχετε οποιαδήποτε προβλήματα, ή αν έχετε κάποιες προτάσεις για να διορθωθεί αυτό το άρθρο, επικοινωνήστε μαζί μου με email.


6 Ερωτήσεις

6.1. Βλέπω μηνύματα όπως “limit 500 reached on entry 2800” και μετά από αυτό το σύστημά μου σταματάει να καταγράφει τα πακέτα που εμποδίζονται από το τείχος προστασίας. Δουλεύει ακόμα το firewall μου;
6.2. Κάποιο λάθος πρέπει να έγινε. Ακολούθησα τις εντολές κατά γράμμα και τώρα κλειδώθηκα απέξω.

6.1. Βλέπω μηνύματα όπως “limit 500 reached on entry 2800” και μετά από αυτό το σύστημά μου σταματάει να καταγράφει τα πακέτα που εμποδίζονται από το τείχος προστασίας. Δουλεύει ακόμα το firewall μου;

Αυτό απλά σημαίνει πως έχει χρησιμοποιηθεί το μέγιστο όριο καταγραφής (logging) για αυτό τον κανόνα. Ο κανόνας ο ίδιος εξακολουθεί να δουλεύει, αλλά δεν θα στέλνει πια μηνύματα στο αρχείο καταγραφής του συστήματος μέχρι να μηδενίσετε πάλι τους μετρητές. Μπορείτε να μηδενίσετε τους μετρητές με την εντολή

# ipfw resetlog

Εναλλακτικά, μπορείτε να αυξήσετε το όριο καταγραφής στις ρυθμίσεις του πυρήνα σας με την επιλογή IPFIREWALL_VERBOSE_LIMIT όπως περιγράψαμε παραπάνω. Μπορείτε να αλλάξετε αυτό το όριο (χωρίς να μεταγλωττίσετε πάλι τον πυρήνα σας και να κάνετε reboot) χρησιμοποιώντας την sysctl(8) τιμή net.inet.ip.fw.verbose_limit.

6.2. Κάποιο λάθος πρέπει να έγινε. Ακολούθησα τις εντολές κατά γράμμα και τώρα κλειδώθηκα απέξω.

Αυτός ο οδηγός υποθέτει ότι χρησιμοποιείτε το userland-ppp, γι αυτό κι οι κανόνες που δίνονται χρησιμοποιούν το tun0 interface, που αντιστοιχεί στην πρώτη σύνδεση που φτιάχνεται με το ppp(8) (αλλιώς γνωστό και ως user-ppp). Η επόμενη σύνδεση θα χρησιμοποιούσε το tun1, μετά το tun2 και πάει λέγοντας.

Θα πρέπει επίσης να θυμάστε ότι το pppd(8) χρησιμοποιεί το interface ppp0, οπότε αν ξεκινήσετε τη σύνδεσή σας με το pppd(8) θα πρέπει να αντικαταστήσετε το tun0 με ppp0. Παρακάτω θα δείξουμε ένα εύκολο τρόπο να αλλάξετε τους κανόνες του firewall κατάλληλα. Οι αρχικοί κανόνες σώζονται σε ένα αρχείο με όνομα fwrules_tun0.

          % cd /etc/firewall
            /etc/firewall% su
            Password:
            /etc/firewall# mv fwrules fwrules_tun0
            /etc/firewall# cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules
         

Για να καταλάβετε αν χρησιμοποιείτε το ppp(8) ή το pppd(8) μπορείτε να εξετάσετε την έξοδο της ifconfig(8) αφού ενεργοποιηθεί η σύνδεσή σας. Π.χ., για μια σύνδεση που ενεργοποιήθηκε από το pppd(8) θα δείτε κάτι σαν αυτό (δείχνονται μόνο οι σχετικές γραμμές):

          % ifconfig
            (skipped...)
            ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524
                    inet xxx.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xff000000
            (skipped...)
           

Από την άλλη, για μια σύνδεση που ενεργοποιήθηκε με το ppp(8) (user-ppp) θά πρεπε να δείτε κάτι παρόμοιο με το παρακάτω:

          % ifconfig
            (skipped...)
            ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
            (skipped...)
            tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524
                    (IPv6 stuff skipped...)
                    inet xxx.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xffffff00
                    Opened by PID xxxxx
            (skipped...)

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

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