diff --git a/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml b/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml index d25c15496f..cb2b90e976 100644 --- a/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml @@ -1,3562 +1,3562 @@ Joseph J. Barbish Συνεισφορά του Brad Davis Μετατράπηκε σε SGML και ανανεώθηκε από τον Firewalls firewall ασφάλεια firewalls Σύνοψη Το firewall (τείχος προστασίας) καθιστά δυνατό το φιλτράρισμα της εισερχόμενης και εξερχόμενης κίνησης που διέρχεται από το σύστημα σας. Ένα firewall μπορεί να χρησιμοποιεί ένα ή περισσότερα σετ κανόνων για να επιθεωρεί τα πακέτα κατά την είσοδο ή έξοδο τους από μια δικτυακή σύνδεση, και να τα επιτρέπει ή να τα απορρίπτει. Οι κανόνες του firewall μπορούν να ελέγχουν ένα ή περισσότερα χαρακτηριστικά των πακέτων, συμπεριλαμβανομένων μεταξύ άλλων και του τύπου του πρωτοκόλλου, καθώς και την διεύθυνση ή/και θύρα (port) της αφετηρίας ή του προορισμού. Τα firewalls μπορούν να ενισχύσουν σημαντικά την ασφάλεια ενός κόμβου ή ενός δικτύου. Μπορούν να χρησιμοποιηθούν για μία ή περισσότερες από τις ακόλουθες λειτουργίες: Να προστατεύουν και να απομονώνουν τις εφαρμογές, τις υπηρεσίες και τα μηχανήματα του εσωτερικού σας δικτύου από ανεπιθύμητη κίνηση που προέρχεται από το Internet. Να περιορίζουν ή να αποκλείουν την πρόσβαση μηχανημάτων του εσωτερικού δικτύου σε υπηρεσίες του Internet. Να υποστηρίζουν μετάφραση δικτυακών διευθύνσεων (NAT), η οποία επιτρέπει στο εσωτερικό σας δίκτυο να χρησιμοποιεί ιδιωτικές IP διευθύνσεις και να μοιράζεται μία μοναδική σύνδεση με το Internet (είτε μέσω μίας μοναδικής δημόσιας IP διεύθυνσης, είτε μέσω ενός πλήθους δημοσίων διευθύνσεων που ανατίθενται αυτόματα). Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Πως να δημιουργήσετε σωστούς κανόνες φιλτραρίσματος πακέτων. Τους διάφορους τύπους firewall που υπάρχουν στο &os; και τις διαφορές τους. Πως να ρυθμίσετε και να χρησιμοποιήσετε το PF firewall του OpenBSD. Πως να ρυθμίσετε και να χρησιμοποιήσετε το IPFILTER. Πως να ρυθμίσετε και να χρησιμοποιήσετε το IPFW. Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει: Να κατανοείτε βασικές αρχές του &os; και του Internet. Βασικές Έννοιες των Firewalls firewall rulesets Υπάρχουν δύο βασικοί τρόποι για τη δημιουργία κανόνων σε ένα firewall: ο inclusive και ο exclusive. Ένα exclusive firewall επιτρέπει τη διέλευση όλης της κίνησης, εκτός από αυτή που ταιριάζει με τους κανόνες του. Ένα inclusive firewall κάνει το ανάποδο. Επιτρέπει μόνο τη διέλευση της κίνησης που ταιριάζει με τους κανόνες του, και αποκλείει οτιδήποτε άλλο. Τα inclusive firewalls προσφέρουν πολύ καλύτερο έλεγχο της εξερχόμενης κίνησης και για το λόγο αυτό είναι καλύτερα για συστήματα που προσφέρουν υπηρεσίες στο δημόσιο Internet. Ελέγχουν επίσης και τα πακέτα που προέρχονται από το δημόσιο Internet με προορισμό το ιδιωτικό σας δίκτυο. Από προεπιλογή, όλη η κίνηση που δεν ταιριάζει με τους κανόνες απορρίπτεται και καταγράφεται. Τα inclusive firewalls είναι γενικά ασφαλέστερα από τα exclusive, καθώς μειώνουν σημαντικά την πιθανότητα διέλευσης ανεπιθύμητης κίνησης μέσα από αυτά. Εκτός και αν αναφέρεται διαφορετικά, όλα τα παραδείγματα ρυθμίσεων και κανόνων που φαίνονται σε αυτό το κεφάλαιο, δημιουργούν inclusive firewalls. Η ασφάλεια μπορεί να γίνει ακόμα ισχυρότερη με τη χρήση ενός stateful firewall. Αυτός ο τύπος firewall αποθηκεύει την κατάσταση των συνδέσεων που μεταφέρουν δεδομένα μέσα από αυτό, και επιτρέπει μόνο την κίνηση που είτε ταιριάζει με μια από τις υπάρχουσες συνδέσεις, ή που ξεκινά μια νέα σύνδεση. Το μειονέκτημα ενός stateful firewall είναι ότι μπορεί να είναι ευάλωτο σε επιθέσεις Denial of Service (Άρνησης Υπηρεσίας, DoS) αν δεχθεί ταυτόχρονα πολλές αιτήσεις για άνοιγμα νέων συνδέσεων σε μικρό χρονικό διάστημα. Με τα περισσότερα firewalls, είναι δυνατόν να γίνει συνδυασμός και των δύο συμπεριφορών (τόσο stateful όσο και μη-stateful) ώστε να δημιουργηθεί το βέλτιστο firewall για την συγκεκριμένη χρήση. Προγράμματα Firewall Το &os; έχει τρία διαφορετικά προγράμματα firewall ενσωματωμένα στο βασικό σύστημα. Είναι τα: IPFILTER (γνωστό επίσης και ως IPF), το IPFIREWALL (γνωστό επίσης και ως IPFW), και το PacketFilter του OpenBSD (γνωστό επίσης και ως PF). Το &os; ενσωματώνει επίσης δύο προγράμματα για διαμόρφωση κυκλοφορίας (traffic shaping, έλεγχος του διαθέσιμου εύρους ζώνης): το &man.altq.4; και το &man.dummynet.4;. Το Dummynet είναι κατά παράδοση στενά συνδεμένο με το IPFW, και το ALTQ με το PF. Η διαμόρφωση κυκλοφορίας για το IPFILTER μπορεί τη δεδομένη στιγμή να γίνει με το IPFILTER για το NAT και το φιλτράρισμα και με το IPFW σε συνδυασμό με το &man.dummynet.4; ή χρησιμοποιώντας το PF σε συνδυασμό με το ALTQ. Τόσο το IPFW όσο και το PF χρησιμοποιούν κανόνες για να ελέγξουν την κίνηση των πακέτων από και προς το σύστημά σας, αν και διαθέτουν διαφορετικούς τρόπους για να το επιτύχουν, και οι κανόνες τους χρησιμοποιούν διαφορετική σύνταξη. Ο λόγος για τον οποίο το &os; διαθέτει πολλαπλά firewall, είναι ότι διαφορετικοί άνθρωποι έχουν διαφορετικές ανάγκες και προτιμήσεις. Δεν υπάρχει ένα και μοναδικό firewall που να είναι το καλύτερο. Ο συγγραφέας προτιμά το IPFILTER, καθώς οι κανόνες τύπου stateful που διαθέτει είναι λιγότερο πολύπλοκοι όταν χρησιμοποιούνται σε ένα περιβάλλον NAT, ενώ διαθέτει και ενσωματωμένο ftp proxy το οποίο τους απλοποιεί ακόμα περισσότερο, επιτρέποντας ασφαλή σύνδεση σε εξωτερικούς εξυπηρετητές FTP. Καθώς όλα τα firewall βασίζονται στην επιθεώρηση τιμών ελέγχου των πακέτων, ο διαχειριστής που πρόκειται να δημιουργήσει τους κανόνες πρέπει να κατανοεί τον τρόπο λειτουργίας του TCP/IP, το ρόλο των διαφόρων τιμών στα πεδία ελέγχου των πακέτων και πως χρησιμοποιούνται στην ανταλλαγή πληροφοριών σε μια συνηθισμένη συνεδρία. Για περισσότερες λεπτομέρειες, διαβάστε το . John Ferrell Αναθεωρήθηκε και ενημερώθηκε από τον Το Packet Filter (PF) και το <acronym>ALTQ</acronym> του OpenBSD firewall PF Τον Ιούλιο του 2003, η εφαρμογή firewall του OpenBSD (γνωστή ως PF) μεταφέρθηκε στο &os; και έγινε διαθέσιμη στην Συλλογή των Ports. Το &os; 5.3 που κυκλοφόρησε το 2004, ήταν η πρώτη επίσημη έκδοση η οποία περιείχε το PF ως τμήμα του βασικού πλέον συστήματος. Το PF είναι ένα ολοκληρωμένο firewall, με πλήθος χαρακτηριστικών, το οποίο επίσης διαθέτει προαιρετικά υποστήριξη για το ALTQ (Alternate Queuing). Το ALTQ προσφέρει υπηρεσίες Διασφάλισης Ποιότητας (Quality of Service, QoS). Το OpenBSD Project κάνει εξαιρετική δουλειά στη συντήρηση του PF FAQ. Για το λόγο αυτό, η παρούσα ενότητα του Εγχειριδίου εστιάζει κυρίως στις ιδιαιτερότητες του PF όσο αφορά το &os;, ενώ παρέχει και μερικές γενικές πληροφορίες σχετικά με τη χρήση του. Για πιο λεπτομερείς πληροφορίες σχετικά με τη χρήση του PF, παρακαλούμε διαβάστε το PF FAQ. Περισσότερες πληροφορίες σχετικά με το PF στο &os; μπορείτε να βρείτε στο . Χρησιμοποιώντας το Άρθρωμα του Πυρήνα για το PF Από το &os; 5.3 και μετά, το PF περιλαμβάνεται στην βασική εγκατάσταση ως χωριστό άρθρωμα που μπορεί να φορτωθεί στον πυρήνα. Το σύστημα θα φορτώσει δυναμικά το άρθρωμα αν υπάρχει η καταχώριση pf_enable="YES" στο &man.rc.conf.5;. Το άρθρωμα του PF ωστόσο δεν θα φορτωθεί, αν το σύστημα δεν μπορέσει να εντοπίσει το κατάλληλο αρχείο κανόνων. Η προεπιλεγμένη θέση είναι το /etc/pf.conf. Αν το δικό σας αρχείο κανόνων του PF βρίσκεται κάπου αλλού, βάλτε την καταχώριση pf_rules="/path/pf.rules" στο αρχείο ρυθμίσεων /etc/rc.conf για να καθορίσετε τη θέση. Από το &os; 7.0 και μετά, το υπόδειγμα του pf.conf το οποίο βρίσκονταν στον κατάλογο /etc/, μεταφέρθηκε στον κατάλογο /usr/share/examples/pf/. Στις εκδόσεις του &os; πριν από την 7.0, υπήρχε από προεπιλογή ένα αρχείο /etc/pf.conf. Το άρθρωμα PF μπορεί επίσης να φορτωθεί χειροκίνητα από την γραμμή εντολών: &prompt.root; kldload pf.ko Το άρθρωμα του πυρήνα έχει δημιουργηθεί με ενεργοποιημένο το &man.pflog.4; και υποστηρίζει έτσι δυνατότητα καταγραφής. Αν χρειάζεστε κάποιες από τις επιπλέον δυνατότητες του PF, θα χρειαστεί να μεταγλωττίσετε την υποστήριξη του PF απευθείας μέσα στον πυρήνα. Επιλογές του PF για τον Πυρήνα kernel options device pf kernel options device pflog kernel options device pfsync Αν και δεν είναι απαραίτητο να μεταγλωττίσετε την υποστήριξη PF μέσα στον πυρήνα του &os;, ίσως να θέλετε να χρησιμοποιήσετε ένα από τα προχωρημένα χαρακτηριστικά του PF το οποίο δεν περιλαμβάνεται στο άρθρωμα του πυρήνα: το &man.pfsync.4;. Πρόκειται για μια ψευδο-συσκευή η οποία αποκαλύπτει συγκεκριμένες αλλαγές στον πίνακα καταστάσεων που χρησιμοποιείται από το PF. Μπορεί να συνδυαστεί με το &man.carp.4; για να δημιουργηθούν με το PF firewalls με δυνατότητα αυτόματης αλλαγής σε περίπτωση αποτυχίας (failover). Περισσότερες πληροφορίες σχετικά με το CARP μπορείτε να βρείτε στο του Εγχειριδίου. Μπορείτε να δείτε όλες τις επιλογές πυρήνα για το PF στο αρχείο /usr/src/sys/conf/NOTES. Οι επιλογές φαίνονται επίσης παρακάτω: device pf device pflog device pfsync Η επιλογή device pf ενεργοποιεί την υποστήριξη για το firewall Packet Filter (&man.pf.4;). Η επιλογή device pflog ενεργοποιεί την προαιρετική ψευδο-δικτυακή συσκευή &man.pflog.4; που μπορεί να χρησιμοποιηθεί για την καταγραφή της κίνησης σε ένα &man.bpf.4; descriptor. Ο δαίμονας &man.pflogd.8; μπορεί να αποθηκεύσει την καταγραφή αυτή στο σκληρό δίσκο. Η επιλογή device pfsync ενεργοποιεί την προαιρετική ψευδό-δικτυακή συσκευή &man.pfsync.4; η οποία χρησιμοποιείται για να ανιχνεύει αλλαγές κατάστασης. Επιλογές στο rc.conf Το PF και το &man.pflog.4; μπορούν να ρυθμιστούν κατά την εκκίνηση με τις παρακάτω καταχωρίσεις στο &man.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 Δημιουργία Κανόνων Φιλτραρίσματος Το PF διαβάζει τις ρυθμίσεις του από το &man.pf.conf.5; (η προεπιλεγμένη τοποθεσία είναι στο /etc/pf.conf) και τροποποιεί, απορρίπτει ή αποδέχεται πακέτα σύμφωνα με τους κανόνες και τους ορισμούς που περιέχονται σε αυτό. Η εγκατάσταση του &os; περιλαμβάνει αρκετά υποδείγματα αρχείων ρύθμισης, στην τοποθεσία /usr/share/examples/pf/. Παρακαλούμε να διαβάσετε το PF FAQ για πλήρη ανάλυση των κανόνων του PF. Καθώς διαβάζετε το PF FAQ, να έχετε υπόψη σας ότι διαφορετικές εκδόσεις του &os; περιέχουν διαφορετικές εκδόσεις του PF: &os; 5.X — Το PF είναι στην έκδοση που υπάρχει στο OpenBSD 3.5 &os; 6.X — Το PF είναι στην έκδοση που υπάρχει στο OpenBSD 3.7 &os; 7.X — Το PF είναι στην έκδοση που υπάρχει στο OpenBSD 4.1 Η &a.pf; είναι ένα καλό μέρος για να κάνετε ερωτήσεις σχετικές με τη ρύθμιση και τη λειτουργία του PF firewall. Μη ξεχάσετε να ελέγξετε τα αρχεία της λίστας πριν ξεκινήσετε τις ερωτήσεις! Δουλεύοντας με το PF Χρησιμοποιήστε το &man.pfctl.8; για να ελέγξετε το PF. Παρακάτω θα βρείτε κάποιες χρήσιμες εντολές (βεβαιωθείτε ότι έχετε διαβάσει τη σελίδα manual του &man.pfctl.8; για να δείτε όλες τις διαθέσιμες επιλογές): Εντολή Σκοπός pfctl Ενεργοποίηση του PF pfctl Απενεργοποίηση του PF pfctl all /etc/pf.conf Διαγραφή όλων των κανόνων (nat, filter, state, table, κ.λ.π.) και εκ νέου ανάγνωση από το αρχείο /etc/pf.conf pfctl [ rules | nat | state ] Εκτύπωση αναφοράς σχετικά με τους κανόνες του φίλτρου, του NAT, ή του πίνακα κατάστασης pfctl /etc/pf.conf Ελέγχει το /etc/pf.conf για λάθη, αλλά δεν φορτώνει τους κανόνες Ενεργοποίηση του <acronym>ALTQ</acronym> Το ALTQ διατίθεται μόνο αν μεταγλωττίσετε απευθείας την υποστήριξη του μέσα στον πυρήνα του &os;. Το ALTQ δεν υποστηρίζεται από όλα τα προγράμματα οδήγησης καρτών δικτύου. Παρακαλούμε δείτε τη σελίδα manual του &man.altq.4; για τη λίστα των οδηγών που υποστηρίζονται στην έκδοση του &os; που διαθέτετε. Οι παρακάτω επιλογές του πυρήνα ενεργοποιούν το 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 δείτε: . Η γραμμή options ALTQ_PRIQ ενεργοποιεί το Priority Queuing (PRIQ). Το PRIQ πάντοτε περνάει πρώτα την κίνηση με τη μεγαλύτερη προτεραιότητα. Η γραμμή options ALTQ_NOPCC ενεργοποιεί την υποστήριξη SMP για το ALTQ. Η επιλογή αυτή απαιτείται σε συστήματα SMP. Το IPFILTER (IPF) Firewall firewall IPFILTER Ο συγγραφέας του IPFILTER είναι ο Darren Reed. Το IPFILTER δεν εξαρτάται από το λειτουργικό σύστημα: είναι μια εφαρμογή ανοικτού κώδικα που έχει μεταφερθεί στο &os;, το NetBSD, το OpenBSD, το &sunos;, το HP/UX και το &solaris;. Το IPFILTER είναι υπό διαρκή και ενεργή ανάπτυξη και συντήρηση, και κυκλοφορούν τακτικά οι νέες εκδόσεις του. Το IPFILTER είναι ένα firewall και μηχανισμός NAT που λειτουργεί στον πυρήνα και μπορεί να ελέγχεται και να παρακολουθείται από προγράμματα χρήστη. Οι κανόνες του firewall μπορούν να τίθενται σε ισχύ ή να διαγράφονται μέσω του βοηθητικού προγράμματος &man.ipf.8;. Οι κανόνες για το NAT μπορούν να τίθενται σε ισχύ ή να διαγράφονται μέσω του βοηθητικού προγράμματος &man.ipnat.1;. Το βοηθητικό πρόγραμμα &man.ipfstat.8; μπορεί να εκτυπώσει στατιστικά εκτέλεσης για το τμήμα του IPFILTER που εκτελείται στον πυρήνα. Το πρόγραμμα &man.ipmon.8; μπορεί να καταγράψει τις ενέργειες του IPFILTER στο αρχεία καταγραφής συμβάντων του συστήματος. Το IPF γράφηκε αρχικά χρησιμοποιώντας μια λογική επεξεργασίας κανόνων του τύπου ο τελευταίο κανόνας που ταιριάζει, είναι και ο νικητής και χρησιμοποιούσε μόνο κανόνες τύπου stateless. Με την πάροδο του χρόνου, το IPF βελτιώθηκε για να περιλαμβάνει την επιλογή quick και την επιλογή keep state για stateful κανόνες. Οι επιλογές αυτές εκσυγχρόνισαν δραματικά τη λογική επεξεργασίας των κανόνων. Η επίσημη τεκμηρίωση του IPF καλύπτει μόνο τις παλιές παραμέτρους ρύθμισης και επεξεργασίας των κανόνων. Οι σύγχρονες λειτουργίες καλύπτονται μόνο ως πρόσθετες επιλογές, και έτσι δεν τονίζονται αρκετά τα πλεονεκτήματα τους στη δημιουργία ενός πολύ καλύτερου και ασφαλέστερου firewall. Οι οδηγίες που περιέχονται σε αυτή την ενότητα, βασίζονται στη χρήση κανόνων που περιέχουν την επιλογή quick καθώς και την stateful επιλογή keep state. Αυτό είναι και το βασικό πλαίσιο λειτουργιών για την δημιουργία του σετ κανόνων ενός inclusive firewall. Για λεπτομέρειες σχετικά με τον παλιότερο τρόπο επεξεργασίας των κανόνων, δείτε: και . Μπορείτε να δείτε το IPF FAQ στην τοποθεσία . Μπορείτε να βρείτε τις παλαιότερες δημοσιεύσεις τις λίστας ταχυδρομείου του IPFILTER στο . Παρέχεται δυνατότητα αναζήτησης. Ενεργοποιώντας το IPF IPFILTER enabling Το IPF περιλαμβάνεται στη βασική εγκατάσταση του &os; ως άρθρωμα το οποίο μπορεί να φορτωθεί χωριστά. Το σύστημα θα φορτώσει δυναμικά το άρθρωμα του IPF αν υπάρχει η καταχώριση ipfilter_enable="YES" στο αρχείο /etc/rc.conf. Το άρθρωμα έχει δημιουργηθεί με ενεργοποιημένη την δυνατότητα καταγραφής και με την επιλογή default pass all. Για να αλλάξετε αυτή την προεπιλογή σε block all, μπορείτε απλώς να προσθέσετε τον κανόνα απόρριψης (block all) στο τέλος των κανόνων σας. Δεν χρειάζεται να μεταγλωττίσετε την επιλογή IPF στο πυρήνα του &os; για το σκοπό αυτό. Επιλογές για τον Πυρήνα kernel options IPFILTER kernel options IPFILTER_LOG kernel options IPFILTER_DEFAULT_BLOCK IPFILTER kernel options Δεν είναι υποχρεωτικό να μεταγλωττίσετε τις παρακάτω επιλογές στον πυρήνα του &os; για να ενεργοποιήσετε το IPF. Η παρουσίαση τους εδώ είναι καθαρά ενημερωτική. Αν μεταγλωττίσετε το IPF απευθείας στον πυρήνα, δεν θα χρησιμοποιηθεί ποτέ το αντίστοιχο άρθρωμα. Στο αρχείο /usr/src/sys/conf/NOTES θα βρείτε παραδείγματα καταχωρίσεων IPF για το αρχείο ρύθμισης του πυρήνα. Οι επιλογές αυτές φαίνονται επίσης παρακάτω: options IPFILTER options IPFILTER_LOG options IPFILTER_DEFAULT_BLOCK Η επιλογή options IPFILTER ενεργοποιεί την υποστήριξη για το IPFILTER firewall. Η επιλογή options IPFILTER_LOG ενεργοποιεί την υποστήριξη καταγραφής του IPF, η οποία γράφει στην ψευδο-συσκευή καταγραφής πακέτων ipl για κάθε κανόνα που περιλαμβάνει την επιλογή log. Η επιλογή options IPFILTER_DEFAULT_BLOCK αλλάζει την προεπιλεγμένη συμπεριφορά, ώστε κάθε πακέτο που δεν ταιριάζει με κάποιο κανόνα pass του firewall, να απορρίπτεται αυτόματα. Οι παραπάνω επιλογές θα ενεργοποιηθούν μόνο αφού μεταγλωττίσετε και εγκαταστήσετε ένα προσαρμοσμένο πυρήνα που να τις περιλαμβάνει. Διαθέσιμες Επιλογές για το rc.conf Χρειάζεστε τις παρακάτω καταχωρίσεις στο /etc/rc.conf για να ενεργοποιήσετε το IPF κατά την εκκίνηση του υπολογιστή: ipfilter_enable="YES" # Start ipf firewall ipfilter_rules="/etc/ipf.rules" # loads rules definition text file ipmon_enable="YES" # Start IP monitor log ipmon_flags="-Ds" # D = start as daemon # s = log to syslog # v = log tcp window, ack, seq # n = map IP & port to names Αν πίσω από αυτό το firewall υπάρχει κάποιο LAN που χρησιμοποιεί δεσμευμένες ιδιωτικές διευθύνσεις, θα χρειαστεί να προσθέσετε τις παρακάτω καταχωρίσεις για να ενεργοποιήσετε τη λειτουργία NAT: gateway_enable="YES" # Enable as LAN gateway ipnat_enable="YES" # Start ipnat function ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat IPF ipf Η εντολή &man.ipf.8; χρησιμοποιείται για να φορτώσει το αρχείο των κανόνων. Φυσιολογικά, θα δημιουργήσετε ένα αρχείο με τους δικούς σας προσαρμοσμένους κανόνες και θα αντικαταστήσετε με αυτό εξ'ολοκλήρου τους ενσωματωμένους κανόνες του firewall: &prompt.root; ipf -Fa -f /etc/ipf.rules Η επιλογή αδειάζει τους κανόνες από τους εσωτερικούς πίνακες του firewall. Η επιλογή καθορίζει το αρχείο των κανόνων που θα φορτωθεί. Αυτό σας δίνει την δυνατότητα να αλλάξετε το αρχείο κανόνων σας, να εκτελέσετε την εντολή IPF που αναφέραμε παραπάνω, και να ανανεώσετε με αυτό τον τρόπο τους κανόνες στο firewall που εκτελείται ήδη με καινούργιους, χωρίς να χρειαστεί να επανεκκινήσετε το σύστημα σας. Η μέθοδος αυτή είναι πολύ βολική για να δοκιμάσετε νέους κανόνες, καθώς μπορεί να επαναληφθεί όσες φορές θέλετε. Δείτε τη σελίδα manual του &man.ipf.8; για λεπτομέρειες σχετικά με τις υπόλοιπες επιλογές που μπορείτε να χρησιμοποιήσετε με την εντολή αυτή. Η εντολή &man.ipf.8; αναμένει ένα απλό αρχείο κειμένου ως αρχείο κανόνων. Δεν θα δεχθεί αρχείο κανόνων γραμμένο ως script με συμβολικές αντικαταστάσεις. Υπάρχει ωστόσο τρόπος να γράψετε κανόνες IPF που να χρησιμοποιούν την ισχύ των συμβολικών αντικαταστάσεων. Για περισσότερες πληροφορίες, δείτε το . IPFSTAT ipfstat IPFILTER statistics Η προεπιλεγμένη συμπεριφορά του &man.ipfstat.8; είναι να ανακτά και να απεικονίζει το σύνολο των στατιστικών που συγκεντρώθηκαν ως αποτέλεσμα της εφαρμογής των κανόνων του χρήστη στα πακέτα που εισέρχονται και εξέρχονται από το firewall, από τη στιγμή της τελευταίας του εκκίνησης ή από τον τελευταίο τους μηδενισμό μέσω της εντολής ipf -Z. Δείτε τη σελίδα manual &man.ipfstat.8; για λεπτομέρειες. Η προεπιλεγμένη έξοδος της εντολής &man.ipfstat.8; θα μοιάζει με την παρακάτω: input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0 output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0 input packets logged: blocked 99286 passed 0 output packets logged: blocked 0 passed 0 packets logged: input 0 output 0 log failures: input 3898 output 0 fragment state(in): kept 0 lost 0 fragment state(out): kept 0 lost 0 packet state(in): kept 169364 lost 0 packet state(out): kept 431395 lost 0 ICMP replies: 0 TCP RSTs sent: 0 Result cache hits(in): 1215208 (out): 1098963 IN Pullups succeeded: 2 failed: 0 OUT Pullups succeeded: 0 failed: 0 Fastroute successes: 0 failures: 0 TCP cksum fails(in): 0 (out): 0 Packet log flags set: (0) Όταν χρησιμοποιηθεί η επιλογή για τα εισερχόμενα ή η επιλογή για τα εξερχόμενα πακέτα, η εντολή θα ανακτήσει και θα απεικονίσει την αντίστοιχη λίστα κανόνων που είναι εγκατεστημένη και χρησιμοποιείται από τον πυρήνα τη δεδομένη στιγμή. Η εντολή ipfstat -in δείχνει ένα αριθμημένο πίνακα κανόνων για εισερχόμενα πακέτα. Η εντολή ipfstat -on δείχνει ένα αριθμημένο πίνακα κανόνων για εξερχόμενα πακέτα. Η έξοδος θα μοιάζει με την παρακάτω: @1 pass out on xl0 from any to any @2 block out on dc0 from any to any @3 pass out quick on dc0 proto tcp/udp from any to any keep state Η εντολή ipfstat -ih δείχνει τον πίνακα κανόνων για τα εισερχόμενα πακέτα, τοποθετώντας μπροστά από τον κάθε κανόνα ένα αριθμό που δείχνει πόσες φορές έχει χρησιμοποιηθεί. Η εντολή ipfstat -oh δείχνει τον πίνακα κανόνων για τα εξερχόμενα πακέτα, τοποθετώντας μπροστά από τον κάθε κανόνα ένα αριθμό που δείχνει πόσες φορές έχει χρησιμοποιηθεί. Η έξοδος θα μοιάζει με την παρακάτω: 2451423 pass out on xl0 from any to any 354727 block out on dc0 from any to any 430918 pass out quick on dc0 proto tcp/udp from any to any keep state Μια από τις πιο σημαντικές λειτουργίες της εντολής ipfstat είναι η επιλογή η οποία απεικονίζει τον πίνακα καταστάσεων, με τρόπο όμοιο με αυτό που χρησιμοποιεί η εντολή &man.top.1; για να δείξει τον πίνακα διεργασιών που εκτελούνται στο &os;. Όταν το firewall σας δέχεται επίθεση, η λειτουργία αυτή σας δίνει την δυνατότητα να αναγνωρίσετε και να εστιάσετε στα ίδια τα πακέτα που την αποτελούν. Οι προαιρετικές υπο-επιλογές σας δίνουν την δυνατότητα να επιλέξετε το IP αφετηρίας ή προορισμού, την θύρα, ή το πρωτόκολλο το οποίο θέλετε να παρακολουθήσετε σε πραγματικό χρόνο. Δείτε τη σελίδα manual του &man.ipfstat.8; για περισσότερες λεπτομέρειες. IPMON ipmon IPFILTER logging Για να λειτουργήσει σωστά η εντολή ipmon, θα πρέπει να ενεργοποιηθεί η επιλογή IPFILTER_LOG στον πυρήνα. Η εντολή αυτή διαθέτει δύο διαφορετικούς τρόπους λειτουργίας. Ο προεπιλεγμένος κανονικός τρόπος λειτουργίας ενεργοποιείται όταν η εντολή χρησιμοποιείται χωρίς την επιλογή . Η εντολή μπορεί να χρησιμοποιηθεί σε λειτουργία δαίμονα όταν επιθυμείτε να έχετε ένα συνεχόμενο αρχείο καταγραφής ώστε να μπορείτε να εξετάσετε τις προηγούμενες εγγραφές. Αυτός είναι και ο τρόπος με τον οποίο έχει ρυθμιστεί να συνεργάζεται το &os; με το IPFILTER. Το &os; έχει ενσωματωμένη δυνατότητα εναλλαγής αρχείων καταγραφής. Για αυτό το λόγο, είναι καλύτερο η καταγραφή να γίνεται μέσω του &man.syslogd.8; παρά σε ένα συνηθισμένο αρχείο. Από προεπιλογή, η ρύθμιση ipmon_flags στο αρχείο rc.conf χρησιμοποιεί τις επιλογές : ipmon_flags="-Ds" # D = start as daemon # s = log to syslog # v = log tcp window, ack, seq # n = map IP & port to names Τα πλεονεκτήματα της καταγραφής είναι προφανή. Παρέχει την δυνατότητα επισκόπησης πληροφοριών όπως τα πακέτα που απορρίφθηκαν, τις διευθύνσεις από τις οποίες λήφθηκαν, και τον προορισμό τους. Έχετε έτσι ένα σημαντικό πλεονέκτημα όταν προσπαθείτε να αναγνωρίσετε ένα εισβολέα. Ακόμα και όταν ενεργοποιήσετε την δυνατότητα καταγραφής, το IPF δεν θα καταγράψει τίποτα αν δεν έχει γίνει η αντίστοιχη ρύθμιση στους κανόνες. Ο διαχειριστής του firewall αποφασίζει για ποιους κανόνες του σετ θέλει να ενεργοποιήσει την καταγραφή, και προσθέτει σε αυτούς την λέξη log. Φυσιολογικά, η καταγραφή ενεργοποιείται μόνο σε κανόνες που απορρίπτουν πακέτα. Είναι πολύ συνηθισμένο να περιλαμβάνεται ένας κανόνας στο τέλος του συνόλου, που να απορρίπτει από προεπιλογή όλα τα πακέτα που φτάνουν μέχρι εκεί (default deny). Με τον τρόπο αυτό μπορείτε να δείτε όλα τα πακέτα που δεν ταίριαξαν με κανένα κανόνα του σετ. Καταγραφή του IPMON Το syslogd χρησιμοποιεί τη δική του ειδική μέθοδο για το διαχωρισμό των δεδομένων καταγραφής. Διαθέτει ειδικές ομαδοποιήσεις που ονομάζονται facility και level. Όταν το IPMON χρησιμοποιείται με την επιλογή , χρησιμοποιεί το security ως όνομα facility. Όλα τα δεδομένα που καταγράφονται από το IPMON καταλήγουν στο security. Αν το επιθυμείτε, μπορείτε να χρησιμοποιήσετε τα παρακάτω επίπεδα για περαιτέρω διαχωρισμό των δεδομένων καταγραφής: LOG_INFO - packets logged using the "log" keyword as the action rather than pass or block. LOG_NOTICE - packets logged which are also passed LOG_WARNING - packets logged which are also blocked LOG_ERR - packets which have been logged and which can be considered short Για να ρυθμίσετε το IPFILTER να καταγράφει όλα τα δεδομένα στο /var/log/ipfilter.log, θα χρειαστεί να δημιουργήσετε από πριν το αρχείο. Αυτό μπορεί να γίνει με την παρακάτω εντολή: &prompt.root; touch /var/log/ipfilter.log Η λειτουργία του &man.syslogd.8; μπορεί να ρυθμιστεί με καταχωρίσεις στο αρχείο /etc/syslog.conf. Το αρχείο syslog.conf προσφέρει σημαντική ευελιξία στον τρόπο με τον οποίο το syslog αντιμετωπίζει τα μηνύματα συστήματος που προέρχονται από εφαρμογές όπως το IPF. Προσθέστε την παρακάτω καταχώριση στο αρχείο /etc/syslog.conf: security.* /var/log/ipfilter.log Το security.* σημαίνει ότι θα γίνεται καταγραφή όλων των μηνυμάτων αυτού του τύπου στην τοποθεσία που έχει οριστεί. Για να ενεργοποιήσετε τις αλλαγές στο /etc/syslog.conf θα πρέπει να επανεκκινήσετε το μηχάνημα ή να αναγκάσετε το &man.syslogd.8; να ξαναδιαβάσει το /etc/syslog.conf, εκτελώντας την εντολή /etc/rc.d/syslogd reload Μην ξεχάσετε να τροποποιήσετε το /etc/newsyslog.conf ώστε να εναλλάσσει το αρχείο καταγραφής που δημιουργήσατε παραπάνω. Η Μορφή των Μηνυμάτων Καταγραφής Τα μηνύματα που παράγονται από την ipmon αποτελούνται από πεδία δεδομένων που χωρίζονται από λευκό διάστημα. Τα πεδία που είναι κοινά σε όλα τα μηνύματα, είναι τα παρακάτω: Η ημερομηνία παραλαβής του πακέτου Η ώρα παραλαβής του πακέτου. Έχει την μορφή HH:MM:SS.F, η οποία υποδηλώνει ώρες, λεπτά, δευτερόλεπτα και κλάσματα δευτερολέπτου (τα οποία μπορεί να είναι πολλά δεκαδικά ψηφία). Το όνομα της διεπαφής στην οποία έγινε η επεξεργασία του πακέτου π.χ. dc0. Ο αριθμός ομάδας και ο αύξων αριθμός του κανόνα, π.χ. @0:17. Μπορείτε να δείτε τα παρακάτω με την εντολή ipfstat -in: Το είδος της ενέργειας: p αν το πακέτο πέρασε, b αν το πακέτο απορρίφθηκε, S για σύντομο πακέτο, n αν δεν ταίριαξε με κανένα κανόνα, L για κανόνα με καταγραφή. Η σειρά προτεραιότητας στην απεικόνιση των παραπάνω, είναι S, p, b, n, L. Το κεφαλαίο P ή το B σημαίνουν ότι η καταγραφή του πακέτου έγινε λόγω κάποιας γενικής ρύθμισης καταγραφής και όχι εξαιτίας κάποιου κανόνα. Οι διευθύνσεις. Πρόκειται στην πραγματικότητα για τρία πεδία: τη διεύθυνση και τη θύρα αφετηρίας (χωρίζονται με κόμμα), το σύμβολο -> και την διεύθυνση και θύρα προορισμού, π.χ. 209.53.17.22,80 -> 198.73.220.17,1722. Το PR ακολουθούμενο από το όνομα ή τον αριθμό του πρωτοκόλλου, π.χ. PR tcp. Το len ακολουθούμενο από το μήκος της επικεφαλίδας και το συνολικό μήκος του πακέτου, π.χ. len 20 40. Αν πρόκειται για πακέτο TCP, θα υπάρχει ένα επιπλέον πεδίο το οποίο θα ξεκινάει με μια παύλα και θα ακολουθείται από γράμματα τα οποία αντιστοιχούν στις επιλογές (flags) που έχουν τεθεί. Δείτε τη σελίδα manual &man.ipmon.8; για τη λίστα των γραμμάτων και των αντίστοιχων flags. Αν πρόκειται για πακέτο ICMP, θα υπάρχουν δύο πεδία στο τέλος, το πρώτο θα είναι πάντα ICMP και το επόμενο θα είναι ο τύπος του μηνύματος και του υπό-μηνύματος ICMP, χωρισμένα με μια κάθετο, π.χ. ICMP 3/3 για ένα μήνυμα μη προσβάσιμης θύρας (port unreachable). Δημιουργία Script Κανόνων με Συμβολική Υποκατάσταση Ορισμένοι έμπειροι χρήστες του IPF δημιουργούν ένα αρχείο κανόνων το οποίο μπορεί να εκτελεστεί ως script με δυνατότητα συμβολικής υποκατάστασης. Το βασικό όφελος του παραπάνω, είναι ότι χρειάζεται να αλλάξετε μόνο την τιμή που σχετίζεται με το συμβολικό όνομα και όταν το script εκτελεστεί, η τιμή θα υποκατασταθεί σε όλους τους κανόνες που περιέχουν το όνομα αυτό. Καθώς πρόκειται για script, μπορείτε να χρησιμοποιήσετε συμβολική υποκατάσταση για να κωδικοποιήσετε συχνά χρησιμοποιούμενες τιμές και να τις υποκαθιστάτε σε πολλαπλούς κανόνες. Αυτό φαίνεται και στο παράδειγμα που ακολουθεί. Η σύνταξη του script που χρησιμοποιείται εδώ, είναι συμβατή με τα κελύφη &man.sh.1;, &man.csh.1;, και &man.tcsh.1;. Τα πεδία στα οποία γίνεται συμβολική υποκατάσταση προσημειώνονται με το σήμα του δολαρίου: $. Τα συμβολικά πεδία δεν έχουν την προσημείωση με το $. Η τιμή που θα χρησιμοποιηθεί στο συμβολικό πεδίο, θα πρέπει να εσωκλείεται σε διπλά εισαγωγικά ("). Ξεκινήστε το αρχείο των κανόνων σας με κάτι αντίστοιχο με το παρακάτω: ############# Start of IPF rules script ######################## oif="dc0" # name of the outbound interface odns="192.0.2.11" # ISP's DNS server IP address myip="192.0.2.7" # my static IP address from ISP ks="keep state" fks="flags S keep state" # You can choose between building /etc/ipf.rules file # from this script or running this script "as is". # # Uncomment only one line and comment out another. # # 1) This can be used for building /etc/ipf.rules: #cat > /etc/ipf.rules << EOF # # 2) This can be used to run script "as is": /sbin/ipf -Fa -f - << EOF # Allow out access to my ISP's Domain name server. pass out quick on $oif proto tcp from any to $odns port = 53 $fks pass out quick on $oif proto udp from any to $odns port = 53 $ks # Allow out non-secure standard www function pass out quick on $oif proto tcp from $myip to any port = 80 $fks # Allow out secure www function https over TLS SSL pass out quick on $oif proto tcp from $myip to any port = 443 $fks EOF ################## End of IPF rules script ######################## Αυτό είναι όλο. Στο παραπάνω παράδειγμα δεν είναι σημαντικοί οι κανόνες, αλλά ο τρόπος με τον οποίο λειτουργούν και παίρνουν τιμές τα πεδία υποκατάστασης. Αν το παραπάνω παράδειγμα βρίσκονταν σε ένα αρχείο με το όνομα /etc/ipf.rules.script, θα μπορούσατε να επαναφορτώσετε αυτούς τους κανόνες με την παρακάτω εντολή: &prompt.root; sh /etc/ipf.rules.script Υπάρχει ένα πρόβλημα όταν χρησιμοποιούνται αρχεία κανόνων με ενσωματωμένους συμβολισμούς: Το IPF δεν καταλαβαίνει τη συμβολική υποκατάσταση, και δεν μπορεί να διαβάσει αυτά τα scripts άμεσα. Ένα τέτοιο script μπορεί να χρησιμοποιηθεί με ένα από τους δύο παρακάτω τρόπους: Αφαιρέστε το σχόλιο από τη γραμμή που ξεκινάει με cat, και μετατρέψτε σε σχόλιο τη γραμμή που ξεκινάει με /sbin/ipf. Τοποθετήστε το ipfilter_enable="YES" στο αρχείο /etc/rc.conf όπως συνήθως, και εκτελέστε το script μια φορά μετά από κάθε αλλαγή για να δημιουργήσετε ή να ενημερώσετε το /etc/ipf.rules. Απενεργοποιήστε το IPFILTER στα scripts εκκίνησης του συστήματος, προσθέτοντας την καταχώριση ipfilter_enable="NO" (πρόκειται για την προεπιλεγμένη τιμή) στο αρχείο /etc/rc.conf. Προσθέστε ένα script όπως το παρακάτω στον κατάλογο εκκίνησης /usr/local/etc/rc.d/. Το script θα πρέπει να έχει ένα προφανές όνομα, όπως ipf.loadrules.sh. Η επέκταση .sh είναι υποχρεωτική. #!/bin/sh sh /etc/ipf.rules.script Οι άδειες σε αυτό το αρχείο, θα πρέπει να επιτρέπουν ανάγνωση, εγγραφή και εκτέλεση για τον χρήστη root. &prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh Οι κανόνες του IPF θα φορτώνονται πλέον κατά την εκκίνηση του συστήματος σας. Το Σύνολο Κανόνων του IPF Ως σύνολο κανόνων στο IPF, ορίζουμε μια ομάδα κανόνων που έχουν γραφεί για να επιτρέπουν ή να απορρίπτουν πακέτα ανάλογα με τις τιμές που περιέχονται σε αυτά. Η διπλής κατεύθυνσης ανταλλαγή πακέτων μεταξύ υπολογιστών αποτελεί μια συνεδρία. Το σύνολο κανόνων του firewall επεξεργάζεται τόσο τα πακέτα που έρχονται από το Internet, όσο και τα πακέτα που παράγονται από το σύστημα ως απάντηση σε αυτά. Κάθε υπηρεσία TCP/IP (π.χ. telnet, www, mail, κ.λ.π.) καθορίζεται από το πρωτόκολλο και την προνομιακή (privileged) θύρα που χρησιμοποιεί για να δέχεται αιτήματα εξυπηρέτησης. Τα πακέτα που προορίζονται για μια συγκεκριμένη υπηρεσία, ξεκινούν από τη διεύθυνση αφετηρίας χρησιμοποιώντας μια μη-προνομιακή θύρα και καταλήγουν στη συγκεκριμένη θύρα υπηρεσίας στον προορισμό. Όλες οι παραπάνω παράμετροι (θύρες και διευθύνσεις) μπορούν να χρησιμοποιηθούν ως κριτήρια επιλογής για την δημιουργία κανόνων που επιτρέπουν ή εμποδίζουν την πρόσβαση σε υπηρεσίες. IPFILTER rule processing order Το IPF γράφτηκε αρχικά χρησιμοποιώντας μια λογική επεξεργασίας κανόνων του τύπου ο τελευταίος κανόνας που ταιριάζει, είναι ο νικητής και χρησιμοποιούσε μόνο κανόνες stateless. Με την πάροδο του χρόνου, το IPF ενισχύθηκε με την επιλογή quick και με δυνατότητα αποθήκευσης κατάστασης μέσω της επιλογής keep state. Με τον τρόπο αυτό, εκσυγχρονίστηκε δραματικά η λογική επεξεργασίας των κανόνων. Οι οδηγίες που περιέχονται σε αυτή την ενότητα βασίζονται στη χρήση κανόνων που περιέχουν την επιλογή quick και την επιλογή keep state για τη διατήρηση της κατάστασης. Αυτές είναι και οι βασικές λειτουργίες για την κωδικοποίηση του συνόλου κανόνων ενός inclusive firewall. Όταν δουλεύετε με τους κανόνες του firewall, θα πρέπει να είστε πολύ προσεκτικοί. Αν βάλετε λανθασμένες ρυθμίσεις, μπορεί να κλειδωθείτε έξω από τον εξυπηρετητή σας. Για να είστε ασφαλείς, είναι προτιμότερο να κάνετε τις αρχικές σας ρυθμίσεις από την τοπική κονσόλα, παρά μέσω απομακρυσμένης σύνδεσης (π.χ. μέσω ssh). Συντακτικό Κανόνων IPFILTER rule syntax Το συντακτικό των κανόνων που παρουσιάζουμε εδώ, έχει απλοποιηθεί ώστε να απεικονίζει τη σύγχρονη stateful υλοποίηση και τη λογική του τύπου ο πρώτος κανόνας που ταιριάζει είναι και ο νικητής. Για την περιγραφή του παλιότερου τρόπου λειτουργίας, διαβάστε τη σελίδα manual του &man.ipf.8;. Ο χαρακτήρας # χρησιμοποιείται για να επισημάνει την αρχή ενός σχολίου, και μπορεί να εμφανίζεται στο τέλος μιας γραμμής κανόνα ή στη δική του γραμμή. Οι κενές γραμμές αγνοούνται. Οι κανόνες περιέχουν λέξεις-κλειδιά. Οι λέξεις αυτές θα πρέπει να κωδικοποιηθούν με συγκεκριμένη σειρά από τα αριστερά προς τα δεξιά της γραμμής. Οι λέξεις-κλειδιά φαίνονται παρακάτω με έντονα γράμματα. Μερικές λέξεις έχουν υπο-επιλογές οι οποίες μπορεί να είναι επίσης λέξεις-κλειδιά και να περιλαμβάνουν επίσης περισσότερες υπο-επιλογές. Κάθε μια από τις επικεφαλίδες στο παράδειγμα που φαίνεται παρακάτω έχει μια κεφαλίδα με έντονα γράμματα η οποία επεξηγεί το περιεχόμενο της. ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG STATEFUL ACTION = block | pass IN-OUT = in | out OPTIONS = log | quick | on interface-name SELECTION = proto value | source/destination IP | port = number | flags flag-value PROTO = tcp/udp | udp | tcp | icmp SRC_ADD,DST_ADDR = all | from object to object OBJECT = IP address | any PORT_NUM = port number TCP_FLAG = S STATEFUL = keep state ACTION Η ενέργεια (action) δείχνει τι πρέπει να γίνει με το πακέτο αν ταιριάζει με τον κανόνα του φίλτρου. Κάθε κανόνας πρέπει να διαθέτει μια ενέργεια. Οι ενέργειες που αναγνωρίζονται, φαίνονται παρακάτω: Το block δείχνει ότι το πακέτο θα πρέπει να απορριφθεί αν ταιριάζει με τις παραμέτρους επιλογής του κανόνα. Το pass δείχνει ότι το πακέτο θα πρέπει να εξέλθει από το firewall, αν ταιριάζει με τις παραμέτρους επιλογής του κανόνα. IN-OUT Κάθε κανόνας του φίλτρου πρέπει υποχρεωτικά να διευκρινίζει με σαφήνεια αν αναφέρεται στην είσοδο ή την έξοδο πακέτων. Η επόμενη λέξη-κλειδί πρέπει να είναι in ή out και αν δεν υπάρχει, ο κανόνας θα αποτύχει κατά το συντακτικό έλεγχο. Το in σημαίνει ότι ο κανόνας θα εφαρμοστεί σε ένα εισερχόμενο πακέτο το οποίο μόλις λήφθηκε στη διεπαφή που συνδέεται με το Διαδίκτυο. Το out σημαίνει ότι ο κανόνας θα εφαρμοστεί σε ένα πακέτο που προορίζεται για έξοδο μέσω της διεπαφής που συνδέεται με το Διαδίκτυο. OPTIONS Οι παρακάτω επιλογές πρέπει να χρησιμοποιηθούν με τη σειρά που φαίνονται εδώ. Το log δείχνει ότι η επικεφαλίδα του πακέτου θα γραφεί στο αρχείο καταγραφής του ipl (όπως περιγράφεται στην ενότητα LOGGING που ακολουθεί) αν οι παράμετροι της επιλογής ταιριάζουν με το πακέτο. To quick δείχνει ότι αν οι παράμετροι της επιλογής ταιριάζουν με το πακέτο, ο συγκεκριμένος κανόνας θα είναι και ο τελευταίος κανόνας που θα ελεγχθεί. Η επιλογή αυτή είναι υποχρεωτική για τη σύγχρονη λογική επεξεργασίας πακέτων. Το on δείχνει το όνομα της διεπαφής που θα ενσωματωθεί στις παραμέτρους επιλογής. Τα ονόματα των διεπαφών φαίνονται όταν εκτελείται η εντολή &man.ifconfig.8;. Χρησιμοποιώντας την επιλογή αυτή, ο κανόνας θα ελεγχθεί μόνο αν το πακέτο διέρχεται μέσω της συγκεκριμένης διεπαφής και προς τη συγκεκριμένη κατεύθυνση (εισερχόμενα/εξερχόμενα). Η επιλογή αυτή είναι υποχρεωτική για την σύγχρονη λογική επεξεργασίας των κανόνων. Όταν γίνεται καταγραφή ενός πακέτου, οι επικεφαλίδες γράφονται στην ψευδο-συσκευή καταγραφής πακέτων IPL. Μετά την εντολή log, μπορούν να χρησιμοποιηθούν οι παρακάτω παράμετροι (με τη σειρά που φαίνονται): Το body δείχνει ότι θα γίνει καταγραφή των πρώτων 128 bytes των περιεχομένων του πακέτου, που βρίσκονται αμέσως μετά την επικεφαλίδα. Η επιλογή first συνίσταται να χρησιμοποιηθεί αν η επιλογή log χρησιμοποιείται σε συνδυασμό με την keep state. Με τον τρόπο αυτό γίνεται καταγραφή μόνο του πρώτου πακέτου (με το οποίο ξεκίνησε η επικοινωνία), και όχι όλων των υπολοίπων τα οποία ταιριάζουν με την πληροφορία keep state. SELECTION Οι λέξεις κλειδιά που περιγράφονται σε αυτή την ενότητα, χρησιμοποιούνται για να περιγράψουν ποιες ιδιότητες του πακέτου θα διερευνηθούν για να καθοριστεί αν ταιριάζει ή όχι με τους κανόνες. Μια λέξη-κλειδί ορίζει το κεντρικό θέμα και ακολουθείται από άλλες λέξεις που ορίζουν τις ακριβείς επιλογές. Πρέπει πάντοτε να επιλέγεται μια από αυτές τις λέξεις. Παρέχονται οι παρακάτω ιδιότητες γενικής χρήσης οι οποίες πρέπει να χρησιμοποιηθούν με αυτή τη σειρά: PROTO Το proto είναι η βασική λέξη, και πρέπει να γράφεται μαζί με κάποια αντίστοιχη τιμή για περαιτέρω επιλογή. Η τιμή επιτρέπει το ταίριασμα με ένα συγκεκριμένο πρωτόκολλο. Είναι υποχρεωτικό να χρησιμοποιηθεί για να λειτουργεί η σύγχρονη λογική επεξεργασίας των κανόνων. Τα ονόματα πρωτοκόλλων που αναγνωρίζονται και μπορούν να χρησιμοποιηθούν, είναι τα tcp/udp | udp | tcp | icmp ή οποιαδήποτε άλλα εμφανίζονται στο /etc/protocols. Μπορείτε να χρησιμοποιήσετε το ειδικό όνομα tcp/udp το οποίο ταιριάζει είτε με πακέτο TCP είτε με UDP. Η ειδική αυτή ονομασία προστέθηκε ώστε να αποφεύγονται διπλοί, αλλά κατά τα άλλα όμοιοι, κανόνες. SRC_ADDR/DST_ADDR Η λέξη all είναι ουσιαστικά συνώνυμη με την φράση from any to any χωρίς να υπάρχουν άλλες παράμετροι για το ταίριασμα. Όταν χρησιμοποιείται το from src to dst, οι λέξεις from και to δηλώνουν διευθύνσεις IP που θα χρησιμοποιηθούν για το ταίριασμα. Οι κανόνες πρέπει να καθορίζουν τις παραμέτρους τόσο της αφετηρίας όσο και του προορισμού. Η λέξη any έχει την ειδική ιδιότητα να ταιριάζει με οποιαδήποτε διεύθυνση IP. Παραδείγματα χρήσης: from any to any ή from 0.0.0.0/0 to any ή from any to 0.0.0.0/0 ή from 0.0.0.0 to any ή from any to 0.0.0.0. Δεν υπάρχει τρόπος να περιγραφούν περιοχές IP διευθύνσεων που δεν μπορούν να εκφραστούν εύκολα με τη μορφή αριθμών χωρισμένων με τελείες / μάσκας υποδικτύου. Μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα net-mgmt/ipcalc για διευκόλυνση σας στους υπολογισμούς. Δείτε την δικτυακή τοποθεσία του προγράμματος για περισσότερες πληροφορίες: . PORT Το ταίριασμα με κάποια συγκεκριμένη θύρα αφετηρίας ή/και προορισμού (αν υπάρχει) εφαρμόζεται μόνο σε πακέτα TCP και UDP. Κατά την δημιουργία συγκρίσεων με θύρες, μπορείτε είτε να χρησιμοποιήσετε τον αριθμό της θύρας, είτε το όνομα της αντίστοιχης υπηρεσίας από το αρχείο /etc/services. Όταν η θύρα εμφανίζεται ως τμήμα του αντικειμένου from, το ταίριασμα θα γίνει με την θύρα της αφετηρίας. Όταν εμφανίζεται ως τμήμα του αντικειμένου to, το ταίριασμα θα γίνει με τη θύρα προορισμού. Για να λειτουργεί η σύγχρονη λογική ταιριάσματος κανόνων, θα πρέπει οπωσδήποτε να υπάρχει η επιλογή θύρας στο αντικείμενο to. Παράδειγμα χρήσης: from any to any port = 80 Οι συγκρίσεις που αναφέρονται σε μια μόνο θύρα, μπορούν να γίνουν με πολλούς διαφορετικούς τρόπους, χρησιμοποιώντας διαφορετικούς τελεστές σύγκρισης. Είναι επίσης δυνατόν να καθοριστούν ολόκληρες περιοχές από θύρες. port "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge". Για να καθορίσετε περιοχές θυρών, χρησιμοποιήστε port "<>" | "><" Μετά τις παραμέτρους για το ταίριασμα της αφετηρίας και του προορισμού, οι παρακάτω δύο παράμετροι είναι υποχρεωτικές για να λειτουργεί η σύγχρονη λογική επεξεργασίας των κανόνων. <acronym>TCP</acronym>_FLAG Τα flags είναι ενεργά μόνο στο φιλτράρισμα του πρωτοκόλλου TCP. Το κάθε γράμμα αντιπροσωπεύει ένα πιθανό flag το για το οποίο γίνεται ανίχνευση στην επικεφαλίδα του πακέτου TCP. Η σύγχρονη λογική επεξεργασίας των κανόνων, χρησιμοποιεί την παράμετρο flags S για την αναγνώριση της έναρξης μια συνεδρίας tcp. STATEFUL Σε ένα κανόνα που επιτρέπει (pass) το πέρασμα των πακέτων, η επιλογή keep state δείχνει ότι θα πρέπει να ενεργοποιείται η λειτουργία stateful filtering όταν το πακέτο ταιριάζει με τα κριτήρια επιλογής. Η επιλογή αυτή είναι υποχρεωτική για τη λειτουργία της σύγχρονης λογικής επεξεργασίας κανόνων. Φιλτράρισμα με Διατήρηση της Κατάστασης (stateful) IPFILTER stateful filtering Το stateful φιλτράρισμα, αντιμετωπίζει την κίνηση του δικτύου ως μιας διπλής κατεύθυνσης ανταλλαγή πακέτων τα οποία δημιουργούν μια συνεδρία. Όταν ενεργοποιηθεί, η διατήρηση της κατάστασης (keep-state) δημιουργεί δυναμικά εσωτερικούς κανόνες για κάθε πακέτο το οποίο ανταλλάσσεται κατά τη διάρκεια αυτής της συνεδρίας. Έχει επίσης τη δυνατότητα να διερευνήσει αν ακολουθούνται οι έγκυροι κανόνες ανταλλαγής μηνυμάτων μεταξύ του αποστολέα και του παραλήπτη. Οποιαδήποτε πακέτα δεν ταιριάζουν με το πρότυπο αυτής της επικοινωνίας, απορρίπτονται ως ψεύτικα. Η διατήρηση της κατάστασης επιτρέπει επίσης να περάσουν τα πακέτα ICMP που σχετίζονται με μια συνεδρία TCP ή UDP. Έτσι, αν ληφθούν πακέτα ICMP τύπου 3 code 4 ως απάντηση κατά τη διάρκεια της επίσκεψης σας σε μια ιστοσελίδα, (η οποία επιτρέπεται από τον αντίστοιχο κανόνα εξερχομένων), θα τους επιτραπεί η είσοδος. Οποιοδήποτε πακέτο για το οποίο το IPF είναι σίγουρο ότι πρόκειται για τμήμα μιας ενεργής συνεδρίας, θα περάσει ακόμα και αν είναι διαφορετικό πρωτόκολλο. Αυτό που συμβαίνει είναι το παρακάτω: Τα πακέτα που προορίζονται να εξέλθουν μέσω της διεπαφής που συνδέεται στο Internet, ελέγχονται αρχικά σύμφωνα με το δυναμικό πίνακα καταστάσεων. Αν το πακέτο ταιριάζει με το επόμενο που αναμένεται σε μια ενεργή συνεδρία, εξέρχεται από το firewall και ταυτόχρονα ενημερώνεται η κατάσταση της συγκεκριμένης συνεδρίας στον παραπάνω δυναμικό πίνακα. Τα υπόλοιπα πακέτα (που δεν ταιριάζουν με κάποια συνεδρία σε εξέλιξη) ελέγχονται σύμφωνα με το σύνολο κανόνων για τα εξερχόμενα πακέτα. Τα πακέτα που έρχονται από τη διεπαφή που είναι συνδεμένη με το Internet, ελέγχονται αρχικά μέσω του δυναμικού πίνακα καταστάσεων. Αν το πακέτο ταιριάζει με το επόμενο που αναμένεται σε μια ενεργή συνεδρία, εξέρχεται από το firewall και ταυτόχρονα ενημερώνεται η κατάσταση της συγκεκριμένης συνεδρίας στον παραπάνω πίνακα. Τα υπόλοιπα πακέτα (που δεν ταιριάζουν με κάποια συνεδρία σε εξέλιξη) ελέγχονται σύμφωνα με το σύνολο κανόνων για τα εισερχόμενα πακέτα. Όταν η επικοινωνία ολοκληρωθεί, διαγράφεται από τον δυναμικό πίνακα καταστάσεων. Το stateful φιλτράρισμα επιτρέπει να εστιάσουμε την προσοχή μας στην αποδοχή ή απόρριψη των νέων συνδέσεων. Αν επιτραπεί μια νέα συνεδρία, όλα τα υπόλοιπα πακέτα της θα επιτρέπονται αυτόματα, ενώ τυχόν ψεύτικα πακέτα θα απορρίπτονται επίσης αυτόματα. Το stateful φιλτράρισμα διαθέτει μια σειρά από προχωρημένες ικανότητες διερεύνησης των πακέτων, με δυνατότητα να αμύνεται σε πολλές διαφορετικές μεθόδους που χρησιμοποιούν οι επιτιθέμενοι. Παράδειγμα Συνόλου Κανόνων για ένα Inclusive Firewall Το παρακάτω σύνολο κανόνων δίνεται ως παράδειγμα για να φτιάξετε ένα ιδιαίτερα ασφαλές inclusive firewall. Ένα inclusive firewall επιτρέπει το πέρασμα μόνο των υπηρεσιών που ταιριάζουν με τους κανόνες που έχει για αποδοχή πακέτων, και απορρίπτει όλα τα υπόλοιπα. Τα firewalls που προστατεύουν άλλα μηχανήματα (τα οποία καλούνται και network firewalls) θα πρέπει να διαθέτουν τουλάχιστον δύο διεπαφές. Η μια διεπαφή συνδέεται με το τοπικό δίκτυο (LAN) το οποίο θεωρείται έμπιστο, και η άλλη με το δημόσιο Internet. Εναλλακτικά, ένα firewall μπορεί να προστατεύει μόνο το σύστημα στο οποίο εκτελείται—αυτό καλείται host based firewall και είναι κατάλληλο ιδιαίτερα για εξυπηρετητές που λειτουργούν σε μη έμπιστα δίκτυα. Όλα τα συστήματα τύπου &unix;, συμπεριλαμβανομένου και του &os;, έχουν σχεδιαστεί να χρησιμοποιούν την διεπαφή lo0 και την IP διεύθυνση 127.0.0.1 για εσωτερική επικοινωνία μέσα στο ίδιο το λειτουργικό σύστημα. Το firewall πρέπει να περιέχει κανόνες που να επιτρέπουν την ελεύθερη και χωρίς περιορισμούς κίνηση των ειδικών αυτών εσωτερικών πακέτων. Οι κανόνες που εξουσιοδοτούν την πρόσβαση προς το Internet, ορίζονται στην διεπαφή του δικτύου που συνδέεται σε αυτό. Οι κανόνες αυτοί ελέγχουν τόσο την εισερχόμενη όσο και την εξερχόμενη κίνηση στο Internet. Η διεπαφή αυτή μπορεί να είναι η tun0 που χρησιμοποιείται στο PPP χρήστη, ή ακόμα και η κάρτα δικτύου που συνδέεται σε ένα DSL router ή modem. Σε περίπτωση που μια ή περισσότερες κάρτες δικτύου συνδέονται σε εσωτερικά ιδιωτικά δίκτυα πίσω από το firewall, θα πρέπει να υπάρχουν οι αντίστοιχοι κανόνες που να επιτρέπουν την ελεύθερη διακίνηση των πακέτων ανάμεσα στις διεπαφές αυτές ή/και στο Internet. Οι κανόνες πρέπει να οργανώνονται σε τρεις κύριες ενότητες: αρχικά όλες οι διεπαφές στις οποίες επιτρέπεται η ελεύθερη διακίνηση δεδομένων, έπειτα η διεπαφή από την οποία εξέρχονται τα πακέτα προς το δημόσιο δίκτυο (Internet) και τέλος η διεπαφή από την οποία λαμβάνονται πακέτα από το Internet. Σε κάθε μια από τις ενότητες των διεπαφών που συνδέονται στο Internet, πρέπει να τοποθετούνται πρώτοι οι κανόνες που ταιριάζουν συχνότερα με την αντίστοιχη κίνηση. Ο τελευταίος κανόνας της ενότητας θα πρέπει να απορρίπτει και να καταγράφει όλα τα πακέτα της συγκεκριμένης διεπαφής/κατεύθυνσης. Η ενότητα των Εξερχομένων (Outbound) στο ακόλουθο σύνολο κανόνων, περιέχει μόνο κανόνες τύπου pass οι οποίοι επιτρέπουν (μέσω κατάλληλων τιμών στις παραμέτρους τους) σε συγκεκριμένες υπηρεσίες να αποκτήσουν πρόσβαση στο Internet. Όλοι οι κανόνες διαθέτουν τις επιλογές quick, on, proto, port και keep state. Οι κανόνες proto tcp περιλαμβάνουν την επιλογή flag ώστε να αναγνωρίζουν την αίτηση έναρξης της συνεδρίας και να ενεργοποιούν τη λειτουργία διατήρησης της κατάστασης (stateful). Στην ενότητα των εισερχόμενων πακέτων (Inbound) που φαίνεται παρακάτω, πρώτοι εμφανίζονται οι κανόνες που χρησιμοποιούνται για την απόρριψη των ανεπιθύμητων πακέτων. Αυτό γίνεται για δύο διαφορετικούς λόγους. Ο πρώτος είναι ότι τα κακόβουλα πακέτα μπορεί εν μέρει να ταιριάζουν με κάποια χαρακτηριστικά της έγκυρης κίνησης. Τα πακέτα αυτά θα πρέπει να απορριφθούν, αντί να γίνουν δεκτά από κάποιο επόμενο κανόνα allow. Ο δεύτερος είναι ότι μπορείτε να απορρίψετε συγκεκριμένα πακέτα τα οποία γνωρίζετε ότι δεν είναι έγκυρα, αλλά σας είναι αδιάφορη η καταγραφή τους. Με τον τρόπο αυτό εμποδίζεται η λήψη και καταγραφή τους από τον τελευταίο κανόνα. Ο τελευταίος κανόνας τυπικά απορρίπτει και καταγράφει όλα τα πακέτα που έφτασαν μέχρι αυτόν. Ο κανόνας αυτός χρησιμοποιείται για την παροχή νομικών αποδείξεων σε περίπτωση που κινήσετε δικαστική διαδικασία κατά ατόμων που προέβησαν σε επιθέσεις στο σύστημα σας. Θα πρέπει επίσης να εξασφαλίσετε ότι το σύστημα σας δεν θα δώσει καμιά απάντηση σε κανένα από τα ανεπιθύμητα πακέτα. Τα πακέτα αυτά θα πρέπει να απορριφθούν και να εξαφανιστούν. Με τον τρόπο αυτό, ο επιτιθέμενος δεν έχει καμιά γνώση αν τα πακέτα του έφτασαν μέχρι το σύστημα σας. Όσο λιγότερα μπορούν να μάθουν οι επιτιθέμενοι σχετικά με το σύστημα σας, τόσο περισσότερο χρόνο θα χρειαστεί να επενδύσουν για να καταφέρουν να σας βλάψουν στα αλήθεια. Οι κανόνες με την επιλογή log first καταγράφουν το συμβάν μόνο την πρώτη φορά που ενεργοποιούνται. Η επιλογή αυτή περιλαμβάνεται στον κανόνα nmap OS fingerprint στο παράδειγμα που φαίνεται παρακάτω. Το βοηθητικό πρόγραμμα security/nmap χρησιμοποιείται συχνά από κακόβουλα άτομα, που προσπαθούν με αυτό τον τρόπο να αναγνωρίσουν το λειτουργικό σύστημα του μηχανήματος σας. Κάθε φορά που υπάρχει καταγραφή από κάποιο κανόνα με την επιλογή log first, θα πρέπει να εκτελέσετε την εντολή ipfstat -hio για να δείτε πόσες φορές έχει ενεργοποιηθεί αυτός ο κανόνας συνολικά. Έτσι θα ξέρετε αν π.χ. σας κάνουν επίθεση υπερχείλισης (flood). Δείτε το αρχείο /etc/services για να βρείτε αριθμούς θυρών που δεν αναγνωρίζετε. Μπορείτε επίσης να επισκεφθείτε την τοποθεσία και να κάνετε αναζήτηση για τη συγκεκριμένη θύρα, ώστε να δείτε ποια υπηρεσία εξυπηρετεί. Δείτε την επόμενη τοποθεσία για τις θύρες που χρησιμοποιούνται συνήθως από κακόβουλα προγράμματα (trojans): . Το παρακάτω σύνολο κανόνων είναι αρκετά πλήρες και πολύ ασφαλές. Δημιουργεί firewall τύπου inclusive, και έχει δοκιμαστεί σε πραγματικές συνθήκες λειτουργίας. Μπορεί να εξυπηρετήσει το ίδιο καλά και το δικό σας σύστημα. Απλώς μετατρέψτε σε σχόλιο τους κανόνες για τις υπηρεσίες που δεν θέλετε να ενεργοποιήσετε. Για να αποφύγετε την καταγραφή ανεπιθύμητων μηνυμάτων, απλώς προσθέστε ένα αντίστοιχο κανόνα απόρριψης (block) στην ενότητα των εισερχομένων (inbound). Θα πρέπει να αλλάξετε το όνομα της διεπαφής dc0 του παραδείγματος, με το πραγματικό όνομα της κάρτας δικτύου που συνδέει το σύστημα σας με το Internet. Για όσους χρησιμοποιούν το PPP χρήστη, το όνομα θα είναι tun0. Προσθέστε τις ακόλουθες καταχωρίσεις στο αρχείο /etc/ipf.rules: ################################################################# # No restrictions on Inside LAN Interface for private network # Not needed unless you have LAN ################################################################# #pass out quick on xl0 all #pass in quick on xl0 all ################################################################# # No restrictions on Loopback Interface ################################################################# pass in quick on lo0 all pass out quick on lo0 all ################################################################# # Interface facing Public Internet (Outbound Section) # Match session start requests originating from behind the # firewall on the private network # or from this gateway server destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # xxx must be the IP address of your ISP's DNS. # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state pass out quick on dc0 proto udp from any to xxx port = 53 keep state # Allow out access to my ISP's DHCP server for cable or DSL networks. # This rule is not needed for 'user ppp' type connection to the # public Internet, so you can delete this whole group. # Use the following rule and check log for IP address. # Then put IP address in commented out rule & delete first rule pass out log quick on dc0 proto udp from any to any port = 67 keep state #pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state # Allow out non-secure standard www function pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow out secure www function https over TLS SSL pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state # Allow out send & get email function pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state # Allow out Time pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state # Allow out nntp news pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state # Allow out gateway & LAN users' non-secure FTP ( both passive & active modes) # This function uses the IPNAT built in FTP proxy function coded in # the nat rules file to make this single rule function correctly. # If you want to use the pkg_add command to install application packages # on your gateway system you need this rule. pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state # Allow out ssh/sftp/scp (telnet/rlogin/FTP replacements) # This function is using SSH (secure shell) pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state # Allow out insecure Telnet pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow out FreeBSD CVSup function pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state # Allow out ping to public Internet pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state # Allow out whois from LAN to public Internet pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state # Block and log only the first occurrence of everything # else that's trying to get out. # This rule implements the default block block out log first quick on dc0 all ################################################################# # Interface facing Public Internet (Inbound Section) # Match packets originating from the public Internet # destined for this gateway server or the private network. ################################################################# # Block all inbound traffic from non-routable or reserved address spaces block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP block in quick on dc0 from 127.0.0.0/8 to any #loopback block in quick on dc0 from 0.0.0.0/8 to any #loopback block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast ##### Block a bunch of different nasty things. ############ # That I do not want to see in the log # Block frags block in quick on dc0 all with frags # Block short tcp packets block in quick on dc0 proto tcp all with short # block source routed packets block in quick on dc0 all with opt lsrr block in quick on dc0 all with opt ssrr # Block nmap OS fingerprint attempts # Log first occurrence of these so I can get their IP address block in log first quick on dc0 proto tcp from any to any flags FUP # Block anything with special options block in quick on dc0 all with ipopts # Block public pings block in quick on dc0 proto icmp all icmp-type 8 # Block ident block in quick on dc0 proto tcp from any to any port = 113 # Block all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 block in log first quick on dc0 proto tcp/udp from any to any port = 137 block in log first quick on dc0 proto tcp/udp from any to any port = 138 block in log first quick on dc0 proto tcp/udp from any to any port = 139 block in log first quick on dc0 proto tcp/udp from any to any port = 81 # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP's DHCP server as it's the only # authorized source to send this packet type. Only necessary for # cable or DSL configurations. This rule is not needed for # 'user ppp' type connection to the public Internet. # This is the same IP address you captured and # used in the outbound section. pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state # Allow in standard www function because I have apache server pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID/PW passed over public Internet as clear text. # Delete this sample group if you do not have telnet server enabled. #pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow in secure FTP, Telnet, and SCP from public Internet # This function is using SSH (secure shell) pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state # Block and log only first occurrence of all remaining traffic # coming into the firewall. The logging of only the first # occurrence avoids filling up disk with Denial of Service logs. # This rule implements the default block. block in log first quick on dc0 all ################### End of rules file ##################################### <acronym>NAT</acronym> NAT IP masquerading NAT network address translation NAT Το NAT είναι ακρωνύμιο των λέξεων Network Address Translation ή Μετάφραση Διευθύνσεων Δικτύου. Για όσους είναι εξοικειωμένοι με το &linux;, βασίζεται στην αρχή του IP Masquerading. Στην πραγματικότητα το NAT και το IP Masquerading είναι το ίδιο πράγμα. Μια από τις πολλές δυνατότητες που παρέχει η λειτουργία NAT του IPF, είναι και η δυνατότητα να έχουμε ένα ιδιωτικό τοπικό δίκτυο (LAN) πίσω από το firewall το οποίο να μοιράζεται μια μοναδική δημόσια διεύθυνση IP στο Internet. Ίσως να αναρωτηθείτε γιατί να θέλει κάποιος να το κάνει αυτό. Οι ISPs συνήθως αποδίδουν δυναμικές διευθύνσεις σε μη εταιρικούς πελάτες. Αυτό ουσιαστικά σημαίνει ότι η διεύθυνση IP που αποδίδεται στο μηχάνημα σας, μπορεί να είναι διαφορετική κάθε φορά που κάνετε κλήση για να συνδεθείτε. Για τους χρήστες DSL modem και router, η αλλαγή διεύθυνσης πραγματοποιείται κάθε φορά που ενεργοποιείται το modem. Η διεύθυνση IP που σας αποδίδεται από τον ISP σας, είναι αυτή με την οποία φαίνεστε στο Internet. Ας υποθέσουμε τώρα ότι έχετε πέντε PC στο σπίτι σας, και χρειάζεστε σε όλα σύνδεση Internet. Κανονικά, θα έπρεπε να πληρώσετε τον ISP σας χωριστό λογαριασμό για κάθε PC και να διαθέτετε πέντε γραμμές τηλεφώνου. Με το NAT, χρειάζεστε μόνο ένα λογαριασμό με τον ISP σας. Μπορείτε απλώς να συνδέσετε τα τέσσερα PC σε ένα διανομέα ή switch στο οποίο θα συνδέσετε επίσης και το &os; μηχάνημα σας. Το μηχάνημα αυτό θα ενεργεί ως πύλη του τοπικού σας δικτύου για το Internet. Το NAT θα μεταφράσει αυτόματα τις ιδιωτικές διευθύνσεις IP του κάθε μηχανήματος στην μοναδική δημόσια IP διεύθυνση που έχετε, καθώς το πακέτο φεύγει από το firewall και κατευθύνεται προς το Internet. Εκτελεί επίσης και την αντίστροφη μετάφραση για τα πακέτα που επιστρέφουν. Υπάρχει μια ειδική περιοχή διευθύνσεων IP που έχουν παραχωρηθεί για χρήση σε τοπικά δίκτυα με NAT. Σύμφωνα με το RFC 1918, μπορείτε να χρησιμοποιήσετε για αυτό το σκοπό τις παρακάτω περιοχές, οι οποίες δεν δρομολογούνται ποτέ απευθείας στο δημόσιο Internet: Αρχικό IP 10.0.0.0 - Τελικό IP 10.255.255.255 Αρχικό IP 172.16.0.0 - Τελικό IP 172.31.255.255 Αρχικό IP 192.168.0.0 - Τελικό IP 192.168.255.255 IP<acronym>NAT</acronym> NAT and IPFILTER ipnat Οι κανόνες του NAT φορτώνονται με τη χρήση της εντολής ipnat. Τυπικά, οι κανόνες του NAT αποθηκεύονται στο αρχείο /etc/ipnat.rules. Δείτε τη σελίδα manual του &man.ipnat.1; για λεπτομέρειες. Για να αλλάξετε τους κανόνες του NAT καθώς αυτό εκτελείται, τροποποιήστε το αρχείο που τους περιέχει, και εκτελέστε την εντολή ipnat με την παράμετρο για να διαγράψετε τους εσωτερικούς κανόνες του NAT και να αδειάσετε όλες τις ενεργές καταχωρίσεις του πίνακα μεταφράσεων. Για να φορτώσετε τους κανόνες του NAT από την αρχή, εκτελέστε μια εντολή όπως την παρακάτω: &prompt.root; ipnat -CF -f /etc/ipnat.rules Για να δείτε κάποια στατιστικά σχετικά με το NAT, χρησιμοποιήστε την παρακάτω εντολή: &prompt.root; ipnat -s Για να δείτε μια λίστα με τις τρέχουσες καταχωρίσεις του πίνακα NAT, χρησιμοποιήστε την παρακάτω εντολή: &prompt.root; ipnat -l Για να ενεργοποιήσετε την λεπτομερή απεικόνιση μηνυμάτων και να δείτε πληροφορίες που σχετίζονται με την επεξεργασία των κανόνων και τους ενεργούς κανόνες και καταχωρίσεις στον πίνακα, γράψτε: &prompt.root; ipnat -v Κανόνες του IP<acronym>NAT</acronym> Οι κανόνες του NAT είναι αρκετά ευέλικτοι, και διαθέτουν πλήθος δυνατοτήτων ώστε να καλύπτουν τις ανάγκες των οικιακών αλλά και των επιχειρησιακών χρηστών. Η σύνταξη των κανόνων που παρουσιάζεται εδώ, έχει απλοποιηθεί ώστε να συμβαδίζει με τη συνήθη χρήση σε μη-εμπορικά περιβάλλοντα. Για πιο πλήρη περιγραφή της σύνταξης, δείτε τη σελίδα manual του &man.ipnat.5;. Η σύνταξη ενός κανόνα NAT μοιάζει με την παρακάτω: map IF LAN_IP_RANGE -> PUBLIC_ADDRESS Ο κανόνας ξεκινάει με τη λέξη map. Αντικαταστήστε το IF με την εξωτερική διεπαφή (τη κάρτα δικτύου που συνδέεται στο Internet). Η παράμετρος LAN_IP_RANGE είναι η περιοχή διευθύνσεων που χρησιμοποιείται από το εσωτερικό σας δίκτυο. Στην πραγματικότητα θα μοιάζει με κάτι σαν το 192.168.1.0/24. Η παράμετρος PUBLIC_ADDRESS μπορεί να είναι είτε η εξωτερική IP διεύθυνση, είτε η ειδική λέξη 0/32, η οποία σημαίνει ότι θα χρησιμοποιηθεί η IP διεύθυνση που έχει αποδοθεί στο IF. Πως λειτουργεί το <acronym>NAT</acronym> Ένα πακέτο φτάνει στο firewall από το LAN με προορισμό το Internet. Περνάει διαμέσου των κανόνων φιλτραρίσματος εξερχομένων, όπου γίνεται η επεξεργασία του από το NAT. Οι κανόνες εφαρμόζονται από τον πρώτο και προς τα κάτω, και κερδίζει ο πρώτος που ταιριάζει. Ο έλεγχος γίνεται με βάση τη διεπαφή από την οποία λήφθηκε το πακέτο και τη διεύθυνση IP από την οποία προέρχεται. Όταν το όνομα της διεπαφής ενός πακέτου ταιριάζει με κάποιο κανόνα του NAT, η διεύθυνση IP της αφετηρίας (που προέρχεται από το ιδιωτικό δίκτυο) ελέγχεται για να εξακριβωθεί αν ταιριάζει με την περιοχή διευθύνσεων που καθορίζεται στην αριστερά πλευρά του συμβόλου (βέλος) του κανόνα NAT. Αν ταιριάζει, η διεύθυνση του πακέτου ξαναγράφεται, χρησιμοποιώντας τη δημόσια διεύθυνση IP η οποία παρέχεται από το 0/32. Το NAT δημιουργεί μια καταχώριση στον εσωτερικό του πίνακα, έτσι ώστε όταν επιστρέψει η απάντηση από το Internet, να μπορεί να αντιστοιχηθεί ξανά στην αρχική ιδιωτική διεύθυνση IP και να περάσει έπειτα από τους κανόνες του φίλτρου για περαιτέρω επεξεργασία. Ενεργοποιώντας το IP<acronym>NAT</acronym> Για να ενεργοποιήσετε το IPNAT, προσθέστε τις παρακάτω γραμμές στο /etc/rc.conf. Για να επιτρέψετε στο μηχάνημα σας να δρομολογεί πακέτα μεταξύ διεπαφών δικτύου: gateway_enable="YES" Για να ξεκινάει αυτόματα το IPNAT σε κάθε εκκίνηση: ipnat_enable="YES" Για να καθορίσετε από που επιθυμείτε να φορτώνονται οι κανόνες του IPNAT: ipnat_rules="/etc/ipnat.rules" Το <acronym>NAT</acronym> σε Ένα Μεγάλο Τοπικό Δίκτυο Για τοπικά δίκτυα με μεγάλο αριθμό υπολογιστών, ή για δίκτυα που διασυνδέουν περισσότερα από ένα LAN, η διαδικασία της μετατροπής όλων αυτών των ιδιωτικών διευθύνσεων σε μια μοναδική δημόσια διεύθυνση, δημιουργεί πρόβλημα κατανομής πόρων, καθώς χρησιμοποιούνται πολλές φορές οι ίδιοι αριθμοί θυρών, οδηγώντας τα PC του δικτύου σε συγκρούσεις. Υπάρχουν δύο τρόποι για να ελαττώσουμε αυτό το πρόβλημα. Ανάθεση των θυρών που θα Χρησιμοποιηθούν Ένα συνηθισμένος κανόνας NAT μοιάζει με τον παρακάτω: map dc0 192.168.1.0/24 -> 0/32 Στον παραπάνω κανόνα, η θύρα αφετηρίας του πακέτου παραμένει αναλλοίωτη καθώς το πακέτο διέρχεται μέσω του IPNAT. Αν προσθέσετε την λέξη-κλειδί portmap, μπορείτε να ρυθμίσετε το IPNAT να χρησιμοποιεί θύρες που ανήκουν σε μια καθορισμένη περιοχή. Για παράδειγμα, ο παρακάτω κανόνας θα οδηγήσει το NAT να τροποποιήσει την θύρα της αφετηρίας, ώστε να είναι μέσα στην περιοχή που φαίνεται: map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000 Μπορούμε επίσης να απλοποιήσουμε ακόμα περισσότερο τη διαδικασία χρησιμοποιώντας τη λέξη auto ώστε το IPNAT να καθορίζει από μόνο του ποιες θύρες είναι διαθέσιμες για χρήση: map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto Χρησιμοποιώντας ένα Απόθεμα Δυναμικών Διευθύνσεων Σε ένα πολύ μεγάλο τοπικό δίκτυο, αργά ή γρήγορα φτάνουμε στο σημείο που μια μοναδική δημόσια διεύθυνση δεν επαρκεί για να καλύψει τόσες πολλές ιδιωτικές. Αν υπάρχει διαθέσιμο ένα εύρος δημοσίων διευθύνσεων, μπορούν να χρησιμοποιηθούν ως απόθεμα (pool), επιτρέποντας στην IPNAT να επιλέξει μια από αυτές καθώς αντιστοιχεί τα πακέτα κατά την έξοδο τους προς το δημόσιο δίκτυο. Για παράδειγμα, αντί να αντιστοιχούν όλα τα πακέτα μέσω μιας μοναδικής δημόσιας IP διεύθυνσης όπως παρακάτω: map dc0 192.168.1.0/24 -> 204.134.75.1 μπορούμε να χρησιμοποιήσουμε ένα εύρος IP διευθύνσεων, είτε με τη χρήση μάσκας δικτύου: map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0 είτε με συμβολισμό CIDR: map dc0 192.168.1.0/24 -> 204.134.75.0/24 Ανακατεύθυνση Θυρών Είναι κοινή πρακτική να εγκαθίστανται υπηρεσίες όπως ο εξυπηρετητής ιστοσελίδων, ταχυδρομείου, βάσης δεδομένων και DNS σε διαφορετικά PC στο τοπικό δίκτυο. Στην περίπτωση αυτή, η κίνηση πακέτων από αυτά τα μηχανήματα εξακολουθεί να χρειάζεται το NAT, αλλά χρειάζεται επίσης να υπάρχει κάποιος τρόπος να κατευθύνεται η εισερχόμενη κίνηση στα σωστά PC του δικτύου. Το IPNAT έχει τις κατάλληλες δυνατότητες για την επίλυση αυτού του προβλήματος. Για παράδειγμα, έστω ότι ένας εξυπηρετητής ιστοσελίδων βρίσκεται στην διεύθυνση LAN 10.0.10.25 και η μοναδική δημόσια IP είναι 20.20.20.5. Ο κανόνας που θα γράφατε θα έμοιαζε με τον παρακάτω: rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80 ή: rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80 ή για ένα εξυπηρετητή DNS με διεύθυνση στο τοπικό δίκτυο 10.0.10.33 ο οποίος πρέπει να δέχεται αναζητήσεις από το δημόσιο δίκτυο: rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp FTP και <acronym>NAT</acronym> Το FTP είναι ένας δεινόσαυρος που έχει απομείνει από την εποχή που το Internet ήταν στα αρχικά του στάδια, όπου τα ερευνητικά εργαστήρια των πανεπιστήμιων ήταν συνδεμένα μεταξύ τους με μισθωμένες γραμμές και οι ερευνητές το χρησιμοποιούσαν για να στέλνουν αρχεία ο ένας στον άλλο. Την εποχή εκείνη, δεν υπήρχαν ανησυχίες σχετικά με την ασφάλεια. Με το πέρασμα του χρόνου, το FTP θάφτηκε στο πίσω μέρος του ταχέως εξελισσόμενου Internet. Δεν εξελίχθηκε ποτέ ώστε να ξεπεράσει προβλήματα ασφάλειας, όπως π.χ. το γεγονός ότι στέλνει το όνομα και τον κωδικό του χρήστη ως απλό κείμενο. Το FTP έχει δυο καταστάσεις λειτουργίας, την ενεργή και την παθητική. Η διαφορά είναι στο πως γίνεται η ανάκτηση του καναλιού δεδομένων. Η παθητική λειτουργία είναι πιο ασφαλής, καθώς το κανάλι δεδομένων αποτελεί το κύριο κανάλι της συνεδρίας. Μπορείτε να βρείτε πολύ καλή περιγραφή του πρωτοκόλλου και των διαφορετικών τρόπων λειτουργίας του, στο . Κανόνες του IP<acronym>NAT</acronym> Το IPNAT διαθέτει μια ειδική επιλογή για διαμεσολάβηση FTP (proxy) η οποία μπορεί να καθοριστεί στον κατάλληλο κανόνα του NAT. Μπορεί να παρακολουθήσει όλα τα εξερχόμενα πακέτα για να ανιχνεύσει την έναρξη μιας ενεργής ή παθητικής συνεδρίας FTP, και να δημιουργήσει δυναμικά προσωρινούς κανόνες στο φίλτρο που να περιέχουν μόνο τον αριθμό της θύρας που χρησιμοποιείται από το κανάλι δεδομένων. Αυτό εξαλείφει το πρόβλημα ασφάλειας που δημιουργείται από το γεγονός ότι διαφορετικά θα χρειαζόταν να ανοιχθεί μια μεγάλη περιοχή θυρών (στην υψηλή περιοχή) στο firewall. Ο παρακάτω κανόνας χειρίζεται όλα τα δεδομένα για το εσωτερικό δίκτυο (LAN): map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp Ο παρακάτω κανόνας χειρίζεται την κίνηση FTP από την πύλη (gateway): map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp Ο παρακάτω κανόνας χειρίζεται όλη την κίνηση από το εσωτερικό LAN που δεν ανήκει στο πρωτόκολλο FTP: map dc0 10.0.10.0/29 -> 0/32 Ο κανόνας χαρτογράφησης του FTP τοποθετείται πριν από τον κανονικό κανόνα χαρτογράφησης. Κάθε πακέτο ελέγχεται αρχικά από τον κανόνα που βρίσκεται στην κορυφή. Αν ταιριάζει στη διεπαφή και στην ιδιωτική διεύθυνση IP και πρόκειται για πακέτο FTP, ο διαμεσολαβητής FTP δημιουργεί προσωρινούς κανόνες στο φίλτρο οι οποίοι επιτρέπουν την εισερχόμενη και εξερχόμενη κίνηση FTP ενώ ταυτόχρονα εκτελούν και την απαραίτητη μετάφραση NAT. Όλα τα πακέτα που δεν ανήκουν σε μετάδοση FTP δεν ταιριάζουν με τον πρώτο κανόνα, έτσι κατευθύνονται στον τρίτο κανόνα, εξετάζονται όσο αφορά τη διεπαφή και το IP από το οποίο προέρχονται, και γίνεται η αντίστοιχη μετάφραση τους από το NAT. Κανόνες Φίλτρου για το IP<acronym>NAT</acronym> Όταν χρησιμοποιείται ο μεσολαβητής FTP, χρειάζεται μόνο ένας κανόνας για το NAT. Χωρίς το μεσολαβητή FTP, χρειάζονται οι παρακάτω τρεις κανόνες: # Allow out LAN PC client FTP to public Internet # Active and passive modes pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state # Allow out passive mode data channel high order port numbers pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state # Active mode let data channel in from FTP server pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state IPFW firewall IPFW Το IPFIREWALL (IPFW) είναι λογισμικό που αναπτύχθηκε για το &os;. Έχει γραφεί και συντηρείται από εθελοντές που ανήκουν στο Project. Χρησιμοποιεί τους κλασικούς κανόνες χωρίς διατήρηση της κατάστασης (stateless) καθώς και μια τεχνική κωδικοποίησης που επιτυγχάνει αυτό που αναφέρεται ως Απλή Stateful Λογική (Simple Stateful Logic). Το υπόδειγμα κανόνων για το IPFW (στα αρχεία /etc/rc.firewall και /etc/rc.firewall6) της τυπικής εγκατάστασης του &os; είναι μάλλον απλό και θα χρειαστεί να κάνετε κάποιες αλλαγές πριν το χρησιμοποιήσετε. Το παράδειγμα δεν χρησιμοποιεί φιλτράρισμα τύπου stateful. Η stateful λειτουργία είναι ευεργετική στις περισσότερες περιπτώσεις, έτσι δεν θα χρησιμοποιήσουμε αυτό το παράδειγμα ως βάση αυτής της ενότητας. Η σύνταξη των κανόνων stateless του IPFW έχει ενισχυθεί με εξελιγμένες δυνατότητες επιλογής οι οποίες συνήθως ξεπερνάνε κατά πολύ τις τυπικές γνώσεις του ατόμου που καλείται να το ρυθμίσει. Το IPFW απευθύνεται στον επαγγελματία χρήστη ή τον τεχνικά προχωρημένο χομπίστα, ο οποίος έχει ανάγκη προχωρημένου φιλτραρίσματος πακέτων. Η πραγματική δύναμη των κανόνων του IPFW αποκαλύπτεται μόνο αν διαθέτετε προχωρημένες γνώσεις σχετικά με το πως διαφορετικά πρωτόκολλα δημιουργούν και χρησιμοποιούν την επικεφαλίδα των πακέτων τους. Τέτοιο επίπεδο επεξηγήσεων είναι πέρα από το σκοπό αυτής της ενότητας του Εγχειριδίου. Το IPFW αποτελείται από επτά εξαρτήματα. Το βασικό εξάρτημα είναι ο επεξεργαστής κανόνων του firewall στον πυρήνα, με ενσωματωμένη τη δυνατότητα καταγραφής. Τα υπόλοιπα εξαρτήματα είναι το σύστημα καταγραφής (logging), ο κανόνας divert ο οποίος ενεργοποιεί τη λειτουργία NAT, καθώς και οι προχωρημένες δυνατότητες ειδικού σκοπού: το σύστημα διαμόρφωσης κίνησης (traffic shaper) dummynet, η δυνατότητα προώθησης μέσω του fwd rule, η δυνατότητα γεφύρωσης (bridge) καθώς και η δυνατότητα απόκρυψης (ipstealth). To IPFW υποστηρίζει τόσο το πρωτόκολλο IPv4 όσο και το IPv6. Ενεργοποιώντας το IPFW IPFW enabling Το IPFW περιλαμβάνεται στην βασική εγκατάσταση του &os; ως άρθρωμα του πυρήνα το οποίο μπορεί να φορτωθεί δυναμικά. Το σύστημα θα φορτώσει δυναμικά το άρθρωμα όταν βρει την καταχώριση firewall_enable="YES" στο αρχείο /etc/rc.conf. Δεν χρειάζεται να μεταγλωττίσετε το IPFW μέσα στον πυρήνα, εκτός αν θέλετε να χρησιμοποιήσετε τις λειτουργίες NAT που παρέχει. Αφού επανεκκινήσετε το σύστημα σας με την καταχώριση firewall_enable="YES" στο rc.conf, θα δείτε με άσπρα έντονα γράμματα το ακόλουθο μήνυμα κατά τη διαδικασία της εκκίνησης: ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled Το άρθρωμα έχει ενσωματωμένη τη δυνατότητα καταγραφής. Για να ενεργοποιήσετε την καταγραφή και να θέσετε το επίπεδο λεπτομέρειας, υπάρχουν κάποιες ρυθμίσεις που μπορείτε να θέσετε στο /etc/sysctl.conf. Προσθέτοντας τις παρακάτω καταχωρίσεις, θα ενεργοποιηθεί η καταγραφή στις επόμενες εκκινήσεις: net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=5 Επιλογές του Πυρήνα kernel options IPFIREWALL kernel options IPFIREWALL_VERBOSE kernel options IPFIREWALL_VERBOSE_LIMIT IPFW kernel options Δεν είναι υποχρεωτικό να ενεργοποιήσετε το IPFW μεταγλωττίζοντας τις παρακάτω επιλογές στον πυρήνα του &os;, εκτός και αν θέλετε να χρησιμοποιήσετε NAT. Ο σκοπός αυτής της παρουσίασης είναι καθαρά ενημερωτικός. options IPFIREWALL Η επιλογή αυτή ενεργοποιεί το IPFW ως μέρος του πυρήνα. options IPFIREWALL_VERBOSE Ενεργοποιεί την καταγραφή των πακέτων που περνούν μέσω του IPFW και περιλαμβάνουν τη λέξη log στον κανόνα τους. options IPFIREWALL_VERBOSE_LIMIT=5 Περιορίζει τον πλήθος των πακέτων που καταγράφονται μέσω του &man.syslogd.8; σε συγκεκριμένο αριθμό ανά καταχώριση. Η ρύθμιση είναι χρήσιμη σε εχθρικά περιβάλλοντα στα οποία είναι επιθυμητή η καταγραφή. Με αυτό τον τρόπο μπορεί να αποφευχθεί μια πιθανή επίθεση με στόχο την υπερχείλιση των αρχείων καταγραφής. kernel options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_DEFAULT_TO_ACCEPT Η επιλογή αυτή αφήνει τα πάντα να περνάνε μέσα από το firewall, το οποίο είναι καλή ιδέα την πρώτη φορά που ρυθμίζετε το firewall σας. kernel options IPDIVERT options IPDIVERT Η επιλογή αυτή ενεργοποιεί τη λειτουργία NAT. Το firewall θα απορρίπτει όλα τα πακέτα που κατευθύνονται από και προς το μηχάνημα, αν δεν περιλάβετε την επιλογή IPFIREWALL_DEFAULT_TO_ACCEPT ή αν δεν ρυθμίσετε ένα κατάλληλο κανόνα που να επιτρέπει αυτές τις συνδέσεις. Επιλογές στο <filename>/etc/rc.conf</filename> Ενεργοποιήστε το firewall: firewall_enable="YES" Για να επιλέξετε ένα από τους προεπιλεγμένους τύπους firewall που υποστηρίζονται από το &os;, διαβάστε το αρχείο /etc/rc.firewall και δημιουργήστε μια εγγραφή όπως την παρακάτω: firewall_type="open" Οι διαθέσιμες τιμές για αυτή τη ρύθμιση είναι: open — επιτρέπει τη διέλευση όλης της κίνησης. client — προστατεύει μόνο το συγκεκριμένο μηχάνημα. simple — προστατεύει ολόκληρο το δίκτυο. closed — απενεργοποιεί εντελώς την κίνηση πακέτων, εκτός από την εσωτερική διεπαφή (loopback). UNKNOWN — απενεργοποιεί την φόρτωση κανόνων του firewall. filename — το πλήρες μονοπάτι του αρχείου που περιέχει τους κανόνες του firewall. Μπορείτε να χρησιμοποιήσετε δύο διαφορετικούς τρόπους για να φορτώσετε προσαρμοσμένους κανόνες στο ipfw firewall. Ο ένας είναι θέτοντας τη μεταβλητή firewall_type στην απόλυτη διαδρομή του αρχείου που περιέχει τους κανόνες του firewall, χωρίς να δώσετε ορίσματα στην γραμμή εντολών για το ίδιο το - &man.ipfw.8;. Ένα απλό παράδειγμα τέτοιου αρχείου κανόνων μπορεί - να είναι το παρακάτω: + &man.ipfw.8;. Το αρχείο κανόνων που φαίνεται παρακάτω, απορρίπτει + όλη την εισερχόμενη και εξερχόμενη κίνηση: - add block in all -add block out all + add deny in +add deny out Από την άλλη μεριά, είναι επίσης δυνατό να θέσετε τη μεταβλητή firewall_script στην απόλυτη διαδρομή ενός εκτελέσιμου script που περιλαμβάνει μια σειρά από εντολές ipfw που θα εκτελεστούν κατά την εκκίνηση. Ένα έγκυρο τέτοιο script το οποίο είναι αντίστοιχο με το αρχείο κανόνων που δείξαμε παραπάνω, είναι το ακόλουθο: #!/bin/sh ipfw -q flush -ipfw add block in all -ipfw add block out all +ipfw add deny in +ipfw add deny out Αν θέσετε την τιμή του firewall_type είτε σε client είτε σε simple, θα πρέπει να ελέγξετε ότι οι προεπιλεγμένοι κανόνες που περιέχονται στο /etc/rc.firewall ταιριάζουν με τις ρυθμίσεις του συγκεκριμένου μηχανήματος. Παρατηρήστε επίσης ότι τα παραδείγματα που χρησιμοποιούνται σε αυτό το κεφάλαιο αναμένουν να να έχετε θέσει τη μεταβλητή firewall_script στην τιμή /etc/ipfw.rules. Ενεργοποιήστε την καταγραφή: firewall_logging="YES" Το μόνο πράγμα που κάνει η μεταβλητή firewall_logging είναι να θέσει την τιμή της μεταβλητής sysctl net.inet.ip.fw.verbose στην τιμή 1 (δείτε το ). Δεν υπάρχει μεταβλητή του rc.conf που να ορίζει περιορισμούς στην καταγραφή, αλλά αυτό μπορεί να ρυθμιστεί μέσω της παραπάνω μεταβλητής sysctl είτε χειροκίνητα, είτε μέσω του αρχείου /etc/sysctl.conf: net.inet.ip.fw.verbose_limit=5 Αν το μηχάνημα σας λειτουργεί ως πύλη (gateway), δηλαδή παρέχει υπηρεσία μετάφρασης διευθύνσεων δικτύου (Network Address Translation, NAT) μέσω του &man.natd.8;, παρακαλούμε να διαβάσετε το για πληροφορίες σχετικά με τις ρυθμίσεις που απαιτούνται στο αρχείο /etc/rc.conf. Η Εντολή IPFW ipfw Η εντολή ipfw είναι ο συνήθης τρόπος για την προσθήκη η διαγραφή κανόνων στους εσωτερικούς ενεργούς κανόνες του firewall, καθώς αυτό εκτελείται. Το πρόβλημα με τη χρήση αυτής της μεθόδου είναι ότι οι αλλαγές χάνονται με τον τερματισμό λειτουργίας του μηχανήματος. Μπορείτε να γράψετε όλους τους κανόνες σας σε ένα αρχείο και να το χρησιμοποιείτε για να τους φορτώνετε στην εκκίνηση. Μπορείτε να χρησιμοποιήσετε το ίδιο αρχείο για να αντικαταστήσετε τους τρέχοντες κανόνες του firewall, την ώρα που αυτό εκτελείται. Αυτός είναι και ο συνιστώμενος τρόπος που χρησιμοποιούμε στα παραδείγματα μας. Η εντολή ipfw είναι επίσης χρήσιμη για να απεικονίζει τους τρέχοντες κανόνες στη κονσόλα σας. Το σύστημα καταγραφής χρήσης της IPFW δημιουργεί αυτόματα ένα μετρητή για κάθε κανόνα, ο οποίος μετράει πόσα πακέτα ταίριαξαν με αυτόν. Κατά τη διάρκεια των δοκιμών, η δυνατότητα να ελέγξετε την τιμή του μετρητή είναι ένας τρόπος για να διαπιστώσετε αν ο κανόνας λειτουργεί κανονικά. Για να δείτε όλους τους κανόνες με τη σειρά: &prompt.root; ipfw list Για να δείτε μια λίστα όλων των κανόνων, μαζί με την ώρα που ενεργοποιήθηκε τελευταία φορά ο κάθε κανόνας, γράψτε: &prompt.root; ipfw -t list Το επόμενο παράδειγμα δείχνει τον αριθμό των πακέτων που ταίριαξαν μαζί με τον αντίστοιχο κανόνα. Η πρώτη στήλη δείχνει τον αριθμό του κανόνα, ακολουθείται από τον αριθμό πακέτων που ταίριαξαν (πρώτα τα εξερχόμενα και μετά τα εισερχόμενα) και τέλος από τον ίδιο τον κανόνα. &prompt.root; ipfw -a list Για να δείτε μια λίστα που να περιλαμβάνει τόσο τους δυναμικούς όσο και τους στατικούς κανόνες: &prompt.root; ipfw -d list Για να δείτε και τους δυναμικούς κανόνες που έχουν λήξει: &prompt.root; ipfw -d -e list Για να μηδενίσετε τους μετρητές: &prompt.root; ipfw zero Για να μηδενίσετε τους μετρητές μόνο για τον κανόνα με τον αριθμό NUM: &prompt.root; ipfw zero NUM Το Σύνολο Κανόνων του IPFW Ως σύνολο κανόνων στο IPFW, ορίζουμε μια ομάδα κανόνων που έχουν γραφεί για να επιτρέπουν ή να απορρίπτουν πακέτα ανάλογα με τις τιμές που περιέχονται σε αυτά. Η διπλής κατεύθυνσης ανταλλαγή πακέτων μεταξύ υπολογιστών αποτελεί μια συνεδρία. Το σύνολο κανόνων του firewall επεξεργάζεται τόσο τα πακέτα που έρχονται από το Internet, όσο και τα πακέτα που παράγονται από το σύστημα ως απάντηση σε αυτά. Κάθε υπηρεσία TCP/IP (π.χ. telnet, www, mail, κ.λ.π.) καθορίζεται από το πρωτόκολλο και την προνομιακή (privileged) θύρα που χρησιμοποιεί για να δέχεται αιτήματα εξυπηρέτησης. Τα πακέτα που προορίζονται για μια συγκεκριμένη υπηρεσία, ξεκινούν από τη διεύθυνση αφετηρίας χρησιμοποιώντας μια μη-προνομιακή θύρα και καταλήγουν στη συγκεκριμένη θύρα υπηρεσίας στον προορισμό. Όλες οι παραπάνω παράμετροι (θύρες και διευθύνσεις) μπορούν να χρησιμοποιηθούν ως κριτήρια επιλογής για την δημιουργία κανόνων που επιτρέπουν ή εμποδίζουν την πρόσβαση σε υπηρεσίες. IPFW rule processing order Όταν ένα πακέτο εισέρχεται στο firewall, συγκρίνεται με βάση τον πρώτο κανόνα. Η σύγκριση συνεχίζεται διαδοχικά με τους υπόλοιπους κανόνες, από τον πρώτο προς τον τελευταίο, με βάση τον αύξοντα αριθμό τους. Όταν το πακέτο ταιριάξει με τις παραμέτρους επιλογής κάποιου κανόνα, εκτελείται η οδηγία που αναφέρεται στο πεδίο ενεργειών του κανόνα αυτού και η αναζήτηση κανόνων για το συγκεκριμένο πακέτο τερματίζεται. Σε αυτή τη μέθοδο αναζήτησης, ο πρώτος κανόνας που ταιριάζει, είναι ο νικητής. Αν το πακέτο δεν ταιριάζει με κανένα από τους κανόνες, θα ληφθεί από τον υποχρεωτικό προεπιλεγμένο κανόνα του IPFW, με αριθμό 65535, ο οποίος εμποδίζει τη διέλευση όλων των πακέτων, και τα απορρίπτει χωρίς να στείλει καμιά απάντηση στον αρχικό αποστολέα τους. Η αναζήτηση συνεχίζεται μετά από κανόνες τύπου count, skipto και tee. Οι οδηγίες που φαίνονται εδώ, βασίζονται στη χρήση κανόνων που περιέχουν τις οδηγίες keep state, limit, in, out και via. Αυτές είναι και οι βασικές λειτουργίες για την δόμηση ενός firewall τύπου inclusive με stateful λειτουργία. Να δίνετε μεγάλη προσοχή όταν δουλεύετε με τους κανόνες ενός firewall. Μπορεί άθελα σας να κλειδωθείτε έξω από το σύστημα σας. Σύνταξη Κανόνων IPFW rule syntax Στην ενότητα αυτή, θα παρουσιάσουμε μια απλοποιημένη σύνταξη κανόνων. Δείχνουμε μόνο ότι χρειάζεται για να δημιουργηθεί ένα τυποποιημένο σύνολο κανόνων για ένα inclusive firewall. Για πλήρη περιγραφή, δείτε τη σελίδα manual του &man.ipfw.8;. Οι κανόνες περιέχουν λέξεις-κλειδιά. Οι λέξεις αυτές θα πρέπει να κωδικοποιηθούν με συγκεκριμένη σειρά από τα αριστερά προς τα δεξιά της γραμμής. Οι λέξεις-κλειδιά φαίνονται παρακάτω με έντονα γράμματα. Μερικές λέξεις έχουν υπο-επιλογές οι οποίες μπορεί να είναι επίσης λέξεις-κλειδιά και να περιλαμβάνουν επίσης ακόμα περισσότερες υπο-επιλογές. Η αρχή ενός σχολίου, σηματοδοτείται με το σύμβολο #, το οποίο μπορεί να εμφανίζεται στο τέλος μιας γραμμής κανόνα, ή και σε μια δική του γραμμή. Οι κενές γραμμές αγνοούνται. CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL CMD Για να γίνει η προσθήκη ενός νέου κανόνα στον εσωτερικό πίνακα, τοποθετείται μπροστά από αυτόν η παράμετρος add. RULE_NUMBER Κάθε κανόνας πρέπει να διαθέτει ένα αριθμό που να τον χαρακτηρίζει. ACTION Ένας κανόνας μπορεί να σχετίζεται με μια ή περισσότερες ενέργειες, οι οποίες εκτελούνται όταν το πακέτο ταιριάζει με τα κριτήρια επιλογής αυτού του κανόνα. allow | accept | pass | permit Όλα τα παραπάνω έχουν το ίδιο αποτέλεσμα: το πακέτο εξέρχεται από την σύστημα του firewall. Η αναζήτηση για το συγκεκριμένο πακέτο τερματίζεται σε αυτό τον κανόνα. check-state Ελέγχει το πακέτο με βάση το δυναμικό πίνακα κανόνων. Αν βρεθεί κανόνας που να ταιριάζει, θα εκτελεστεί η ενέργεια του κανόνα ο οποίος δημιούργησε τον συγκεκριμένο δυναμικό κανόνα. Διαφορετικά, η αναζήτηση συνεχίζεται με τον επόμενο κανόνα. Ένας κανόνας check-state δεν έχει κριτήρια επιλογής. Αν δεν υπάρχει κανόνας check-state στο σύνολο κανόνων, ο έλεγχος του πίνακα δυναμικών κανόνων ξεκινάει από τον πρώτο κανόνα τύπου keep-state ή limit. deny | drop Και οι δύο λέξεις σημαίνουν το ίδιο πράγμα: τα πακέτα που ταιριάζουν με αυτό τον κανόνα απορρίπτονται. Η αναζήτηση τερματίζεται. Καταγραφή log ή logamount Όταν ένα πακέτο ταιριάζει με ένα κανόνα που περιέχει τη λέξη log, γίνεται καταγραφή του μηνύματος μέσω του &man.syslogd.8; στη δυνατότητα SECURITY. Η καταγραφή συμβαίνει μόνο αν ο αριθμός των πακέτων που έχει καταγραφεί μέχρι στιγμής δεν υπερβαίνει την παράμετρο logamount. Αν η παράμετρος αυτή δεν έχει καθοριστεί, το όριο ρυθμίζεται με βάση την τιμή της μεταβλητής sysctl net.inet.ip.fw.verbose_limit. Και στις δύο περιπτώσεις, μια μηδενική τιμή σημαίνει ότι δεν θα υπάρχει όριο στην καταγραφή. Μόλις η καταγραφή φτάσει στο όριο, μπορεί να γίνει επανενεργοποίηση της με το μηδενισμό του μετρητή καταγραφής, ή του μετρητή για το συγκεκριμένο κανόνα. Δείτε την εντολή ipfw reset log. Η καταγραφή γίνεται μόνο αφού επαληθευθούν όλες οι άλλες συνθήκες ταιριάσματος του πακέτου, και πριν την τελική αποδοχή ή απόρριψη του. Είναι στη δική σας ευχέρεια να αποφασίσετε σε ποιους κανόνες θα ενεργοποιήσετε την καταγραφή. Επιλογή Οι λέξεις-κλειδιά που περιγράφονται σε αυτή την ενότητα, χρησιμοποιούνται για να περιγράψουν χαρακτηριστικά του πακέτου που θα πρέπει να διερευνηθούν για να καθοριστεί αν το πακέτο ταιριάζει ή όχι με τον κανόνα. Η επιλογή μπορεί να γίνει με βάση τα παρακάτω γενικής φύσεως χαρακτηριστικά, τα οποία και θα πρέπει να χρησιμοποιηθούν με τη σειρά που φαίνονται: udp | tcp | icmp Μπορούν επίσης να χρησιμοποιηθούν τα πρωτόκολλα που περιέχονται στο αρχείο /etc/protocols. Η τιμή που καθορίζεται χρησιμοποιείται για το ταίριασμα του πρωτοκόλλου. Πρόκειται για υποχρεωτική παράμετρο. from src to dst Οι λέξεις from και to χρησιμοποιούνται για το ταίριασμα IP διευθύνσεων. Οι κανόνες πρέπει να καθορίζουν τόσο την πηγή όσο και τον προορισμό. Η λέξη any μπορεί να χρησιμοποιηθεί για ταίριασμα με οποιαδήποτε διεύθυνση. Η λέξη me έχει επίσης ειδική σημασία. Ταιριάζει με οποιαδήποτε διεύθυνση που έχει ρυθμιστεί σε κάποια διεπαφή του συστήματος σας, αντιπροσωπεύοντας έτσι το PC στο οποίο εκτελείται το firewall. Μπορούν έτσι να γραφούν κανόνες του τύπου from me to any ή from any to me ή from any to 0.0.0.0/0 ή from 0.0.0.0/0 to me ή from any to 0.0.0.0 ή from me to 0.0.0.0. Οι διευθύνσεις IP καθορίζονται ως αριθμητικές οκτάδες χωρισμένες με τελείες και ακολουθούνται από το μήκος της μάσκας υποδικτύου. Μια IP διεύθυνση μπορεί να καθορίζεται με αριθμούς που χωρίζονται με τελείες. Μπορεί επίσης να ακολουθείται από το μέγεθος της μάσκας υποδικτύου (μορφή CIDR). Πρόκειται για υποχρεωτική παράμετρο. Μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα net-mgmt/ipcalc για διευκόλυνση σας στους υπολογισμούς. Δείτε την δικτυακή τοποθεσία του προγράμματος για περισσότερες πληροφορίες: . port number Χρησιμοποιείται σε πρωτόκολλα που υποστηρίζουν αριθμούς θυρών (όπως είναι τα TCP και UDP). Είναι υποχρεωτικό να δίνεται ο αριθμός θύρας της υπηρεσίας που θέλετε να ταιριάξετε. Μπορείτε να χρησιμοποιήσετε τα ονόματα των υπηρεσιών (μπορείτε να τα βρείτε στο αρχείο /etc/services) αντί για τους κανονικούς αριθμούς θυρών. in | out Με το παραπάνω μπορεί να καθοριστεί αν το ταίριασμα θα γίνεται σε εισερχόμενα ή σε εξερχόμενα πακέτα αντίστοιχα. Είναι υποχρεωτικό να έχετε ως μέρος των κριτηρίων του κανόνα σας, είτε τη λέξη in είτε τη λέξη out. via IF Ταιριάζει τα πακέτα τα οποία διέρχονται μέσω της διεπαφής με το όνομα που καθορίζεται. Η λέξη via εξασφαλίζει ότι το όνομα της διεπαφής θα είναι πάντα μέρος των κριτηρίων κατά τη διαδικασία ταιριάσματος. setup Πρόκειται για υποχρεωτική παράμετρο που αναγνωρίζει την αίτηση έναρξης μιας συνεδρίας για πακέτα TCP. keep-state Πρόκειται για υποχρεωτική παράμετρο. Μόλις υπάρξει ταίριασμα, το firewall θα δημιουργήσει ένα δυναμικό κανόνα, του οποίου η προεπιλεγμένη συμπεριφορά είναι να ταιριάζει επικοινωνία διπλής κατεύθυνσης μεταξύ της διεύθυνσης IP και της θύρας αφετηρίας και προορισμού, χρησιμοποιώντας το ίδιο πρωτόκολλο. limit {src-addr | src-port | dst-addr | dst-port} Το firewall θα επιτρέψει μόνο N πλήθος συνδέσεων με τις παραμέτρους που περιγράφονται σε αυτό τον κανόνα. Μπορούν να καθοριστούν περισσότερες από μια διευθύνσεις και πόρτες αφετηρίας και προορισμού. Δεν μπορούν να χρησιμοποιηθούν στον ίδιο κανόνα οι παράμετροι limit και keep-state. Η επιλογή limit παρέχει την ίδια λειτουργία stateful με την keep-state, καθώς και επιπρόσθετες δικές της λειτουργίες. Επιλογή για Stateful Κανόνες IPFW stateful filtering Το stateful φιλτράρισμα, αντιμετωπίζει την κίνηση του δικτύου ως διπλής κατεύθυνσης ανταλλαγή πακέτων τα οποία δημιουργούν μια συνεδρία. Έχει επίσης τη δυνατότητα να διερευνήσει αν τηρούνται οι έγκυροι κανόνες ανταλλαγής μηνυμάτων μεταξύ του αποστολέα και του παραλήπτη. Οποιαδήποτε πακέτα δεν ταιριάζουν με το πρότυπο αυτής της επικοινωνίας, απορρίπτονται ως ψεύτικα. Η επιλογή check-state χρησιμοποιείται για να αναγνωριστεί σε ποιο σημείο του συνόλου κανόνων του IPFW θα ελεγχθεί το πακέτο με βάση τη δυνατότητα των δυναμικών κανόνων. Σε περίπτωση ταιριάσματος, το πακέτο εξέρχεται από το firewall και συνεχίζει την πορεία του, ενώ την ίδια στιγμή δημιουργείται ένας νέος δυναμικός κανόνας για το επόμενο πακέτο που αναμένεται να έρθει με βάση τη συγκεκριμένη διπλής κατεύθυνσης επικοινωνία. Σε περίπτωση που το πακέτο δεν ταιριάζει με το δυναμικό κανόνα, θα προχωρήσει για να ελεγχθεί από τον επόμενο κανόνα του firewall. Η δυνατότητα δυναμικών κανόνων είναι ευάλωτη σε εξάντληση πόρων σε περίπτωση επίθεσης υπερχείλισης (flood) SYN. Η επίθεση αυτή μπορεί να δημιουργήσει πολύ μεγάλο πλήθος δυναμικών κανόνων. Για την αντιμετώπιση μιας τέτοιας επίθεσης, το &os; χρησιμοποιεί μια ακόμα επιλογή που ονομάζεται limit. Η επιλογή αυτή μπορεί να περιορίσει τον αριθμό των ταυτόχρονων συνεδριών, εξετάζοντας τα πεδία αφετηρίας και προορισμού των κανόνων. Ανιχνεύει με αυτό τον τρόπο το πλήθος των δυναμικών κανόνων και πόσες φορές έχει χρησιμοποιηθεί ο καθένας από τη συγκεκριμένη IP διεύθυνση. Αν ο αριθμός αυτός ξεπερνάει το όριο που έχει τεθεί με την επιλογή limit, το πακέτο απορρίπτεται. Καταγραφή Μηνυμάτων του Firewall IPFW logging Τα πλεονεκτήματα της καταγραφής συμβάντων του firewall, είναι προφανή: παρέχουν τη δυνατότητα να δείτε για ποιο λόγο ενεργοποιήθηκαν οι κανόνες στους οποίους έχετε ενεργοποιήσει την καταγραφή. Οι πληροφορίες περιλαμβάνουν τα πακέτα που απορρίφθηκαν, τις διευθύνσεις από τις οποίες προήλθαν και που κατευθύνονταν. Με αυτό τον τρόπο, έχετε ένα σημαντικό πλεονέκτημα στην ανίχνευση των εισβολέων. Ακόμα και αν ενεργοποιήσετε τη λειτουργία καταγραφής, το IPFW δεν θα αρχίσει από μόνο του την καταγραφή για κανένα κανόνα. Ο διαχειριστής του firewall θα αποφασίσει σε ποιους από όλους τους κανόνες θα ενεργοποιήσει την καταγραφή, και θα προσθέσει την λέξη log στην αντίστοιχη καταχώριση. Φυσιολογικά, γίνεται καταγραφή μόνο για κανόνες που απορρίπτουν πακέτα (κανόνες deny), όπως για παράδειγμα ο κανόνας απόρριψης των εισερχόμενων ICMP pings. Είναι κοινή πρακτική, να αντιγράφεται στο τέλος των κανόνων ο κανόνας ipfw default deny everything και να προστίθεται σε αυτόν η επιλογή log. Με τον τρόπο αυτό, μπορείτε να δείτε όλα τα πακέτα που δεν ταίριαξαν με κανένα κανόνα του συνόλου. Η καταγραφή συμβάντων είναι δίκοπο μαχαίρι. Αν δεν είστε προσεκτικός, θα χαθείτε μέσα στο πλήθος των δεδομένων της καταγραφής και θα γεμίσετε το δίσκο σας με άχρηστα αρχεία. Οι πιο παλιές και κοινές επιθέσεις τύπου άρνησης υπηρεσίας (DoS), είναι αυτές που προσπαθούν να γεμίσουν τους δίσκους σας. Τα μηνύματα αυτά όχι μόνο καταγράφονται στο syslogd, αλλά εμφανίζονται και στην κονσόλα του συστήματος σας, και σύντομα γίνονται πολύ ενοχλητικά. Η επιλογή IPFIREWALL_VERBOSE_LIMIT=5 στον πυρήνα, περιορίζει τον αριθμό των συνεχόμενων όμοιων μηνυμάτων που στέλνονται στον καταγραφέα συστήματος &man.syslogd.8; σχετικά με το ταίριασμα πακέτων ενός συγκεκριμένου κανόνα. Όταν ενεργοποιείται αυτή η επιλογή στον πυρήνα, ο αριθμός των συνεχόμενων μηνυμάτων ενός συγκεκριμένου κανόνα, σταματάει μετά τον αριθμό που καθορίζεται. Δεν υπάρχει κανένα όφελος από 200 συνεχόμενα μηνύματα με το ίδιο ακριβώς περιεχόμενο. Για παράδειγμα, πέντε συνεχόμενα μηνύματα για ένα συγκεκριμένο κανόνα θα καταγράφονταν κανονικά στο syslogd. Τα υπόλοιπα όμοια μηνύματα θα καταμετρηθούν και θα καταγραφούν όπως φαίνεται παρακάτω: last message repeated 45 times Όλα τα μηνύματα καταγραφής των πακέτων, γράφονται από προεπιλογή στο αρχείο /var/log/security το οποίο καθορίζεται στο αρχείο /etc/syslog.conf. Δημιουργία Ενός Script Κανόνων Οι περισσότεροι έμπειροι χρήστες του IPFW, δημιουργούν ένα αρχείο που περιέχει τους κανόνες και το γράφουν με τέτοιο τρόπο ώστε να να μπορεί να εκτελεστεί ως script. Το βασικό πλεονέκτημα του παραπάνω τρόπου, είναι ότι οι κανόνες του firewall μπορούν να ανανεωθούν χωρίς την ανάγκη να επανεκκινήσει το σύστημα για να φορτωθούν οι νέοι. Η μέθοδος αυτή είναι πολύ βολική για την δοκιμή νέων κανόνων, καθώς η διαδικασία μπορεί να επαναληφθεί όσες φορές χρειάζεται. Καθώς πρόκειται για κανονικό script, μπορείτε να χρησιμοποιήσετε συμβολική υποκατάσταση για να κωδικοποιήσετε και να υποκαταστήσετε συχνά χρησιμοποιούμενες τιμές σε πολλαπλούς κανόνες. Αυτό φαίνεται στο παρακάτω παράδειγμα. Η σύνταξη που χρησιμοποιείται εδώ, είναι συμβατή με τα κελύφη &man.sh.1;, &man.csh.1; και &man.tcsh.1;. Μπροστά από τα πεδία της συμβολικής υποκατάστασης, υπάρχει το σήμα του δολαρίου, $. Το σύμβολο αυτό δεν υπάρχει μπροστά από τα συμβολικά πεδία. Η τιμή που θα αποδοθεί στο συμβολικό πεδίο, πρέπει να εσωκλείεται σε διπλά εισαγωγικά. Ξεκινήστε το αρχείο των κανόνων σας όπως φαίνεται παρακάτω: ############### start of example ipfw rules script ############# # ipfw -q -f flush # Delete all rules # Set defaults oif="tun0" # out interface odns="192.0.2.11" # ISP's DNS server IP address cmd="ipfw -q add " # build rule prefix ks="keep-state" # just too lazy to key this each time $cmd 00500 check-state $cmd 00502 deny all from any to any frag $cmd 00501 deny tcp from any to any established $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks $cmd 00611 allow udp from any to $odns 53 out via $oif $ks ################### End of example ipfw rules script ############ Αυτό είναι όλο. Στο παράδειγμα αυτό δεν είναι σημαντικοί οι κανόνες, αλλά ο τρόπος με τον οποίο λειτουργούν και παίρνουν τιμές τα πεδία συμβολικής υποκατάστασης. Αν το παραπάνω παράδειγμα ήταν στο αρχείο /etc/ipfw.rules θα μπορούσατε να φορτώσετε αυτούς τους κανόνες, γράφοντας την παρακάτω εντολή: &prompt.root; sh /etc/ipfw.rules Το αρχείο /etc/ipfw.rules μπορεί να βρίσκεται σε όποιο κατάλογο θέλετε, και να ονομάζεται επίσης όπως θέλετε. Θα μπορούσατε να επιτύχετε το ίδιο πράγμα, εκτελώντας τις παρακάτω εντολές χειροκίνητα: &prompt.root; ipfw -q -f flush &prompt.root; ipfw -q add check-state &prompt.root; ipfw -q add deny all from any to any frag &prompt.root; ipfw -q add deny tcp from any to any established &prompt.root; ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state &prompt.root; ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state &prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state Σύνολο Κανόνων Stateful Το παρακάτω σύνολο κανόνων (που δεν περιέχει κανόνες για NAT) είναι ένα παράδειγμα γραφής ενός inclusive firewall. Ένα inclusive firewall επιτρέπει την είσοδο μόνο των πακέτων που ταιριάζουν με τους κανόνες αποδοχής (pass) και απορρίπτει από προεπιλογή όλα τα άλλα. Τα firewalls που έχουν σχεδιαστεί να προστατεύουν ολόκληρα δίκτυα, διαθέτουν το λιγότερο δύο διεπαφές, στις οποίες πρέπει να υπάρχουν κανόνες ώστε το firewall να λειτουργεί. Όλα τα λειτουργικά συστήματα τύπου &unix;, συμπεριλαμβανομένου και του &os;, έχουν σχεδιαστεί να χρησιμοποιούν τη διεπαφή lo0 και τη διεύθυνση IP 127.0.0.1 για εσωτερική επικοινωνία με το λειτουργικό σύστημα. Το firewall πρέπει να περιέχει κανόνες που να επιτρέπουν την απρόσκοπτη κίνηση αυτών των ειδικών, για εσωτερική χρήση, πακέτων. Οι κανόνες που ορίζουν την πρόσβαση εισερχόμενων και εξερχόμενων πακέτων, γράφονται για τη διεπαφή που συνδέεται στο δημόσιο Internet. Η διεπαφή αυτή μπορεί να είναι για παράδειγμα η tun0 (σε περίπτωση που χρησιμοποιείτε το PPP χρήστη), ή η κάρτα δικτύου που συνδέεται στο καλωδιακό ή DSL modem σας. Σε περίπτωση που μια ή περισσότερες κάρτες δικτύου συνδέονται σε εσωτερικά ιδιωτικά δίκτυα πίσω από το firewall, θα πρέπει να υπάρχουν οι αντίστοιχοι κανόνες που να επιτρέπουν την ελεύθερη διακίνηση των πακέτων ανάμεσα στις διεπαφές αυτές ή/και στο Internet. Οι κανόνες πρέπει να οργανώνονται σε τρεις κύριες ενότητες: αρχικά όλες οι διεπαφές στις οποίες επιτρέπεται η ελεύθερη διακίνηση δεδομένων, έπειτα η διεπαφή από την οποία εξέρχονται τα πακέτα προς το δημόσιο δίκτυο (Internet) και τέλος η διεπαφή από την οποία λαμβάνονται πακέτα από το Internet. Σε κάθε μια από τις ενότητες των διεπαφών που συνδέονται στο Internet, πρέπει να τοποθετούνται πρώτοι οι κανόνες που ταιριάζουν συχνότερα με την αντίστοιχη κίνηση. Ο τελευταίος κανόνας της ενότητας θα πρέπει να απορρίπτει και να καταγράφει όλα τα πακέτα της συγκεκριμένης διεπαφής/κατεύθυνσης. Η ενότητα εξερχομένων (Outbound) στο σύνολο κανόνων που φαίνεται παρακάτω, περιέχει μόνο κανόνες τύπου allow. Οι κανόνες αυτοί περιέχουν συγκεκριμένες επιλεγμένες τιμές, με τις οποίες αναγνωρίζεται με μοναδικό τρόπο η υπηρεσία στην οποία επιτρέπεται η πρόσβαση από το δημόσιο Internet. Όλοι οι κανόνες έχουν τις επιλογές proto, port, in/out και keep-state. Οι κανόνες τύπου proto tcp περιέχουν την επιλογή setup για την αναγνώριση του πακέτου έναρξης της συνεδρίας, ώστε να γίνει η καταχώριση της στον πίνακα συνδέσεων (stateful). Στην ενότητα των εισερχόμενων πακέτων (Inbound) που φαίνεται παρακάτω, εμφανίζονται πρώτοι οι κανόνες που χρησιμοποιούνται για την απόρριψη των ανεπιθύμητων πακέτων. Αυτό γίνεται για δύο διαφορετικούς λόγους. Ο πρώτος είναι ότι τα κακόβουλα πακέτα μπορεί εν μέρει να ταιριάζουν με κάποια χαρακτηριστικά της έγκυρης κίνησης. Τα πακέτα αυτά θα πρέπει να απορριφθούν, αντί να γίνουν δεκτά από κάποιο επόμενο κανόνα allow. Ο δεύτερος είναι ότι μπορείτε να απορρίψετε συγκεκριμένα πακέτα τα οποία γνωρίζετε ότι δεν είναι έγκυρα, αλλά σας είναι αδιάφορη η καταγραφή τους. Με τον τρόπο αυτό εμποδίζεται η λήψη και καταγραφή τους από τον τελευταίο κανόνα. Ο τελευταίος κανόνας τυπικά απορρίπτει και καταγράφει όλα τα πακέτα που έφτασαν μέχρι αυτόν. Ο κανόνας αυτός χρησιμοποιείται για την παροχή νομικών αποδείξεων σε περίπτωση που κινήσετε νομική διαδικασία κατά ατόμων που προέβησαν σε επιθέσεις στο σύστημα σας. Θα πρέπει επίσης να εξασφαλίσετε ότι το σύστημα σας δεν θα δώσει καμιά απάντηση σε κανένα από τα ανεπιθύμητα πακέτα. Τα πακέτα αυτά θα πρέπει να απορριφθούν και να εξαφανιστούν. Με τον τρόπο αυτό, ο επιτιθέμενος δεν έχει καμιά γνώση αν τα πακέτα του έφτασαν μέχρι το σύστημα σας. Όσο λιγότερα μπορούν να μάθουν οι επιτιθέμενοι σχετικά με το σύστημα σας, τόσο πιο ασφαλές είναι. Όταν εκτελείτε καταγραφή πακέτων με αριθμούς θυρών που δεν αναγνωρίζετε, κοιτάξτε στο αρχείο /etc/services/ ή δείτε το και αναζητήστε τον αριθμό της θύρας για να δείτε ποιος είναι ο σκοπός της. Ελέγξτε την παρακάτω τοποθεσία για τους αριθμούς θυρών που χρησιμοποιούνται συχνά από κακόβουλα προγράμματα (Trojans): . Ένα Υπόδειγμα Συνόλου Κανόνων Inclusive Το παρακάτω σύνολο κανόνων (στο οποίο δεν υλοποιείται λειτουργία NAT) είναι αρκετά πλήρες και πολύ ασφαλές. Δημιουργεί firewall τύπου inclusive, και έχει δοκιμαστεί σε πραγματικές συνθήκες λειτουργίας. Μπορεί να εξυπηρετήσει το ίδιο καλά και το δικό σας σύστημα. Απλώς μετατρέψτε σε σχόλιο τους κανόνες pass για τις υπηρεσίες που δεν θέλετε να ενεργοποιήσετε. Για να αποφύγετε την καταγραφή ανεπιθύμητων μηνυμάτων, απλώς προσθέστε ένα κανόνα τύπου deny στην ενότητα των εισερχομένων. Σε όλους τους κανόνες, Θα πρέπει να αλλάξετε το όνομα της διεπαφής από dc0 στο πραγματικό όνομα της διεπαφής που συνδέεται στο δημόσιο Internet. Σε περίπτωση που χρησιμοποιείτε το PPP χρήστη, το όνομα της διεπαφής θα είναι tun0. Θα διαπιστώσετε ότι υπάρχει μια συγκεκριμένη λογική στη χρήση αυτών των κανόνων. Όλοι οι κανόνες που αποτελούν αίτηση για έναρξη μιας νέας συνεδρίας με το δημόσιο Internet, χρησιμοποιούν την επιλογή keep-state. Όλες οι διαπιστευμένες υπηρεσίες που προέρχονται από το δημόσιο Internet, διαθέτουν την επιλογή limit, για την αποφυγή επιθέσεων υπερχείλισης (flooding). Όλοι οι κανόνες χρησιμοποιούν τις επιλογές in ή out για να διευκρινίζουν την κατεύθυνση της επικοινωνίας. Όλοι οι κανόνες χρησιμοποιούν την επιλογή via όνομα-διεπαφής για να καθορίσουν τη διεπαφή από την οποία διέρχεται το πακέτο. Οι κανόνες που φαίνονται παρακάτω, θα πρέπει να γραφούν στο /etc/ipfw.rules. ################ Start of IPFW rules file ############################### # Flush out the list before we begin. ipfw -q -f flush # Set rules command prefix cmd="ipfw -q add" pif="dc0" # public interface name of NIC # facing the public Internet ################################################################# # No restrictions on Inside LAN Interface for private network # Not needed unless you have LAN. # Change xl0 to your LAN NIC interface name ################################################################# #$cmd 00005 allow all from any to any via xl0 ################################################################# # No restrictions on Loopback Interface ################################################################# $cmd 00010 allow all from any to any via lo0 ################################################################# # Allow the packet through if it has previous been added to the # the "dynamic" rules table by a allow keep-state statement. ################################################################# $cmd 00015 check-state ################################################################# # Interface facing Public Internet (Outbound Section) # Check session start requests originating from behind the # firewall on the private network or from this gateway server # destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # x.x.x.x must be the IP address of your ISP.s DNS # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file $cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state $cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state # Allow out access to my ISP's DHCP server for cable/DSL configurations. # This rule is not needed for .user ppp. connection to the public Internet. # so you can delete this whole group. # Use the following rule and check log for IP address. # Then put IP address in commented out rule & delete first rule $cmd 00120 allow log udp from any to any 67 out via $pif keep-state #$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state # Allow out non-secure standard www function $cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state # Allow out secure www function https over TLS SSL $cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state # Allow out send & get email function $cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state $cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state # Allow out FBSD (make install & CVSUP) functions # Basically give user root "GOD" privileges. $cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root # Allow out ping $cmd 00250 allow icmp from any to any out via $pif keep-state # Allow out Time $cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state # Allow out nntp news (i.e. news groups) $cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) $cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state # Allow out whois $cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state # deny and log everything else that.s trying to get out. # This rule enforces the block all by default logic. $cmd 00299 deny log all from any to any out via $pif ################################################################# # Interface facing Public Internet (Inbound Section) # Check packets originating from the public Internet # destined for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces $cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect $cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Deny public pings $cmd 00310 deny icmp from any to any in via $pif # Deny ident $cmd 00315 deny tcp from any to any 113 in via $pif # Deny all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 $cmd 00320 deny tcp from any to any 137 in via $pif $cmd 00321 deny tcp from any to any 138 in via $pif $cmd 00322 deny tcp from any to any 139 in via $pif $cmd 00323 deny tcp from any to any 81 in via $pif # Deny any late arriving packets $cmd 00330 deny all from any to any frag in via $pif # Deny ACK packets that did not match the dynamic rule table $cmd 00332 deny tcp from any to any established in via $pif # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP.s DHCP server as it.s the only # authorized source to send this packet type. # Only necessary for cable or DSL configurations. # This rule is not needed for .user ppp. type connection to # the public Internet. This is the same IP address you captured # and used in the outbound section. #$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state # Allow in standard www function because I have apache server $cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Allow in secure FTP, Telnet, and SCP from public Internet $cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID & PW are passed over public # Internet as clear text. # Delete this sample group if you do not have telnet server enabled. $cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Reject & Log all incoming connections from the outside $cmd 00499 deny log all from any to any in via $pif # Everything else is denied by default # deny and log all packets that fell through to see what they are $cmd 00999 deny log all from any to any ################ End of IPFW rules file ############################### Ένα Υπόδειγμα <acronym>NAT</acronym> με Stateful Σύνολο Κανόνων NAT and IPFW Για να ενεργοποιηθεί η λειτουργία NAT στο IPFW, χρειάζονται κάποιες επιπλέον ρυθμίσεις. Θα πρέπει να προσθέσετε την επιλογή option IPDIVERT μαζί με τις υπόλοιπες επιλογές για το IPFIREWALL στο αρχείο ρυθμίσεων του πυρήνα. Θα πρέπει έπειτα να μεταγλωττίσετε και να εγκαταστήσετε το νέο σας προσαρμοσμένο πυρήνα. Εκτός από τις συνηθισμένες επιλογές για το IPFW, θα πρέπει να προσθέσετε και τις παρακάτω στο αρχείο /etc/rc.conf: natd_enable="YES" # Enable NATD function natd_interface="rl0" # interface name of public Internet NIC natd_flags="-dynamic -m" # -m = preserve port numbers if possible Η χρήση κανόνων stateful μαζί με τον κανόνα divert natd (NAT), περιπλέκει πολύ την λογική συγγραφής των κανόνων. Η θέση εμφάνισης των κανόνων check-state και divert natd μέσα στο σύνολο κανόνων γίνεται πολύ κρίσιμη. Δεν πρόκειται πλέον για απλή λογική περάσματος από τον ένα κανόνα στον επόμενο. Χρησιμοποιείται ένα νέο είδος ενέργειας που ονομάζεται skipto. Για να χρησιμοποιηθεί η εντολή skipto, είναι υποχρεωτικό να έχετε αριθμήσει τους κανόνες, ώστε να ξέρετε σε ποιο κανόνα θα καταλήξει το άλμα που θα εκτελεστεί από την εντολή αυτή. Παρακάτω θα βρείτε ένα υπόδειγμα (χωρίς πρόσθετα σχόλια) μιας μεθόδου συγγραφής που επιλέξαμε εδώ για να εξηγήσουμε την ακολουθία ροής του πακέτου μέσα στο σύνολο κανόνων. Η ροή της επεξεργασίας ξεκινάει με τον πρώτο από την κορυφή κανόνα και συνεχίζει ένα κανόνα κάθε φορά προς τα κάτω, είτε μέχρι να φτάσει τον τελευταίο, ή μέχρι το πακέτο να ταιριάξει με τα κριτήρια επιλογής κάποιου κανόνα και να ελευθερωθεί από το firewall. Είναι σημαντικό να παρατηρήσουμε τη θέση των κανόνων με αριθμούς 100, 101, 450, 500 και 510. Οι κανόνες αυτοί ελέγχουν την μετάφραση των εξερχόμενων και εισερχόμενων πακέτων, ώστε οι καταχωρήσεις τους στο δυναμικό πίνακα καταστάσεων να περιέχουν πάντα την ιδιωτική IP διεύθυνση του τοπικού δικτύου. Παρατηρήστε επίσης ότι όλοι οι κανόνες allow και deny καθορίζουν την κατεύθυνση κίνησης του πακέτου καθώς και την διεπαφή. Επίσης, όλες οι εξερχόμενες αιτήσεις για νέες συνεδρίες μεταφέρονται απευθείας (μέσω του skipto rule 500) στον κανόνα 500 για να γίνει η μετάφραση διευθύνσεων δικτύου (NAT). Ας υποθέσουμε ότι ένα χρήστης του τοπικού δικτύου χρησιμοποιεί τον φυλλομετρητή του για να δει μια ιστοσελίδα. Οι ιστοσελίδες χρησιμοποιούν την πόρτα 80 για την επικοινωνία. Το πακέτο εισέρχεται στο firewall. Δεν ταιριάζει με τον κανόνα 100 γιατί είναι εξερχόμενο και όχι εισερχόμενο. Περνάει τον κανόνα 101 γιατί πρόκειται για νέα επικοινωνία και έτσι δεν υπάρχει ακόμα στον δυναμικό πίνακα καταστάσεων. Το πακέτο τελικά φτάνει στον κανόνα 125 με τον οποίο και ταιριάζει. Εξέρχεται μέσω της κάρτας δικτύου που συνδέεται στο δημόσιο Internet. Το πακέτο έχει ακόμα ως IP αφετηρίας την ιδιωτική διεύθυνση του τοπικού δικτύου. Το ταίριασμα με αυτό τον κανόνα προκαλεί δύο ενέργειες. Η επιλογή keep-state θα δημιουργήσει ένα νέο δυναμικό κανόνα, θα τον καταχωρήσει στον πίνακα, και θα εκτελέσει την αντίστοιχη ενέργεια. Η ενέργεια αυτή είναι μέρος της πληροφορίας που γράφεται στον δυναμικό πίνακα. Στην περίπτωση αυτή είναι η skipto rule 500. Ο κανόνας 500 μεταφράζει μέσω NAT τη διεύθυνση IP του πακέτου, πριν αυτό εξέλθει προς το Internet. Αυτό είναι ιδιαίτερα σημαντικό. Το πακέτο κατευθύνεται προς τον προορισμό του, όπου δημιουργείται και αποστέλλεται ένα νέο πακέτο ως απάντηση. Το νέο αυτό πακέτο εισέρχεται ξανά στο firewall, στον κανόνα που είναι στην κορυφή της λίστας. Αυτή τη φορά ταιριάζει με τον κανόνα 100 και η διεύθυνση προορισμού του αλλάζει ξανά στην αρχική του τοπικού δικτύου. Έπειτα, γίνεται η επεξεργασία του από τον κανόνα check-state ο οποίος ανακαλύπτει ότι πρόκειται για πακέτο συνεδρίας σε εξέλιξη και το απελευθερώνει στο τοπικό δίκτυο. Κατευθύνεται προς τον υπολογιστή του τοπικού δικτύου που το έστειλε, ο οποίος στέλνει ένα νέο πακέτο ζητώντας περισσότερα δεδομένα από τον απομακρυσμένο εξυπηρετητή. Το πακέτο αυτό ελέγχεται από τον κανόνα check-state, ο οποίος βρίσκει την καταχώριση του στα εξερχόμενα και εκτελεί την αντίστοιχη ενέργεια που σε αυτή την περίπτωση είναι skipto 500. Το πακέτο προωθείται στον κανόνα 500, γίνεται η μετάφραση της διεύθυνσης του μέσω NAT και απελευθερώνεται στο Internet. Από την μεριά των εισερχόμενων, όποιο πακέτο αναγνωρίζεται ως μέρος μιας υπάρχουσας συνεδρίας, ελέγχεται αυτόματα από τον κανόνα check-state και τους αντίστοιχους κανόνες divert natd. Το μόνο που χρειάζεται να αντιμετωπίσουμε είναι η απόρριψη όλων των προβληματικών πακέτων και η έγκριση μόνο των πακέτων που προορίζονται για εγκεκριμένες υπηρεσίες. Ας υποθέσουμε ότι έχουμε ένα εξυπηρετητή apache ο οποίος εκτελείται στο μηχάνημα με το firewall, και επιθυμούμε το τοπικό site να είναι προσβάσιμο από το δημόσιο Internet. Η εισερχόμενη αίτηση νέας συνεδρίας ταιριάζει με τον κανόνα 100 και η IP διεύθυνση της αντιστοιχίζεται στο τοπικό IP του μηχανήματος με το firewall. Το πακέτο έπειτα ελέγχεται για οποιοδήποτε πρόβλημα μπορεί να έχει σύμφωνα με τους κανόνες που χρησιμοποιούμε, και τελικά ταιριάζει με τον κανόνα 425. Στην περίπτωση αυτή συμβαίνουν δύο πράγματα. Ο κανόνας για το πακέτο γράφεται στο δυναμικό πίνακα καταστάσεων, αλλά αυτή τη φορά περιορίζεται ο αριθμός αιτήσεων νέας συνεδρίας από το συγκεκριμένο IP σε 2. Με αυτό τον τρόπο μπορούμε να αμυνθούμε σε επιθέσεις τύπου άρνησης υπηρεσίας (DoS) όσο αφορά τη συγκεκριμένη θύρα επικοινωνίας. Η ενέργεια του κανόνα είναι το allow, και έτσι το πακέτο απελευθερώνεται στο τοπικό δίκτυο. Το πακέτο που παράγεται ως απάντηση, ελέγχεται από τον κανόνα check-state, ο οποίος αναγνωρίζει ότι ανήκει σε μια ήδη ενεργή συνεδρία, και αποστέλλεται στον κανόνα 500 όπου γίνεται η μετάφραση της διεύθυνσης του μέσω NAT. Το πακέτο τελικά απελευθερώνεται μέσω της διεπαφής εξερχομένων. Υπόδειγμα Κανόνων #1: #!/bin/sh cmd="ipfw -q add" skip="skipto 500" pif=rl0 ks="keep-state" good_tcpo="22,25,37,43,53,80,443,110,119" ipfw -q -f flush $cmd 002 allow all from any to any via xl0 # exclude LAN traffic $cmd 003 allow all from any to any via lo0 # exclude loopback traffic $cmd 100 divert natd ip from any to any in via $pif $cmd 101 check-state # Authorized outbound packets $cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks $cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks $cmd 130 $skip icmp from any to any out via $pif $ks $cmd 135 $skip udp from any to any 123 out via $pif $ks # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Authorized inbound packets $cmd 400 allow udp from xx.70.207.54 to any 68 in $ks $cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1 $cmd 450 deny log ip from any to any # This is skipto location for outbound stateful rules $cmd 500 divert natd ip from any to any out via $pif $cmd 510 allow ip from any to any ######################## end of rules ################## Οι παρακάτω κανόνες είναι σχεδόν ίδιοι με τους παραπάνω, αλλά περιέχουν περισσότερα σχόλια για να βοηθήσουν τον αρχάριο χρήστη του IPFW να καταλάβει καλύτερα πως λειτουργούν. Υπόδειγμα Κανόνων #2: #!/bin/sh ################ Start of IPFW rules file ############################### # Flush out the list before we begin. ipfw -q -f flush # Set rules command prefix cmd="ipfw -q add" skip="skipto 800" pif="rl0" # public interface name of NIC # facing the public Internet ################################################################# # No restrictions on Inside LAN Interface for private network # Change xl0 to your LAN NIC interface name ################################################################# $cmd 005 allow all from any to any via xl0 ################################################################# # No restrictions on Loopback Interface ################################################################# $cmd 010 allow all from any to any via lo0 ################################################################# # check if packet is inbound and nat address if it is ################################################################# $cmd 014 divert natd ip from any to any in via $pif ################################################################# # Allow the packet through if it has previous been added to the # the "dynamic" rules table by a allow keep-state statement. ################################################################# $cmd 015 check-state ################################################################# # Interface facing Public Internet (Outbound Section) # Check session start requests originating from behind the # firewall on the private network or from this gateway server # destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # x.x.x.x must be the IP address of your ISP's DNS # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file $cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state # Allow out access to my ISP's DHCP server for cable/DSL configurations. $cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state # Allow out non-secure standard www function $cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state # Allow out secure www function https over TLS SSL $cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state # Allow out send & get email function $cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state $cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state # Allow out FreeBSD (make install & CVSUP) functions # Basically give user root "GOD" privileges. $cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root # Allow out ping $cmd 080 $skip icmp from any to any out via $pif keep-state # Allow out Time $cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state # Allow out nntp news (i.e. news groups) $cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) $cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state # Allow out whois $cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state # Allow ntp time server $cmd 130 $skip udp from any to any 123 out via $pif keep-state ################################################################# # Interface facing Public Internet (Inbound Section) # Check packets originating from the public Internet # destined for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Deny ident $cmd 315 deny tcp from any to any 113 in via $pif # Deny all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 $cmd 320 deny tcp from any to any 137 in via $pif $cmd 321 deny tcp from any to any 138 in via $pif $cmd 322 deny tcp from any to any 139 in via $pif $cmd 323 deny tcp from any to any 81 in via $pif # Deny any late arriving packets $cmd 330 deny all from any to any frag in via $pif # Deny ACK packets that did not match the dynamic rule table $cmd 332 deny tcp from any to any established in via $pif # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP's DHCP server as it's the only # authorized source to send this packet type. # Only necessary for cable or DSL configurations. # This rule is not needed for 'user ppp' type connection to # the public Internet. This is the same IP address you captured # and used in the outbound section. $cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state # Allow in standard www function because I have Apache server $cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Allow in secure FTP, Telnet, and SCP from public Internet $cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID & PW are passed over public # Internet as clear text. # Delete this sample group if you do not have telnet server enabled. $cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Reject & Log all unauthorized incoming connections from the public Internet $cmd 400 deny log all from any to any in via $pif # Reject & Log all unauthorized out going connections to the public Internet $cmd 450 deny log all from any to any out via $pif # This is skipto location for outbound stateful rules $cmd 800 divert natd ip from any to any out via $pif $cmd 801 allow ip from any to any # Everything else is denied by default # deny and log all packets that fell through to see what they are $cmd 999 deny log all from any to any ################ End of IPFW rules file ############################### diff --git a/el_GR.ISO8859-7/books/handbook/linuxemu/chapter.sgml b/el_GR.ISO8859-7/books/handbook/linuxemu/chapter.sgml index 9c79b89142..7da8eefa91 100644 --- a/el_GR.ISO8859-7/books/handbook/linuxemu/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/linuxemu/chapter.sgml @@ -1,3700 +1,3721 @@ Jim Mock Αναδομήθηκε και μέρη του ανανεώθηκαν από τον Brian N. Handy Αρχική συνεισφορά από τον Rich Murphey Συμβατότητα με Εκτελέσιμα του Linux Σύνοψη Συμβατότητα με εκτελέσιμα (binary) Linux binary συμβατότητα Linux συμβατότητα εκτελέσιμων Linux συμβατότητα εκτελέσιμων Linux Το &os; παρέχει binary συμβατότητα (εκτελέσιμων) με αρκετά άλλα λειτουργικά τύπου &unix;, συμπεριλαμβανομένου και του Linux. Σε αυτό το σημείο, μπορεί να αναρωτιέστε γιατί ακριβώς χρειάζεται το &os; να μπορεί να τρέξει εκτελέσιμα Linux; H απάντηση σε αυτή την ερώτηση είναι αρκετά απλή. Πολλές εταιρίες και προγραμματιστές αναπτύσσουν εφαρμογές μόνο για Linux, μια και είναι πολύ της μόδας στο κόσμο των υπολογιστών. Αυτό αναγκάζει εμάς τους υπόλοιπους, που χρησιμοποιούμε το &os;, να πιέζουμε τις ίδιες αυτές εταιρίες και προγραμματιστές να δημιουργήσουν κανονικές εκδόσεις των εφαρμογών τους για &os;. Το πρόβλημα είναι, ότι οι περισσότερες από αυτές τις εταιρίες δεν αντιλαμβάνονται πραγματικά πόσοι περισσότεροι άνθρωποι θα χρησιμοποιούσαν το προϊόν τους αν είχαν εκδόσεις και για &os;, και οι περισσότερες συνεχίζουν να αναπτύσσουν μόνο για Linux. Άρα τι μπορεί να κάνει ένας χρήστης του &os;; Εδώ έρχεται να βοηθήσει η binary συμβατότητα του &os; με το Linux. Εν συντομία, η συμβατότητα επιτρέπει στους χρήστες του &os; να εκτελέσουν περίπου το 90% όλων των Linux εφαρμογών χωρίς μετατροπές. Αυτό περιλαμβάνει εφαρμογές όπως το &staroffice;, την Linux έκδοση του &netscape;, &adobe; &acrobat;, RealPlayer, VMware, &oracle;, WordPerfect, Doom, Quake, και περισσότερα. Έχει επίσης αναφερθεί ότι σε κάποιες περιπτώσεις, τα εκτελέσιμα του Linux έχουν καλύτερη απόδοση στο &os; από ότι στο Linux. Υπάρχουν ωστόσο κάποια συγκεκριμένα για το Linux στοιχεία του λειτουργικού που δεν υποστηρίζονται στο &os;. Τα εκτελέσιμα του Linux δεν θα δουλέψουν στο &os; αν χρησιμοποιούν πολλές εξειδικευμένες κλήσεις &i386;, όπως για παράδειγμα την ενεργοποίηση της εικονικής κατάστασης 8086. Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Πως να ενεργοποιήσετε την συμβατότητα εκτελέσιμων με το Linux στο σύστημα σας. Πως να εγκαταστήσετε πρόσθετες κοινόχρηστες βιβλιοθήκες του Linux. Πως να εγκαταστήσετε εφαρμογές του Linux στο &os;. Τις λεπτομέρειες της υλοποίησης της συμβατότητας με το Linux στο &os;. Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει: Να γνωρίζετε πως θα εγκαταστήσετε πρόσθετο λογισμικό τρίτου κατασκευαστή (). Εγκατάσταση KLD (kernel loadable object) Η συμβατότητα με εκτελέσιμα του Linux δεν είναι ενεργή εξ' αρχής. Ο ευκολότερος τρόπος για να ενεργοποιήσετε αυτή τη λειτουργία είναι να φορτώσετε το KLD (άρθρωμα) linux (Kernel LoaDable object). Μπορείτε να φορτώσετε αυτό το άρθρωμα στον πυρήνα δίνοντας τη παρακάτω εντολή ως root: &prompt.root; kldload linux Αν θέλετε να έχετε πάντα ενεργοποιημένη τη συμβατότητα με Linux, τότε θα χρειαστεί να προσθέσετε τη παρακάτω γραμμή στο /etc/rc.conf: linux_enable="YES" Η εντολή &man.kldstat.8; μπορεί να χρησιμοποιηθεί για να ελεγχθεί αν το KLD είναι φορτωμένο: &prompt.user; kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko kernel options COMPAT_LINUX Αν για κάποιο λόγο δεν θέλετε ή δε μπορείτε να φορτώσετε το KLD, τότε μπορείτε να συνδέσετε στατικά την υποστήριξη εκτελέσιμων του Linux στον πυρήνα με το να προσθέσετε την επιλογή options COMPAT_LINUX στο αρχείων ρυθμίσεων του πυρήνα. Στη συνέχεια μπορείτε να εγκαταστήσετε τον νέο πυρήνα όπως περιγράφεται στο . Εγκατάσταση των Linux Runtime Libraries Linux εγκατάσταση βιβλιοθηκών Linux Αυτό μπορεί να γίνει με δύο τρόπους. Είτε με τη χρήση του linux_base-fc4 port, ή με χειροκίνητη εγκατάσταση τους. Εγκατάσταση μέσω του linux_base Port Ports Collection Αυτός είναι κατά γενική ομολογία ο ευκολότερος τρόπος για την εγκατάσταση των runtime libraries. Είναι η ίδια διαδικασία εγκατάστασης που ακολουθείται και για οποιοδήποτε άλλο port από τη Συλλογή των Ports. Απλά κάντε το παρακάτω: &prompt.root; cd /usr/ports/emulators/linux_base-f10 &prompt.root; make install distclean Αν χρησιμοποιείτε κάποια έκδοση του &os; πριν την 8.0, θα πρέπει να εγκαταστήσετε το port emulators/linux_base-fc4 αντί για το emulators/linux_base-f10. Θα πρέπει τώρα να έχετε κανονική συμβατότητα με εκτελέσιμα του Linux. Μερικά προγράμματα παραπονιούνται ότι οι βιβλιοθήκες συστήματος (system libraries) δεν είναι στη τελευταία τους έκδοση. Γενικά όμως, αυτό δεν αποτελεί κανένα πρόβλημα. Μπορούν να υπάρχουν πολλαπλές εκδόσεις του emulators/linux_base, που να αντιστοιχούν στις διαφορετικές εκδόσεις των διανομών Linux. Θα πρέπει να κάνετε εγκατάσταση των ports που προαπαιτούνται από τις εφαρμογές Linux τις οποίες θέλετε να εγκαταστήσετε. Χειροκίνητη εγκατάσταση των Libraries Αν δεν έχετε εγκαταστήσει την συλλογή των ports, μπορείτε να εγκαταστήσετε τις βιβλιοθήκες χειροκίνητα. Θα χρειαστείτε τα Linux shared libraries τα οποία απαιτεί το πρόγραμμα. Επίσης, θα χρειαστεί να δημιουργήσετε και έναν κατάλογο shadow root, /compat/linux, για τις βιβλιοθήκες Linux που θα υπάρχουν στο &os;. Οποιαδήποτε κοινές βιβλιοθήκες (shared libraries) οι οποίες χρησιμοποιούνται από εφαρμογές Linux και εκτελούνται στο &os; θα κοιτάξουν πρώτα σε αυτόν τον κατάλογο. Επομένως, αν μια εφαρμογή Linux φορτώσει για παράδειγμα το /lib/libc.so, το &os; θα προσπαθήσει να φορτώσει πρώτα το /compat/linux/lib/libc.so, και αν αυτό δεν υπάρχει, τότε θα προσπαθήσει να φορτώσει το /lib/libc.so. Τα shared libraries θα πρέπει να εγκατασταθούν στο shadow tree /compat/linux/lib αντί για τις τοποθεσίες που αναφέρει το ld.so στο Linux. Γενικά, τουλάχιστον στις πρώτες σας εγκαταστάσεις εφαρμογών Linux, θα χρειαστεί να ψάξετε για τις κοινές βιβλιοθήκες από τα αντίστοιχα εκτελέσιμα. Μετά από κάποιο διάστημα θα έχετε ένα ικανοποιητικό αριθμό Linux shared libraries στο σύστημά σας και πλέον δε θα χρειάζεται επιπλέον εργασία πέρα από την εγκατάσταση της εφαρμογής. Εγκατάσταση Πρόσθετων Shared Libraries shared libraries Και τι γίνεται στη περίπτωση που έχετε εγκαταστήσει το linux_base port και οι εφαρμογές σας ακόμη παραπονιούνται για shared libraries που λείπουν; Πώς μπορείτε να ξέρετε ποια shared libraries χρειάζεται κάποια εφαρμογή, και που μπορείτε να τα βρείτε; Βασικά, υπάρχουν 2 επιλογές (για να ακολουθήσετε τις παρακάτω οδηγίες θα πρέπει να είστε root στο σύστημά σας). Αν έχετε πρόσβαση σε κάποιο μηχάνημα Linux, ρίξτε μια ματιά στα shared libraries που χρειάζεται μια εφαρμογή, και αντιγράψτε τα στο &os;. Δείτε το παρακάτω παράδειγμα: Ας υποθέσουμε ότι κατεβάσατε μέσω FTP το εκτελέσιμο του Doom για το Linux, και το βάλατε στο Linux σύστημα στο οποίο έχετε πρόσβαση. Μπορείτε στη συνέχεια να ελέγξετε ποια shared libraries χρειάζεται η εφαρμογή με την εντολή ldd linuxdoom, όπως: &prompt.user; ldd linuxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29 symbolic links Θα χρειαστεί να πάρετε όλα τα αρχεία από τη τελευταία στήλη, και να τα αντιγράψετε στον κατάλογο /compat/linux, και να δημιουργήσετε προς αυτά τους αντίστοιχους συμβολικούς δεσμούς (symbolic links) με τα ονόματα της πρώτης στήλης. Αυτό σημαίνει ότι πρακτικά, θα έχετε αυτά τα αρχεία στο σύστημα σας: /compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Σημειώστε ότι αν έχετε ήδη κάποιο Linux shared library που ο αριθμός έκδοσης είναι ο ίδιος με αυτόν της πρώτης στήλης του ldd, δε θα χρειαστεί να αντιγράψετε το αρχείο όπως αυτό ονομάζεται στη τελευταία στήλη, τα υπάρχοντα αρχεία θα πρέπει να κάνουν τη δουλειά τους. Σας συμβουλεύουμε όμως να αντιγράψετε το shared library αν είναι κάποια νεότερη έκδοση. Μπορείτε να διαγράψετε τα παλιά αρχεία, αρκεί όμως να ανανεώσετε τους συμβολικούς δεσμούς ώστε να οδηγούν στα νέα αρχεία. Επομένως, αν έχετε τις παρακάτω βιβλιοθήκες στο σύστημά σας: /compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27 και βρείτε μια εφαρμογή η οποία ζητάει μια νεότερη έκδοση μέσω του ldd: libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29 Αν η διαφορά της έκδοσης στο τελευταία ψηφίο είναι μόνο μίας ή δύο εκδόσεων, τότε μην σας απασχολεί η αντιγραφή του /lib/libc.so.4.6.29, γιατί το πρόγραμμα θα πρέπει να τρέχει κανονικά και με τη λίγο παλαιότερη έκδοση. Παρ' όλα αυτά, αν θέλετε, μπορείτε να αντικαταστήσετε το libc.so και έτσι θα έχετε το παρακάτω: /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Ο μηχανισμός των συμβολικών συνδέσμων χρειάζεται μόνο για τις εφαρμογές του Linux. Ο runtime linker του &os; κοιτάει μόνος του για τις πιο πρόσφατες εκδόσεις των βιβλιοθηκών και έτσι δε χρειάζεται να σας απασχολεί.
Εγκατάσταση των Linux ELF Binaries Linux ELF binaries Τα ELF binaries χρειάζονται μερικές φορές ένα ακόμα βήμα, το branding. Αν προσπαθήσετε να τρέξετε ένα εκτελέσιμο ELF χωρίς branding, τότε θα σας εμφανιστεί το παρακάτω σφάλμα: &prompt.user; ./my-linux-elf-binary ELF binary type not known Abort Για να βοηθήσετε τον πυρήνα του &os; να ξεχωρίσει ένα ELF του &os; από ένα του Linux, χρησιμοποιήσετε την εντολή &man.brandelf.1;. &prompt.user; brandelf -t Linux my-linux-elf-binary GNU toolchain To GNU toolchain, ομάδα πρόγραμμα GNU, τοποθετεί πλέον αυτόματα τα κατάλληλα χαρακτηριστικά στα εκτελέσιμα ELF, επομένως το παραπάνω βήμα θα χρειάζεται όλο και λιγότερο στο μέλλον. + + Εγκατάσταση μιας Τυχαίας Linux RPM Εφαρμογής + + Το &os; διαθέτει την δική του βάση δεδομένων για τα πακέτα, + η οποία χρησιμοποιείται για όλα τα ports (και για αυτά που + προέρχονται από το &linux;). Για το λόγο αυτό, η βάση δεδομένων + &linux; RPM δεν χρησιμοποιείται (δεν υποστηρίζεται). + + Αν ωστόσο χρειάζεται να εγκαταστήσετε μια οποιαδήποτε εφαρμογή + του &linux; που βασίζεται σε πακέτο RPM, μπορείτε να το επιτύχετε + με τον παρακάτω τρόπο: + + &prompt.root; cd /compat/linux +&prompt.root; rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id + + Χρησιμοποιήστε την &man.brandelf.1; για να τυποποιήσετε + κατάλληλα τα εκτελέσιμα (όχι τις βιβλιοθήκες!) ως εφαρμογές &linux;. + Δεν θα μπορείτε να απεγκαταστήσετε τις εφαρμογές με καθαρό τρόπο, + αλλά θα μπορέσετε να κάνετε τις δοκιμές που επιθυμείτε. + + Ρύθμιση του Hostname Resolver Αν το DNS δε δουλεύει ή αν σας εμφανίζεται το παρακάτω σφάλμα: resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword Θα χρειαστεί να ρυθμίσετε το /compat/linux/etc/host.conf ώστε να περιέχει: order hosts, bind multi on Η σειρά εδώ δηλώνει ότι αρχικά ελέγχεται το αρχείο /etc/hosts και στη συνέχεια ο DNS server. Όταν το /compat/linux/etc/host.conf δεν είναι διαθέσιμο, οι εφαρμογές Linux χρησιμοποιούν το /etc/host.conf του &os; και παραπονιούνται ότι η σύνταξη του αρχείου δεν είναι σωστή. Θα πρέπει να αφαιρέσετε την αναφορά στο bind αν δεν έχετε ρυθμίσει ένα name server μέσω του /etc/resolv.conf.
Boris Hollas Ανανεώθηκε για το Mathematica 5.X από τον Εγκαθιστώντας το &mathematica; applications Mathematica Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της έκδοσης Linux του &mathematica; 5.X σε ένα σύστημα &os;. Μπορείτε να αγοράσετε την κανονική ή μαθητική έκδοση του &mathematica; για Linux, απευθείας από τη Wolfram στο . Το Πρόγραμμα Εγκατάστασης του &mathematica; Αρχικά, θα πρέπει να πείτε στο &os; ότι τα εκτελέσιμα για Linux του &mathematica; κάνουν χρήση του Linux ABI. Ο ευκολότερος τρόπος για να το κάνετε αυτό είναι να ορίσετε τον τύπο του ELF ως Linux σε όλες τις εφαρμογές που δεν είναι ήδη branded, κάνοντας χρήση της εντολής: &prompt.root; sysctl kern.fallback_elf_brand=3 Αυτό θα κάνει το &os; να υποθέσει ότι τα εκτελέσιμα ELF που δεν είναι branded, κάνουν χρήση του Linux ABI και έτσι θα μπορείτε να τρέξετε το πρόγραμμα της εγκατάστασης απευθείας από το CDROM. Τώρα, αντιγράψτε το αρχείο MathInstaller στον σκληρό σας δίσκο: &prompt.root; mount /cdrom &prompt.root; cp /cdrom/Unix/Installers/Linux/MathInstaller /localdir/ Ανοίξτε το αρχείο και αντικαταστήστε το /bin/sh στη πρώτη γραμμή με το /compat/linux/bin/sh. Αυτό θα σιγουρέψει ότι το πρόγραμμα εγκατάστασης θα τρέχει με την έκδοση &man.sh.1; για Linux. Στη συνέχεια, αντικαταστήστε όλες τις εγγραφές Linux) με &os;) χρησιμοποιώντας έναν συντάκτη κειμένου ή με το παρακάτω script στην επόμενη ενότητα. Αυτό θα πει στο πρόγραμμα εγκατάστασης του &mathematica;, το οποίο τρέχει την εντολή uname -s για να διαπιστώσει το λειτουργικό σύστημα, να αντιμετωπίσει το &os; σαν ένα λειτουργικό παρεμφερές με το Linux. Η εκτέλεση του MathInstaller θα ξεκινήσει τώρα την εγκατάσταση του &mathematica;. Τροποποιώντας τα Εκτελέσιμα του &mathematica; Τα shell scripts τα οποία δημιουργεί το &mathematica; κατά τη διαδικασία της εγκατάστασης πρέπει να τροποποιηθούν πριν χρησιμοποιηθούν. Αν επιλέξετε το /usr/local/bin ως τον κατάλογο για τα εκτελέσιμα του &mathematica;, θα βρείτε εκεί συμβολικούς δεσμούς (symlinks) προς τα αρχεία math, mathematica, Mathematica, και MathKernel. Σε κάθε περίπτωση από τις παραπάνω, αντικαταστήστε τις εγγραφές Linux) με &os;) με κάποιον συντάκτη κειμένου ή με το παρακάτω shell script: #!/bin/sh cd /usr/local/bin for i in math mathematica Mathematica MathKernel do sed 's/Linux)/&os;)/g' $i > $i.tmp sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i rm $i.tmp chmod a+x $i done Αποκτώντας Κωδικό για το &mathematica; Ethernet MAC address Όταν εκκινήσετε το &mathematica; για πρώτη φορά, θα ερωτηθείτε για έναν κωδικό. Αν δεν έχετε κάποιον κωδικό σε αυτό το στάδιο, τρέξτε το πρόγραμμα mathinfo που βρίσκεται στον κατάλογο εγκατάστασης για να σας δοθεί το machine ID. Το "machine ID" είναι εξ' ολοκλήρου βασισμένο στη διεύθυνση MAC της κάρτας δικτύου που έχετε. Αυτό σημαίνει ότι δεν μπορείτε να τρέξετε το &mathematica; σε άλλους υπολογιστές. Όταν εγγραφείτε στη Wolfram, με e-mail, τηλέφωνο ή fax, θα χρειαστεί να δώσετε το machine ID και θα σας απαντήσουν με έναν αντίστοιχο κωδικό που θα αποτελείται από μια σειρά αριθμών. Τρέχοντας το &mathematica; Frontend μέσω Δικτύου Το &mathematica; κάνει χρήση κάποιων ειδικών γραμματοσειρών για να εμφανίσει χαρακτήρες οι οποίοι δεν υπάρχουν στα συνηθισμένα σετ (ολοκληρώματα, αθροίσματα, Ελληνικά γράμματα, κλπ). To πρωτόκολλο X απαιτεί αυτές οι γραμματοσειρές να υπάρχουν στο τοπικό σύστημα. Αυτό σημαίνει ότι θα χρειαστεί να αντιγράψετε τις γραμματοσειρές αυτές από το CDROM ή από από κάποιον άλλον υπολογιστή που έχει το &mathematica;. Συνήθως αυτές οι γραμματοσειρές μπορούν να βρεθούν μέσα στο κατάλογο /cdrom/Unix/Files/SystemFiles/Fonts του CDROM, ή στον κατάλογο /usr/local/mathematica/SystemFiles/Fonts στον τοπικό σκληρό δίσκο. Οι πραγματικές γραμματοσειρές βρίσκονται σε υποκαταλόγους όπως Type1 και X. Υπάρχουν αρκετοί τρόποι να τις χρησιμοποιήσετε, οι οποίοι περιγράφονται στη συνέχεια. Ο πρώτος τρόπος είναι να τις αντιγράψετε μέσα σε έναν υπάρχοντα κατάλογο στο /usr/X11R6/lib/X11/fonts. Θα χρειαστεί όμως να τροποποιήσετε το αρχείο fonts.dir, ώστε να προσθέσετε τα ονόματα των γραμματοσειρών μέσα σε αυτό, και να αλλάξετε τον αριθμό των γραμματοσειρών στη πρώτη γραμμή. Εναλλακτικά, είναι συνήθως αρκετό να εκτελέσετε απλώς την εντολή &man.mkfontdir.1; μέσα στον κατάλογο που έχετε αντιγράψει τις γραμματοσειρές. Ο δεύτερος τρόπος είναι να αντιγράψετε τους παραπάνω καταλόγους μέσα στο /usr/X11R6/lib/X11/fonts: &prompt.root; cd /usr/X11R6/lib/X11/fonts &prompt.root; mkdir X &prompt.root; mkdir MathType1 &prompt.root; cd /cdrom/Unix/Files/SystemFiles/Fonts &prompt.root; cp X/* /usr/X11R6/lib/X11/fonts/X &prompt.root; cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; cd /usr/X11R6/lib/X11/fonts/X &prompt.root; mkfontdir &prompt.root; cd ../MathType1 &prompt.root; mkfontdir Τώρα προσθέστε τους νέους καταλόγους με τις γραμματοσειρές στο font path: &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/X &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; xset fp rehash Αν χρησιμοποιείτε το &xorg;, μπορείτε να φορτώνετε τις γραμματοσειρές αυτές αυτόματα, προσθέτοντας τους νέους καταλόγους στο αρχείο xorg.conf. Για τον εξυπηρετητή &xfree86;, το αρχείο ρυθμίσεων είναι το XF86Config. fonts Αν δεν έχετε ήδη έναν κατάλογο με το όνομα /usr/X11R6/lib/X11/fonts/Type1, μπορείτε να αλλάξετε το όνομα του MathType1 από το παραπάνω παράδειγμα σε Type1. Aaron Kaplan Συνεισφορά του Robert Getschmann Ευχαριστίες στον Εγκαθιστώντας το &maple; applications Maple Το &maple; είναι μία εμπορική εφαρμογή μαθηματικών παρόμοια με το &mathematica;. Θα πρέπει να αγοράσετε το λογισμικό από το και στη συνέχεια να κάνετε αίτηση για μια άδεια χρήσης. Για να εγκαταστήσετε το λογισμικό στο &os;, ακολουθήστε τα παρακάτω απλά βήματα. Εκτελέστε το INSTALL shell script από το μέσο εγκατάστασης που έχετε. Επιλέξτε RedHat όταν ερωτηθείτε από το πρόγραμμα εγκατάστασης. Ο τυπικός κατάλογος είναι ο /usr/local/maple. Αν δεν έχετε αγοράσει ακόμη κάποια άδεια για το &maple;, αγοράστε μία από το Maple Waterloo Software () και αντιγράψτε το αρχείο που θα σας δοθεί στο /usr/local/maple/license/license.dat. Εγκαταστήσετε το FLEXlm license manager εκτελώντας το INSTALL_LIC shell script το οποία παρέχεται μαζί με το &maple;. Δώστε το βασικό όνομα του υπολογιστή σας το οποίο απαιτείται από τον εξυπηρετητή διαχείρισης των αδειών (license server). Χρησιμοποιήστε το παρακάτω patch στο αρχείο /usr/local/maple/bin/maple.system.type: ----- snip ------------------ *** maple.system.type.orig Sun Jul 8 16:35:33 2001 --- maple.system.type Sun Jul 8 16:35:51 2001 *************** *** 72,77 **** --- 72,78 ---- # the IBM RS/6000 AIX case MAPLE_BIN="bin.IBM_RISC_UNIX" ;; + "FreeBSD"|\ "Linux") # the Linux/x86 case # We have two Linux implementations, one for Red Hat and ----- snip end of patch ----- Σημειώστε ότι μετά το "FreeBSD"|\ δεν πρέπει να εμφανίζεται άλλο κενό διάστημα. Το patch αυτό οδηγεί το &maple; να αναγνωρίσει το &os; σαν ένα σύστημα Linux. Το bin/maple shell script καλεί το bin/maple.system.type shell script, το οποίο με τη σειρά του καλεί την εντολή uname -a προκειμένου να εντοπιστεί το όνομα του λειτουργικού συστήματος. Αναλόγως με το ποιο λειτουργικό βρεθεί, θα χρησιμοποιηθούν και τα αντίστοιχα εκτελέσιμα αρχεία. Εκκινήστε τον license server. Ένας βολικός τρόπος για να εκκινήσετε τοlmgrd είναι το ακόλουθο script που βρίσκεται στο /usr/local/etc/rc.d/lmgrd.sh: ----- snip ------------ #! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX export PATH LICENSE_FILE=/usr/local/maple/license/license.dat LOG=/var/log/lmgrd.log case "$1" in start) lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2 echo -n " lmgrd" ;; stop) lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2 ;; *) echo "Usage: `basename $0` {start|stop}" 1>&2 exit 64 ;; esac exit 0 ----- snip ------------ Δοκιμή του &maple;: &prompt.user; cd /usr/local/maple/bin &prompt.user; ./xmaple Σε αυτό το σημείο θα πρέπει να είναι όλα έτοιμα και να μην έχετε κανένα πρόβλημα. Μην ξεχάσετε όμως να στείλετε ένα e-mail στη Maplesoft και να τους πείτε ότι θέλετε μια έκδοση που να υποστηρίζεται επίσημα στο &os;. Συνηθισμένα Προβλήματα Ίσως δυσκολευτείτε με την λειτουργία του FLEXlm license manager. Επιπλέον τεκμηρίωση μπορείτε να βρείτε στο . Το lmgrd είναι γνωστό ότι θέλει το αρχείο της άδειας να έχει συγκεκριμένη μορφή αλλιώς η εκτέλεση του θα αποτύχει. Ένα σωστό αρχείο άδειας χρήσης πρέπει είναι σε γενικές γραμμές όπως το παρακάτω: # ======================================================= # License File for UNIX Installations ("Pointer File") # ======================================================= SERVER chillig ANY #USE_SERVER VENDOR maplelmg FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \ PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \ ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \ SN=XXXXXXXXX Ο σειριακός αριθμός και το κλειδί φαίνονται εδώ με 'X'. Το chillig είναι το όνομα του συστήματος. Μπορείτε να τροποποιήσετε το αρχείο της άδειας χρήσης, αρκεί να μην αλλάξετε την γραμμή FEATURE (η οποία προστατεύεται από το κλειδί της άδειας). Dan Pelleg Συνεισφορά του Εγκαθιστώντας το &matlab; applications MATLAB Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της Linux έκδοσης του &matlab; 6.5 σε ένα σύστημα &os;. Δουλεύει αρκετά καλά, με εξαίρεση το &java.virtual.machine; (δείτε στο ). Η Linux έκδοση του &matlab; μπορεί να αγοραστεί απευθείας από την εταιρεία The MathWorks στο . Σιγουρευτείτε ότι πήρατε και το αρχείο που περιέχει την άδεια χρήσης ή οδηγίες για το πως να το δημιουργήσετε. Μια και θα επικοινωνήσετε με την εταιρεία, πείτε τους ότι θα θέλατε να υπάρχει επίσης υποστήριξη για το &os;. Εγκατάσταση του &matlab; Για να εγκαταστήσετε το &matlab;, κάντε τα παρακάτω: Εισάγετε το CD και προσαρτήστε το στο σύστημα σας. Συνδεθείτε ως χρήστης root, όπως συνιστά το script της εγκατάστασης. Για να ξεκινήσετε το script της εγκατάστασης δώστε την εντολή: &prompt.root; /compat/linux/bin/sh /cdrom/install Το πρόγραμμα της εγκατάστασης είναι σε γραφικό περιβάλλον. Αν λαμβάνετε σφάλματα σχετικά με την οθόνη, δώστε την εντολή: setenv HOME ~USER, όπου USER είναι ο χρήστης από όπου δώσατε την εντολή &man.su.1;. Όταν ερωτηθείτε για τον κατάλογο του &matlab;, δώστε: /compat/linux/usr/local/matlab. Για ευκολότερη διαδικασία εγκατάστασης, ορίστε το παρακάτω: set MATLAB=/compat/linux/usr/local/matlab στη γραμμή εντολών του κελύφους σας. Τροποποιήσετε το αρχείο της άδειας (license file) σύμφωνα με τις οδηγίες που λάβατε με την άδεια του &matlab;. Μπορείτε να ετοιμάσετε εκ των προτέρων το αρχείο αυτό και να το αντιγράψετε στο $MATLAB/license.dat, πριν καν σας πει το πρόγραμμα εγκατάστασης να το τροποποιήσετε. Ολοκλήρωση της Εγκατάστασης Σε αυτό το σημείο, η εγκατάσταση του &matlab; έχει ολοκληρωθεί. Τα επόμενα βήματα χρειάζονται για να μπορέσετε να το δουλέψετε σωστά με το &os;. Εκκίνηση του License Manager Δημιουργία συμβολικών συνδέσμων για τα scripts του license manager: &prompt.root; ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW &prompt.root; ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW Δημιουργήστε το αρχείο εκκίνησης /usr/local/etc/rc.d/flexlm.sh. Το παράδειγμα παρακάτω είναι μια τροποποιημένη έκδοση του $MATLAB/etc/rc.lm.glnx86. Οι αλλαγές είναι στις τοποθεσίες των αρχείων, και στην εκκίνηση του license manager στο περιβάλλον εξομοίωσης Linux του &os; . #!/bin/sh case "$1" in start) if [ -f /usr/local/etc/lmboot_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd' fi ;; stop) if [ -f /usr/local/etc/lmdown_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmdown_TMW > /dev/null 2>&1 fi ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0 Το αρχείο πρέπει να είναι εκτελέσιμο: &prompt.root; chmod +x /usr/local/etc/rc.d/flexlm.sh Πρέπει επίσης να αντικαταστήσετε το παραπάνω username με ένα υπαρκτό όνομα χρήστη του συστήματος σας (και να μην είναι ο root). Εκκινήστε τον license manager με την εντολή: &prompt.root; /usr/local/etc/rc.d/flexlm.sh start Σύνδεση με το Περιβάλλον του &java; Runtime Environment Αλλάξτε τον σύνδεσμο του&java; Runtime Environment (JRE) σε έναν ο οποίος θα δουλεύει στο &os;: &prompt.root; cd $MATLAB/sys/java/jre/glnx86/ &prompt.root; unlink jre; ln -s ./jre1.1.8 ./jre Δημιουργήστε το Script Εκκίνησης του &matlab; Τοποθετήστε το παρακάτω script στο /usr/local/bin/matlab: #!/bin/sh /compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@" Στη συνέχεια δώστε την εντολή chmod +x /usr/local/bin/matlab. Ανάλογα με την έκδοση του emulators/linux_base, που έχετε, μπορεί να εμφανιστούν μερικά σφάλματα όταν τρέξετε το script. Για να το αποφύγετε αυτό, τροποποιήστε το αρχείο /compat/linux/usr/local/matlab/bin/matlab, και αλλάξτε τη γραμμή που λέει: if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then (στην έκδοση 13.0.1 βρίσκεται στη γραμμή 410) σε αυτή τη γραμμή: if test -L $newbase; then Δημιουργία Script Τερματισμού του &matlab; Τα επόμενα βήματα χρειάζονται για να λύσετε ένα πρόβλημα που υπάρχει με τον τερματισμό του &matlab;. Δημιουργήστε το αρχείο $MATLAB/toolbox/local/finish.m, και μέσα σε αυτό προσθέστε μόνο τη γραμμή: ! $MATLAB/bin/finish.sh To $MATLAB γράψτε το ακριβώς όπως το βλέπετε. Στον ίδιο κατάλογο, θα βρείτε τα αρχεία finishsav.m και finishdlg.m, τα οποία θα σας δίνουν τη δυνατότητα να σώζετε την εργασία σας πριν κλείσετε το πρόγραμμα. Αν πρόκειται να χρησιμοποιήσετε κάποιο από αυτά, προσθέστε του την παραπάνω γραμμή αμέσως μετά την εντολή save . Δημιουργήστε το αρχείο $MATLAB/bin/finish.sh, το οποίο θα περιέχει τα παρακάτω: #!/usr/compat/linux/bin/sh (sleep 5; killall -1 matlab_helper) & exit 0 Κάντε το αρχείο εκτελέσιμο: &prompt.root; chmod +x $MATLAB/bin/finish.sh Χρησιμοποιώντας το &matlab; Σε αυτό το σημείο θα πρέπει να είστε έτοιμοι να δώσετε την εντολή matlab και να αρχίσετε να χρησιμοποιείτε την εφαρμογή. Marcel Moolenaar Συνεισφορά του Εγκατάσταση της &oracle; applications Oracle Εισαγωγή Το κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης των &oracle; 8.0.5 και &oracle; 8.0.5.1 Enterprise Edition για Linux σε ένα σύστημα &os;. Εγκατάσταση του Περιβάλλοντος Linux Σιγουρευτείτε ότι έχετε εγκαταστήσει τα emulators/linux_base και devel/linux_devtools από τη συλλογή των Ports. Αν αντιμετωπίζετε δυσκολίες με τα παραπάνω, ίσως χρειαστεί να τα εγκαταστήσετε από πακέτα ή από παλιότερες εκδόσεις της συλλογής των Ports. Αν θέλετε να τρέξετε τον intelligent agent, θα χρειαστεί να εγκαταστήσετε και το πακέτο Red Hat Tcl: tcl-8.0.3-20.i386.rpm. Η εντολή για την εγκατάσταση μέσω του επίσημου RPM port (archivers/rpm) είναι: &prompt.root; rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package Η εγκατάσταση του package θα πρέπει να γίνει ομαλά και χωρίς προβλήματα. Ρυθμίζοντας το Περιβάλλον για την &oracle; Πριν την εγκατάσταση της &oracle;, θα πρέπει να ρυθμίσετε σωστά το περιβάλλον του συστήματός σας. Το παρακάτω κείμενο περιγράφει τι ακριβώς πρέπει να κάνετε για να εκτελέσετε την &oracle; για Linux στο &os;, και δεν περιγράφει ότι υπάρχει ήδη στον οδηγό εγκατάστασης της &oracle;. Ρύθμιση του Πυρήνα kernel tuning Όπως περιγράφει ο οδηγός εγκατάστασης της &oracle;, θα πρέπει να ορίσετε τις τιμές της shared memory στο μέγιστο. Μην χρησιμοποιήσετε το SHMMAX στο &os;. Το SHMMAX υπολογίζεται απλώς από το SHMMAXPGS και το PGSIZE. Επομένως καθορίστε το SHMMAXPGS. Όλες οι άλλες επιλογές μπορούν να οριστούν όπως περιγράφεται στον οδηγό. Για παράδειγμα: options SHMMAXPGS=10000 options SHMMNI=100 options SHMSEG=10 options SEMMNS=200 options SEMMNI=70 options SEMMSL=61 Ορίστε τις τιμές των επιλογών έτσι ώστε να ταιριάζουν στη χρήση της &oracle; που θέλετε να κάνετε. Επίσης, επιβεβαιώστε ότι έχετε ενεργοποιήσει τις παρακάτω επιλογές στις ρυθμίσεις του πυρήνα: options SYSVSHM #SysV shared memory options SYSVSEM #SysV semaphores options SYSVMSG #SysV interprocess communication Ο Χρήστης &oracle; Δημιουργήστε ένα χρήστη συστήματος με όνομα oracle, με τον ίδιο τρόπο που θα δημιουργούσατε και οποιονδήποτε άλλον χρήστη. Το μόνο ιδιαίτερο χαρακτηριστικό του χρήστη oracle είναι ότι χρειάζεται να του δώσετε ένα κέλυφος Linux. Προσθέστε το /compat/linux/bin/bash στο /etc/shells και ορίστε το κέλυφος του χρήστη oracle σε /compat/linux/bin/bash. Το Περιβάλλον Εκτός των συνηθισμένων μεταβλητών της &oracle;, όπως οι ORACLE_HOME και ORACLE_SID θα πρέπει να ορίσετε και τις ακόλουθες μεταβλητές περιβάλλοντος: Μεταβλητή Τιμή LD_LIBRARY_PATH $ORACLE_HOME/lib CLASSPATH $ORACLE_HOME/jdbc/lib/classes111.zip PATH /compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin Σας συνιστούμε να ορίσετε όλες τις μεταβλητές περιβάλλοντος στο αρχείο .profile. Ένα ολοκληρωμένο παράδειγμα είναι το παρακάτω: ORACLE_BASE=/oracle; export ORACLE_BASE ORACLE_HOME=/oracle; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH ORACLE_SID=ORCL; export ORACLE_SID ORACLE_TERM=386x; export ORACLE_TERM CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip export CLASSPATH PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin export PATH Εγκατάσταση της &oracle; Λόγω μια μικρής έλλειψης στον εξομοιωτή του Linux, θα χρειαστεί να δημιουργήσετε έναν κατάλογο με το όνομα .oracle μέσα στο /var/tmp, πριν ξεκινήσετε το πρόγραμμα εγκατάστασης. Ο κατάλογος αυτός θα πρέπει να ανήκει στον χρήστη oracle. Θα πρέπει τώρα να πραγματοποιήσετε την εγκατάσταση της &oracle; δίχως κανένα πρόβλημα. Αν αντιμετωπίζετε όμως ακόμη προβλήματα, ελέγξτε την έκδοση της &oracle; που έχετε ή/και τις ρυθμίσεις σας! Αφότου έχετε πραγματοποιήσει την εγκατάσταση της &oracle;, εφαρμόστε τα patches που περιγράφονται στις δύο παρακάτω ενότητες. Ένα συχνό πρόβλημα είναι ότι δεν γίνεται σωστή εγκατάσταση του προσαρμογέα του πρωτοκόλλου TCP. Αυτό έχει ως αποτέλεσμα να μην μπορείτε να ξεκινήσετε τους TCP listeners. Οι ακόλουθες οδηγίες θα σας βοηθήσουν να λύσετε αυτό το πρόβλημα.: &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk ntcontab.o &prompt.root; cd $ORACLE_HOME/lib &prompt.root; ar r libnetwork.a ntcontab.o &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk install Μη ξεχάσετε να τρέξετε ξανά το root.sh Διόρθωση του root.sh Όταν εγκαθιστάτε την &oracle;, κάποιες ενέργειες, οι οποίες χρειάζονται να γίνουν ως root, καταγράφονται σε ένα shell script που λέγεται root.sh. Το script αυτό δημιουργείται στον κατάλογο orainst. Εφαρμόστε το παρακάτω patch στο root.sh, για να μπορέσει να βρει και να χρησιμοποιήσει το chown. Εναλλακτικά, τρέξτε το script μέσα από ένα κέλυφος Linux. *** orainst/root.sh.orig Tue Oct 6 21:57:33 1998 --- orainst/root.sh Mon Dec 28 15:58:53 1998 *************** *** 31,37 **** # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/bin/chown # # Define variables to be used in this script --- 31,37 ---- # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/usr/sbin/chown # # Define variables to be used in this script Όταν δεν κάνετε χρήση του CD για την εγκατάσταση, μπορείτε να περάσετε το patch για το root.sh, στην πηγή εγκατάστασης. To αρχείο ονομάζεται rthd.sh και βρίσκεται στον κατάλογο orainst. Διόρθωση του genclntsh To script genclntsh χρησιμοποιείται για να δημιουργήσει μια shared client library. Τρέξτε το παρακάτω patch για να σβήσετε το καθορισμένο PATH: *** bin/genclntsh.orig Wed Sep 30 07:37:19 1998 --- bin/genclntsh Tue Dec 22 15:36:49 1998 *************** *** 32,38 **** # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst --- 32,38 ---- # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst Εκτέλεση της &oracle; Αφού έχετε ακολουθήσει αυτές τις οδηγίες, θα πρέπει να μπορείτε να εκτελέσετε την &oracle; σαν να βρισκόσασταν σε ένα σύστημα Linux. Holger Kipp Συνεισφορά του Valentino Vaschetto Αρχική μετατροπή σε SGML από τον Εγκατάσταση του &sap.r3; applications SAP R/3 Η εγκατάσταση συστημάτων &sap; χρησιμοποιώντας το &os; δεν υποστηρίζεται από την ομάδα υποστήριξης της &sap; — υποστήριξη παρέχεται μόνο σε συγκεκριμένες, υποστηριζόμενες, πλατφόρμες. Εισαγωγή Το κείμενο αυτό περιγράφει ένα πιθανό τρόπο για την εγκατάσταση του &sap.r3; System με μία βάση δεδομένων &oracle; για Linux σε ένα σύστημα &os;, περιλαμβάνοντας την εγκατάσταση του &os; και της &oracle;. Θα περιγράψουμε δύο διαφορετικά είδη ρυθμίσεων: &sap.r3; 4.6B (IDES) με &oracle; 8.0.5 σε &os; 4.3-STABLE &sap.r3; 4.6C με &oracle; 8.1.7 σε &os; 4.5-STABLE Παρ' όλο που αυτό το κείμενο προσπαθεί να περιγράψει με λεπτομέρειες όλα τα απαραίτητα βήματα, δεν θα πρέπει να θεωρηθεί ως αντικαταστάτης των οδηγών εγκατάστασης της &oracle; και του &sap.r3;. Δείτε τον οδηγό του &sap.r3; για Linux για ερωτήσεις σχετικά με το &sap; και την &oracle;, και για πηγές από την &oracle; και το &sap; OSS. Λογισμικό Τα ακόλουθα CD-ROMs έχουν χρησιμοποιηθεί για την εγκατάσταση του &sap;: &sap.r3; 4.6B, &oracle; 8.0.5 Όνομα Αρίθμηση Περιγραφή KERNEL 51009113 SAP Kernel Oracle / Installation / AIX, Linux, Solaris RDBMS 51007558 Oracle / RDBMS 8.0.5.X / Linux EXPORT1 51010208 IDES / DB-Export / Disc 1 of 6 EXPORT2 51010209 IDES / DB-Export / Disc 2 of 6 EXPORT3 51010210 IDES / DB-Export / Disc 3 of 6 EXPORT4 51010211 IDES / DB-Export / Disc 4 of 6 EXPORT5 51010212 IDES / DB-Export / Disc 5 of 6 EXPORT6 51010213 IDES / DB-Export / Disc 6 of 6 Επιπλέον, χρησιμοποιήσαμε το &oracle; 8 Server (Pre-production version 8.0.5 για Linux, Kernel Version 2.0.33) CD το οποίο δεν είναι απαραίτητο, και το &os; 4.3-STABLE (ένα στιγμιότυπο λίγες μόνο μέρες μετά την έκδοση 4.3-RELEASE). &sap.r3; 4.6C SR2, &oracle; 8.1.7 Όνομα Αρίθμηση Περιγραφή KERNEL 51014004 SAP Kernel Oracle / SAP Kernel Version 4.6D / DEC, Linux RDBMS 51012930 Oracle 8.1.7/ RDBMS / Linux EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 1 of 4 EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 2 of 4 EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 3 of 4 EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 4 of 4 LANG1 51013954 Release 4.6C SR2 / Language / DE, EN, FR / Disc 1 of 3 Αναλόγως με τις γλώσσες που θέλετε να εγκαταστήσετε, θα χρειαστείτε επιπλέον τα αντίστοιχα CDs. Εμείς χρησιμοποιούμε Γερμανικά (DE) και Αγγλικά (EN), οπότε χρειαζόμαστε μόνο το πρώτο CD. Μια μικρή σημείωση, η αρίθμηση των EXPORT CDs είναι ακριβώς η ίδια. Όλα τα CDs των γλωσσών έχουν την ίδια αρίθμηση (αυτό διαφέρει σε σχέση με την αρίθμηση της έκδοσης 4.6B IDES). Την ώρα που γράφονται αυτές οι γραμμές, η εγκατάσταση λειτουργεί σε &os; 4.5-STABLE (20.03.2002). Σημειώσεις &sap; Οι ακόλουθες σημειώσεις θα πρέπει να διαβαστούν πριν την εγκατάσταση του &sap.r3; μια και είναι χρήσιμες για τη διαδικασία εγκατάστασης: &sap.r3; 4.6B, &oracle; 8.0.5 Αρίθμηση Τίτλος 0171356 SAP Software on Linux: Essential Comments 0201147 INST: 4.6C R/3 Inst. on UNIX - Oracle 0373203 Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6 LINUX 0072984 Release of Digital UNIX 4.0B for Oracle 0130581 R3SETUP step DIPGNTAB terminates 0144978 Your system has not been installed correctly 0162266 Questions and tips for R3SETUP on Windows NT / W2K &sap.r3; 4.6C, &oracle; 8.1.7 Αρίθμηση Τίτλος 0015023 Initializing table TCPDB (RSXP0004) (EBCDIC) 0045619 R/3 with several languages or typefaces 0171356 SAP Software on Linux: Essential Comments 0195603 RedHat 6.1 Enterprise version: Known problems 0212876 The new archiving tool SAPCAR 0300900 Linux: Released DELL Hardware 0377187 RedHat 6.2: important remarks 0387074 INST: R/3 4.6C SR2 Installation on UNIX 0387077 INST: R/3 4.6C SR2 Inst. on UNIX - Oracle 0387078 SAP Software on UNIX: OS Dependencies 4.6C SR2 Απαιτήσεις Συστήματος Ο ακόλουθος εξοπλισμός είναι αρκετός για μια τυπική εγκατάσταση του &sap.r3; System. Για μηχανήματα παραγωγής θα χρειαστείτε φυσικά καλύτερη εκτίμηση των απαιτήσεων σας: Εξάρτημα 4.6B 4.6C Επεξεργαστής 2 x 800MHz &pentium; III 2 x 800MHz &pentium; III Μνήμη 1GB ECC 2GB ECC Σκληρός Δίσκος 50-60GB (IDES) 50-60GB (IDES) Για χρήση σε παραγωγή, θα χρειαστείτε επεξεργαστές &xeon; με μεγάλη μνήμη cache, δίσκους υψηλής ταχύτητας (SCSI, με hardware ελεγκτή RAID), USV και ECC-RAM. Το μεγάλο μέγεθος του σκληρού δίσκου, οφείλεται στο προρυθμισμένο σύστημα IDES, που δημιουργεί 27 GB αρχεία βάσης δεδομένων κατά τη διάρκεια της εγκατάστασης. Ο χώρος αυτός επαρκεί επίσης για τα δεδομένα της εφαρμογής σε ένα αρχικό σύστημα παραγωγής. &sap.r3; 4.6B, &oracle; 8.0.5 Χρησιμοποιήθηκαν τα ακόλουθα κοινά εξαρτήματα: μητρική για δύο επεξεργαστές με 2 &pentium; III στα 800 MHZ, ελεγκτή SCSI &adaptec; 29160 Ultra160 (για πρόσβαση σε οδηγό ταινίας 40/80 GB DLT και στο CDROM), &mylex; &acceleraid; (2 καναλιών, firmware 6.00-1-00 με 32 MB RAM). Στο &mylex; RAID controller είναι συνδεδεμένοι δύο σκληροί δίσκοι των 17 GB (mirrored) και τέσσερις των 36 GB (RAID level 5). &sap.r3; 4.6C, &oracle; 8.1.7 Σε αυτή την εγκατάσταση χρησιμοποιήσαμε έναν &dell; &poweredge; 2500: μητρική με δύο επεξεργαστές &pentium; III στα 1000 MHz (256 kB Cache), 2 GB PC133 ECC SDRAM, PERC/3 DC PCI RAID Controller με 128 MB, και οδηγό EIDE DVD-ROM. Στο RAID controller είναι συνδεδεμένοι δύο σκληροί δίσκοι των 18 GB (mirrored) και τέσσερις των 36 GB (RAID level 5). Εγκατάσταση του &os; Αρχικά πρέπει να εγκαταστήσετε το &os;. Αυτό μπορεί να γίνει με διάφορους τρόπους, για περισσότερες πληροφορίες δείτε στο . Διάταξη Δίσκου Για να κρατήσουμε τη διαδικασία απλή, χρησιμοποιήσαμε την ίδια διάταξη δίσκου, τόσο στο &sap.r3; 46B όσο και στο &sap.r3; 46C SR2. Μόνο τα ονόματα των συσκευών άλλαξαν, καθώς η κάθε εγκατάσταση έγινε σε διαφορετικό μηχάνημα. (/dev/da και /dev/amr αντίστοιχα, οπότε αν χρησιμοποιείτε έναν AMI &megaraid;, θα δείτε το /dev/amr0s1a αντί του /dev/da0s1a): Σύστημα αρχείων Μέγεθος (1k-blocks) Μέγεθος (GB) Προσάρτηση στο /dev/da0s1a 1.016.303 1 / /dev/da0s1b 6 swap /dev/da0s1e 2.032.623 2 /var /dev/da0s1f 8.205.339 8 /usr /dev/da1s1e 45.734.361 45 /compat/linux/oracle /dev/da1s1f 2.032.623 2 /compat/linux/sapmnt /dev/da1s1g 2.032.623 2 /compat/linux/usr/sap Ρυθμίστε από πριν τους δύο δίσκους με το λογισμικό &mylex; ή το PERC/3 RAID. Μπορείτε να εισέλθετε σε αυτό κατά τη φάση εκκίνησης του BIOS. Προσέξτε εδώ ότι η διάταξη του δίσκου διαφέρει λίγο ως προς τη συνιστώμενη από τη &sap;, καθώς η &sap; προτείνει να προσαρτήσετε τους υποκαταλόγους της &oracle; (και κάποιους άλλους) ξεχωριστά — εμείς προτιμήσαμε, για λόγους απλότητας, να δημιουργήσουμε κανονικούς καταλόγους. <command>make world</command> και Νέος Πυρήνας Κατεβάστε τον πηγαίο κώδικα του τελευταίου πυρήνα -STABLE. Μεταγλωττίστε το world (βασικό σύστημα) και τον πυρήνα σας αφού δημιουργήσετε πρώτα ένα προσαρμοσμένο αρχείο ρυθμίσεων πυρήνα. Εδώ θα πρέπει να συμπεριλάβετε και τις παραμέτρους πυρήνα (kernel parameters) οι οποίες χρειάζονται τόσο για το &sap.r3; όσο και την &oracle;. Εγκατάσταση του Περιβάλλοντος Linux Εγκατάσταση του Linux Base System Αρχικά χρειάζεται να έχετε εγκαταστήσει το linux_base port (ως χρήστης root): &prompt.root; cd /usr/ports/emulators/linux_base &prompt.root; make install distclean Εγκατάσταση του Περιβάλλοντος Ανάπτυξης Linux Το περιβάλλον ανάπτυξης Linux χρειάζεται αν θέλετε να εγκαταστήσετε την &oracle; στο &os; όπως περιγράφεται στο : &prompt.root; cd /usr/ports/devel/linux_devtools &prompt.root; make install distclean Εγκαταστήσαμε το περιβάλλον ανάπτυξης Linux μόνο για την εγκατάσταση του &sap.r3; 46B IDES. Αν έχετε εγκαταστήσει την &oracle; DB από την &oracle; για συστήματα Linux, τότε δεν χρειάζεται να σας απασχολεί. Εγκατάσταση των Απαραίτητων RPMs RPMs Για να ξεκινήσει το πρόγραμμα R3SETUP, χρειάζεται να υπάρχει υποστήριξη PAM. Κατά τη διάρκεια της πρώτης εγκατάστασης του &sap; στο &os; 4.3-STABLE, προσπαθήσαμε να εγκαταστήσουμε το PAM με όλα τα απαραίτητα πακέτα και τελικά εξαναγκάσαμε την εγκατάσταση του πακέτου PAM, το οποίο και δούλεψε. Για το &sap.r3; 4.6C SR2 εξαναγκάσαμε άμεσα την εγκατάσταση του πακέτου PAM, το οποίο επίσης δούλεψε, πράγμα που σημαίνει ότι τα πακέτα που αναφέρονται ως εξαρτήσεις του, δεν χρειάζονται: &prompt.root; rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm \ pam-0.68-7.i386.rpm Για τον intelligent agent του &oracle; 8.0.5, έπρεπε να εγκαταστήσουμε το πακέτο Tcl της RedHat tcl-8.0.5-30.i386.rpm (διαφορετικά η επανασύνδεση κατά τη διάρκεια της εγκατάστασης της &oracle; δεν θα ήταν εφικτή). Υπάρχουν και κάποια άλλα προβλήματα σχετικά με τη επανασύνδεση της &oracle;, αλλά αυτό είναι θέμα της &oracle; για Linux, και όχι του &os;. Επιπλέον Συμβουλές Ίσως είναι επίσης καλή ιδέα να προσθέσετε το linprocfs στο /etc/fstab. Για περισσότερες πληροφορίες, δείτε τη σελίδα manual &man.linprocfs.5;. Μια άλλη παράμετρος που μπορείτε να ορίσετε είναι η kern.fallback_elf_brand=3 η οποία ορίζεται στο αρχείο /etc/sysctl.conf. Δημιουργία του Περιβάλλοντος &sap.r3; Δημιουργία των Απαραιτήτων Συστημάτων Αρχείων και Προσαρτήσεων Για μια απλή εγκατάσταση, αρκεί να δημιουργήσετε τα παρακάτω συστήματα αρχείων και προσαρτήσεις: σημείο προσάρτησης μέγεθος σε GB /compat/linux/oracle 45 GB /compat/linux/sapmnt 2 GB /compat/linux/usr/sap 2 GB Είναι επίσης απαραίτητο να δημιουργήσετε και μερικούς συνδέσμους. Διαφορετικά το πρόγραμμα εγκατάστασης του &sap; θα παραπονεθεί: &prompt.root; ln -s /compat/linux/oracle /oracle &prompt.root; ln -s /compat/linux/sapmnt /sapmnt &prompt.root; ln -s /compat/linux/usr/sap /usr/sap Ένα πιθανό μήνυμα σφάλματος κατά τη διάρκεια της εγκατάστασης (εδώ με System PRD και εγκατάσταση του &sap.r3; 4.6C SR2): INFO 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:200 Checking existence of symbolic link /usr/sap/PRD/SYS/exe/dbg to /sapmnt/PRD/exe. Creating if it does not exist... WARNING 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:400 Link /usr/sap/PRD/SYS/exe/dbg exists but it points to file /compat/linux/sapmnt/PRD/exe instead of /sapmnt/PRD/exe. The program cannot go on as long as this link exists at this location. Move the link to another location. ERROR 2002-03-19 16:45:36 R3LINKS_IND_IND Ins_SetupLinks:0 can not setup link '/usr/sap/PRD/SYS/exe/dbg' with content '/sapmnt/PRD/exe' Δημιουργία Χρηστών και Καταλόγων Το &sap.r3; χρειάζεται δύο χρήστες και τρεις ομάδες (groups). Τα ονόματα των χρηστών εξαρτώνται από το &sap; system ID (SID) το οποίο αποτελείται από τρία γράμματα. Μερικά από αυτά τα SIDs είναι δεσμευμένα από το &sap; (για παράδειγμα τα SAP και NIX. Για πλήρη λίστα δείτε την τεκμηρίωση του &sap;). Για την εγκατάσταση IDES, χρησιμοποιήσαμε IDS, για την εγκατάσταση στο σύστημα 4.6C SR2 χρησιμοποιήσαμε PRD, καθώς αυτό το σύστημα προορίζεται για χρήση παραγωγής. Επομένως, χρειαστήκαμε τις ακόλουθες ομάδες (τα ID των ομάδων μπορούν να διαφέρουν, αυτές είναι απλώς οι τιμές που χρησιμοποιήσαμε στη δική μας εγκατάσταση): ID ομάδας όνομα ομάδας περιγραφή 100 dba Data Base Administrator (Διαχειριστής Βάσης Δεδομένων) 101 sapsys &sap; System 102 oper Data Base Operator (Χειριστής Βάσης Δεδομένων) Για τη τυπική εγκατάσταση της &oracle;, θα χρειαστείτε μόνο την ομάδα dba (δείτε τη τεκμηρίωση της &oracle; και του &sap; για περισσότερες πληροφορίες). Θα χρειαστούμε επίσης τους ακόλουθους χρήστες: ID χρήστη όνομα χρήστη γενικό όνομα αρχική ομάδα επιπλέον ομάδες περιγραφή 1000 idsadm/prdadm sidadm sapsys oper &sap; Administrator (Διαχειριστής) 1002 oraids/oraprd orasid dba oper &oracle; Administrator (Διαχειριστής) Η προσθήκη των χρηστών με την εντολή &man.adduser.8; απαιτεί τις ακόλουθες καταχωρήσεις για τον &sap; Administrator (προσέξτε το shell και τον κατάλογο home): Name: sidadm Password: ****** Fullname: SAP Administrator SID Uid: 1000 Gid: 101 (sapsys) Class: Groups: sapsys dba HOME: /home/sidadm Shell: bash (/compat/linux/bin/bash) και για τον &oracle; Administrator: Name: orasid Password: ****** Fullname: Oracle Administrator SID Uid: 1002 Gid: 100 (dba) Class: Groups: dba HOME: /oracle/sid Shell: bash (/compat/linux/bin/bash) Θα πρέπει να περιλάβετε και την ομάδα oper σε περίπτωση που χρησιμοποιήσετε και τις δύο ομάδες dba και oper. Δημιουργία Καταλόγων Οι παρακάτω κατάλογοι δημιουργούνται συνήθως ως ξεχωριστά συστήματα αρχείων. Αυτό όμως εξαρτάται από τις απαιτήσεις σας. Εμείς επιλέξαμε να τους δημιουργήσουμε ως απλούς καταλόγους, καθώς όλοι τους βρίσκονται στο ίδιο RAID 5: Αρχικά θα χρειαστεί να ορίσουμε ιδιοκτήτες και άδειες σε κάποιους καταλόγους (ως χρήστης root): &prompt.root; chmod 775 /oracle &prompt.root; chmod 777 /sapmnt &prompt.root; chown root:dba /oracle &prompt.root; chown sidadm:sapsys /compat/linux/usr/sap &prompt.root; chmod 775 /compat/linux/usr/sap Σε δεύτερη φάση θα δημιουργήσουμε τους καταλόγους ως χρήστης orasid. Όλοι αυτοί οι κατάλογοι υπάγονται στον /oracle/SID: &prompt.root; su - orasid &prompt.root; cd /oracle/SID &prompt.root; mkdir mirrlogA mirrlogB origlogA origlogB &prompt.root; mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6 &prompt.root; mkdir saparch sapreorg &prompt.root; exit Για την εγκατάσταση της &oracle; 8.1.7, θα χρειαστούν μερικοί κατάλογοι ακόμη: &prompt.root; su - orasid &prompt.root; cd /oracle &prompt.root; mkdir 805_32 &prompt.root; mkdir client stage &prompt.root; mkdir client/80x_32 &prompt.root; mkdir stage/817_32 &prompt.root; cd /oracle/SID &prompt.root; mkdir 817_32 Ο κατάλογος client/80x_32 χρησιμοποιείται με αυτό ακριβώς το όνομα. Μην αντικαταστήσετε το x με κάποιον αριθμό ή κάτι άλλο. Στο τρίτο βήμα δημιουργούμε τους καταλόγους ως χρήστης sidadm: &prompt.root; su - sidadm &prompt.root; cd /usr/sap &prompt.root; mkdir SID &prompt.root; mkdir trans &prompt.root; exit Εγγραφές στο <filename>/etc/services</filename> Το &sap.r3; χρειάζεται μερικές εγγραφές στο αρχείο /etc/services, οι οποίες δεν εισάγονται κατά τη διάρκεια της εγκατάστασης του &os;. Προσθέστε τις παρακάτω εγγραφές (θα χρειαστείτε τουλάχιστον τις εγγραφές που αντιστοιχούν στο instance της εφαρμογής που τρέχετε — στη περίπτωση μας, το 00. Δεν θα υπάρξει κανένα πρόβλημα αν προσθέσετε όλες τις εγγραφές από το 00 ως το 99 για τα dp, gw, sp και ms). Αν πρόκειται να χρησιμοποιήσετε SAProuter ή χρειάζεστε πρόσβαση στο &sap; OSS, θα χρειαστείτε και την εγγραφή 99, μια και η θύρα 3299 χρησιμοποιείται συχνά από την διεργασία του SAProuter: sapdp00 3200/tcp # SAP Dispatcher. 3200 + Instance-Number sapgw00 3300/tcp # SAP Gateway. 3300 + Instance-Number sapsp00 3400/tcp # 3400 + Instance-Number sapms00 3500/tcp # 3500 + Instance-Number sapmsSID 3600/tcp # SAP Message Server. 3600 + Instance-Number sapgw00s 4800/tcp # SAP Secure Gateway 4800 + Instance-Number Απαραίτητες Τοπικές Ρυθμίσεις locale Το &sap; απαιτεί τουλάχιστον δύο τοπικές ρυθμίσεις (locales) που δεν ανήκουν στις προεπιλεγμένες που εγκαθιστά το RedHat. Το &sap; προσφέρει τα απαιτούμενα RPMs για να τα κατεβάσετε από τον δικό τους διακομιστή FTP (ο οποίος είναι διαθέσιμος μόνο αν είστε πελάτης με πρόσβαση OSS). Δείτε τη σημείωση 0171356 για τη λίστα από πακέτα RPMs που χρειάζεστε. Είναι επίσης εφικτό να δημιουργήσετε απλώς τους κατάλληλους συνδέσμους (για παράδειγμα από τα de_DE και en_US), αλλά προτείνουμε να μη κάνετε κάτι τέτοιο αν πρόκειται για μηχάνημα παραγωγής (ωστόσο αυτό έχει μέχρι στιγμής δουλέψει χωρίς πρόβλημα σε σύστημα IDES). Θα χρειαστείτε τις ακόλουθες τοπικές ρυθμίσεις: de_DE.ISO-8859-1 en_US.ISO-8859-1 Οι σύνδεσμοι μπορούν να δημιουργηθούν με τον ακόλουθο τρόπο: &prompt.root; cd /compat/linux/usr/share/locale &prompt.root; ln -s de_DE de_DE.ISO-8859-1 &prompt.root; ln -s en_US en_US.ISO-8859-1 Αν οι σύνδεσμοι δεν υπάρχουν, θα δημιουργηθούν προβλήματα κατά την εγκατάσταση. Αν αγνοήσετε αυτά τα προβλήματα, (ορίζοντας το STATUS των προβληματικών βημάτων σε OK στο αρχείο CENTRDB.R3S), ίσως είναι αδύνατο να συνδεθείτε στο &sap; χωρίς κάποια επιπλέον προσπάθεια και σπατάλη χρόνου. Ρύθμιση του Πυρήνα kernel tuning Το &sap.r3; χρειάζεται αρκετούς πόρους από το σύστημά σας. Για αυτό το λόγο ορίσαμε τις παρακάτω παραμέτρους στις ρυθμίσεις του πυρήνα: # Set these for memory pigs (SAP and Oracle): options MAXDSIZ="(1024*1024*1024)" options DFLDSIZ="(1024*1024*1024)" # System V options needed. options SYSVSHM #SYSV-style shared memory options SHMMAXPGS=262144 #max amount of shared mem. pages #options SHMMAXPGS=393216 #use this for the 46C inst.parameters options SHMMNI=256 #max number of shared memory ident if. options SHMSEG=100 #max shared mem.segs per process options SYSVMSG #SYSV-style message queues options MSGSEG=32767 #max num. of mes.segments in system options MSGSSZ=32 #size of msg-seg. MUST be power of 2 options MSGMNB=65535 #max char. per message queue options MSGTQL=2046 #max amount of msgs in system options SYSVSEM #SYSV-style semaphores options SEMMNU=256 #number of semaphore UNDO structures options SEMMNS=1024 #number of semaphores in system options SEMMNI=520 #number of semaphore identifiers options SEMUME=100 #number of UNDO keys Οι ελάχιστες τιμές που θέτουμε προέρχονται από τη τεκμηρίωση του &sap;. Μια και δεν υπάρχουν οδηγίες για Linux, για περισσότερες πληροφορίες, ρίξτε μια ματιά σε αυτές για το HP-UX (32-bit). Μια και το σύστημα για την εγκατάσταση του 4.6C SR2 έχει περισσότερη μνήμη, τα διαμοιραζόμενα τμήματα μπορούν να είναι μεγαλύτερα, τόσο για το &sap; όσο και για την &oracle;. Επομένως, επιλέξτε έναν μεγαλύτερο αριθμό για τα shared memory pages. Με την προεπιλεγμένη εγκατάσταση του &os; σε &i386;, αφήστε τα MAXDSIZ και DFLDSIZ στο 1 GB το πολύ. Διαφορετικά, μπορεί να δείτε να εμφανίζονται περίεργα σφάλματα όπως ORA-27102: out of memory και Linux Error: 12: Cannot allocate memory Εγκατάσταση του &sap.r3; Προετοιμάζοντας τα &sap; CDROMs Στη διαδικασία της εγκατάστασης εμπλέκονται αρκετά CDROMs. Αν έχετε αρκετούς οδηγούς, θα μπορέσετε να τα προσαρτήσετε όλα με μιας στο σύστημα σας. Εμείς αποφασίσαμε να αντιγράψουμε το περιεχόμενο των CDROMs στους αντίστοιχους καταλόγους: /oracle/SID/sapreorg/cd-name όπου cd-name αντιστοιχεί σε ένα από τα KERNEL, RDBMS, EXPORT1, EXPORT2, EXPORT3, EXPORT4, EXPORT5 και EXPORT6 για την εγκατάσταση σε 4.6B/IDES, και KERNEL, RDBMS, DISK1, DISK2, DISK3, DISK4 και LANG για την εγκατάσταση του 4.6C SR2. Όλα τα ονόματα των αρχείων στα προσαρτημένα CDs θα πρέπει να είναι με κεφαλαία, διαφορετικά κάντε χρήση της επιλογής κατά την προσάρτηση. Χρησιμοποιείστε λοιπόν τις παρακάτω εντολές: &prompt.root; mount_cd9660 -g /dev/cd0a /mnt &prompt.root; cp -R /mnt/* /oracle/SID/sapreorg/cd-name &prompt.root; umount /mnt Τρέξτε το Script της Εγκατάστασης Αρχικά πρέπει να προετοιμάσετε τον κατάλογο install: &prompt.root; cd /oracle/SID/sapreorg &prompt.root; mkdir install &prompt.root; cd install Στη συνέχεια ξεκινήστε το script της εγκατάστασης, το οποίο θα αντιγράψει όλα τα σχετικά αρχεία μέσα στον κατάλογο install: &prompt.root; /oracle/SID/sapreorg/KERNEL/UNIX/INSTTOOL.SH Η εγκατάσταση του IDES (4.6B) έρχεται με ένα πλήρως προσαρμοσμένο σύστημα επίδειξης του &sap.r3;, έτσι υπάρχουν έξι CD EXPORT αντί για τρία. Σε αυτό το σημείο το πρότυπο αρχείο εγκατάστασης CENTRDB.R3S προορίζεται για την εγκατάσταση του βασικού συστήματος (το ίδιο το &r3; και τη βάση δεδομένων), όχι την κεντρική εφαρμογή IDES, έτσι χρειάζεται να αντιγράψετε και το αντίστοιχο CENTRDB.R3S από τον κατάλογο EXPORT1, διαφορετικά το R3SETUP θα ζητήσει μόνο τα τρία EXPORT CDs. Η νεότερη έκδοση &sap; 4.6C SR2 περιέχει τέσσερα EXPORT CD. Το αρχείο το οποίο ελέγχει τα βήματα της εγκατάστασης είναι το CENTRAL.R3S. Σε αντίθεση με τις προηγούμενες εκδόσεις, δεν υπάρχουν διαφορετικές μορφές εγκατάστασης, για κεντρική εγκατάσταση με ή χωρίς βάση δεδομένων. Το &sap; χρησιμοποιεί πλέον μια διαφορετική διαδικασία για την εγκατάσταση της βάσης δεδομένων. Αν θέλετε όμως να επανεκκινήσετε την εγκατάσταση αργότερα, αρκεί να χρησιμοποιήσετε ξανά το αρχικό αρχείο. Τόσο κατά τη διάρκεια όσο και μετά την εγκατάσταση, το &sap; απαιτεί η εντολή hostname να επιστρέφει μόνο το όνομα του συστήματος σας και όχι το πλήρες όνομα (με τον τομέα). Επομένως, είτε ρυθμίστε το όνομα με αυτό τον τρόπο, ή χρησιμοποιήστε κάποιο alias δίνοντας alias hostname='hostname -s' τόσο για τον χρήστη orasid όσο και για τον χρήστη sidadm (και για τον root τουλάχιστον κατά την εγκατάσταση, μιας και όλα τα βήματα γίνονται ωςroot). Είναι επίσης πιθανό να τροποποιήσετε τα αρχεία .profile και .login των δύο χρηστών που δημιουργήθηκαν κατά τη διάρκεια εγκατάστασης του &sap;. Εκκίνηση του <command>R3SETUP</command> 4.6B Βεβαιωθείτε ότι το LD_LIBRARY_PATH έχει οριστεί σωστά: &prompt.root; export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/lib Ξεκινήστε το R3SETUP ως root από τον κατάλογο εγκατάστασης: &prompt.root; cd /oracle/IDS/sapreorg/install &prompt.root; ./R3SETUP -f CENTRDB.R3S Το script θα σας κάνει μερικές ερωτήσεις (οι προεπιλογές φαίνονται σε αγκύλες,και ακολουθούνται από την τιμή που δόθηκε ως είσοδος): Ερώτηση Προεπιλογή Είσοδος δεδομένων Enter SAP System ID [C11] IDSEnter Enter SAP Instance Number [00] Enter Enter SAPMOUNT Directory [/sapmnt] Enter Enter name of SAP central host [troubadix.domain.de] Enter Enter name of SAP db host [troubadix] Enter Select character set [1] (WE8DEC) Enter Enter Oracle server version (1) Oracle 8.0.5, (2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.6 1Enter Extract Oracle Client archive [1] (Yes, extract) Enter Enter path to KERNEL CD [/sapcd] /oracle/IDS/sapreorg/KERNEL Enter path to RDBMS CD [/sapcd] /oracle/IDS/sapreorg/RDBMS Enter path to EXPORT1 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT1 Directory to copy EXPORT1 CD [/oracle/IDS/sapreorg/CD4_DIR] Enter Enter path to EXPORT2 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT2 Directory to copy EXPORT2 CD [/oracle/IDS/sapreorg/CD5_DIR] Enter Enter path to EXPORT3 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT3 Directory to copy EXPORT3 CD [/oracle/IDS/sapreorg/CD6_DIR] Enter Enter path to EXPORT4 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT4 Directory to copy EXPORT4 CD [/oracle/IDS/sapreorg/CD7_DIR] Enter Enter path to EXPORT5 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT5 Directory to copy EXPORT5 CD [/oracle/IDS/sapreorg/CD8_DIR] Enter Enter path to EXPORT6 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT6 Directory to copy EXPORT6 CD [/oracle/IDS/sapreorg/CD9_DIR] Enter Enter amount of RAM for SAP + DB 850Enter (in Megabytes) Service Entry Message Server [3600] Enter Enter Group-ID of sapsys [101] Enter Enter Group-ID of oper [102] Enter Enter Group-ID of dba [100] Enter Enter User-ID of sidadm [1000] Enter Enter User-ID of orasid [1002] Enter Number of parallel procs [2] Enter Αν δεν έχετε αντιγράψει τα CDs σε διαφορετικούς καταλόγους, τότε το πρόγραμμα εγκατάστασης του &sap; δε θα μπορέσει να βρει τα CD τα οποία χρειάζεται (και τα οποία αναγνωρίζονται από το αρχείο LABEL.ASC που βρίσκεται μέσα σε αυτά) και θα σας ζητηθεί να εισάγετε και προσαρτήσετε τα CD και να επιβεβαιώσετε το σημείο προσάρτησης. Το CENTRDB.R3S μπορεί όμως να παράγει μερικά σφάλματα. Στη περίπτωσή μας, μας ζήτησε ξανά το EXPORT4 CD αλλά μας έδειξε το σωστό κλειδί (6_LOCATION, μετά 7_LOCATION κλπ.), και έτσι μπορείτε να συνεχίσετε βάζοντας τις σωστές τιμές. Εκτός από κάποια προβλήματα που αναφέρονται παρακάτω, η εγκατάσταση θα πρέπει να κυλίσει ομαλά, μέχρι το σημείο που θα χρειαστεί να εγκαταστήσετε τη βάση δεδομένων της &oracle;. Εκκίνηση του <command>R3SETUP</command> 4.6C SR2 Βεβαιωθείτε ότι έχετε ορίσει σωστά το LD_LIBRARY_PATH. Η τιμή της μεταβλητής είναι διαφορετική από την αντίστοιχη της εγκατάστασης του 4.6B με την &oracle; 8.0.5: &prompt.root; export LD_LIBRARY_PATH=/sapmnt/PRD/exe:/oracle/PRD/817_32/lib Ξεκινήστε το R3SETUP ως root από τον κατάλογο εγκατάστασης: &prompt.root; cd /oracle/PRD/sapreorg/install &prompt.root; ./R3SETUP -f CENTRAL.R3S Tο script θα σας κάνει μερικές ερωτήσεις (οι προεπιλογές φαίνονται σε αγκύλες και ακολουθούνται από την πραγματική είσοδο): Ερώτηση Προεπιλογή Εισαγωγή δεδομένων Enter SAP System ID [C11] PRDEnter Enter SAP Instance Number [00] Enter Enter SAPMOUNT Directory [/sapmnt] Enter Enter name of SAP central host [majestix] Enter Enter Database System ID [PRD] PRDEnter Enter name of SAP db host [majestix] Enter Select character set [1] (WE8DEC) Enter Enter Oracle server version (2) Oracle 8.1.7 2Enter Extract Oracle Client archive [1] (Yes, extract) Enter Enter path to KERNEL CD [/sapcd] /oracle/PRD/sapreorg/KERNEL Enter amount of RAM for SAP + DB 2044 1800Enter (in Megabytes) Service Entry Message Server [3600] Enter Enter Group-ID of sapsys [100] Enter Enter Group-ID of oper [101] Enter Enter Group-ID of dba [102] Enter Enter User-ID of oraprd [1002] Enter Enter User-ID of prdadm [1000] Enter LDAP support 3Enter (no support) Installation step completed [1] (continue) Enter Choose installation service [1] (DB inst,file) Enter Μέχρι στιγμής, η δημιουργία χρηστών εμφανίζει ένα σφάλμα κατά τη διάρκεια της εγκατάστασης, στις φάσεις των OSUSERDBSID_IND_ORA (για τη δημιουργία του χρήστη orasid) και OSUSERSIDADM_IND_ORA (για τη δημιουργία του χρήστη sidadm). Εκτός από μερικά προβλήματα που αναφέρονται παρακάτω, όλα θα πρέπει να κυλήσουν ήρεμα μέχρι την εγκατάσταση της βάσης δεδομένων &oracle;. Εγκατάσταση της &oracle; 8.0.5 Παρακαλούμε, να δείτε τις αντίστοιχες σημειώσεις των &sap; και &oracle; Readme σχετικά με τα προβλήματα που μπορεί να προκύψουν κατά την εγκατάσταση του &oracle; DB στο Linux. Τα περισσότερα, αν όχι όλα, έχουν να κάνουν με ασυμβατότητα βιβλιοθηκών. Για περισσότερες πληροφορίες σχετικά με την εγκατάσταση της &oracle;, δείτε το κεφάλαιο εγκατάστασης της &oracle;. Εγκατάσταση του &oracle; 8.0.5 με το <command>orainst</command> Αν πρόκειται να κάνετε χρήση της &oracle; 8.0.5, θα χρειαστείτε κάποιες επιπλέον βιβλιοθήκες για επιτυχή επανασύνδεση (relinking), καθώς η &oracle; 8.0.5 είναι linked με την παλιά έκδοση του glibc (RedHat 6.0), αλλά ήδη από το RedHat 6.1 χρησιμοποιείται μια νέα έκδοση. Επομένως χρειάζεται να εγκαταστήσετε επιπρόσθετα τα επόμενα πακέτα για να βεβαιωθείτε ότι οι σύνδεσμοι θα δουλέψουν: compat-libs-5.2-2.i386.rpm compat-glibc-5.2-2.0.7.2.i386.rpm compat-egcs-5.2-1.0.3a.1.i386.rpm compat-egcs-c++-5.2-1.0.3a.1.i386.rpm compat-binutils-5.2-2.9.1.0.23.1.i386.rpm Για περισσότερες πληροφορίες δείτε τα αντίστοιχα &sap; Notes ή &oracle; Readme. Αν όμως δεν έχετε αυτή την επιλογή (κατά τη διάρκεια της εγκατάστασης δεν είχαμε αρκετό χρόνο να το ελέγξουμε), μπορείτε να χρησιμοποιήσετε τα αρχικά εκτελέσιμα ή εκτελέσιμα τα οποία έχουν γίνει relink σε ένα κανονικό σύστημα RedHat. Για να μεταγλωττίσετε τον intelligent agent, πρέπει να έχετε εγκατεστημένο το πακέτο RedHat Tcl. Αν δεν μπορείτε να βρείτε το tcl-8.0.3-20.i386.rpm, τότε το νεότερο tcl-8.0.5-30.i386.rpm για RedHat 6.1 θα πρέπει επίσης να δουλέψει. Με εξαίρεση το relinking, η διαδικασία εγκατάστασης είναι σχετικά απλή: &prompt.root; su - oraids &prompt.root; export TERM=xterm &prompt.root; export ORACLE_TERM=xterm &prompt.root; export ORACLE_HOME=/oracle/IDS &prompt.root; cd $ORACLE_HOME/orainst_sap &prompt.root; ./orainst Επιβεβαιώστε όλα τα μηνύματα πατώντας Enter έως ότου το λογισμικό εγκατασταθεί. Δεν θα πρέπει να επιλέξετε όμως το &oracle; On-Line Text Viewer, μιας και δεν είναι διαθέσιμο για Linux. Στην περίπτωση αυτή, η &oracle; προσπαθεί να κάνει relink με το i386-glibc20-linux-gcc αντί του διαθέσιμου gcc, egcs ή i386-redhat-linux-gcc. Λόγω έλλειψης χρόνου, αποφασίσαμε να χρησιμοποιήσουμε τα έτοιμα εκτελέσιμα της έκδοσης &oracle; 8.0.5 PreProduction, μετά από μια αποτυχημένη προσπάθεια να κάνουμε την έκδοση από το RDBMS CD να δουλέψει, και η εύρεση και πρόσβαση στα σωστά RPMs εκείνη τη στιγμή ήταν σκέτος εφιάλτης. Εγκατάσταση του &oracle; 8.0.5 Pre-production Release για Linux (Kernel 2.0.33) Αυτή η εγκατάσταση είναι σχετικά εύκολη. Προσαρτήστε το CD και ξεκινήστε το πρόγραμμα εγκατάστασης. Θα ερωτηθείτε στη συνέχεια για τον αρχικό (home) κατάλογο της &oracle;, όπου και θα αντιγραφούν όλα τα εκτελέσιμα. Ωστόσο δεν διαγράψαμε ότι απέμεινε από τις προηγούμενες απόπειρες μας εγκατάστασης του RDBMS. Στη συνέχεια, η βάση δεδομένων &oracle; θα πρέπει να ξεκινήσει δίχως προβλήματα. Εγκατάσταση &oracle; 8.1.7 για Linux από Συμπιεσμένο Αρχείο Πάρτε το συμπιεσμένο αρχείο oracle81732.tgz το οποίο δημιουργήσατε από τον κατάλογο εγκατάστασης ενός συστήματος Linux, και αποσυμπιέστε το στο /oracle/SID/817_32/. Συνέχεια της Εγκατάστασης του &sap.r3; Αρχικά ελέγξτε τις ρυθμίσεις περιβάλλοντος των χρηστών idsamd (sidadm) και oraids (orasid). Θα πρέπει τώρα να έχουν και οι δύο χρήστες τα αρχεία .profile, .login και .cshrc τα οποία όλα χρησιμοποιούν το hostname. Σε περίπτωση που το όνομα του συστήματος περιλαμβάνει και το domain, αντικαταστήστε το hostname με το hostname -s σε όλα τα αρχεία. Φόρτωση της Βάσης Δεδομένων Στη συνέχεια, ανάλογα με το αν είχατε πριν επιλέξει έξοδο ή όχι, μπορείτε είτε να ξεκινήσετε το R3SETUP από την αρχή, ή να συνεχίσετε την εκτέλεση του. Το R3SETUP θα δημιουργήσει και θα φορτώσει τα αρχικά δεδομένα της βάσης (για 46B IDES, από τα EXPORT1 σε EXPORT6, για 46C από DISK1 σε DISK4) κάνοντας χρήση του R3load. Όταν η φόρτωση της βάσης δεδομένων ολοκληρωθεί (μπορεί να χρειαστούν μερικές ώρες), θα χρειαστεί να ορίσετε μερικούς κωδικούς. Για δοκιμαστικές εγκαταστάσεις, μπορείτε να χρησιμοποιήσετε τους γνωστούς προεπιλεγμένους κωδικούς (αν υπάρχει θέμα ασφάλειας, χρησιμοποιήστε διαφορετικούς!): Ερώτηση Είσοδος δεδομένων Enter Password for sapr3 sapEnter Confirum Password for sapr3 sapEnter Enter Password for sys change_on_installEnter Confirm Password for sys change_on_installEnter Enter Password for system managerEnter Confirm Password for system managerEnter Σε αυτό το σημείο είχαμε μερικά προβλήματα με την εντολή dipgntab κατά την εγκατάσταση του 4.6B. Listener Ξεκινήστε τον &oracle; Listener ως χρήστης orasid με τον ακόλουθο τρόπο: &prompt.user; umask 0; lsnrctl start Αν δε το κάνετε, μπορεί να σας εμφανιστεί το σφάλμα ORA-12546 καθώς στα sockets δεν θα έχουν οριστεί οι κατάλληλες άδειες. Δείτε την Σημείωση 072984 του &sap;. Ανανεώνοντας τους Πίνακες MNLS Αν έχετε σκοπό να εισάγετε γλώσσες εκτός των Latin-1 στο &sap;, θα πρέπει να ανανεώσετε τους πίνακες Multi National Language Support. Ατό περιγράφεται στα &sap; OSS Notes 15023 και 45619. Μπορείτε όμως αν θέλετε να παρακάμψετε αυτό το βήμα κατά την εγκατάσταση του &sap;. Ακόμη και αν δεν χρειάζεστε το MNLS, θα χρειαστεί να ελέγξετε τον πίνακα TCPDB και να τον αρχικοποιήσετε, αν αυτό δεν έχει ήδη γίνει. Δείτε στο &sap; τις σημειώσεις 0015023 και 0045619 για περισσότερες πληροφορίες. Βήματα Μετά την Εγκατάσταση Άδεια χρήσης για το &sap.r3; Θα πρέπει να ζητήσετε ένα Κλειδί Άδειας - License Key - για το &sap.r3;. Το χρειάζεστε, μιας και η προσωρινή άδεια που χρησιμοποιήσατε κατά την εγκατάσταση, έχει ισχύ μόνο για τέσσερις εβδομάδες. Πρέπει πρώτα να αποκτήσετε το hardware key. Συνδεθείτε ως χρήστης idsadm και εκτελέστε το saplicense: &prompt.root; /sapmnt/IDS/exe/saplicense -get Εκτελώντας το saplicense χωρίς παραμέτρους, σας δίνει μια λίστα επιλογών. Όταν λάβετε το κλειδί άδειας, μπορείτε να το εγκαταστήσετε με τον παρακάτω τρόπο: &prompt.root; /sapmnt/IDS/exe/saplicense -install Στη συνέχεια, θα χρειαστεί να εισάγετε τις ακόλουθες τιμές: SAP SYSTEM ID = SID, 3 chars CUSTOMER KEY = hardware key, 11 chars INSTALLATION NO = installation, 10 digits EXPIRATION DATE = yyyymmdd, usually "99991231" LICENSE KEY = license key, 24 chars Δημιουργία Χρηστών Δημιουργήστε έναν νέο χρήστη στο client 000 (για μερικές εργασίες που χρειάζεται να γίνουν μέσα στο client 000, αλλά με χρήστη διαφορετικό από τους sap* και ddic). Ως όνομα χρήστη συνήθως επιλέγουμε το wartungservice στα Αγγλικά). Τα προφίλ που χρειάζονται είναι τα sap_new και sap_all. Για επιπλέον ασφάλεια, οι κωδικοί των προεπιλεγμένων χρηστών σε όλους τους clients θα πρέπει να αλλαχθούν (αυτό περιλαμβάνει και τους χρήστες sap* και ddic). Ρύθμιση των Transport System, Profile, Operation Modes, κλπ. Μέσα στο client 000, χρήστες εκτός των ddic και sap*, μπορούν να κάνουν τουλάχιστον τα ακόλουθα: Εργασία Transaction (Συναλλαγή) Ρύθμιση του Transport System, π.χ. ως Stand-Alone Transport Domain Entity STMS Δημιουργία / τροποποίηση του Profile Συστήματος RZ10 Συντήρηση Operation Modes και Instances RZ04 Αυτό και όλα τα υπόλοιπα βήματα σχετικά με τις ρυθμίσεις μετά την εγκατάσταση περιγράφονται στους οδηγούς εγκατάστασης του &sap;. Τροποποίηση του <filename>init<replaceable>sid</replaceable>.sap</filename> (<filename>initIDS.sap</filename>) Το αρχείο /oracle/IDS/dbs/initIDS.sap περιέχει το αντίγραφο ασφαλείας του προφίλ του &sap;. Εδώ χρειάζεται να ορίσετε το μέγεθος της ταινίας που θα χρησιμοποιηθεί, τον τύπο συμπίεσης και όλα τα σχετικά. Για να μπορέσουμε να το εκτελέσουμε με το sapdba / brbackup, αλλάξαμε τις παρακάτω τιμές: compress = hardware archive_function = copy_delete_save cpio_flags = "-ov --format=newc --block-size=128 --quiet" cpio_in_flags = "-iuv --block-size=128 --quiet" tape_size = 38000M tape_address = /dev/nsa0 tape_address_rew = /dev/sa0 Επεξηγήσεις: compress: Η ταινία που χρησιμοποιούμε είναι μία HP DLT1 η οποία παρέχει συμπίεση μέσω υλικού. archive_function: Αυτό ορίζει τον προεπιλεγμένο τρόπο με τον οποίο θα αποθηκεύονται τα αρχειοθετημένα logs της &oracle;: τα νέα logs αποθηκεύονται στην ταινία, τα ήδη αποθηκευμένα αποθηκεύονται ξανά και στη συνέχεια διαγράφονται. Αυτό σας σώζει από τη ταλαιπωρία αν χρειαστεί να ανακτήσετε τη βάση δεδομένων σε περίπτωση που μια από τις ταινίες έχει πρόβλημα. cpio_flags: Προεπιλεγμένη είναι η χρήση του το οποίο ορίζει το μέγεθος κάθε block στα 5120 Bytes. Για ταινίες DLT, η HP προτείνει το λιγότερο 32 K μέγεθος block, οπότε κι εμείς δώσαμε για 64 K. Το χρειάζεται διότι έχουμε inode με αρίθμηση μεγαλύτερη από 65535. Η τελευταία παράμετρος χρειάζεται γιατί διαφορετικά το brbackup θα παραπονεθεί με που το cpio εμφανίσει τον αριθμό των blocks που έχουν αποθηκευτεί. cpio_in_flags: Τα Flags χρειάζονται προκειμένου να φορτωθούν τα δεδομένα από τη ταινία. Η μορφή ανιχνεύεται αυτόματα. tape_size: Η παράμερος αυτή δίνει χοντρικά το μέγεθος χωρητικότητας της ταινίας. Για λόγους ασφάλειας (χρησιμοποιούμε hardware συμπίεση), η τιμή της παραμέτρου είναι λίγο μικρότερη από το πραγματικό μέγεθος. tape_address: Το όνομα συσκευής (χωρίς δυνατότητα επανατύλιξης της ταινίας) που θα χρησιμοποιηθεί με το cpio. tape_address_rew: Το όνομα συσκευής (με δυνατότητα επανατύλιξης της ταινίας) που θα χρησιμοποιηθεί με το cpio. Ρυθμίσεις Μετά την Εγκατάσταση Οι ακόλουθοι παράμετροι του &sap; θα πρέπει να ρυθμιστούν μετά την εγκατάσταση (παραδείγματα για IDES 46B, και μνήμη 1 GB): Όνομα Τιμή ztta/roll_extension 250000000 abap/heap_area_dia 300000000 abap/heap_area_nondia 400000000 em/initial_size_MB 256 em/blocksize_kB 1024 ipc/shm_psize_40 70000000 &sap; Σημείωση 0013026: Όνομα Τιμή ztta/dynpro_area 2500000 &sap; Σημείωση 0157246: Όνομα Τιμή rdisp/ROLL_MAXFS 16000 rdisp/PG_MAXFS 30000 Με τις παραπάνω παραμέτρους σε ένα σύστημα με 1 gigabyte μνήμης, μπορεί να δείτε κάτι σαν το παρακάτω όσο αφορά την κατανάλωση μνήμης: Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K Free Προβλήματα κατά την Εγκατάσταση Επανεκκίνηση του <command>R3SETUP</command> μετά τη Διόρθωση Προβλήματος Το R3SETUP θα σταματήσει αν αντιληφθεί κάποιο σφάλμα. Αν κοιτάξετε καλά τα logfiles και διορθώσετε το σφάλμα, θα πρέπει να ξεκινήσετε το R3SETUP από την αρχή, συνήθως επιλέγοντας REPEAT στο τελευταίο βήμα για το οποίο παραπονέθηκε το R3SEΤUP. Για να επανεκκινήσετε το R3SETUP, απλώς δώστε τη παρακάτω εντολή με το αντίστοιχο αρχείο R3S: &prompt.root; ./R3SETUP -f CENTRDB.R3S για την έκδοση 4.6B, ή την εντολή &prompt.root; ./R3SETUP -f CENTRAL.R3S για την έκδοση 4.6C, χωρίς να έχει σημασία αν το σφάλμα προκλήθηκε από το CENTRAL.R3S ή το DATABASE.R3S. Σε κάποια στάδια, το R3SETUP υποθέτει ότι τόσο η βάση δεδομένων όσο και το &sap; έχουν ξεκινήσει και εκτελούνται κανονικά (καθώς πρόκειται για βήματα που έχουν ήδη ολοκληρωθεί). Αν προκύψουν λάθη, και για παράδειγμα δεν μπόρεσε να ξεκινήσει η βάση, ξεκινήστε τη βάση και το &sap; με το χέρι, αφού διορθώσετε τα λάθη και πριν εκτελέσετε ξανά το R3SETUP. Μη ξεχάσετε επίσης να εκκινήσετε το &oracle; listener (εκτελέστε το ως χρήστης orasid με umask 0; lsnrctl start) αν είχε διακοπεί και αυτό (για παράδειγμα σε μια αναγκαία επανεκκίνηση του συστήματος). OSUSERSIDADM_IND_ORA κατά το <command>R3SETUP</command> Αν το R3SETUP παραπονιέται σε αυτό το σημείο, τροποποιήστε το πρότυπο αρχείο του R3SETUP που χρησιμοποιείται εκείνη τη στιγμή (το CENTRDB.R3S (4.6B) ή κάποιο από τα CENTRAL.R3S ή το DATABASE.R3S (4.6C)). Βρείτε το [OSUSERSIDADM_IND_ORA] ή ψάξτε μέσα στο αρχείο για τη μοναδική εγγραφή STATUS=ERROR και προσθέστε τα παρακάτω: HOME=/home/sidadm (was empty) STATUS=OK (had status ERROR) Στη συνέχεια μπορείτε να ξεκινήσετε και πάλι το R3SETUP. OSUSERDBSID_IND_ORA κατά το <command>R3SETUP</command> Πιθανό είναι να υπάρχει πρόβλημα και σε αυτό το βήμα με το R3SETUP. Το πρόβλημα εδώ είναι παρόμοιο με το προηγούμενο, του OSUSERSIDADM_IND_ORA. Απλά τροποποιήστε το αρχείο προτύπου που χρησιμοποιείτε με το R3SETUP (CENTRDB.R3S (4.6B) ή κάποιο από τα CENTRAL.R3S ή DATABASE.R3S (4.6C)). Βρείτε το [OSUSERDBSID_IND_ORA] ή ψάξτε μέσα στο αρχείο για την μοναδική εγγραφή STATUS=ERROR και προσθέστε τα παρακάτω: STATUS=OK Τώρα τρέξτε ξανά το R3SETUP. <errorname>oraview.vrf FILE NOT FOUND</errorname> κατά τη διάρκεια Εγκατάστασης της &oracle; Το σφάλμα αυτό σημαίνει ότι έχετε επιλέξει το &oracle; On-Line Text Viewer πριν ξεκινήσετε την εγκατάσταση. Η επιλογή αυτή είναι προεπιλεγμένη, παρ' όλο που δεν είναι διαθέσιμη στο Linux. Αφαιρέστε λοιπόν αυτή την επιλογή από το μενού εγκατάστασης και ξεκινήστε ξανά. <errorname>TEXTENV_INVALID</errorname> κατά την Εκτέλεση <command>R3SETUP</command>, του RFC ή του SAPgui Αν βρεθείτε αντιμέτωποι με αυτό το σφάλμα, τότε δεν έχετε τις σωστές τοπικές ρυθμίσεις. Η σημείωση 0171356 του &sap; αναφέρει όλα τα RPMs που χρειάζονται να εγκατασταθούν (π.χ. saplocales-1.0-3, saposcheck-1.0-1 για RedHat 6.1). Στην περίπτωση που αγνοήσατε όλα τα σχετικά λάθη, και αν ακόμη έχετε ορίσει το STATUS από ERROR σε OK (στο CENTRDB.R3S) κάθε φορά που παραπονιόταν το R3SETUP και απλώς το ξεκινούσατε από την αρχή, το &sap; δεν θα ρυθμιστεί σωστά και δεν θα μπορείτε να συνδεθείτε στο σύστημα μέσω του SAPgui, ακόμη και αν το σύστημα σας έχει ξεκινήσει. Προσπαθώντας να συνδεθούμε με το παλιό SAPgui Linux, εμφανίστηκε το παρακάτω σφάλμα: Sat May 5 14:23:14 2001 *** ERROR => no valid userarea given [trgmsgo. 0401] Sat May 5 14:23:22 2001 *** ERROR => ERROR NR 24 occured [trgmsgi. 0410] *** ERROR => Error when generating text environment. [trgmsgi. 0435] *** ERROR => function failed [trgmsgi. 0447] *** ERROR => no socket operation allowed [trxio.c 3363] Speicherzugriffsfehler Η συμπεριφορά αυτή οφείλεται στο ότι το &sap.r3; δεν μπορεί να ορίσει σωστά τις τοπικές ρυθμίσεις και δεν μπορεί στη συνέχεια να ρυθμίσει τον εαυτό του (ελλειπή δεδομένα στη βάση δεδομένων). Για να μπορέσετε να συνδεθείτε προσθέστε τις παρακάτω καταχωρήσεις στο DEFAULT.PFL (δείτε Σημείωση 0043288): abap/set_etct_env_at_new_mode = 0 install/collate/active = 0 rscp/TCP0B = TCP0B Ξεκινήστε ξανά το &sap;. Τώρα μπορείτε να συνδεθείτε ακόμη και αν οι ρυθμίσεις χώρας και γλώσσας δε δουλεύουν όπως θα έπρεπε. Αφού διορθώσετε τις ρυθμίσεις της χώρας (και ορίσετε τις σωστές τοπικές ρυθμίσεις), μπορείτε να αφαιρέσετε τα παραπάνω από το DEFAULT.PFL και να εκτελέσετε το &sap; από την αρχή. <errorcode>ORA-00001</errorcode> Το σφάλμα αυτό το συναντήσαμε μόνο με το &oracle; 8.1.7 στο &os;. Ο λόγος ήταν ότι η βάση &oracle; δεν μπορούσε να ορίσει τις σωστές παραμέτρους για την εκκίνησή της με αποτέλεσμα να κολλάει, αφήνοντας σηματοφορείς και κοινόχρηστη μνήμη στο σύστημα. Η επόμενη προσπάθεια να ξεκινήσουμε τη βάση δεδομένων μας εμφάνισε το σφάλμα ORA-00001. Βρείτε τους με την εντολή ipcs -a και αφαιρέστε τους με την ipcrm. <errorcode>ORA-00445</errorcode> (Background Process PMON Did Not Start) Το σφάλμα αυτό μπορεί να εμφανιστεί με το &oracle; 8.1.7 όταν η βάση δεδομένων έχει εκκινηθεί με το script startsap (για παράδειγμα startsap_majestix_00) και σαν χρήστης prdadm. Μια πιθανή λύση είναι να ξεκινήσετε τη βάση ως χρήστης oraprd και μέσω του svrmgrl: &prompt.user; svrmgrl SVRMGR> connect internal; SVRMGR> startup; SVRMGR> exit <errorcode>ORA-12546</errorcode> (Ξεκινήστε τον Listener με τις Σωστές Άδειες) Ξεκινήστε τον &oracle; listener ως χρήστης oraids, με τις ακόλουθες εντολές: &prompt.root; umask 0; lsnrctl start Διαφορετικά μπορεί να εμφανιστεί το σφάλμα ORA-12546 που σημαίνει ότι τα sockets δεν έχουν σωστές άδειες. Δείτε τη σημείωση 0072984 του &sap;. <errorcode>ORA-27102</errorcode> (Έλλειψη μνήμης) Το πρόβλημα αυτό παρουσιάστηκε όταν χρησιμοποιήσαμε τιμές μεγαλύτερες του 1 GB (1024X1024X1024) στις μεταβλητές MAXDSIZ και DFLDSIZ. Επιπλέον, μας εμφανίστηκε το σφάλμα Linux Error 12: Cannot allocate memory. [DIPGNTAB_IND_IND] κατά την Εκτέλεση του <command>R3SETUP</command> Σε γενικές γραμμές, δείτε τη σημείωση 0130581 του &sap; (R3SETUP step DIPGNTAB terminates). Κατά την εγκατάσταση IDES, για κάποιο λόγο η διαδικασία εγκατάστασης δε χρησιμοποιούσε το σωστό όνομα συστήματος του &sap; IDS, αλλά το κενό "". Αυτό οδηγεί σε κάποια μικρά προβλήματα με τη πρόσβαση στους καταλόγους μια και τα μονοπάτια δημιουργούνται δυναμικά με τη χρήση του SID (στη περίπτωσή μας IDS). Πράγμα που σημαίνει ότι αντί να γίνει η πρόσβαση στο: /usr/sap/IDS/SYS/... /usr/sap/IDS/DVMGS00 θα προσπαθήσει να γίνει στο: /usr/sap//SYS/... /usr/sap/D00 Για να συνεχίσουμε με την εγκατάσταση, δημιουργήσαμε έναν σύνδεσμο και έναν επιπλέον κατάλογο: &prompt.root; pwd /compat/linux/usr/sap &prompt.root; ls -l total 4 drwxr-xr-x 3 idsadm sapsys 512 May 5 11:20 D00 drwxr-x--x 5 idsadm sapsys 512 May 5 11:35 IDS lrwxr-xr-x 1 root sapsys 7 May 5 11:35 SYS -> IDS/SYS drwxrwxr-x 2 idsadm sapsys 512 May 5 13:00 tmp drwxrwxr-x 11 idsadm sapsys 512 May 4 14:20 trans Το πρόβλημα αυτό το είδαμε επίσης στις σημειώσεις 0029227 και 0008401 του &sap;. Δεν αντιμετωπίσαμε όμως κανένα από αυτά τα προβλήματα με την εγκατάσταση του &sap; 4.6C. [RFCRSWBOINI_IND_IND] κατά την Εκτέλεση του <command>R3SETUP</command> Το σφάλμα αυτό εμφανίστηκε κατά την εγκατάσταση του &sap; 4.6C, και ήταν το αποτέλεσμα ενός άλλου σφάλματος που προέκυψε νωρίτερα στην εγκατάσταση. Σε τέτοιες περιπτώσεις θα πρέπει να δείτε τα αντίστοιχα logfiles και να διορθώσετε το αρχικό πρόβλημα. Αν αφού ελέγξετε τα logfiles διαπιστώσετε ότι το σφάλμα είναι πράγματι αυτό (κοιτάξτε τις σημειώσεις του &sap;), μπορείτε να ορίσετε το STATUS σε αυτό το βήμα από ERROR σε OK (στο αρχείο CENTRDB.R3S) και να εκτελέσετε ξανά το R3SETUP. Μετά την εγκατάσταση, πρέπει να εκτελέσετε το RSWBOINS από τη συναλλαγή SE38. Δείτε τη σημείωση 0162266 του &sap; για τα RFCRSWBOINI και RFCRADDBDIF. [RFCRADDBDIF_IND_IND] κατά την Εκτέλεση <command>R3SETUP</command> Όπως και πριν, και εδώ ισχύει η ίδια λογική: σιγουρευτείτε ποιο είναι το πρωταρχικό σφάλμα κοιτάζοντας τα logfiles. Αν επιβεβαιώσετε ότι η σημείωση του &sap; 0162266 ανταποκρίνεται στο πρόβλημά σας, απλά ορίστε το STATUS σε αυτό το βήμα από ERROR σε OK (στο αρχείο CENTRDB.R3S) και τρέξτε πάλι το R3SETUP. Μετά την εγκατάσταση, πρέπει να εκτελέσετε το RADDBDIF από τη συναλλαγή SE38. <errorcode>sigaction sig31: File size limit exceeded</errorcode> Το σφάλμα αυτό μπορεί να εμφανιστεί κατά την εκκίνηση των διεργασιών του &sap; disp+work. Αν ξεκινήσετε το &sap; με το script startsap, οι υποδιεργασίες θα αρχίσουν μόνες τους, ξεκινώντας τις υπόλοιπες διεργασίες που απαιτούνται από το &sap;. Αυτό έχει ως αποτέλεσμα το ίδιο το script να μην γνωρίζει αν κάτι πήγε στραβά. Για να ελέγξετε αν όντως ξεκίνησαν σωστά οι διεργασίες του &sap;, ρίξτε μια ματιά στη λίστα διεργασιών με την εντολή ps ax | grep SID, η οποία θα σας επιστρέψει μιας λίστα με όλες τις διεργασίες από τα &oracle; και &sap;. Αν φαίνεται σαν να λείπουν μερικές διεργασίες, ή αν δεν μπορείτε να συνδεθείτε στο &sap;, κοιτάξτε τα αντίστοιχα logfiles τα οποία μπορούν να βρεθούν στον κατάλογο /usr/sap/SID/DVEBMGSnr/work/. Τα αρχεία που πρέπει να κοιτάξετε είναι τα dev_ms και dev_disp. Το Signal 31 θα εμφανιστεί αν η ποσότητα της κοινής μνήμης που χρησιμοποιείται από τα &oracle; και &sap; ξεπεράσει το μέγεθος που έχει ήδη οριστεί κατά τη ρύθμιση του πυρήνα. Με το να ορίσετε μια μεγαλύτερη τιμή θα μπορέσετε να προσπεράσετε το πρόβλημα αυτό: # μεγαλύτερη μνήμη για συστήματα παραγωγής 46C: options SHMMAXPGS=393216 # μικρότερη μνήμη για συστήματα 46B: #options SHMMAXPGS=262144 Ανεπιτυχής Εκκίνηση του <command>saposcol</command> Υπάρχουν επίσης μερικά προβλήματα με το πρόγραμμα saposcol (έκδοση 4.6D). Το &sap; χρησιμοποιεί το saposcol για να συλλέξει δεδομένα σχετικά με τις επιδόσεις του συστήματος. Το πρόγραμμα αυτό δεν το χρειάζεστε για να εκτελέσετε το &sap;, οπότε μπορεί να θεωρηθεί ως μικρότερη σημασίας. Παλαιότερες εκδόσεις (4.6B) δουλεύουν, αλλά δε συλλέγουν όλα τα δεδομένα (πολλές κλήσεις επιστρέφουν 0, για παράδειγμα η χρήση της CPU). Προχωρημένα Θέματα Αν έχετε την απορία πως λειτουργεί η συμβατότητα με εφαρμογές Linux, τότε θα πρέπει να διαβάσετε τη παρακάτω ενότητα. Τα περισσότερα από όσα έχουν γραφτεί είναι βασισμένα στην &a.chat; και έχουν γραφτεί από τον Terry Lambert tlambert@primenet.com (Message ID: <199906020108.SAA07001@usr09.primenet.com>). Πως Λειτουργεί; execution class loader Το &os; περιέχει ένα επίπεδο αφαίρεσης (abstraction) που ονομάζεται execution class loader. Αυτό βασίζεται στο &man.execve.2;. Αυτό που συμβαίνει είναι ότι το &os; έχει μια λίστα φορτωτών (loaders), αντί για ένα που να καταφεύγει σε περίπτωση αποτυχίας στο #! για να τρέξει κάποιο shell interpreter ή shell script. Ιστορικά, ο μόνος φορτωτής στη πλατφόρμα του &unix; έλεγχε τον μαγικό αριθμό (γενικά τα πρώτα 4 ή 8 bytes του αρχείου) για να δει αν είναι κάποιο εκτελέσιμο / εφαρμογή γνωστό στο σύστημα, και στην περίπτωση αυτή να καλέσει τον αντίστοιχο φορτωτή. Αν το αρχείο δεν ήταν εκτελέσιμο με βάση τον τύπο του συστήματος, η κλήση στο &man.execve.2; επέστρεφε κάποιο σφάλμα, και το shell προσπαθούσε να εκτελέσει το αρχείο σαν shell script. Η γενική ιδέα ήταν αν δεν είναι εκτελέσιμο, προσπάθησε να το τρέξεις ως shell script με βάση το τρέχον shell . Αργότερα, βρέθηκε ένας έξυπνος τρόπος ώστε το &man.sh.1; να ελέγχει τους πρώτους δύο χαρακτήρες, και αν ήταν :\n, τότε καλούσε το shell &man.csh.1; (πιστεύουμε πως η λύση αυτή βρέθηκε αρχικά από τη SCO). Αυτό που κάνει τώρα το &os; είναι να διατρέχει τη λίστα με όλους τους φορτωτές, με ένα γενικό φορτωτή #! ο οποίος αναγνωρίζει ως διερμηνέα (interpreter) τους χαρακτήρες από το επόμενο κενό μετά το ! και μέχρι το τέλος, ενώ αν δεν αναγνωριστεί κάποιος, χρησιμοποιείται ως έσχατη λύση το /bin/sh. ELF Για την υποστήριξη του Linux ABI, το &os; βλέπει τον μαγικό αριθμό του ELF binary (δε αναγνωρίζει τη διαφορά ανάμεσα σε &os;, &solaris;, Linux, ή κάποιο άλλο λειτουργικό σύστημα το οποίο χρησιμοποιεί αρχεία τύπου ELF). Solaris Ο φορτωτής ELF κοιτάει για ένα ειδικό brand, το οποίο είναι μια ενότητα σχολίων μέσα στο ELF image, και το οποίο δεν υπάρχει σε ELF binaries για SVR4/&solaris; Για να λειτουργήσουν τα εκτελέσιμα του Linux, θα πρέπει να γίνουν branded (μαρκαριστούν) ως Linux μέσω της &man.brandelf.1;: &prompt.root; brandelf -t Linux file Όταν γίνει αυτό, ο φορτωτής ELF θα βλέπει το Linux brand πάνω στο αρχείο. ELF branding Όταν ο φορτωτής ELF δει το Linux brand, θα αντικαταστήσει έναν δείκτη μέσα στη δομή proc. Όλες οι κλήσεις του συστήματος ταξινομούνται μέσα από αυτόν τον δείκτη (σε ένα παραδοσιακό σύστημα &unix;, ο δείκτης θα ήταν ο πίνακας sysent[], που περιέχει τις κλήσεις του συστήματος (system calls)). Επιπλέον, η διεργασία σημειώνεται για ειδική μεταχείριση του trap vector και άλλες (μικρές) διορθώσεις, τις οποίες χειρίζεται το άρθρωμα πυρήνα της συμβατότητας Linux. Το system call vector του Linux περιέχει, μεταξύ άλλων, μια λίστα με τα δεδομένα του sysent[] των οποίων οι διευθύνσεις βρίσκονται μέσα στο άρθρωμα του πυρήνα. Όταν γίνεται μια κλήση συστήματος από μια εφαρμογή Linux, ο κώδικας (trap code) τροποποιεί τον δείκτη της μέσω της δομής που έχει εγγραφεί στο proc, και αλλάζει την διεύθυνση ώστε να δείχνει στο σημείο εισόδου της συνάρτησης του Linux, και όχι του &os;. Επίσης, το σύστημα συμβατότητας με Linux μπορεί και προσαρμόζει δυναμικά τις τοποθεσίες αναζήτησης. Ουσιαστικά αυτό κάνει και η επιλογή κατά την προσάρτηση ενός συστήματος αρχείων (δεν εννοούμε εδώ το σύστημα αρχείων unionfs!). Αρχικά, γίνεται απόπειρα να βρεθεί το αρχείο στον κατάλογο /compat/linux/original-path, και μόνο αν αυτό αποτύχει, θα γίνει αναζήτηση στον κατάλογο /original-path. Με τον τρόπο αυτό σιγουρεύουμε ότι τα εκτελέσιμα που χρειάζονται άλλα εκτελέσιμα θα τρέξουν (για παράδειγμα, το σύνολο εργαλείων του Linux μπορεί να εκτελεστεί μέσω της υποστήριξης του Linux ABI). Επίσης σημαίνει ότι τα εκτελέσιμα του Linux μπορούν να φορτώσουν και να εκτελέσουν αρχεία του &os; αν δεν μπορούν να εντοπίσουν τα αντίστοιχα αρχεία στο Linux. Μπορείτε επίσης να τοποθετήσετε μια εντολή &man.uname.1; μέσα στο /compat/linux προκειμένου τα αρχεία του Linux να μη μπορούν να αναγνωρίσουν ότι δεν χρησιμοποιούνται πραγματικά σε Linux. Ουσιαστικά, υπάρχει ένας πυρήνας Linux μέσα στον πυρήνα του &os;. Οι διάφορες λειτουργίες οι οποίες υλοποιούν όλες τις υπηρεσίες που παρέχονται από τον πυρήνα είναι ίδιες τόσο στον πίνακα κλήσεων συστήματος του &os; όσο και στον αντίστοιχο του Linux: λειτουργίες του συστήματος αρχείων, εικονική μνήμη, διαχείριση σημάτων, System V IPC κλπ. Η μόνη διαφορά είναι ότι το εκτελέσιμα του &os; κάνουν χρήση των συναρτήσεων glue του &os;, ενώ τα εκτελέσιμα του Linux, κάνουν χρήση των συναρτήσεων glue του Linux (πολλά από τα παλιά λειτουργικά είχαν τις δικές τους συναρτήσεις glue: οι διευθύνσεις των συναρτήσεων βρίσκονταν στο στατικό πίνακα sysent[], αντί να διευκρινίζονται μέσω ενός δυναμικού δείκτη στη δομή proc της διεργασίας που πραγματοποιεί την κλήση). Ποιο είναι όμως το εγγενές &os; ABI; Δεν έχει και πολύ σημασία. Η μόνη βασική διαφορά είναι (κάτι το οποίο μπορεί εύκολα να αλλάξει σε μελλοντικές εκδόσεις, και πολύ πιθανόν να αλλάξει) ότι οι συναρτήσεις glue του &os; είναι στατικά συνδεδεμένες στο πυρήνα, ενώ οι αντίστοιχες του Linux μπορούν είτε να είναι συνδεδεμένες στατικά, είτε να είναι προσβάσιμες μέσω ενός αρθρώματος πυρήνα. Είναι αυτό όμως πραγματική εξομοίωση; Όχι. Είναι μια υλοποίηση του ABI, όχι εξομοίωση. Δεν υπάρχει καμία εξομοίωση (ή προσομοίωση, για να προλάβουμε την επόμενη σας ερώτηση). Τότε γιατί μερικές φορές μιλάμε για εξομοίωση Linux; Για να δυσκολευτεί η προώθηση του &os;! Η αρχική υλοποίηση έγινε την εποχή όπου δεν υπήρχε άλλη λέξη που να μπορούσε να περιγράψει το τι ακριβώς γινόταν. Το να λέγαμε ότι το &os; έτρεχε εκτελέσιμα Linux δεν θα ήταν αλήθεια, μια και χρειαζόταν να ενσωματωθεί κάποιος κώδικας στον πυρήνα, ή να φορτωθεί κάποιο άρθρωμα. Χρειαζόταν κάποια λέξη που να περιγράφει τι φορτωνόταν—έτσι προέκυψε ο εξομοιωτής Linux.
diff --git a/el_GR.ISO8859-7/books/handbook/virtualization/chapter.sgml b/el_GR.ISO8859-7/books/handbook/virtualization/chapter.sgml index 5f836fdff4..61ed4f0654 100644 --- a/el_GR.ISO8859-7/books/handbook/virtualization/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/virtualization/chapter.sgml @@ -1,918 +1,917 @@ Murray Stokely Συνεισφορά από τον Εικονικοποίηση Σύνοψη Το λογισμικό εικονικοποίησης επιτρέπει σε πολλαπλά λειτουργικά συστήματα να εκτελούνται ταυτόχρονα στον ίδιο υπολογιστή. Σε υπολογιστές PC το λογισμικό αυτό τυπικά χρησιμοποιεί ένα λειτουργικό ως ξενιστή (host) στο οποίο και εκτελείται, και το οποίο υποστηρίζει ένα οποιοδήποτε αριθμό από φιλοξενούμενα (guest) λειτουργικά. Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Τη διαφορά μεταξύ ενός ξενιστή (host) και ενός φιλοξενούμενου (guest) λειτουργικού. Πως να εγκαταστήσετε το &os; σε ένα &apple; &macintosh; υπολογιστή που βασίζεται σε &intel; αρχιτεκτονική. Πως να εγκαταστήσετε το &os; στο Linux με τη βοήθεια του &xen;. Πώς να εγκαταστήσετε το &os; κάτω από µsoft.windows; με το Virtual PC. Πως να βελτιστοποιήσετε ένα &os; σύστημα για την καλύτερη απόδοση σε περιβάλλον εικονικού μηχανήματος. Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει: Να έχετε κατανοήσει τις βασικές έννοιες του &unix; και του &os; (). Να γνωρίζετε πως θα εγκαταστήσετε το &os; (). Να γνωρίζετε πως θα ρυθμίσετε τη σύνδεση σας στο δίκτυο (). Να γνωρίζετε πως να εγκαταστήσετε πρόσθετο λογισμικό τρίτου κατασκευαστή (). Το &os; ως φιλοξενούμενο λειτουργικό Το Parallels σε MacOS Το Parallels Desktop για &mac; είναι ένα εμπορικό λογισμικό το οποίον είναι διαθέσιμο για υπολογιστές &apple; &mac; με επεξεργαστή &intel; και λειτουργικό &macos; 10.4.6 ή νεότερο. Το &os; παρέχει πλήρη υποστήριξη ως φιλοξενούμενο λειτουργικό. Όταν το Parallels έχει εγκατασταθεί στο &macos; X, ο χρήστης πρέπει να ρυθμίσει ένα εικονικό σύστημα και στη συνέχεια να εγκαταστήσει το φιλοξενούμενο λειτουργικό σύστημα που επιθυμεί. Εγκαθιστώντας το &os; στο Parallels/&macos; X Το πρώτο βήμα για την εγκατάσταση του &os; στο &macos; X/Parallels είναι να δημιουργήσετε ένα νέο εικονικό σύστημα για το &os;. Όταν ερωτηθείτε, επιλέξτε το &os; σαν το φιλοξενούμενο λειτουργικό (Guest OS) . Ορίστε ένα λογικό μέγεθος δίσκου και μνήμης που να ανταποκρίνεται στα σχέδια που έχετε για την εικονικοποίηση του &os;. 4GB δίσκος και 512MB μνήμης δουλεύουν μια χαρά για τους περισσότερους χρήστες του &os;μέσα από το Parallels: Επιλέξτε τον τύπο δικτύωσης και τον προσαρμογέα δικτύου: Αποθήκευση και τέλος των ρυθμίσεων: Όταν το εικονικό σύστημα έχει δημιουργηθεί, θα χρειαστεί να εγκαταστήσετε το ίδιο το &os;. Ο καλύτερος τρόπος για να γίνει η εγκατάσταση είναι με το επίσημο &os; CD-ROM ή με κάποιο αρχείο ISO, κατεβασμένο από τον επίσημο FTP τόπο. Όταν έχετε το κατάλληλο ISO στο σκληρό σας, ή το CD-ROM στον οδηγό CD, ενεργοποιήστε με το ποντίκι το εικονίδιο του CD στο κάτω δεξί μέρος της οθόνης του Parallels. Με αυτόν τον τρόπο θα μπορέσετε να ορίσετε την πηγή της εγκατάστασης. Μπορείτε να ορίσετε το CDROM ή κάποιο διαθέσιμο ISO αρχείο. Όταν έχετε αντιστοιχήσει τη πηγή εγκατάστασης, επανεκκινήστε το εικονικό σύστημα πατώντας απλά το κουμπί της επανεκκίνησης (reboot) του Parallels. To Parallels θα ξεκινήσει με ένα ειδικό BIOS το οποίο πρώτα ελέγχει εάν υπάρχει διαθέσιμο κάποιο CD-ROM, όπως κάνει και ένα φυσιολογικό BIOS. Σε αυτή τη περίπτωση θα βρει το μέσο εγκατάστασης του &os; και θα ξεκινήσει το sysinstall όπως περιγράφεται στο . Μπορείτε να εγκαταστήσετε το X11, αλλά μη δοκιμάσετε να ρυθμίσετε αυτή τη στιγμή. Όταν τελειώσετε με την εγκατάσταση, κάντε μια επανεκκίνηση στο φρέσκο εικονικό &os;. Ρυθμίζοντας το &os; στο &macos; X/Parallels Αφού έχει εγκατασταθεί επιτυχώς το &os; στο &macos; X με το Parallels, υπάρχουν μερικά βήματα ακόμη που μπορούν να σας βοηθήσουν να ρυθμίσετε το εικονικό σας σύστημα. Μεταβλητές του boot loader Το ποιο σημαντικό βήμα είναι να μειώσετε το μέγεθος του προκειμένου να αξιοποιήσετε τη CPU μέσα από το Parallels. Αυτό μπορεί να γίνει με το να προσθέσετε την ακόλουθη γραμμή στο /boot/loader.conf: kern.hz=100 Χωρίς αυτή τη ρύθμιση, ένα αδρανές &os; στο Parallels θα καταναλώνει το 15% της CPU ενός μονοπύρηνου &imac;. Μετά από την αλλαγή, η κατανάλωση θα πέσει κοντά στο 5%. Δημιουργία νέου αρχείου ρυθμίσεων του πυρήνα Μπορείτε να αφαιρέσετε όλες τους οδηγούς για SCSI, FireWire, και USB συσκευές. Το Parallels παρέχει ένα εικονικό προσαρμογέα δικτύου ο οποίος χρησιμοποιείται από τον οδηγό &man.ed.4;, οπότε όλοι οι οδηγοί για δικτυακές συσκευές εκτός των &man.ed.4; και &man.miibus.4; μπορούν να αφαιρεθούν από τον πυρήνα. Ρύθμιση δικτύου Η πιο απλή ρύθμιση δικτύου κάνει χρήση του DHCP για να συνδεθεί το εικονικό σας σύστημα στο ίδιο τοπικό δίκτυο με τον &mac;. Αυτό μπορεί εύκολα να γίνει με το να προσθέσετε τη γραμμή ifconfig_ed0="DHCP" στο /etc/rc.conf. Πολυπλοκότερες ρυθμίσεις δικτύου περιγράφονται στο κεφάλαιο . Fukang Chen (Loader) Συνεισφορά του &os; με &xen; στο Linux Το &xen; hypervisor είναι ένα προϊόν παρα-εικονικοποίησης (paravirtualization) ανοιχτού κώδικα το οποίο υποστηρίζεται από την εταιρεία XenSource. Τα φιλοξενούμενα λειτουργικά είναι γνωστά σαν domU domains, και ο ξενιστής σαν dom0. Το πρώτο βήμα για να τρέξετε ένα εικονικό σύστημα &os; μέσα από το Linux είναι να εγκαταστήσετε το &xen; για Linux dom0. Εμείς χρησιμοποιήσαμε ως ξενιστή της διανομή Slackware Linux. Εγκατάσταση &xen; 3 σε Linux dom0 Κατέβασμα &xen; 3.0 από XenSource Κατεβάστε xen-3.0.4_1-src.tgz from . Ξεπακετάρετε το tarball &prompt.root; cd xen-3.0.4_1-src &prompt.root; KERNELS="linux-2.6-xen0 linux-2.6-xenU" make world &prompt.root; make install Για να μεταγλωττίσετε ξανά τον πυρήνα για το dom0: &prompt.root; cd xen-3.0.4_1-src/linux-2.6.16.33-xen0 &prompt.root; make menuconfig &prompt.root; make &prompt.root; make install Παλιές εκδόσεις του &xen; ίσως χρειάζονται να οριστεί το make ARCH=xen menuconfig Προσθήκη στη λίστα του Grub menu.lst Επεξεργαστείτε το /boot/grub/menu.lst και προσθέστε τις παρακάτω γραμμές: title Xen-3.0.4 root (hd0,0) kernel /boot/xen-3.0.4-1.gz dom0_mem=262144 module /boot/vmlinuz-2.6.16.33-xen0 root=/dev/hda1 ro Επανεκκινήστε το σύστημά σας και φορτώστε το &xen; Αρχικά, επεξεργαστείτε το /etc/xen/xend-config.sxp, και προσθέστε τις παρακάτω γραμμές: (network-script 'network-bridge netdev=eth0') Στη συνέχεια, μπορούμε να τρέξουμε το &xen;: &prompt.root; /etc/init.d/xend start &prompt.root; /etc/init.d/xendomains start Το dom0 τρέχει: &prompt.root; xm list Name ID Mem VCPUs State Time(s) Domain-0 0 256 1 r----- 54452.9 &os; 7-CURRENT domU Κατεβάστε το &os; domU kernel για το &xen; 3.0 και την εικόνα δίσκο (disk image) από http://www.fsmware.com/ kernel-current mdroot-7.0.bz2 xmexample1.bsd Τοποθετήστε το αρχείο ρυθμίσεων xmexample1.bsd μέσα στο /etc/xen/ και αλλάξτε τα στοιχεία που σχετίζονται με το που βρίσκεται ο πυρήνας και η εικόνα δίσκου. Θα πρέπει να μοιάζει με το παρακάτω: kernel = "/opt/kernel-current" memory = 256 name = "freebsd" vif = [ '' ] disk = [ 'file:/opt/mdroot-7.0,hda1,w' ] #on_crash = 'preserve' extra = "boot_verbose" extra += ",boot_single" extra += ",kern.hz=100" extra += ",vfs.root.mountfrom=ufs:/dev/xbd769a" Το αρχείο mdroot-7.0.bz2 θα πρέπει να είναι αποσυμπιεσμένο Στη συνέχεια, το __xen_guest που βρίσκεται στο kernel-current πρέπει να αλλάξει για να προστεθεί το VIRT_BASE που απαιτεί το &xen; 3.0.3: &prompt.root; objcopy kernel-current -R __xen_guest &prompt.root; perl -e 'print "LOADER=generic,GUEST_OS=freebsd,GUEST_VER=7.0,XEN_VER=xen-3.0,BSD_SYMTAB,VIRT_BASE=0xC0000000\x00"' > tmp &prompt.root; objcopy kernel-current --add-section __xen_guest=tmp &prompt.root; objdump -j __xen_guest -s kernel-current kernel-current: file format elf32-i386 Contents of section __xen_guest: 0000 4c4f4144 45523d67 656e6572 69632c47 LOADER=generic,G 0010 55455354 5f4f533d 66726565 6273642c UEST_OS=freebsd, 0020 47554553 545f5645 523d372e 302c5845 GUEST_VER=7.0,XE 0030 4e5f5645 523d7865 6e2d332e 302c4253 N_VER=xen-3.0,BS 0040 445f5359 4d544142 2c564952 545f4241 D_SYMTAB,VIRT_BA 0050 53453d30 78433030 30303030 3000 SE=0xC0000000. Τώρα είμαστε έτοιμοι να δημιουργήσουμε και να εκκινήσουμε το domU: &prompt.root; xm create /etc/xen/xmexample1.bsd -c Using config file "/etc/xen/xmexample1.bsd". Started domain freebsd WARNING: loader(8) metadata is missing! Copyright (c) 1992-2006 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 7.0-CURRENT #113: Wed Jan 4 06:25:43 UTC 2006 kmacy@freebsd7.gateway.2wire.net:/usr/home/kmacy/p4/freebsd7_xen3/src/sys/i386-xen/compile/XENCONF WARNING: DIAGNOSTIC option enabled, expect reduced performance. Xen reported: 1796.927 MHz processor. Timecounter "ixen" frequency 1796927000 Hz quality 0 CPU: Intel(R) Pentium(R) 4 CPU 1.80GHz (1796.93-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0xf29 Stepping = 9 Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH, DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE> Features2=0x4400<CNTX-ID,<b14>> real memory = 265244672 (252 MB) avail memory = 255963136 (244 MB) xc0: <Xen Console> on motherboard cpu0 on motherboard Timecounters tick every 10.000 msec [XEN] Initialising virtual ethernet driver. xn0: Ethernet address: 00:16:3e:6b:de:3a [XEN] Trying to mount root from ufs:/dev/xbd769a WARNING: / was not properly dismounted Loading configuration files. No suitable dump device was found. Entropy harvesting: interrupts ethernet point_to_point kickstart. Starting file system checks: /dev/xbd769a: 18859 files, 140370 used, 113473 free (10769 frags, 12838 blocks, 4.2% fragmentation) Setting hostname: demo.freebsd.org. lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 inet 127.0.0.1 netmask 0xff000000 Additional routing options:. Mounting NFS file systems:. Starting syslogd. /etc/rc: WARNING: Dump device does not exist. Savecore not run. ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/X11R6/lib /usr/local/lib a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout Starting usbd. usb: Kernel module not available: No such file or directory Starting local daemons:. Updating motd. Starting sshd. Initial i386 initialization:. Additional ABI support: linux. Starting cron. Local package initialization:. Additional TCP options:. Starting background file system checks in 60 seconds. Sun Apr 1 02:11:43 UTC 2007 FreeBSD/i386 (demo.freebsd.org) (xc0) login: Το domU θα πρέπει να τρέχει τον πυρήνα &os; 7.0-CURRENT: &prompt.root; uname -a FreeBSD demo.freebsd.org 7.0-CURRENT FreeBSD 7.0-CURRENT #113: Wed Jan 4 06:25:43 UTC 2006 kmacy@freebsd7.gateway.2wire.net:/usr/home/kmacy/p4/freebsd7_xen3/src/sys/i386-xen/compile/XENCONF i386 Τώρα μπορούμε να ρυθμίσουμε και το δίκτυο στο domU. Το &os; domU θα κάνει χρήση ενός ειδικού προσαρμογέα με όνομα xn0: &prompt.root; ifconfig xn0 10.10.10.200 netmask 255.0.0.0 &prompt.root; ifconfig xn0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500 inet 10.10.10.200 netmask 0xff000000 broadcast 10.255.255.255 ether 00:16:3e:6b:de:3a lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 inet 127.0.0.1 netmask 0xff000000 Στο dom0 Slackware, κάποιa network interfaces που εξαρτώνται από το &xen; θα πρέπει τώρα να είναι διαθέσιμα: &prompt.root; ifconfig eth0 Link encap:Ethernet HWaddr 00:07:E9:A0:02:C2 inet addr:10.10.10.130 Bcast:0.0.0.0 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:815 errors:0 dropped:0 overruns:0 frame:0 TX packets:1400 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:204857 (200.0 KiB) TX bytes:129915 (126.8 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:99 errors:0 dropped:0 overruns:0 frame:0 TX packets:99 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:9744 (9.5 KiB) TX bytes:9744 (9.5 KiB) peth0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:1853349 errors:0 dropped:0 overruns:0 frame:0 TX packets:952923 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2432115831 (2.2 GiB) TX bytes:86528526 (82.5 MiB) Base address:0xc000 Memory:ef020000-ef040000 vif0.1 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:1400 errors:0 dropped:0 overruns:0 frame:0 TX packets:815 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:129915 (126.8 KiB) TX bytes:204857 (200.0 KiB) vif1.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:157 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:140 (140.0 b) TX bytes:158 (158.0 b) xenbr1 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:112 (112.0 b) TX bytes:0 (0.0 b) &prompt.root; brctl show bridge name bridge id STP enabled interfaces xenbr1 8000.feffffffffff no vif0.1 peth0 vif1.0 Το VMWare σε MacOS Το VMWare Fusion για &mac; είναι ένα εμπορικό πρόγραμμα. Υπάρχει διαθέσιμο για υπολογιστές &apple; &mac; αρχιτεκτονικής &intel; που τρέχουν &macos; 10.4.9 ή κάποια πιο πρόσφατη έκδοση. Το &os; υποστηρίζεται πλήρως ως φιλοξενούμενο (guest) λειτουργικό. Μόλις ολοκληρωθεί η εγκατάσταση του VMWare Fusion στο &macos; X, πρέπει να ρυθμίσετε μια εικονική μηχανή και να εγκαταστήσετε το φιλοξενούμενο λειτουργικό σύστημα. Εγκατάσταση του FreeBSD στο VMWare/&macos; X Αρχικά ξεκινήστε το VMWare Fusion, και θα φορτώσει η Συλλογή Εικονικών Μηχανών. Επιλέξτε "New" για να δημιουργήσετε μια νέα εικονική μηχανή: Θα δείτε να φορτώνει το New Virtual Machine Assistant, το βοηθητικό πρόγραμμα δημιουργίας μιας νέας εικονικής μηχανής. Επιλέξτε Continue για να συνεχίσετε: Στην επιλογή λειτουργικού συστήματος διαλέξτε Other και ως έκδοση λειτουργικού συστήματος διαλέξτε FreeBSD ή FreeBSD 64-bit (ανάλογα με το αν θέλετε υποστήριξη για 64-bit εφαρμογές ή όχι): Δώστε ένα όνομα για το VM Image και ρυθμίστε τον κατάλογο στον οποίο θέλετε να αποθηκευθεί: Ρυθμίστε το μέγεθος του Εικονικού Δίσκου για την εικονική μηχανή: Επιλέξτε μια μέθοδο εγκατάστασης για την εικονική μηχανή: είτε από ένα ISO image είτε από το CD-ROM: Μόλις επιλέξετε Finish, η εικονική μηχανή θα ξεκινήσει τη διαδικασία εκκίνησης (boot): Εγκαταστήστε το &os; όπως θα κάνατε και σε οποιοδήποτε άλλο υπολογιστή, ή ακολουθώντας τις οδηγίες από το : Μόλις ολοκληρωθεί η εγκατάσταση, μπορείτε να αλλάξετε τις ρυθμίσεις της εικονικής μηχανής, όπως π.χ. το μέγεθος μνήμης που θα χρησιμοποιεί: Οι ρυθμίσεις υλικού μιας εικονικής μηχανής δε μπορούν να αλλάξουν όσο τρέχει αυτή η εικονική μηχανή. Μπορείτε, ακόμη, να ρυθμίσετε τον αριθμό των επεξεργαστών τους οποίους επιτρέπεται να χρησιμοποιήσει αυτή η εικονική μηχανή: Ίσως έχει νόημα, επίσης, να αλλάξετε το αρχείο ή τη συσκευή που φαίνεται ως CD-ROM μέσα στην εικονική μηχανή. Συνήθως μπορείτε να αποσυνδέσετε το CD-ROM ή το ISO image από την εικονική μηχανή, αφού δε χρειάζεται πλέον όταν έχει ολοκληρωθεί η εγκατάσταση του &os;: Μια από τις τελευταίες ρυθμίσεις είναι η σύνδεση της εικονικής μηχανής με το δίκτυο. Για να μπορείτε να συνδεθείτε στην ΕΜ από άλλα μηχανήματα (εκτός του ξενιστή), ενεργοποιήστε την επιλογή Connect directly to the physical network (Bridged). Αλλιώς, για να μπορεί η ΕΜ να συνδεθεί στο δίκτυο μέσω του ξενιστή, αλλά να μη μπορούν άλλα μηχανήματα να συνδεθούν σε αυτή, ενεργοποιήστε την επιλογή Share the host's internet connection (NAT). Μόλις τελειώσετε με αυτές τις ρυθμίσεις, μπορείτε να εκκινήσετε τη νέα εικονική μηχανή με το φρεσκο-εγκατεστημένο &os; σας. Ρυθμίσεις του &os; μέσα στο &macos; X/VMWare Αφού τελειώσετε με την εγκατάσταση του &os; σε μια εικονική μηχανή VMWare μέσα σε &macos; X, πρέπει να κάνετε κάποιες ρυθμίσεις για να βελτιωθεί η απόδοση του &os; ως φιλοξενούμενου συστήματος. Ρυθμίσεις μεταβλητών του boot loader Η πιο σημαντική ρύθμιση είναι να μειώσετε την τιμή της μεταβλητής , για να μειωθεί κάπως η χρήση του επεξεργαστή από το &os; καθώς τρέχει μέσα στο VMWare. Προσθέστε, λοιπόν, την παρακάτω γραμμή στο αρχείο /boot/loader.conf: kern.hz=100 Χωρίς αυτή τη ρύθμιση ένα φιλοξενούμενο &os; που τρέχει μέσα σε VMWare μπορεί να χρησιμοποιεί μέχρι και 15% του επεξεργαστή ενός &imac;. Μετά από αυτή τη ρύθμιση η χρήση του επεξεργαστή μπορεί να είναι μικρότερη από 5%. Δημιουργήστε ένα νέο αρχείο ρυθμίσεων πυρήνα Μπορείτε να αφαιρέσετε όλες τις συσκευές FireWire και USB. Το VMWare παρέχει μια εικονική κάρτα δικτύου, η οποία είναι συμβατή με τον οδηγό &man.em.4;, οπότε μπορείτε να αφαιρέσετε όλες τις υπόλοιπες κάρτες δικτύου από τον πυρήνα σας. Ρυθμίστε το δίκτυο Ο πιο εύκολος τρόπος να ρυθμίσετε το δίκτυο της εικονικής μηχανής είναι να συνδεθείτε μέσω DHCP με το τοπικό δίκτυο, χρησιμοποιώντας τη διεύθυνση MAC του ξενιστή. Αυτό μπορεί να γίνει προσθέτοντας τη γραμμή ifconfig_em0="DHCP" στο αρχείο /etc/rc.conf. Για περισσότερες πληροφορίες και πιο προχωρημένες ρυθμίσεις δικτύου, δείτε το . Το &os; ως Ξενιστής (Host) Για αρκετά χρόνια, κανένα από τα πακέτα εικονικοποίησης δεν υποστήριζε επίσημα το &os; ως ξενιστή. Κάποιοι χρήστες χρησιμοποιούσαν παλιές και κατά βάση εγκαταλελειμμένες εκδόσεις του VMware (όπως το emulators/vmware3), οι οποίες χρησιμοποιούσαν την συμβατότητα εκτέλεσης προγραμμάτων &linux;. Λίγο μετά την επίσημη κυκλοφορία του &os; 7.2, έγινε διαθέσιμη στη Συλλογή των Ports η έκδοση Ανοικτού Κώδικα (OSE, Open Source Edition) του &virtualbox; της &sun;. Η εφαρμογή αυτή εκτελείται ως εγγενές πρόγραμμα του &os;. Το &virtualbox; είναι ένα πλήρες πακέτο εικονικοποίησης το οποίο βρίσκεται σε διαρκή ανάπτυξη. Είναι διαθέσιμο για τα περισσότερα λειτουργικά συστήματα, συμπεριλαμβανομένων των &windows;, &macos;, &linux; και &os;. Έχει τη δυνατότητα να εκτελεί το ίδιο καλά τόσο λειτουργικά τύπου &windows; όσο και &unix;. Έρχεται σε δύο εκδόσεις: ανοικτού και κλειστού κώδικα. Από την μεριά του χρήστη, ίσως ο μεγαλύτερος περιορισμός της έκδοσης ανοικτού κώδικα είναι η έλλειψη υποστήριξης συσκευών USB. Μπορείτε να δείτε όλες τις διαφορές στη σελίδα Editions του &virtualbox; wiki, στην τοποθεσία . Τη δεδομένη στιγμή, μόνο η έκδοση OSE διατίθεται για το &os;. Εγκατάσταση του &virtualbox; Το &virtualbox; είναι διαθέσιμο ως &os; port στο emulators/virtualbox, και μπορείτε να το εγκαταστήσετε με τις παρακάτω εντολές: &prompt.root; cd /usr/ports/emulators/virtualbox &prompt.root; make install clean Μια χρήσιμη επιλογή που εμφανίζεται στο διάλογο ρυθμίσεων, αφορά την εγκατάσταση των προγραμμάτων GuestAdditions. Τα προγράμματα αυτά παρέχουν μια σειρά από χρήσιμες λειτουργίες στα φιλοξενούμενα λειτουργικά, όπως η διάφανη λειτουργία του δείκτη ποντικιού (επιτρέπει στο ποντίκι να κινείται ελεύθερα μεταξύ του ξενιστή και του φιλοξενούμενου λειτουργικού, χωρίς να απαιτείται η χρήση κάποιου ειδικού πλήκτρου για εναλλαγή) καθώς και ταχύτερη γραφική απεικόνιση, ειδικά σε λειτουργικά &windows;. Μπορείτε να βρείτε τα guest additions στο μενού Devices, όταν ολοκληρώσετε την εγκατάσταση του φιλοξενούμενου λειτουργικού. Πριν χρησιμοποιήσετε το &virtualbox; για πρώτη φορά, θα πρέπει να αλλάξετε κάποιες ρυθμίσεις. Το port εγκαθιστά ένα άρθρωμα πυρήνα στον κατάλογο /boot/modules το οποίο θα πρέπει να φορτώσετε στον πυρήνα που εκτελείται: &prompt.root; kldload vboxdrv Για να φορτώνεται το άρθρωμα αυτόματα σε κάθε επανεκκίνηση του συστήματος, προσθέστε την παρακάτω γραμμή στο αρχείο /boot/loader.conf: vboxdrv_load="YES" Το &virtualbox; απαιτεί επίσης την προσάρτηση του συστήματος αρχείων proc: &prompt.root; mount -t procfs proc /proc Για να παραμείνει αυτή η ρύθμιση μετά από μια επανεκκίνηση, θα πρέπει να προσθέσετε την παρακάτω γραμμή στο αρχείο /etc/fstab: proc /proc procfs rw 0 0 Αν δείτε το παρακάτω μήνυμα όταν εκτελείτε το &virtualbox; μέσω τερματικού: VirtualBox: supR3HardenedExecDir: couldn't read "", errno=2 cchLink=-1 Η πιο πιθανή αιτία είναι κάποιο πρόβλημα με το σύστημα αρχείων proc. Χρησιμοποιήστε την εντολή mount για να δείτε αν το proc έχει προσαρτηθεί σωστά. Κατά τη διάρκεια της εγκατάστασης του &virtualbox;, δημιουργείται αυτόματα η ομάδα χρηστών vboxusers. Όλοι οι χρήστες που χρειάζονται πρόσβαση στο &virtualbox;, θα πρέπει να ανήκουν σε αυτή την ομάδα. Μπορείτε να χρησιμοποιήσετε την εντολή pw για να προσθέσετε νέα μέλη στην ομάδα: &prompt.root; pw groupmod vboxusers -m yourusername Για να εκτελέσετε το &virtualbox;, μπορείτε απλώς να επιλέξετε την καταχώριση Sun VirtualBox από το μενού του γραφικού σας περιβάλλοντος, ή να πληκτρολογήσετε το παρακάτω σε ένα τερματικό: &prompt.user; VirtualBox Για περισσότερες πληροφορίες σχετικά με τη ρύθμιση και χρήση του &virtualbox;, παρακαλούμε επισκεφθείτε την επίσημη δικτυακή τοποθεσία στο . Καθώς το &os; port είναι πολύ πρόσφατο, η εξέλιξη του είναι συνεχής. Για τις τελευταίες πληροφορίες καθώς και για οδηγίες αντιμετώπισης τυχόν προβλημάτων, παρακαλούμε δείτε τη σχετική σελίδα στο wiki του &os;, στην τοποθεσία . Άλλες Επιλογές Εικονικοποίησης Υπό εξέλιξη βρίσκεται η προσπάθεια να λειτουργήσει το - &xen; ως περιβάλλον ξενιστή για το &os;. - Μια πρώτη πειραματική έκδοση αυτής της δυνατότητας θα εμφανιστεί στο - &os; 8.0. + &xen; ως περιβάλλον ξενιστή για το + &os;.