Tuesday, October 14, 2008

Χρήση του FreeBSD ως Internet Gateway

Με αρχική έμπνευση αυτό το ποστ στη λίστα freebsd-questions, σκέφτηκα να εξερευνήσω πιθανούς τρόπους δημιουργίας ενός gateway μέσω του FreeBSD. Πρόκειται τελικά για μια απλή διαδικασία.

Προυποθέσεις


Χρειάζεστε δύο κάρτες δικτύου. Η πρώτη συνδέεται στο Internet (ενδεχομένως μέσω εκείνου του φτηνιάρικου ADSL router που πήρατε μαζί με τη σύνδεση σας). Η δεύτερη συνδέεται στο τοπικό σας δίκτυο. Κατά πάσα πιθανότητα συνδέεται σε μια θύρα ενός switch στο οποίο είναι συνδεμένο και το υπόλοιπο τοπικό σας δίκτυο. Παρακάτω φαίνεται ένα απόσπασμα (με σχόλια) από το γνωστό αρχείο ρυθμίσεων /etc/rc.conf:


# rl0 : Σύνδεση στο internet (μέσω ADSL router)
ifconfig_rl0="inet 192.168.0.100 netmask 255.255.255.0"
# rl1 : Σύνδεση στο τοπικό δίκτυο
ifconfig_rl1="inet 192.168.1.100 netmask 255.255.255.0"
# defaultrouter: Το IP του φτηνιάρικου ADSL router :)
defaultrouter="192.168.0.250"


Εννοείτε ότι στο /etc/resolv.conf θα υπάρχει ο σχετικός DNS server (συνήθως του παροχέα σας):

nameserver 195.170.0.1
nameserver 195.170.2.1


Με ρυθμίσεις αντίστοιχες με τις παραπάνω, το FreeBSD σύστημα σας θα έχει Internet μέσω της κάρτας δικτύου rl0.

Ενεργοποίηση του PF Firewall


Το FreeBSD έχει επιλογές στα Firewalls! Το PF firewall προέρχεται από το OpenBSD και είναι πολύ ισχυρό. Ενεργοποιήστε το με τις ακόλουθες καταχωρήσεις στο /etc/rc.conf:


pf_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
pf_rules="/etc/pf.conf"
pf_flags=""


Προφανώς μπορείτε να αλλάξετε τις σχετικές ρυθμίσεις flags διαβάζοντας τη σχετική σελίδα στο man. Το αρχείο /etc/pf.conf φυσιολογικά έχει τις ρυθμίσεις σας για το firewall.

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


gateway_enable="YES"


Για να λειτουργήσει αυτή η ρύθμιση (αν δεν θέλετε να κάνετε επανεκκίνηση), θα πρέπει να δώσετε τις εντολές:


# sysctl net.inet.ip.forwarding=1
# /etc/rc.d/routing restart


Προφανώς μπορείτε να αλλάξετε τις σχετικές ρυθμίσεις flags διαβάζοντας τη σχετική σελίδα στο man. Το αρχείο /etc/pf.conf φυσιολογικά έχει τις ρυθμίσεις σας για το firewall. Θα χρειαστεί να προσθέσετε τον παρακάτω κανόνα για να ενεργοποιήσετε το NAT:


nat pass on rl0 from rl1:network to any -> rl0


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

pass in quick on rl1 proto { tcp, udp, icmp } from any to any keep state


Σημείωση: Στο αρχείο /etc/pf.conf, οι κανόνες για Translation (nat pass) τοποθετούνται ακριβώς πριν τους κανόνες για filtering. Συνήθως οι κανόνες filtering ξεκινάνε με κάποιο firewall policy, π.χ.:

# The default firewall policy is to block everything.
block in log all
block out log all


Έχοντας ολοκληρώσει τις παραπάνω ρυθμίσεις, μπορείτε να κάνετε επανεκκίνηση ή να ξεκινήσετε / επανεκκινήσετε χειροκίνητα τις αντίστοιχες υπηρεσίες:


# /etc/rc.d/netif restart
# /etc/rc.d/routing restart
# /etc/rc.d/pf restart


Η ρύθμιση έχει ολοκληρωθεί!
Φυσικά, αυτός δεν είναι ο μοναδικός τρόπος ρύθμισης. Αν για παράδειγμα χρησιμοποιείτε το IPFW firewall, θα βρείτε πολύ καλές οδηγίες στην αντίστοιχη ενότητα του FreeBSD Handbook.

No comments: