Greek - Masquerading Made Simple HOWTO John Tapsell
tapselj0@cs.man.ac.uk
Thomas Spellman
thomas@resonance.org
Matthias Grimm
DeadBull@gmx.net
Μετάφραση στα ελληνικά από: Sotiris Ganouris
topgan1@clug.gr
0.08 2002-07-11 jpt 0.07 2002-02-27 jpt 0.06 2001-09-08 jpt 0.05 2001-09-07 jpt 0.04 2001-09-01 jpt 0.03 2001-07-06 jpt Περίληψη Όλοι οι συγγραφείς είναι διαθέσιμοι στο κανάλι #debian στον irc.opensource.net Ο John Tapsell (JohnFlux) είναι ο επίσημος συντηρητής του how-to. Στείλτε μου Email (John Tapsell) για οποιαδήποτε απορία, βρισιά, σχόλια, ραντεβού κτλ. Η κλοπή έγινε με ντροπή απο τη δουλειά του David Ranch - dranch@trinnet.net. Αυτό ΔΕΝ είναι αντικατάσταση για του IP-Masquerading HOWTO είναι ένα συμπλήρωμα σε αυτό, και τα δύο τους θα πρέπει να διαβαστούν μαζί. Δεν γράφω πράγματα εδώ που δεν καλύπτονται απο το άλλο HOWTO, ούτε και εξηγώ τι σημαίνουν όλα αυτά, ή γιατί γίνονται όλα αυτά. Δείτε εδώ http://ipmasq.cjb.net και το πρώτο Masq-HOWTO οπου είναι αρκετά καλύτερα guides οπου θα σας βοηθήσουν περισσότερο. Το κείμενο αυτό περιγράφει το πως να ενεργοποιήσετε το IP Masquerade feature σε ένα συγκεκριμένο Linux host. Το IP Masq είναι μία μορφή του Network Address Translation ή εν συντομία NAT οπου επιτρέπει εσωτερικά συνδεδεμένους υπολογιστές σε δίκτυο που δεν έχουν μία ή περισσότερες καταχωρημένες Internet IP διευθύνσεις να αποκτήσουν την δυνατότητα να συνδεθούν στο Internet μέσω μίας Internet IP (σύνδεσης) ενός Linux Box. Ολο το κείμενο βρίσκεται κάτω απο την άδεια GNU Free Documentation License. http://www.gnu.org/copyleft/fdl.html
Εισαγωγή Introduction Τα παρακάτω είναι επίτηδες μικρά αλλά μέσα στο νόημα. Εάν έχετε ένα δίκτυο που θέλετε να το ενσωματώσετε με το Internet: _____________ / \ external IP _________ internal IP | Internet | 123.12.23.43 | linux | 192.168.0.1 | google.com | <----[outside card]-| machine |-[internal card] \_____________/ --------- | | _____________ ______|_______ | 192.168.0.2 | / \ | internal |-----------| 192.168.0.0 | | machine | | Intranet | ------------- \______________/ Picture of network Περίληψη: (Μου αρέσει να κάνω τις περιλήψεις πρώτα) Υποθέτωντας οτι η κάρτα δικτύου που δίνει εξωτερικό δίκτυο (ΙΝΤΕΡΝΕΤ) είναι η eth0, και η εξωτερική μας IP είναι η 123.12.23.43 και η εσωτερική κάρτα δικτύου (εσωτερικό δίκτυο) είναι η eth1, τότε έχουμε: $> modprobe ipt_MASQUERADE # Εάν αυτό αποτύχει συνεχίστε έτσι και αλλιώς $> iptables -F; iptables -t nat -F; iptables -t mangle -F $> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43 $> echo 1 > /proc/sys/net/ipv4/ip_forward Η για μία σύνδεση dial-up: $> modprobe ipt_MASQUERADE # Εάν αυτό αποτύχει συνεχίστε έτσι και αλλιώς $> iptables -F; iptables -t nat -F; iptables -t mangle -F $> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE $> echo 1 > /proc/sys/net/ipv4/ip_forward Μετά για να την προφυλάξουμε: $> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $> iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT $> iptables -P INPUT DROP # μόνο εάν τα δύο πρώτα είναι επιτυχημένα $> iptables -A FORWARD -i eth0 -o eth0 -j REJECT Ή για μία σύνδεση dial-up (με την eth0 σαν εσωτερική κάρτα δικτύου): $> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $> iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT $> iptables -P INPUT DROP #only if the first two are succesful $> iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT Και αυτό ήταν! Για να δείτε τους κανόνες των iptables γράψτε "iptables -t nat -L" Λίγο βαθύτερη έκδοση Κάνωντας compile τον πυρήνα: (Χρησιμοποιήστε έναν 2.4.x πυρήνα ή μεγαλύτερο) Χρειάζεστε τις παρακάτω ρυθμίσεις στον πυρήνα: Κάτω απο το Networking Options Network packet filtering (CONFIG_NETFILTER) Κάτω απο το Networking Options->Netfilter Configuration Connection tracking (CONFIG_IP_NF_CONNTRACK) FTP Protocol support (CONFIG_IP_NF_FTP) IP tables support (CONFIG_IP_NF_IPTABLES) Connection state match support (CONFIG_IP_NF_MATCH_STATE) Packet filtering (CONFIG_IP_NF_FILTER) REJECT target support (CONFIG_IP_NF_TARGET_REJECT) Full NAT (CONFIG_IP_NF_NAT) MASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE) REDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT) Packet mangling (CONFIG_IP_NF_MANGLE) LOG target support (CONFIG_IP_NF_TARGET_LOG) Πρώτα, εάν τα iptables και το masq module δεν έχουν γίνει compile στον πυρήνα και δεν είναι εγκατεστημένα, αλλά υπάρχουν σαν modules, χρειαζόμαστε να τα εγκαταστήσουμε. Εαν κάνετε ένα insmod ipt_MASQUERADE θα φορτώσει τα ip_tables, ip_conntrack και το iptable_nat. $> modprobe ipt_MASQERADE Ανεξαρτήτως άν το Intranet (εσωτερικό δίκτυο) σας είναι μεγάλο, ή απλώς θέλετε δύο τρεις υπολογιστές να συνδεθούν με το Internet δεν υπάρχει μεγάλη διαφορά. Υποθέτωντας οτι δεν υπάρχουν άλλοι κανόνες στα iptables, κάντε ένα: $> iptables -F; iptables -t nat -F; iptables -t mangle -F Εάν παίρνετε ένα λάθος οπου λέει οτι δεν βρίσκει τα iptables, πηγαίντε κατεβάστε τα και εγκαταστήστε τα. Εάν σας πει οτι δεν υπάρχει ο πίνακας 'nat', κάντε recompile τον πυρήνα με nat support. Εαν σας πει οτι δεν υπάρχει πίνακας 'mangle', μην στεναχωριέστε, δεν χρειάζετε για το μασκάρισμα. Εάν σας πει οτι τα iptables είναι ασύμβατα με τον πυρήνα σας, πηγαίντε κατεβάστε έναν πυρήνα 2.4.x ή μεγαλύτερο και κάντε του compile με iptables support. Αν έχετε ΣΤΑΘΕΡΗ (static) ip κάντε (π.χ. Σε κάρτα δικτύου που δεν χρησιμοποιεί DHCP): $> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43 Η για δυναμική (dynamic) (π.χ. Ένα modem που χρειάζετε να καλέσετε έναν αριθμο πρώτα (dialup): $> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE Τελικά πρέεπι να πειτε στον πυρήνα πως ναι, θέλετε να ξεκινήσει το forwarding (η προώθηση) των πακέτων: (Αυτό χρειάζετε να γίνει μόνο μια φορά σε κάθε reboot αλλά δεν πειράζει να το κάνετε και παραπάνω φορές) $> echo 1 > /proc/sys/net/ipv4/ip_forward Οταν θα έχετε σιγουρευτεί οτι όλα αυτά δουλεύουν (δείτε τις οδηγίες Post-install πρώτα) αφήστε να δουλεύει το μασκάρισμα μόνο του εσωτερικού δικτύου δεν θέλετε να αφήσετε όλο τον κόσμο στο Internet να το χρησιμοποιούν φυσικά :) Πρώτα, αφήστε τις ήδη υπάρχουσες συνδέσεις, ή οτιδήποτε σχετίζετε με αυτές (π.χ. Την σύνδεση σε έναν server ftp που έχετε συνδεθεί εσείς) $> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Εάν αυτό σας βγάλει μύνημα λάθους, τότε το πιο πιθανό είναι να μην έχετε ενεργοποιήσει το state tracking στον πυρήνα κάντε recompile. Μετά αφήστε καινούριες συνδέσεις μόνο απο το intranet (τοπικό/εσωτερικό δίκτυο). Αντικαταστήστε το ppp0 με eth0 ή με οτιδήποτε είναι η εξωτερική σας συσκευή. (Το ! σημαίνει οτιδήποτε εκτός απο) $> iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT Και τώρα αρνηθείτε οτιδήποτε άλλο: $> iptables -P INPUT DROP #only if the first two are succesful Εάν οποιοσδήποτε απο τους δύο πρώτους κανόνες αποτύχει, τότε αυτός ο τελευταίος κανόνας θα εμποδίσει το μασκάρισμα να δουλέψει εντελώς. Για να αναιρέσετε αυτόν τον κανόνα μπορείτε να γράψετε "iptables -P INPUT ACCEPT". Post-install Οδηγίες Ολα θα πρέπει να λειτουργούν τώρα. Μην ξεχάσετε να: Ρυθμίστε όλους τους υπολογιστές του υποδικτύου σας να δείχνουν στην ΙP του Linux server σαν gateway. (Στα windows δεξί-κλικ στο network neighbourhood->properties->gateway και μετά τον αλλάζετε στην IP του Linux server(gateway)). Ρυθμίστε όλους τους υπολογιστές σας να χρησιμοποιούν τον proxy του ISP σας (αν υπάρχει χρησιμοποιείστε transparent proxy), (ΠΡΟΣΟΧΗ Εχω ακούσει για αναφορές οτι το transparent proxying ειναι πολύ αργό σε πολύ μεγάλα δίκτυα), ή τρέξτε τον squid στον linux server σας. (Αυτό είναι προαιρετικό αλλά συνιστάται για μεγάλα δίκτυα). Σιγουρευτήτε οτι βάζετε σωστά τον DNS όταν ρυθμίζεται τους υπολογιστές σας. Ειδάλως θα παίρνετε μυνήματα λάθους σε αυτούς γιατί δεν θα γίνετε σωστά το resolving της IP address. [Offtopic] I wonder if you could simply send out a dhcp broadcast that just forwards on the dns server (and http_proxy while you're at it) without having to setup a dhcp server (or even if you do). Can someone mail me about this? :) Thanks to Richard Atcheson for pointing this out. Τώρα θα πρέπει σιγά σιγά να διορθώνεται την ασφάλεια σε αυτόν. Πρώτα απενεργοποιήστε γενικώς το forwarding: "iptables -P FORWARD DROP", και μετά μάθετε να δουλεύετε με τα iptables και τα αρχεία /etc/hosts.allow και /etc/hosts.deny για να ασφαλίσετε το σύστημά σας. ΠΡΟΣΟΧΗ Μην δοκιμάσετε το προηγούμενη κανό των iptables μέχρι να έχετε το μασκάρισμα να δουλεύει σωστά Πρέπει να ορίζεται ξεχωριστά οποιοδήποτε πακέτο θέλετε να περάσει εάν θα χρησιμοποιήσετε την προηγούμενη εντολή (κανόνας iptables) με DENY. (Μπορείτε να αναιρέσετε αυτόν τον κανόνα με "iptables -P FORWARD ACCEPT") Αφήστε όποια services θέλετε να φαίνονται στο internet. Για παράδειγμα για να αφήσετε access στον web server σας κάντε: $> iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT $> iptables -A INPUT --protocol tcp --dport 443 -j ACCEPT Για να αφήσετε το ident (για σύνδεση στο irc κτλ) κάντε $> iptables -A INPUT --protocol tcp --dport 113 -j ACCEPT Για να το δοκιμάσετε: Δοκιμάστε να συνδεθείτε απο έναν υπολογιστή πελάτη στο web χρησιμοποιώντας μια IP. Η IP του Google είναι 216.239.33.100 (μία απο όλες που έχουν) και θα πρέπει να παρετε μία απάντηση από αυτήν π.χ. "ping 216.239.33.100" "lynx 216.239.33.100". Δοκιμάστε μια σύνδεση μαζί με το resolve του hostname π.χ. "ping www.google.com" "lynx google.com" ή απο τον Internet Explorer ή τον netscape Οπου eth0 είναι η κάρτα δικτύου που δίνει Internet (εξωτερική), και η 123.12.23.43 είναι η εξωτερική ip αυτού του μηχανήματος. FAQ's - Frequently Asked Compla^H^H^H^H^H^H Questions, Συχνά Παράπ^Η^Η^Η^Η^Η Ερωτήσεις Πως βλέπω του κανόνες ως τώρα? - Δοκιμάστε $> iptables -L $> iptables -t nat -L Δεν κάνει resolve τις IP! Γράφω 'www.microsoft.com' και λέει οτι δεν το βρίσκει - Σιγουρευτήτε οτι έχετε βάλει τις ρυθμίσεις dns σε όλους τους υπολογιστές-πελάτες. Δεν δουλεύει! Δεν του αρέσουν τα iptables / NAT / SNAT / MASQ - Κατεβάστε τον τελευταίο πυρήνα, κάντε ένα compile με υποστήριξη iptables και NAT Δεν δουλεύει! Το μασκάρισμα (masquerading) δεν δουλεύει καθόλου! Αει πνίξου βλάκα - Δοκιμάστε echo 1 > /proc/sys/net/ipv4/ip_forward Δεν δουλεύει! Δεν μπορώ να χρησιμοποιήσω το δίκτυο καθόλου πλέον και σε μισώ! - Δοκιμάστε $> iptables -F $> iptables -t nat -F $> iptables -t mangle -F (όλοι οι κανόνες έφυγαν άντε γεια). Μετά επαναφέρετε τους προηγούμενους κανόνες που τυχόν είχατε. - Δοκιμάστε iptables -P FORWARD ACCEPT Ακόμα δεν δουλεύει - HΧμμ, το "dmesg | tail" σας βγάζει κάποιο λάθος? Κάντε και ένα "cat /var/log/messages | tail" ? Οχι οτι νοιάζομαι και πολυ :) Δεν καταλαβαίνω, ΔΕΝ ΔΟΥΛΕΥΕΙ! - Δεν μπορώ να ξέρω.. αλλά θα πρέπει να είστε σε θέση να: 1) Πινγκάρετε το εξωτερικό δίκτυο απο το Linux box 2) Πινγκάρετε απο το Linux Box το εσωτερικό δίκτυο 3) Απο το εσωτερικό δίκτυο να πινγκάρετε το Linux box Και αυτά πριν αρχίσουν οι κανόνες για το μασκάρισμα. Where do I put this stuff? - In the /etc/network/interfaces file, or firewall.rc. If you put it in the interfaces file, then put it as a pre-up to the external interface, and have "iptables -t nat -F" as the post-down. Πως μπορώ να το κάνω να ανοίγει την σύνδεση μόνο όταν την χρειάζομαι?(ppp up on demand) - Υποθέτωντας οτι ο gateway του ISP σας είναι ας πούμε 23.43.12.43 , τότε προσθέστε μία γραμμή σαν την παρακάτω: :23.43.12.43 στο τέλος του αρχείου /etc/ppp/peers/provider. (αυτό είναι για dynamic IP - για static IP θα ήταν my.external.ip.number:23.43.12.43 ) Μετά στο τέλος αυτού του αρχείου βάλτε μια νέα γραμμή: demand Η σύνδεση πέφτει συνεχώς! - Πρώτα, έχετε ενεργοποιήσει το dialing on demand? Κάνει την δουλειά του σωστά? Τσεκάρετε το /etc/ppp/peers/provider, και σιγουρευτήτε οτι η σύνδεση dial up δουλεύει κανονικά πριν δοκιμάσετε το μασκάρισμα. - Δεύτερον, αν κάτι πηγαίνει τόσο περίεργα δοκιμάστε να γυρίσετε σε προηγούμενο πυρήνα (Linux 2.4.3) και δείτε αν εκει λειτουργεί Δεν ξέρω γιατί... Δεν μπορώ να τα κάνω όλα αυτά μόνος μου! Θέλω κάτι ετοιματζίδικο με GUI. - Σίγουρα http://shorewall.sourceforge.net/ Για δείτε το... Τα Cable modems έχουν static ή dynamic IP? - Καλή ερώτηση.. το πιο πιθανό είναι να είναι dynamic. Οι κάρτες δικτύου που συνδέονται σε DHCP? - Είναι dynamic. Πως διαχειρίζομαι τα εσωτερικά services? - Δοκίμαστε να κάνετε forwarding ή redirecting τις πόρτες των IP ξανά σιγουρευτήτε οτι τα έχετε ασφαλίσει σωστά Απο τους υπολογιστές του εσωτερικού δικτύου μπορώ να πινγκάρω την ip του linux gateway, αλλά δεν μπορώ να συνδεθώ στο internet. -Οκεη, δοκιμάστε "rmmod iptable_filter" - more info on this as I get it. - Σιγουρευτήτε οτι δεν τρέχετε το routed ή το gated για να τσεκάρετε γράψτε "ps aux | grep -e routed -e gated". - Κοιτάξτε στο http://ipmasq.cjb.net Πως μπορώ να δώ ποιες συνδέσεις είναι σε ισχύ αυτή την στιγμή (established)? Κάτι σαν το netstat.. - Δοκιμάστε cat /proc/net/ip_conntrack Χρειάζομαι περισσότερες πληροφορίες για το squid για το routing κτλ! - Δοκίμαστε να διαβάσετε το Advanced Routing HOWTO http://www.linuxdoc.org/HOWTO/Adv-Routing-HOWTO.html Αυτό το howto είναι χάλια! Πως θα παραπονεθώ στα παληκαρια που το έγραψαν? - Πηγαίντε στο #debian στο irc.opensource.net και βρείτε τον JohnFlux. - Στείλτε μου Mail (JohnFlux) στο tapselj0@cs.man.ac.uk Αυτό το howto είναι χάλια! Θα δούμε καμια καλυτερη έκδοση - Δοκιμάστε http://ipmasq.cjb.net - Απευθυνθείτε στο LDP Masq-HOWTO. Με τι άλλο ασχολήσε τώρα? Αυτήν την στιγμή γράφω έναν οδηγό στο linux για anti-missile-missiles-made-simple. Δεν υπάρχουν καλοί οδηγοί που να σε προστατεύουν απο πυρηνικές εκρήξεις. :)