31.4. Το Packet Filter (PF) και το ALTQ του OpenBSD
Προηγ | Κεφάλαιο 31. Firewalls | Επόμενο

## 31.4. Το Packet Filter (PF) και το ALTQ του OpenBSD

Αναθεωρήθηκε και ενημερώθηκε από τον John Ferrell.

Τον Ιούλιο του 2003, η εφαρμογή firewall του OpenBSD (γνωστή ως PF) μεταφέρθηκε στο FreeBSD και έγινε διαθέσιμη στην Συλλογή των Ports. Το FreeBSD 5.3 που κυκλοφόρησε το 2004, ήταν η πρώτη επίσημη έκδοση η οποία περιείχε το PF ως τμήμα του βασικού πλέον συστήματος. Το PF είναι ένα ολοκληρωμένο firewall, με πλήθος χαρακτηριστικών, το οποίο επίσης διαθέτει προαιρετικά υποστήριξη για το ALTQ (Alternate Queuing). Το ALTQ προσφέρει υπηρεσίες Διασφάλισης Ποιότητας (Quality of Service, QoS).

Το OpenBSD Project κάνει εξαιρετική δουλειά στη συντήρηση του PF FAQ. Για το λόγο αυτό, η παρούσα ενότητα του Εγχειριδίου εστιάζει κυρίως στις ιδιαιτερότητες του PF όσο αφορά το FreeBSD, ενώ παρέχει και μερικές γενικές πληροφορίες σχετικά με τη χρήση του. Για πιο λεπτομερείς πληροφορίες σχετικά με τη χρήση του PF, παρακαλούμε διαβάστε το PF FAQ.

Περισσότερες πληροφορίες σχετικά με το PF στο FreeBSD μπορείτε να βρείτε στο http://pf4freebsd.love2party.net/.

### 31.4.1. Χρησιμοποιώντας τα Αρθρώματα Πυρήνα για το PF

Για να φορτώσετε το άρθρωμα πυρήνα για το PF, προσθέστε την παρακάτω γραμμή στο στο `/etc/rc.conf`:

pf_enable="YES"

Εκτελέστε έπειτα το script εκκίνησης για να φορτώσετε το άρθρωμα:

`#` `/etc/rc.d/pf start`

Σημειώστε ότι το άρθρωμα PF δεν πρόκειται να φορτωθεί αν δεν βρει το καθορισμένο αρχείο κανόνων. Το προεπιλεγμένο αρχείο είναι το `/etc/pf.conf`. Αν το αρχείο κανόνων βρίσκεται σε κάποια άλλη τοποθεσία, μπορείτε να την καθορίσετε προσθέτοντας μια γραμμή όπως την παρακάτω στο `/etc/rc.conf`:

pf_rules="`/path/to/pf.conf`"

Μπορείτε να βρείτε ένα παράδειγμα του αρχείου `pf.conf` στον κατάλογο `/usr/share/examples/pf`

Το άρθρωμα PF μπορεί επίσης να φορτωθεί χειροκίνητα από την γραμμή εντολών:

`#` `kldload pf.ko`

Η υποστήριξης καταγραφής του PF παρέχεται από το άρθρωμα `pflog.ko` και μπορείτε να την φορτώσετε προσθέτοντας την παρακάτω γραμμή στο `/etc/rc.conf`:

pflog_enable="YES"

Εκτελέστε έπειτα το script εκκίνησης για να φορτώσετε το άρθρωμα:

`#` `/etc/rc.d/pflog start`

Αν χρειάζεστε κάποιο από τα προχωρημένα χαρακτηριστικά του PF, θα πρέπει να μεταγλωττίσετε την υποστήριξη για το PF απευθείας μέσα στον πυρήνα.

### 31.4.2. Επιλογές του PF για τον Πυρήνα

