diff --git a/el_GR.ISO8859-7/articles/dialup-firewall/article.sgml b/el_GR.ISO8859-7/articles/dialup-firewall/article.sgml index 9cc8b7f86e..cd9db38669 100644 --- a/el_GR.ISO8859-7/articles/dialup-firewall/article.sgml +++ b/el_GR.ISO8859-7/articles/dialup-firewall/article.sgml @@ -1,389 +1,402 @@ %man; ]>
Σύνδεση μέσω τηλεφώνου και firewalling στο FreeBSD Marc Silver
marcs@draenor.org
$FreeBSD$ Αυτό το άρθρο περιγράφει πως μπορείτε να ρυθμίσετε ένα firewall χρησιμοποιώντας μια PPP σύνδεση μέσω τηλεφώνου στο FreeBSD με το IPFW. Πιο συγκεκριμένα, ένα firewall πάνω από μια σύνδεση μέσω τηλεφώνου που έχει δυναμική IP διεύθυνση. Αυτό το κείμενο δεν ασχολείται με το πως θα ρυθμίσετε την PPP σύνδεσή σας.
Πρόλογος Σύνδεση μέσω τηλεφώνου και firewalling στο FreeBSD Αυτό το κείμενο περιγράφει την διαδικασία που χρειάζεται για να ρυθμίσετε ένα firewall στο FreeBSD όταν η IP διεύθυνση δίνεται δυναμικά από τον ISP σας. Παρόλο που έχω προσπαθήσει να κάνω αυτό το κείμενο όσο το δυνατόν πιο πλήρες και σωστό, είστε ευπρόσδεκτοι να στείλετε τα σχόλιά ή τις προτάσεις σας στην διεύθυνση - marcs@draenor.org. + marcs@draenor.org. Παράμετροι του πυρήνα - + Το πρώτο πράγμα που θα χρειαστεί να κάνετε είναι να μεταγλωττίσετε τον πυρήνα σας. Αν χρειάζεστε βοήθεια για να το κάνετε αυτό, τότε το καλύτερο μέρος να ξεκινήσετε είναι το τμήμα + URL="../../books/handbook/kernelconfig.html">τμήμα ρυθμίσεων του πυρήνα στο Εγχειρίδιο. Θα πρέπει να προσθέσετε τις παρακάτω επιλογές στις ρυθμίσεις του πυρήνα σας: options IPFIREWALL Ενεργοποιεί τον firewall κώδικα του πυρήνα. + + options IPFW2 + + + Ενεργοποιεί την νέα έκδοση του IPFW. + + Αυτή η επιλογή έχει νόημα μόνο αν χρησιμοποιείτε την έκδοση + 4.X του FreeBSD, είναι ενεργοποιημένη ήδη στις νεώτερες + εκδόσεις. + + + + options IPFIREWALL_VERBOSE Στέλνει τα μηνύματα για τα κατάλληλα πακέτα στο log του συστήματος. options IPFIREWALL_VERBOSE_LIMIT=100 Βάζει κάποιο όριο στις φορές που κάποια εγγραφή θα καταγράφεται. Αυτό εμποδίζει τα log αρχεία σας από το να γεμίσουν με πολλές επαναλαμβανόμενες εγγραφές. 100 είναι μια αρκετά λογική τιμή, αλλά μπορείτε να το ρυθμίσετε ανάλογα με τις απαιτήσεις σας. options IPDIVERT Ενεργοποιεί τα divert sockets, που θα δούμε αργότερα τι κάνουν. Υπάρχουν κι άλλα προαιρετικά πράγματα που μπορείτε να προσθέσετε στον πυρήνα σας για ακόμα μεγαλύτερη ασφάλεια. Δεν είναι απαραίτητα για να ρυθμίσετε ένα firewall έτσι ώστε να δουλεύει, αλλά κάποιοι αρκετά παρανοϊκοί χρήστες μπορεί να θέλουν να τα ενεργοποιήσουν. options TCP_DROP_SYNFIN Αυτή η επιλογή δίνει την δυνατότητα στον πυρήνα να αγνοεί τα TCP πακέτα που έχουν και την SYN και την FIN επιλογή. Έτσι - εμποδίζονται εργαλεία όπως το nmap κλπ. στην προσπάθειά τους να + εμποδίζονται εργαλεία όπως το + security/nmap κλπ. στην + προσπάθειά τους να αναγνωρίσουν το TCP stack του μηχανήματος, αλλά επίσης είναι ασύμβατο με τις επεκτάσεις που περιγράφει το RFC1644. Αυτό δεν προτείνεται για ένα μηχάνημα που θα τρέχει κάποιο web server. Μην κάνετε reboot όταν έχετε μεταγλωττίσει τον πυρήνα. Ελπίζουμε πως θα χρειαστεί μόνο μια επανεκκίνηση, στο τέλος της εγκατάστασης του firewall. Αλλαγές στο <filename>/etc/rc.conf</filename> για να φορτώνεται το firewall - + Τώρα πρέπει να κάνουμε κάποιες αλλαγές στο /etc/rc.conf με τις ρυθμίσεις μας για το firewall. Απλά προσθέστε τις παρακάτω γραμμές: - + firewall_enable="YES" firewall_script="/etc/firewall/fwrules" natd_enable="YES" natd_interface="tun0" natd_flags="-dynamic" Για περισσότερες πληροφορίες σχετικά με τη σημασίας καθεμιάς από αυτές τις γραμμές, ρίξτε μια ματιά στο /etc/defaults/rc.conf και διαβάστε την man σελίδα &man.rc.conf.5; Απενεργοποιήστε την ενσωματωμένη μετάφραση διευθύνσεων του PPP - + Μπορεί ήδη να χρησιμοποιείτε την ενσωματωμένη μετάφραση διευθύνσεων του PPP (NAT). Αν ναι, τότε θα πρέπει να την απενεργοποιήσετε, αφού τα παραδείγματα που θα δούμε παρακάτω χρησιμοποιούν το &man.natd.8; για να κάνουν το ίδιο πράγμα. Αν έχετε ήδη τις απαραίτητες γραμμές για να ξεκινάει το PPP αυτόματα, μάλλον μοιάζουν κάπως έτσι: ppp_enable="YES" ppp_mode="auto" ppp_nat="YES" ppp_profile="profile" - Αν ναι, αφαιρέστε την γραμμή ppp_nat="YES". + Αν ναι, πρέπει να απενεργοποιήσετε το ppp_nat + προσθέτοντας στο αρχείο rc.conf σας την γραμμή + ppp_nat="YES". Θα πρέπει επίσης να αφαιρέσετε τυχόν nat enable yes ή alias enable yes έχει το /etc/ppp/ppp.conf σας. Οι κανόνες του firewall - + Έχουμε σχεδόν τελειώσει. Το μόνο που απομένει τώρα είναι να ορίσουμε τους κανόνες του firewall και τότε μπορούμε να επανεκκινήσουμε το σύστημα ώστε να ξεκινήσει το firewall. Καταλαβαίνω πως ο καθένας θα θέλει κάτι λίγο ή πολύ διαφορετικό στους κανόνες του. Αυτό που προσπάθησα να κάνω είναι να γράψω κάποιους βασικούς κανόνες που ταιριάζουν στους πιο πολλούς χρήστες που συνδέονται στο δίκτυο μέσω τηλεφώνου. Μπορείτε προφανώς να κάνετε αλλαγές σύμφωνα με τις ανάγκες σας, χρησιμοποιώντας τους παρακάτω κανόνες σαν την βάση για το δικό σας σετ κανόνων. Ας αρχίσουμε όμως με τις βασικές αρχές ενός κλειστού firewall. Αυτό που θέλετε να κάνετε είναι να κλείσετε τα πάντα και μετά να ανοίξετε μόνο ότι πραγματικά σας χρειάζεται. Οι κανόνες θα πρέπει λοιπόν πρώτα να επιτρέπουν και μετά να απαγορεύουν. Η λογική πίσω από αυτό είναι ότι πρώτα βάζετε τους κανόνες που επιτρέπουν πράγματα να περάσουν και ύστερα όλα τα άλλα απαγορεύονται. :) Ύστερα, φτιάξτε ένα κατάλογο /etc/firewall. Αλλάξτε κατάλογο μέσα σε αυτόν και δημιουργήστε το αρχείο fwrules που το όνομά του είχαμε γράψει στο rc.conf. Σημειώστε πως μπορείτε να αλλάξετε το όνομα του αρχείου αυτού σε ότι θέλετε. Αυτός ο οδηγός δίνει αυτό το όνομα σαν παράδειγμα και μόνο. Ας δούμε τώρα ένα παράδειγμα firewall, που έχει αρκετά καλά σχόλια. - # Firewall rules -# Written by Marc Silver (marcs@draenor.org) -# http://draenor.org/ipfw -# Freely distributable - - -# Define the firewall command (as in /etc/rc.firewall) for easy + # Define the firewall command (as in /etc/rc.firewall) for easy # reference. Helps to make it easier to read. fwcmd="/sbin/ipfw" # 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 -# Allow all data from my network card and localhost. Make sure you -# change your network card (mine was fxp0) before you reboot. :) -$fwcmd add allow ip from any to any via lo0 -$fwcmd add allow ip from any to any via fxp0 +# Allow all connections that have dynamic rules built for them, +# but deny established connections that don't have a dynamic rule. +# See ipfw(8) for details. +$fwcmd add check-state +$fwcmd add deny tcp from any to any established -# Allow all connections that I initiate. -$fwcmd add allow tcp from any to any out xmit tun0 setup +# Allow all localhost connections +$fwcmd add allow tcp from me to any out via lo0 setup keep-state +$fwcmd add deny tcp from me to any out via lo0 +$fwcmd add allow ip from me to any out via lo0 keep-state -# Once connections are made, allow them to stay open. -$fwcmd add allow tcp from any to any via tun0 established +# Allow all connections from my network card that I initiate +$fwcmd add allow tcp from me to any out xmit any setup keep-state +$fwcmd add deny tcp from me to any +$fwcmd add allow ip from me to any out xmit any keep-state -# Everyone on the internet is allowed to connect to the following +# Everyone on the Internet is allowed to connect to the following # services on the machine. This example shows that people may connect -# to ssh and apache. -$fwcmd add allow tcp from any to any 80 setup -$fwcmd add allow tcp from any to any 22 setup +# to sshd and a webserver. +$fwcmd add allow tcp from any to me dst-port 22,80 in recv any setup keep-state # This sends a RESET to all ident packets. -$fwcmd add reset log tcp from any to any 113 in recv tun0 - -# Allow outgoing DNS queries ONLY to the specified servers. -$fwcmd add allow udp from any to x.x.x.x 53 out xmit tun0 +$fwcmd add reset log tcp from any to me 113 in recv any -# Allow them back in with the answers... :) -$fwcmd add allow udp from x.x.x.x 53 to any in recv tun0 - -# Allow ICMP (for ping and traceroute to work). You may wish to -# disallow this, but I feel it suits my needs to keep them in. -$fwcmd add 65435 allow icmp from any to any +# Enable ICMP: remove type 8 if you don't want your host to be pingable +$fwcmd add allow icmp from any to any icmptypes 0,3,8,11,12,13,14 # Deny all the rest. -$fwcmd add 65435 deny log ip from any to any +$fwcmd add deny log ip from any to any Τώρα έχετε ένα ολοκληρωμένο firewall που επιτρέπει συνδέσεις στις θύρες 22 και 80 και καταγράφει όλες τις άλλες συνδέσεις στο log του συστήματος. Πλέον είστε έτοιμοι για επανεκκίνηση και το firewall θα πρέπει να ξεκινήσει να δουλεύει. Αν δείτε ότι αυτό είναι λάθος, ή έχετε οποιαδήποτε προβλήματα, ή ακόμα καλύτερα έχετε κάποιες προτάσεις για να διορθωθεί αυτή η σελίδα, επικοινωνήστε μαζί μου με email. Ερωτήσεις - + Γιατί χρησιμοποιείς το &man.natd.8; και το &man.ipfw.8; αφού θα μπορούσες να χρησιμοποιήσεις τα φίλτρα του &man.ppp.8;; - + Θα πρέπει να είμαι ειλικρινής και να πω ότι δεν υπάρχει κάποιος σοβαρός λόγος που χρησιμοποιώ το ipfw και το natd αντί για τα ενσωματωμένα φίλτρα του ppp. Από συζητήσεις που είχα με διάφορα άτομα φαίνεται πως οι πιο πολλοί συμφωνούν στο εξής: το ipfw έχει σαφώς πιο πολλές δυνατότητες και είναι πιο ευέλικτο στις ρυθμίσεις του από ότι τα φίλτρα του ppp, αλλά ότι κερδίζει σε δυνατότητες το χάνει σε ευκολία τροποποίησης των ρυθμίσεων. Ένας από τους λόγους που το χρησιμοποιώ είναι επειδή προτιμώ το φιλτράρισμα του firewall να γίνεται στο επίπεδο του πυρήνα, κι όχι από ένα πρόγραμμα στο επίπεδο του χρήστη. Βλέπω μηνύματα όπως limit 100 reached on entry 2800 και μετά από αυτό δεν ξαναβλέπω ποτέ μηνύματα στο log μου. Δουλεύει ακόμα το firewall μου; Αυτό απλά σημαίνει πως έχει χρησιμοποιηθεί το μέγιστο όριο καταγραφής (logging) για αυτό τον κανόνα. Ο κανόνας ο ίδιος εξακολουθεί να δουλεύει, αλλά δεν θα στέλνει πια μηνύματα στο log του συστήματος μέχρι να μηδενίσετε πάλι τους μετρητές. Μπορείτε να μηδενίσετε τους μετρητές με την εντολή ipfw resetlog. Εναλλακτικά, μπορείτε να αυξήσετε το όριο καταγραφής στις ρυθμίσεις του πυρήνα σας με την επιλογή όπως περιγράψαμε - παραπάνω. + παραπάνω. Μπορείτε να αλλάξετε αυτό το όριο (χωρίς να + μεταγλωττίσετε πάλι τον πυρήνα σας και να κάνετε reboot) + χρησιμοποιώντας την &man.sysctl.8; τιμή + net.inet.ip.fw.verbose_limit. Αν χρησιμοποιώ διευθύνσεις εσωτερικά που ανήκουν στην ομάδα 192.168.0.0 range, μπορώ να αλλάξω την εντολή σε κάτι όπως $fwcmd add deny all from any to 192.168.0.0:255.255.0.0 via tun0 στους κανόνες του firewall για να εμποδίσω τα μηχανήματα έξω από το δίκτυο από το να συνδέονται με τα εσωτερικά μηχανήματα; Η σύντομη απάντηση είναι όχι. Ο λόγος γι αυτό είναι ότι το natd κάνει μετάφραση διευθύνσεων για οτιδήποτε περνάει μέσω του interface tun0. Έτσι, τα εισερχόμενα πακέτα θα εμφανίζονται μόνο στην δυναμικά ορισμένη IP διεύθυνση του εξωτερικού interface και όχι στην διεύθυνση του εσωτερικού δικτύου. Σημειώστε όμως ότι μπορείτε να προσθέσετε ένα κανόνα $fwcmd add deny all from 192.168.0.4:255.255.0.0 to any via tun0 ο οποίος θα απαγορεύει σε ένα μηχάνημα του εσωτερικού δικτύου να στείλει οτιδήποτε πέρα από το firewall. Κάποιο λάθος πρέπει να έγινε. Ακολούθησα τις εντολές κατά γράμμα και τώρα κλειδώθηκα απέξω. Αυτός ο οδηγός υποθέτει ότι χρησιμοποιείτε το userland-ppp, γι αυτό κι οι κανόνες που δίνονται χρησιμοποιούν το tun0 interface, που αντιστοιχεί στην πρώτη σύνδεση που φτιάχνεται με το &man.ppp.8; (αλλιώς γνωστό και ως user-ppp). Η επόμενη σύνδεση θα χρησιμοποιούσε το tun1, μετά το tun2 και πάει λέγοντας. Θα πρέπει επίσης να θυμάστε ότι το &man.pppd.8; χρησιμοποιεί το interface ppp0, οπότε αν ξεκινήσετε τη σύνδεσή σας με το &man.pppd.8; θα πρέπει να αντικαταστήσετε το tun0 με ppp0. Παρακάτω θα δείξουμε ένα εύκολο τρόπο να αλλάξετε τους κανόνες του firewall κατάλληλα. Οι αρχικοί κανόνες σώζονται σε ένα αρχείο με όνομα fwrules_tun0. &prompt.user; cd /etc/firewall /etc/firewall&prompt.user; su Password: /etc/firewall&prompt.root; mv fwrules fwrules_tun0 /etc/firewall&prompt.root; cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules Για να καταλάβετε αν χρησιμοποιείτε το &man.ppp.8; ή το &man.pppd.8; μπορείτε να εξετάσετε την έξοδο της &man.ifconfig.8; αφού ενεργοποιηθεί η σύνδεσή σας. Π.χ., για μια σύνδεση που ενεργοποιήθηκε από το &man.pppd.8; θα δείτε κάτι σαν αυτό (δείχνονται μόνο οι σχετικές γραμμές): &prompt.user; ifconfig (skipped...) ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524 inet xxx.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xff000000 (skipped...) Από την άλλη, για μια σύνδεση που ενεργοποιήθηκε με το &man.ppp.8; (user-ppp) θά πρεπε να δείτε κάτι παρόμοιο με το παρακάτω: &prompt.user; 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...)