Αν και δεν είναι απαραίτητο να μεταγλωττίσετε την υποστήριξη PF μέσα στον πυρήνα του FreeBSD, ίσως να θέλετε να χρησιμοποιήσετε ένα από τα προχωρημένα χαρακτηριστικά του PF το οποίο δεν περιλαμβάνεται στο άρθρωμα του πυρήνα: το pfsync(4). Πρόκειται για μια ψευδο-συσκευή η οποία αποκαλύπτει συγκεκριμένες αλλαγές στον πίνακα καταστάσεων που χρησιμοποιείται από το PF. Μπορεί να συνδυαστεί με το carp(4) για να δημιουργηθούν με το PF firewalls με δυνατότητα αυτόματης αλλαγής σε περίπτωση αποτυχίας (failover). Περισσότερες πληροφορίες σχετικά με το CARP μπορείτε να βρείτε στο Τμήμα 32.12, &#x201C;Common Access Redundancy Protocol (CARP)&#x201D; του Εγχειριδίου.

Μπορείτε να δείτε όλες τις επιλογές πυρήνα για το PF στο αρχείο `/usr/src/sys/conf/NOTES`. Οι επιλογές φαίνονται επίσης παρακάτω:

device pf device pflog device pfsync

Η επιλογή `device pf` ενεργοποιεί την υποστήριξη για το firewall &#x201C;Packet Filter&#x201D; (pf(4)).

Η επιλογή `device pflog` ενεργοποιεί την προαιρετική ψευδο-δικτυακή συσκευή pflog(4) που μπορεί να χρησιμοποιηθεί για την καταγραφή της κίνησης σε ένα bpf(4) descriptor. Ο δαίμονας pflogd(8) μπορεί να αποθηκεύσει την καταγραφή αυτή στο σκληρό δίσκο.

Η επιλογή `device pfsync` ενεργοποιεί την προαιρετική ψευδό-δικτυακή συσκευή pfsync(4) η οποία χρησιμοποιείται για να ανιχνεύει &#x201C;αλλαγές κατάστασης&#x201D;.

### 31.4.3. Επιλογές στο `rc.conf`

Το PF και το pflog(4) μπορούν να ρυθμιστούν κατά την εκκίνηση με τις παρακάτω καταχωρίσεις στο rc.conf(5):

pf_enable="YES" # Enable PF (load module if required) pf_rules="/etc/pf.conf" # rules definition file for pf pf_flags="" # additional flags for pfctl startup pflog_enable="YES" # start pflogd(8) pflog_logfile="/var/log/pflog" # where pflogd should store the logfile pflog_flags="" # additional flags for pflogd startup

Αν πίσω από αυτό το firewall υπάρχει κάποιο τοπικό δίκτυο (LAN) προς το οποίο επιθυμείτε να προωθήσετε πακέτα, ή αν θέλετε να χρησιμοποιήσετε NAT, θα χρειαστείτε επίσης και την παρακάτω επιλογή:

gateway_enable="YES" # Enable as LAN gateway

### 31.4.4. Δημιουργία Κανόνων Φιλτραρίσματος

Το PF διαβάζει τις ρυθμίσεις του από το pf.conf(5) (η προεπιλεγμένη τοποθεσία είναι στο `/etc/pf.conf`) και τροποποιεί, απορρίπτει ή αποδέχεται πακέτα σύμφωνα με τους κανόνες και τους ορισμούς που περιέχονται σε αυτό. Η εγκατάσταση του FreeBSD περιλαμβάνει αρκετά υποδείγματα αρχείων ρύθμισης, στην τοποθεσία `/usr/share/examples/pf/`. Παρακαλούμε να διαβάσετε το PF FAQ για πλήρη ανάλυση των κανόνων του PF.

### Προειδοποίηση:

Καθώς διαβάζετε το PF FAQ, να έχετε υπόψη σας ότι διαφορετικές εκδόσεις του FreeBSD περιέχουν διαφορετικές εκδόσεις του PF. Τη δεδομένη στιγμή, το FreeBSD 8.`X` και οι προηγούμενες εκδόσεις χρησιμοποιούν την ίδια έκδοση του PF που χρησιμοποιεί και το OpenBSD 4.1. Το FreeBSD 9.`X` και νεώτερες εκδόσεις χρησιμοποιούν την ίδια έκδοση του PF με το OpenBSD 4.5.

Η ηλεκτρονική λίστα του FreeBSD για το packet filter firewall είναι ένα καλό μέρος για να κάνετε ερωτήσεις σχετικές με τη ρύθμιση και τη λειτουργία του PF firewall. Μη ξεχάσετε να ελέγξετε τα αρχεία της λίστας πριν ξεκινήσετε τις ερωτήσεις!

### 31.4.5. Δουλεύοντας με το PF

Χρησιμοποιήστε το pfctl(8) για να ελέγξετε το PF. Παρακάτω θα βρείτε κάποιες χρήσιμες εντολές (βεβαιωθείτε ότι έχετε διαβάσει τη σελίδα manual του pfctl(8) για να δείτε όλες τις διαθέσιμες επιλογές):

Εντολή | Σκοπός
--- | ---
`pfctl `-e`` | Ενεργοποίηση του PF
`pfctl `-d`` | Απενεργοποίηση του PF
`pfctl `-F` all `-f` /etc/pf.conf` | Διαγραφή όλων των κανόνων (nat, filter, state, table, κ.λ.π.) και εκ νέου ανάγνωση από το αρχείο `/etc/pf.conf`
`pfctl `-s` [ rules | nat | state ]` | Εκτύπωση αναφοράς σχετικά με τους κανόνες του φίλτρου, του NAT, ή του πίνακα κατάστασης
`pfctl `-vnf` /etc/pf.conf` | Ελέγχει το `/etc/pf.conf` για λάθη, αλλά δεν φορτώνει τους κανόνες

### 31.4.6. Ενεργοποίηση του ALTQ

Το ALTQ διατίθεται μόνο αν μεταγλωττίσετε απευθείας την υποστήριξη του μέσα στον πυρήνα του FreeBSD. Το ALTQ δεν υποστηρίζεται από όλα τα προγράμματα οδήγησης καρτών δικτύου. Παρακαλούμε δείτε τη σελίδα manual του altq(4) για τη λίστα των οδηγών που υποστηρίζονται στην έκδοση του FreeBSD που διαθέτετε.

Οι παρακάτω επιλογές του πυρήνα ενεργοποιούν το ALTQ και παρέχουν επιπρόσθετες λειτουργίες:

options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build

Η γραμμή `options ALTQ` ενεργοποιεί το πλαίσιο λειτουργιών ALTQ.

Η γραμμή `options ALTQ_CBQ` ενεργοποιεί το Class Based Queuing (CBQ). Το CBQ σας επιτρέπει να χωρίσετε το εύρος ζώνης μιας σύνδεσης σε διαφορετικές κλάσεις ή ουρές, ώστε να δίνονται προτεραιότητες στην κίνηση ανάλογα με τους κανόνες του φίλτρου.

Η γραμμή `options ALTQ_RED` ενεργοποιεί το Random Early Detection (RED). Το RED χρησιμοποιείται για να αποφευχθεί η συμφόρηση του δικτύου. Για το σκοπό αυτό, το RED μετράει το μήκος της ουράς και το συγκρίνει με το μέγιστο και ελάχιστο όριο της. Αν η ουρά είναι πάνω από το μέγιστο, όλα τα νέα πακέτα θα απορρίπτονται. Σύμφωνα και με το όνομα του, το RED απορρίπτει πακέτα από διάφορες συνδέσεις με τυχαίο τρόπο.

Η γραμμή `options ALTQ_RIO` ενεργοποιεί το Random Early Detection In and Out.

Η γραμμή `options ALTQ_HFSC` ενεργοποιεί το Hierarchical Fair Service Curve Packet Scheduler. Για περισσότερες πληροφορίες σχετικά με το HFSC δείτε: http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html.

Η γραμμή `options ALTQ_PRIQ` ενεργοποιεί το Priority Queuing (PRIQ). Το PRIQ πάντοτε περνάει πρώτα την κίνηση με τη μεγαλύτερη προτεραιότητα.

Η γραμμή `options ALTQ_NOPCC` ενεργοποιεί την υποστήριξη SMP για το ALTQ. Η επιλογή αυτή απαιτείται σε συστήματα SMP.

Προηγ | Πάνω | Επόμενο
31.3. Προγράμματα Firewall | Αρχή | 31.5. Το IPFILTER (IPF) Firewall

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

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