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Συνεισφορά του BradDavisΜετατράπηκε σε SGML και ανανεώθηκε από τον FirewallsfirewallασφάλειαfirewallsΣύνοψηΤο firewall (τείχος προστασίας) καθιστά δυνατό το φιλτράρισμα της
εισερχόμενης και εξερχόμενης κίνησης που διέρχεται από το σύστημα σας.
Ένα firewall μπορεί να χρησιμοποιεί ένα ή περισσότερα σετ
κανόνων για να επιθεωρεί τα πακέτα κατά την είσοδο ή
έξοδο τους από μια δικτυακή σύνδεση, και να τα επιτρέπει ή να τα
απορρίπτει. Οι κανόνες του firewall μπορούν να ελέγχουν ένα ή
περισσότερα χαρακτηριστικά των πακέτων, συμπεριλαμβανομένων μεταξύ άλλων
και του τύπου του πρωτοκόλλου, καθώς και την διεύθυνση ή/και θύρα
(port) της αφετηρίας ή του προορισμού.Τα firewalls μπορούν να ενισχύσουν σημαντικά την ασφάλεια ενός
κόμβου ή ενός δικτύου. Μπορούν να χρησιμοποιηθούν για μία ή
περισσότερες από τις ακόλουθες λειτουργίες:Να προστατεύουν και να απομονώνουν τις εφαρμογές, τις υπηρεσίες
και τα μηχανήματα του εσωτερικού σας δικτύου από ανεπιθύμητη κίνηση
που προέρχεται από το Internet.Να περιορίζουν ή να αποκλείουν την πρόσβαση μηχανημάτων του
εσωτερικού δικτύου σε υπηρεσίες του Internet.Να υποστηρίζουν μετάφραση δικτυακών διευθύνσεων
(NAT), η οποία επιτρέπει στο εσωτερικό σας
δίκτυο να χρησιμοποιεί ιδιωτικές IP διευθύνσεις
και να μοιράζεται μία μοναδική σύνδεση με το Internet (είτε μέσω
μίας μοναδικής δημόσιας IP διεύθυνσης, είτε μέσω
ενός πλήθους δημοσίων διευθύνσεων που ανατίθενται αυτόματα).Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε:Πως να δημιουργήσετε σωστούς κανόνες φιλτραρίσματος
πακέτων.Τους διάφορους τύπους firewall που υπάρχουν στο &os; και τις
διαφορές τους.Πως να ρυθμίσετε και να χρησιμοποιήσετε το
PF firewall του OpenBSD.Πως να ρυθμίσετε και να χρησιμοποιήσετε το
IPFILTER.Πως να ρυθμίσετε και να χρησιμοποιήσετε το
IPFW.Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει:Να κατανοείτε βασικές αρχές του &os; και του Internet.Βασικές Έννοιες των FirewallsfirewallrulesetsΥπάρχουν δύο βασικοί τρόποι για τη δημιουργία κανόνων σε ένα
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,
το ρόλο των διαφόρων τιμών στα πεδία ελέγχου των πακέτων και πως
χρησιμοποιούνται στην ανταλλαγή πληροφοριών σε μια συνηθισμένη
συνεδρία. Για περισσότερες λεπτομέρειες, διαβάστε το .JohnFerrellΑναθεωρήθηκε και ενημερώθηκε από τον Το Packet Filter (PF) και το ALTQ του
OpenBSDfirewallPFΤον Ιούλιο του 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 optionsdevice pfkernel optionsdevice pflogkernel optionsdevice 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 Ενεργοποίηση του PFpfctl Απενεργοποίηση του PFpfctl all /etc/pf.confΔιαγραφή όλων των κανόνων (nat, filter, state, table,
κ.λ.π.) και εκ νέου ανάγνωση από το αρχείο
/etc/pf.confpfctl [ rules | nat | state ]Εκτύπωση αναφοράς σχετικά με τους κανόνες του φίλτρου,
του NAT, ή του πίνακα κατάστασηςpfctl /etc/pf.confΕλέγχει το /etc/pf.conf για λάθη,
αλλά δεν φορτώνει τους κανόνεςΕνεργοποίηση του ALTQΤο 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) FirewallfirewallIPFILTERΟ συγγραφέας του 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 στο . Παρέχεται
δυνατότητα αναζήτησης.Ενεργοποιώντας το IPFIPFILTERenablingΤο IPF περιλαμβάνεται στη βασική εγκατάσταση του &os; ως άρθρωμα
το οποίο μπορεί να φορτωθεί χωριστά. Το σύστημα θα φορτώσει δυναμικά
το άρθρωμα του IPF αν υπάρχει η καταχώριση
ipfilter_enable="YES" στο αρχείο
/etc/rc.conf. Το άρθρωμα έχει δημιουργηθεί με
ενεργοποιημένη την δυνατότητα καταγραφής και με την επιλογή
default pass all. Για να αλλάξετε αυτή την
προεπιλογή σε block all, μπορείτε απλώς να
προσθέσετε τον κανόνα απόρριψης (block all) στο τέλος των κανόνων σας.
Δεν χρειάζεται να μεταγλωττίσετε την επιλογή IPF στο πυρήνα του &os;
για το σκοπό αυτό.Επιλογές για τον Πυρήναkernel optionsIPFILTERkernel optionsIPFILTER_LOGkernel optionsIPFILTER_DEFAULT_BLOCKIPFILTERkernel 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 ipnatIPFipfΗ εντολή &man.ipf.8; χρησιμοποιείται για να φορτώσει το αρχείο
των κανόνων. Φυσιολογικά, θα δημιουργήσετε ένα αρχείο με τους δικούς
σας προσαρμοσμένους κανόνες και θα αντικαταστήσετε με αυτό
εξ'ολοκλήρου τους ενσωματωμένους κανόνες του firewall:&prompt.root; ipf -Fa -f /etc/ipf.rulesΗ επιλογή αδειάζει τους κανόνες από τους
εσωτερικούς πίνακες του firewall.Η επιλογή καθορίζει το αρχείο των κανόνων που
θα φορτωθεί.Αυτό σας δίνει την δυνατότητα να αλλάξετε το αρχείο κανόνων σας,
να εκτελέσετε την εντολή IPF που αναφέραμε παραπάνω, και
να ανανεώσετε με αυτό τον τρόπο τους κανόνες στο firewall που
εκτελείται ήδη με καινούργιους, χωρίς να χρειαστεί να επανεκκινήσετε
το σύστημα σας. Η μέθοδος αυτή είναι πολύ βολική για να δοκιμάσετε
νέους κανόνες, καθώς μπορεί να επαναληφθεί όσες φορές θέλετε.Δείτε τη σελίδα manual του &man.ipf.8; για λεπτομέρειες σχετικά με
τις υπόλοιπες επιλογές που μπορείτε να χρησιμοποιήσετε με την εντολή
αυτή.Η εντολή &man.ipf.8; αναμένει ένα απλό αρχείο κειμένου ως αρχείο
κανόνων. Δεν θα δεχθεί αρχείο κανόνων γραμμένο ως script με
συμβολικές αντικαταστάσεις.Υπάρχει ωστόσο τρόπος να γράψετε κανόνες IPF που να χρησιμοποιούν
την ισχύ των συμβολικών αντικαταστάσεων. Για περισσότερες
πληροφορίες, δείτε το
.IPFSTATipfstatIPFILTERstatisticsΗ προεπιλεγμένη συμπεριφορά του &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; για περισσότερες λεπτομέρειες.IPMONipmonIPFILTERloggingΓια να λειτουργήσει σωστά η εντολή 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) θύρα που χρησιμοποιεί για να δέχεται
αιτήματα εξυπηρέτησης. Τα πακέτα που προορίζονται για μια
συγκεκριμένη υπηρεσία, ξεκινούν από τη διεύθυνση αφετηρίας
χρησιμοποιώντας μια μη-προνομιακή θύρα και καταλήγουν στη
συγκεκριμένη θύρα υπηρεσίας στον προορισμό. Όλες οι παραπάνω
παράμετροι (θύρες και διευθύνσεις) μπορούν να χρησιμοποιηθούν
ως κριτήρια επιλογής για την δημιουργία κανόνων που επιτρέπουν
ή εμποδίζουν την πρόσβαση σε υπηρεσίες.IPFILTERrule processing orderΤο IPF γράφτηκε αρχικά χρησιμοποιώντας μια λογική επεξεργασίας
κανόνων του τύπου ο τελευταίος κανόνας που ταιριάζει, είναι ο
νικητής και χρησιμοποιούσε μόνο κανόνες stateless. Με την
πάροδο του χρόνου, το IPF ενισχύθηκε με την επιλογή
quick και με δυνατότητα αποθήκευσης κατάστασης
μέσω της επιλογής keep state. Με τον τρόπο αυτό,
εκσυγχρονίστηκε δραματικά η λογική επεξεργασίας των κανόνων.Οι οδηγίες που περιέχονται σε αυτή την ενότητα βασίζονται στη
χρήση κανόνων που περιέχουν την επιλογή quick και την
επιλογή keep state για τη διατήρηση της κατάστασης.
Αυτές είναι και οι βασικές λειτουργίες για την κωδικοποίηση του
συνόλου κανόνων ενός inclusive firewall.Όταν δουλεύετε με τους κανόνες του firewall, θα πρέπει να είστε
πολύ προσεκτικοί. Αν βάλετε λανθασμένες
ρυθμίσεις, μπορεί να κλειδωθείτε έξω από τον
εξυπηρετητή σας. Για να είστε ασφαλείς, είναι προτιμότερο να
κάνετε τις αρχικές σας ρυθμίσεις από την τοπική κονσόλα, παρά μέσω
απομακρυσμένης σύνδεσης (π.χ. μέσω
ssh).Συντακτικό ΚανόνωνIPFILTERrule syntaxΤο συντακτικό των κανόνων που παρουσιάζουμε εδώ, έχει απλοποιηθεί
ώστε να απεικονίζει τη σύγχρονη stateful υλοποίηση και τη λογική
του τύπου ο πρώτος κανόνας που ταιριάζει είναι και ο
νικητής. Για την περιγραφή του παλιότερου τρόπου λειτουργίας,
διαβάστε τη σελίδα manual του &man.ipf.8;.Ο χαρακτήρας # χρησιμοποιείται για να
επισημάνει την αρχή ενός σχολίου, και μπορεί να εμφανίζεται στο τέλος
μιας γραμμής κανόνα ή στη δική του γραμμή. Οι κενές γραμμές
αγνοούνται.Οι κανόνες περιέχουν λέξεις-κλειδιά. Οι λέξεις αυτές θα πρέπει
να κωδικοποιηθούν με συγκεκριμένη σειρά από τα αριστερά προς τα δεξιά
της γραμμής. Οι λέξεις-κλειδιά φαίνονται παρακάτω με έντονα γράμματα.
Μερικές λέξεις έχουν υπο-επιλογές οι οποίες μπορεί να είναι επίσης
λέξεις-κλειδιά και να περιλαμβάνουν επίσης περισσότερες υπο-επιλογές.
Κάθε μια από τις επικεφαλίδες στο παράδειγμα που φαίνεται παρακάτω
έχει μια κεφαλίδα με έντονα γράμματα η οποία επεξηγεί το περιεχόμενο
της.ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO
SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG
STATEFULACTION = block | passIN-OUT = in | outOPTIONS = log | quick | on
interface-nameSELECTION = proto value |
source/destination IP | port = number | flags
flag-valuePROTO = tcp/udp | udp | tcp |
icmpSRC_ADD,DST_ADDR = all | from
object to objectOBJECT = IP address | anyPORT_NUM = port numberTCP_FLAG = SSTATEFUL = keep stateACTIONΗ ενέργεια (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 "<>" | "><"Μετά τις παραμέτρους για το ταίριασμα της αφετηρίας και του
προορισμού, οι παρακάτω δύο παράμετροι είναι υποχρεωτικές για να
λειτουργεί η σύγχρονη λογική επεξεργασίας των κανόνων.TCP_FLAGΤα flags είναι ενεργά μόνο στο φιλτράρισμα του πρωτοκόλλου
TCP. Το κάθε γράμμα αντιπροσωπεύει ένα πιθανό
flag το για το οποίο γίνεται ανίχνευση στην επικεφαλίδα του πακέτου
TCP.Η σύγχρονη λογική επεξεργασίας των κανόνων, χρησιμοποιεί την
παράμετρο flags S για την αναγνώριση της έναρξης
μια συνεδρίας tcp.STATEFULΣε ένα κανόνα που επιτρέπει (pass) το πέρασμα των πακέτων, η
επιλογή keep state δείχνει ότι θα πρέπει να
ενεργοποιείται η λειτουργία stateful filtering όταν το πακέτο
ταιριάζει με τα κριτήρια επιλογής.Η επιλογή αυτή είναι υποχρεωτική για τη λειτουργία της
σύγχρονης λογικής επεξεργασίας κανόνων.Φιλτράρισμα με Διατήρηση της Κατάστασης (stateful)IPFILTERstateful 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 #####################################NATNATIP masqueradingNATnetwork address translationNATΤο 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.255IPNATNATand IPFILTERipnatΟι κανόνες του 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Κανόνες του IPNATΟι κανόνες του NAT είναι αρκετά ευέλικτοι,
και διαθέτουν πλήθος δυνατοτήτων ώστε να καλύπτουν τις ανάγκες
των οικιακών αλλά και των επιχειρησιακών χρηστών.Η σύνταξη των κανόνων που παρουσιάζεται εδώ, έχει απλοποιηθεί
ώστε να συμβαδίζει με τη συνήθη χρήση σε μη-εμπορικά περιβάλλοντα.
Για πιο πλήρη περιγραφή της σύνταξης, δείτε τη σελίδα manual του
&man.ipnat.5;.Η σύνταξη ενός κανόνα NAT μοιάζει με την
παρακάτω:map IFLAN_IP_RANGE -> PUBLIC_ADDRESSΟ κανόνας ξεκινάει με τη λέξη map.Αντικαταστήστε το IF με την εξωτερική
διεπαφή (τη κάρτα δικτύου που συνδέεται στο Internet).Η παράμετρος LAN_IP_RANGE είναι η
περιοχή διευθύνσεων που χρησιμοποιείται από το εσωτερικό σας δίκτυο.
Στην πραγματικότητα θα μοιάζει με κάτι σαν το 192.168.1.0/24.Η παράμετρος PUBLIC_ADDRESS μπορεί να
είναι είτε η εξωτερική IP διεύθυνση, είτε η ειδική λέξη
0/32, η οποία σημαίνει ότι θα χρησιμοποιηθεί η
IP διεύθυνση που έχει αποδοθεί στο
IF.Πως λειτουργεί το NATΈνα πακέτο φτάνει στο firewall από το LAN με προορισμό το
Internet. Περνάει διαμέσου των κανόνων φιλτραρίσματος εξερχομένων,
όπου γίνεται η επεξεργασία του από το NAT.
Οι κανόνες εφαρμόζονται από τον πρώτο και προς τα κάτω, και κερδίζει
ο πρώτος που ταιριάζει. Ο έλεγχος γίνεται με βάση τη διεπαφή από την
οποία λήφθηκε το πακέτο και τη διεύθυνση IP από την οποία προέρχεται.
Όταν το όνομα της διεπαφής ενός πακέτου ταιριάζει με κάποιο κανόνα του
NAT, η διεύθυνση IP της αφετηρίας (που προέρχεται
από το ιδιωτικό δίκτυο) ελέγχεται για να εξακριβωθεί αν ταιριάζει με
την περιοχή διευθύνσεων που καθορίζεται στην αριστερά πλευρά του
συμβόλου (βέλος) του κανόνα NAT. Αν ταιριάζει, η
διεύθυνση του πακέτου ξαναγράφεται, χρησιμοποιώντας τη δημόσια
διεύθυνση IP η οποία παρέχεται από το 0/32. Το
NAT δημιουργεί μια καταχώριση στον εσωτερικό του
πίνακα, έτσι ώστε όταν επιστρέψει η απάντηση από το Internet, να
μπορεί να αντιστοιχηθεί ξανά στην αρχική ιδιωτική διεύθυνση IP και να
περάσει έπειτα από τους κανόνες του φίλτρου για περαιτέρω
επεξεργασία.Ενεργοποιώντας το IPNATΓια να ενεργοποιήσετε το IPNAT, προσθέστε τις
παρακάτω γραμμές στο /etc/rc.conf.Για να επιτρέψετε στο μηχάνημα σας να δρομολογεί πακέτα μεταξύ
διεπαφών δικτύου:gateway_enable="YES"Για να ξεκινάει αυτόματα το IPNAT σε κάθε
εκκίνηση:ipnat_enable="YES"Για να καθορίσετε από που επιθυμείτε να φορτώνονται οι κανόνες
του IPNAT:ipnat_rules="/etc/ipnat.rules"Το NAT σε Ένα Μεγάλο Τοπικό ΔίκτυοΓια τοπικά δίκτυα με μεγάλο αριθμό υπολογιστών, ή για δίκτυα που
διασυνδέουν περισσότερα από ένα 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 udpFTP και NATΤο FTP είναι ένας δεινόσαυρος που έχει απομείνει από την εποχή
που το Internet ήταν στα αρχικά του στάδια, όπου τα ερευνητικά
εργαστήρια των πανεπιστήμιων ήταν συνδεμένα μεταξύ τους με
μισθωμένες γραμμές και οι ερευνητές το χρησιμοποιούσαν για να
στέλνουν αρχεία ο ένας στον άλλο. Την εποχή εκείνη, δεν υπήρχαν
ανησυχίες σχετικά με την ασφάλεια. Με το πέρασμα του χρόνου, το
FTP θάφτηκε στο πίσω μέρος του ταχέως εξελισσόμενου Internet. Δεν
εξελίχθηκε ποτέ ώστε να ξεπεράσει προβλήματα ασφάλειας, όπως π.χ. το
γεγονός ότι στέλνει το όνομα και τον κωδικό του χρήστη ως απλό
κείμενο. Το FTP έχει δυο καταστάσεις λειτουργίας, την ενεργή και την
παθητική. Η διαφορά είναι στο πως γίνεται η ανάκτηση του καναλιού
δεδομένων. Η παθητική λειτουργία είναι πιο ασφαλής, καθώς το
κανάλι δεδομένων αποτελεί το κύριο κανάλι της συνεδρίας. Μπορείτε να
βρείτε πολύ καλή περιγραφή του πρωτοκόλλου και των διαφορετικών τρόπων
λειτουργίας του, στο .Κανόνες του IPNATΤο 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.Κανόνες Φίλτρου για το IPNATΌταν χρησιμοποιείται ο μεσολαβητής 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 stateIPFWfirewallIPFWΤο 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.Ενεργοποιώντας το IPFWIPFWenablingΤο 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 optionsIPFIREWALLkernel optionsIPFIREWALL_VERBOSEkernel optionsIPFIREWALL_VERBOSE_LIMITIPFWkernel optionsΔεν είναι υποχρεωτικό να ενεργοποιήσετε το IPFW μεταγλωττίζοντας
τις παρακάτω επιλογές στον πυρήνα του &os;, εκτός και αν θέλετε να
χρησιμοποιήσετε NAT. Ο σκοπός αυτής της
παρουσίασης είναι καθαρά ενημερωτικός.options IPFIREWALLΗ επιλογή αυτή ενεργοποιεί το IPFW ως μέρος του πυρήνα.options IPFIREWALL_VERBOSEΕνεργοποιεί την καταγραφή των πακέτων που περνούν μέσω του IPFW
και περιλαμβάνουν τη λέξη log στον κανόνα
τους.options IPFIREWALL_VERBOSE_LIMIT=5Περιορίζει τον πλήθος των πακέτων που καταγράφονται μέσω του
&man.syslogd.8; σε συγκεκριμένο αριθμό ανά καταχώριση. Η ρύθμιση
είναι χρήσιμη σε εχθρικά περιβάλλοντα στα οποία είναι επιθυμητή
η καταγραφή. Με αυτό τον τρόπο μπορεί να αποφευχθεί μια πιθανή
επίθεση με στόχο την υπερχείλιση των αρχείων καταγραφής.kernel optionsIPFIREWALL_DEFAULT_TO_ACCEPToptions IPFIREWALL_DEFAULT_TO_ACCEPTΗ επιλογή αυτή αφήνει τα πάντα να περνάνε μέσα από το firewall,
το οποίο είναι καλή ιδέα την πρώτη φορά που ρυθμίζετε το firewall
σας.kernel optionsIPDIVERToptions IPDIVERTΗ επιλογή αυτή ενεργοποιεί τη λειτουργία
NAT.Το firewall θα απορρίπτει όλα τα πακέτα που κατευθύνονται από
και προς το μηχάνημα, αν δεν περιλάβετε την επιλογή
IPFIREWALL_DEFAULT_TO_ACCEPT ή αν δεν ρυθμίσετε
ένα κατάλληλο κανόνα που να επιτρέπει αυτές τις συνδέσεις.Επιλογές στο /etc/rc.confΕνεργοποιήστε το 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.Η Εντολή IPFWipfwΗ εντολή 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) θύρα που χρησιμοποιεί για να δέχεται
αιτήματα εξυπηρέτησης. Τα πακέτα που προορίζονται για μια
συγκεκριμένη υπηρεσία, ξεκινούν από τη διεύθυνση αφετηρίας
χρησιμοποιώντας μια μη-προνομιακή θύρα και καταλήγουν στη
συγκεκριμένη θύρα υπηρεσίας στον προορισμό. Όλες οι παραπάνω
παράμετροι (θύρες και διευθύνσεις) μπορούν να χρησιμοποιηθούν ως
κριτήρια επιλογής για την δημιουργία κανόνων που επιτρέπουν
ή εμποδίζουν την πρόσβαση σε υπηρεσίες.IPFWrule processing orderΌταν ένα πακέτο εισέρχεται στο firewall, συγκρίνεται με βάση τον
πρώτο κανόνα. Η σύγκριση συνεχίζεται διαδοχικά με τους υπόλοιπους
κανόνες, από τον πρώτο προς τον τελευταίο, με βάση τον αύξοντα αριθμό
τους. Όταν το πακέτο ταιριάξει με τις παραμέτρους επιλογής κάποιου
κανόνα, εκτελείται η οδηγία που αναφέρεται στο πεδίο ενεργειών του
κανόνα αυτού και η αναζήτηση κανόνων για το συγκεκριμένο πακέτο
τερματίζεται. Σε αυτή τη μέθοδο αναζήτησης,
ο πρώτος κανόνας που ταιριάζει, είναι ο νικητής. Αν
το πακέτο δεν ταιριάζει με κανένα από τους κανόνες, θα ληφθεί από τον
υποχρεωτικό προεπιλεγμένο κανόνα του IPFW, με αριθμό 65535, ο οποίος
εμποδίζει τη διέλευση όλων των πακέτων, και τα απορρίπτει χωρίς να
στείλει καμιά απάντηση στον αρχικό αποστολέα τους.Η αναζήτηση συνεχίζεται μετά από κανόνες τύπου
count, skipto και
tee.Οι οδηγίες που φαίνονται εδώ, βασίζονται στη χρήση κανόνων που
περιέχουν τις οδηγίες keep state,
limit, in,
out και via. Αυτές είναι και
οι βασικές λειτουργίες για την δόμηση ενός firewall τύπου
inclusive με stateful λειτουργία.Να δίνετε μεγάλη προσοχή όταν δουλεύετε με τους κανόνες ενός
firewall. Μπορεί άθελα σας να κλειδωθείτε έξω από το σύστημα
σας.Σύνταξη ΚανόνωνIPFWrule syntaxΣτην ενότητα αυτή, θα παρουσιάσουμε μια απλοποιημένη σύνταξη
κανόνων. Δείχνουμε μόνο ότι χρειάζεται για να δημιουργηθεί ένα
τυποποιημένο σύνολο κανόνων για ένα inclusive firewall. Για πλήρη
περιγραφή, δείτε τη σελίδα manual του &man.ipfw.8;.Οι κανόνες περιέχουν λέξεις-κλειδιά. Οι λέξεις αυτές θα πρέπει
να κωδικοποιηθούν με συγκεκριμένη σειρά από τα αριστερά προς τα
δεξιά της γραμμής. Οι λέξεις-κλειδιά φαίνονται παρακάτω με έντονα
γράμματα. Μερικές λέξεις έχουν υπο-επιλογές οι οποίες μπορεί να
είναι επίσης λέξεις-κλειδιά και να περιλαμβάνουν επίσης ακόμα
περισσότερες υπο-επιλογές.Η αρχή ενός σχολίου, σηματοδοτείται με το σύμβολο
#, το οποίο μπορεί να εμφανίζεται στο τέλος μιας
γραμμής κανόνα, ή και σε μια δική του γραμμή. Οι κενές γραμμές
αγνοούνται.CMD RULE_NUMBER ACTION LOGGING SELECTION
STATEFULCMDΓια να γίνει η προσθήκη ενός νέου κανόνα στον εσωτερικό
πίνακα, τοποθετείται μπροστά από αυτόν η παράμετρος
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 ΚανόνεςIPFWstateful filteringΤο stateful φιλτράρισμα, αντιμετωπίζει την κίνηση του δικτύου ως
διπλής κατεύθυνσης ανταλλαγή πακέτων τα οποία δημιουργούν μια
συνεδρία. Έχει επίσης τη δυνατότητα να διερευνήσει αν τηρούνται
οι έγκυροι κανόνες ανταλλαγής μηνυμάτων μεταξύ του αποστολέα και
του παραλήπτη. Οποιαδήποτε πακέτα δεν ταιριάζουν με το πρότυπο
αυτής της επικοινωνίας, απορρίπτονται ως ψεύτικα.Η επιλογή check-state χρησιμοποιείται για
να αναγνωριστεί σε ποιο σημείο του συνόλου κανόνων του IPFW θα
ελεγχθεί το πακέτο με βάση τη δυνατότητα των δυναμικών κανόνων.
Σε περίπτωση ταιριάσματος, το πακέτο εξέρχεται από το firewall και
συνεχίζει την πορεία του, ενώ την ίδια στιγμή δημιουργείται ένας
νέος δυναμικός κανόνας για το επόμενο πακέτο που αναμένεται να
έρθει με βάση τη συγκεκριμένη διπλής κατεύθυνσης επικοινωνία. Σε
περίπτωση που το πακέτο δεν ταιριάζει με το δυναμικό κανόνα, θα
προχωρήσει για να ελεγχθεί από τον επόμενο κανόνα του
firewall.Η δυνατότητα δυναμικών κανόνων είναι ευάλωτη σε εξάντληση πόρων
σε περίπτωση επίθεσης υπερχείλισης (flood) SYN. Η επίθεση αυτή
μπορεί να δημιουργήσει πολύ μεγάλο πλήθος δυναμικών κανόνων.
Για την αντιμετώπιση μιας τέτοιας επίθεσης, το &os; χρησιμοποιεί
μια ακόμα επιλογή που ονομάζεται limit.
Η επιλογή αυτή μπορεί να περιορίσει τον αριθμό των ταυτόχρονων
συνεδριών, εξετάζοντας τα πεδία αφετηρίας και προορισμού των
κανόνων. Ανιχνεύει με αυτό τον τρόπο το πλήθος των δυναμικών
κανόνων και πόσες φορές έχει χρησιμοποιηθεί ο καθένας από
τη συγκεκριμένη IP διεύθυνση. Αν ο αριθμός αυτός ξεπερνάει το
όριο που έχει τεθεί με την επιλογή limit, το
πακέτο απορρίπτεται.Καταγραφή Μηνυμάτων του FirewallIPFWloggingΤα πλεονεκτήματα της καταγραφής συμβάντων του 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 ###############################Ένα Υπόδειγμα NAT με Stateful Σύνολο
ΚανόνωνNATand 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 @@
JimMockΑναδομήθηκε και μέρη του ανανεώθηκαν από τον Brian N.HandyΑρχική συνεισφορά από τον RichMurpheyΣυμβατότητα με Εκτελέσιμα του LinuxΣύνοψηΣυμβατότητα με εκτελέσιμα (binary) Linuxbinary συμβατότητα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.kokernel optionsCOMPAT_LINUXΑν για κάποιο λόγο δεν θέλετε ή δε μπορείτε να φορτώσετε το KLD,
τότε μπορείτε να συνδέσετε στατικά την υποστήριξη εκτελέσιμων του Linux
στον πυρήνα με το να προσθέσετε την επιλογή options
COMPAT_LINUX στο αρχείων ρυθμίσεων του πυρήνα. Στη συνέχεια
μπορείτε να εγκαταστήσετε τον νέο πυρήνα όπως περιγράφεται στο
.Εγκατάσταση των Linux Runtime LibrariesLinuxεγκατάσταση βιβλιοθηκών LinuxΑυτό μπορεί να γίνει με δύο τρόπους. Είτε με τη χρήση του
linux_base-fc4 port, ή
με χειροκίνητη
εγκατάσταση τους.Εγκατάσταση μέσω του linux_base PortPorts 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 Librariesshared 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.29symbolic 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 BinariesLinuxELF 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-binaryGNU toolchainTo 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.BorisHollasΑνανεώθηκε για το Mathematica 5.X από τον Εγκαθιστώντας το &mathematica;applicationsMathematicaΤο κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της έκδοσης
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;EthernetMAC 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.AaronKaplanΣυνεισφορά του RobertGetschmannΕυχαριστίες στον Εγκαθιστώντας το &maple;applicationsMapleΤο &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 (η οποία
προστατεύεται από το κλειδί της άδειας).DanPellegΣυνεισφορά του Εγκαθιστώντας το &matlab;applicationsMATLABΤο κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης της 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.shTo $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 και να αρχίσετε να χρησιμοποιείτε την
εφαρμογή.MarcelMoolenaarΣυνεισφορά του Εγκατάσταση της &oracle;applicationsOracleΕισαγωγήΤο κείμενο αυτό περιγράφει τη διαδικασία εγκατάστασης
των &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/libCLASSPATH$ORACLE_HOME/jdbc/lib/classes111.zipPATH/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.Διόρθωση του genclntshTo 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.
HolgerKippΣυνεισφορά του ValentinoVaschettoΑρχική μετατροπή σε SGML από τον Εγκατάσταση του &sap.r3;applicationsSAP 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ΌνομαΑρίθμησηΠεριγραφήKERNEL51009113SAP Kernel Oracle / Installation / AIX, Linux,
SolarisRDBMS51007558Oracle / RDBMS 8.0.5.X / LinuxEXPORT151010208IDES / DB-Export / Disc 1 of 6EXPORT251010209IDES / DB-Export / Disc 2 of 6EXPORT351010210IDES / DB-Export / Disc 3 of 6EXPORT451010211IDES / DB-Export / Disc 4 of 6EXPORT551010212IDES / DB-Export / Disc 5 of 6EXPORT651010213IDES / 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ΌνομαΑρίθμησηΠεριγραφήKERNEL51014004SAP Kernel Oracle / SAP Kernel Version 4.6D / DEC,
LinuxRDBMS51012930Oracle 8.1.7/ RDBMS / LinuxEXPORT151013953Release 4.6C SR2 / Export / Disc 1 of 4EXPORT151013953Release 4.6C SR2 / Export / Disc 2 of 4EXPORT151013953Release 4.6C SR2 / Export / Disc 3 of 4EXPORT151013953Release 4.6C SR2 / Export / Disc 4 of 4LANG151013954Release 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ΑρίθμησηΤίτλος0171356SAP Software on Linux: Essential Comments0201147INST: 4.6C R/3 Inst. on UNIX - Oracle0373203Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6
LINUX0072984Release of Digital UNIX 4.0B for Oracle0130581R3SETUP step DIPGNTAB terminates0144978Your system has not been installed correctly0162266Questions and tips for R3SETUP on Windows NT / W2K&sap.r3; 4.6C, &oracle; 8.1.7ΑρίθμησηΤίτλος0015023Initializing table TCPDB (RSXP0004) (EBCDIC)0045619R/3 with several languages or typefaces0171356SAP Software on Linux: Essential Comments0195603RedHat 6.1 Enterprise version:
Known problems0212876The new archiving tool SAPCAR0300900Linux: Released DELL Hardware0377187RedHat 6.2: important remarks0387074INST: R/3 4.6C SR2 Installation on UNIX0387077INST: R/3 4.6C SR2 Inst. on UNIX - Oracle0387078SAP Software on UNIX: OS Dependencies 4.6C SR2Απαιτήσεις ΣυστήματοςΟ ακόλουθος εξοπλισμός είναι αρκετός για μια τυπική εγκατάσταση
του &sap.r3; System. Για μηχανήματα
παραγωγής θα χρειαστείτε φυσικά καλύτερη εκτίμηση των απαιτήσεων
σας:Εξάρτημα4.6B4.6CΕπεξεργαστής2 x 800MHz &pentium; III2 x 800MHz &pentium; IIIΜνήμη1GB ECC2GB 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/da0s1a1.016.3031//dev/da0s1b6swap/dev/da0s1e2.032.6232/var/dev/da0s1f8.205.3398/usr/dev/da1s1e45.734.36145/compat/linux/oracle/dev/da1s1f2.032.6232/compat/linux/sapmnt/dev/da1s1g2.032.6232/compat/linux/usr/sapΡυθμίστε από πριν τους δύο δίσκους με το λογισμικό &mylex; ή
το PERC/3 RAID. Μπορείτε να εισέλθετε σε αυτό κατά τη φάση
εκκίνησης του BIOS. Προσέξτε εδώ ότι η διάταξη του δίσκου διαφέρει λίγο ως προς
τη συνιστώμενη από τη &sap;, καθώς η &sap; προτείνει να
προσαρτήσετε τους υποκαταλόγους της
&oracle; (και κάποιους άλλους) ξεχωριστά
— εμείς προτιμήσαμε, για λόγους απλότητας, να δημιουργήσουμε
κανονικούς καταλόγους.make world και Νέος ΠυρήναςΚατεβάστε τον πηγαίο κώδικα του τελευταίου πυρήνα
-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, τότε
δεν χρειάζεται να σας απασχολεί.Εγκατάσταση των Απαραίτητων RPMsRPMsΓια να ξεκινήσει το πρόγραμμα 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/oracle45 GB/compat/linux/sapmnt2 GB/compat/linux/usr/sap2 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 ομάδαςόνομα ομάδαςπεριγραφή100dbaData Base Administrator (Διαχειριστής Βάσης
Δεδομένων)101sapsys&sap; System102operData Base Operator (Χειριστής Βάσης Δεδομένων)Για τη τυπική εγκατάσταση
της &oracle;, θα χρειαστείτε μόνο την
ομάδα dba (δείτε τη τεκμηρίωση
της &oracle; και
του &sap; για περισσότερες
πληροφορίες).Θα χρειαστούμε επίσης τους ακόλουθους χρήστες:ID χρήστηόνομα χρήστηγενικό όνομααρχική ομάδαεπιπλέον ομάδεςπεριγραφή1000idsadm/prdadmsidadmsapsysoper&sap; Administrator (Διαχειριστής)1002oraids/oraprdorasiddbaoper&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Εγγραφές στο /etc/servicesΤο &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;.Εκκίνηση του R3SETUP 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]IDSEnterEnter SAP Instance Number[00]EnterEnter SAPMOUNT Directory[/sapmnt]EnterEnter name of SAP central host[troubadix.domain.de]EnterEnter name of SAP db host[troubadix]EnterSelect character set[1] (WE8DEC)EnterEnter Oracle server version (1) Oracle 8.0.5, (2)
Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.61EnterExtract Oracle Client archive[1] (Yes, extract)EnterEnter path to KERNEL CD[/sapcd]/oracle/IDS/sapreorg/KERNELEnter path to RDBMS CD[/sapcd]/oracle/IDS/sapreorg/RDBMSEnter path to EXPORT1 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT1Directory to copy EXPORT1 CD[/oracle/IDS/sapreorg/CD4_DIR]EnterEnter path to EXPORT2 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT2Directory to copy EXPORT2 CD[/oracle/IDS/sapreorg/CD5_DIR]EnterEnter path to EXPORT3 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT3Directory to copy EXPORT3 CD[/oracle/IDS/sapreorg/CD6_DIR]EnterEnter path to EXPORT4 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT4Directory to copy EXPORT4 CD[/oracle/IDS/sapreorg/CD7_DIR]EnterEnter path to EXPORT5 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT5Directory to copy EXPORT5 CD[/oracle/IDS/sapreorg/CD8_DIR]EnterEnter path to EXPORT6 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT6Directory to copy EXPORT6 CD[/oracle/IDS/sapreorg/CD9_DIR]EnterEnter amount of RAM for SAP + DB850Enter (in Megabytes)Service Entry Message Server[3600]EnterEnter Group-ID of sapsys[101]EnterEnter Group-ID of oper[102]EnterEnter Group-ID of dba[100]EnterEnter User-ID of sidadm[1000]EnterEnter User-ID of orasid[1002]EnterNumber of parallel procs[2]EnterΑν δεν έχετε αντιγράψει τα CDs σε διαφορετικούς καταλόγους,
τότε το πρόγραμμα εγκατάστασης
του &sap; δε θα μπορέσει να βρει τα CD τα
οποία χρειάζεται (και τα οποία αναγνωρίζονται από το
αρχείο LABEL.ASC που βρίσκεται μέσα σε αυτά)
και θα σας ζητηθεί να εισάγετε και προσαρτήσετε τα CD και να
επιβεβαιώσετε το σημείο προσάρτησης.Το CENTRDB.R3S μπορεί όμως να παράγει
μερικά σφάλματα. Στη περίπτωσή μας, μας ζήτησε ξανά το EXPORT4 CD
αλλά μας έδειξε το σωστό κλειδί (6_LOCATION, μετά 7_LOCATION
κλπ.), και έτσι μπορείτε να συνεχίσετε βάζοντας τις σωστές τιμές.
Εκτός από κάποια προβλήματα που αναφέρονται παρακάτω, η
εγκατάσταση θα πρέπει να κυλίσει ομαλά, μέχρι το σημείο που θα
χρειαστεί να εγκαταστήσετε τη βάση δεδομένων της &oracle;.Εκκίνηση του R3SETUP 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.R3STο script θα σας κάνει μερικές ερωτήσεις (οι προεπιλογές
φαίνονται σε αγκύλες και ακολουθούνται από την πραγματική
είσοδο):ΕρώτησηΠροεπιλογήΕισαγωγή δεδομένωνEnter SAP System ID[C11]PRDEnterEnter SAP Instance Number[00]EnterEnter SAPMOUNT Directory[/sapmnt]EnterEnter name of SAP central host[majestix]EnterEnter Database System ID[PRD]PRDEnterEnter name of SAP db host[majestix]EnterSelect character set[1] (WE8DEC)EnterEnter Oracle server version (2) Oracle 8.1.72EnterExtract Oracle Client archive[1] (Yes, extract)EnterEnter path to KERNEL CD[/sapcd]/oracle/PRD/sapreorg/KERNELEnter amount of RAM for SAP + DB20441800Enter (in Megabytes)Service Entry Message Server[3600]EnterEnter Group-ID of sapsys[100]EnterEnter Group-ID of oper[101]EnterEnter Group-ID of dba[102]EnterEnter User-ID of oraprd[1002]EnterEnter User-ID of prdadm[1000]EnterLDAP support3Enter (no support)Installation step completed[1] (continue)EnterChoose 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 με
το orainstΑν πρόκειται να κάνετε χρήση της &oracle;
8.0.5, θα χρειαστείτε κάποιες επιπλέον βιβλιοθήκες
για επιτυχή επανασύνδεση (relinking), καθώς η
&oracle; 8.0.5 είναι linked
με την παλιά έκδοση του glibc (RedHat 6.0), αλλά ήδη από το
RedHat 6.1 χρησιμοποιείται μια νέα έκδοση. Επομένως χρειάζεται να
εγκαταστήσετε επιπρόσθετα τα επόμενα πακέτα για να βεβαιωθείτε ότι
οι σύνδεσμοι θα δουλέψουν:compat-libs-5.2-2.i386.rpmcompat-glibc-5.2-2.0.7.2.i386.rpmcompat-egcs-5.2-1.0.3a.1.i386.rpmcompat-egcs-c++-5.2-1.0.3a.1.i386.rpmcompat-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 sapr3sapEnterConfirum Password for sapr3sapEnterEnter Password for syschange_on_installEnterConfirm Password for syschange_on_installEnterEnter Password for systemmanagerEnterConfirm Password for systemmanagerEnterΣε αυτό το σημείο είχαμε μερικά προβλήματα με την
εντολή 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). Ως όνομα χρήστη συνήθως επιλέγουμε
το wartung (ή service στα
Αγγλικά). Τα προφίλ που χρειάζονται είναι
τα sap_new και sap_all. Για
επιπλέον ασφάλεια, οι κωδικοί των προεπιλεγμένων χρηστών σε όλους
τους clients θα πρέπει να αλλαχθούν (αυτό περιλαμβάνει και τους
χρήστες sap* και ddic).
Ρύθμιση των Transport System, Profile, Operation Modes, κλπ.
Μέσα στο client 000, χρήστες εκτός των ddic
και sap*, μπορούν να κάνουν τουλάχιστον τα
ακόλουθα:ΕργασίαTransaction (Συναλλαγή)Ρύθμιση του Transport System,
π.χ. ως Stand-Alone Transport Domain
EntitySTMSΔημιουργία / τροποποίηση του Profile ΣυστήματοςRZ10Συντήρηση Operation Modes και InstancesRZ04Αυτό και όλα τα υπόλοιπα βήματα σχετικά με τις ρυθμίσεις μετά
την εγκατάσταση περιγράφονται στους οδηγούς εγκατάστασης
του &sap;.Τροποποίηση
του initsid.sap
(initIDS.sap)Το αρχείο /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_extension250000000abap/heap_area_dia300000000abap/heap_area_nondia400000000em/initial_size_MB256em/blocksize_kB1024ipc/shm_psize_4070000000&sap; Σημείωση 0013026:ΌνομαΤιμήztta/dynpro_area2500000&sap; Σημείωση 0157246:ΌνομαΤιμήrdisp/ROLL_MAXFS16000rdisp/PG_MAXFS30000Με τις παραπάνω παραμέτρους σε ένα σύστημα με 1 gigabyte
μνήμης, μπορεί να δείτε κάτι σαν το παρακάτω όσο αφορά την
κατανάλωση μνήμης:Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K FreeΠροβλήματα κατά την ΕγκατάστασηΕπανεκκίνηση του R3SETUP μετά τη Διόρθωση
ΠροβλήματοςΤο 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 κατά το R3SETUPΑν το 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 κατά το R3SETUPΠιθανό είναι να υπάρχει πρόβλημα και σε αυτό το βήμα με
το R3SETUP. Το πρόβλημα εδώ είναι παρόμοιο με το
προηγούμενο, του OSUSERSIDADM_IND_ORA. Απλά τροποποιήστε το αρχείο
προτύπου που χρησιμοποιείτε με το R3SETUP
(CENTRDB.R3S (4.6B) ή κάποιο από
τα CENTRAL.R3S
ή DATABASE.R3S (4.6C)). Βρείτε
το [OSUSERDBSID_IND_ORA] ή ψάξτε μέσα στο αρχείο
για την μοναδική εγγραφή STATUS=ERROR και
προσθέστε τα παρακάτω:STATUS=OKΤώρα τρέξτε ξανά το R3SETUP.oraview.vrf FILE NOT FOUND κατά τη διάρκεια Εγκατάστασης της &oracle;Το σφάλμα αυτό σημαίνει ότι έχετε επιλέξει
το &oracle; On-Line Text Viewer πριν ξεκινήσετε
την εγκατάσταση. Η επιλογή αυτή είναι προεπιλεγμένη, παρ' όλο που
δεν είναι διαθέσιμη στο Linux. Αφαιρέστε λοιπόν αυτή την επιλογή
από το μενού εγκατάστασης και ξεκινήστε ξανά.TEXTENV_INVALID κατά την Εκτέλεση R3SETUP, του 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; από την αρχή.
ORA-00001Το σφάλμα αυτό το συναντήσαμε μόνο με το &oracle;
8.1.7 στο &os;. Ο λόγος ήταν ότι η
βάση &oracle; δεν μπορούσε να ορίσει τις
σωστές παραμέτρους για την εκκίνησή της με αποτέλεσμα να κολλάει,
αφήνοντας σηματοφορείς και κοινόχρηστη μνήμη στο σύστημα. Η επόμενη
προσπάθεια να ξεκινήσουμε τη βάση δεδομένων μας εμφάνισε το
σφάλμα ORA-00001.Βρείτε τους με την εντολή ipcs -a και
αφαιρέστε τους με την ipcrm.ORA-00445 (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> exitORA-12546 (Ξεκινήστε τον Listener με
τις Σωστές Άδειες)Ξεκινήστε τον &oracle; listener ως
χρήστης oraids, με τις ακόλουθες εντολές:
&prompt.root; umask 0; lsnrctl startΔιαφορετικά μπορεί να εμφανιστεί το
σφάλμα ORA-12546 που σημαίνει ότι τα
sockets δεν έχουν σωστές άδειες. Δείτε τη σημείωση 0072984 του
&sap;.ORA-27102 (Έλλειψη μνήμης)Το πρόβλημα αυτό παρουσιάστηκε όταν χρησιμοποιήσαμε τιμές
μεγαλύτερες του 1 GB (1024X1024X1024) στις μεταβλητές
MAXDSIZ και DFLDSIZ.
Επιπλέον, μας εμφανίστηκε το σφάλμα Linux Error 12:
Cannot allocate memory.[DIPGNTAB_IND_IND] κατά την Εκτέλεση του R3SETUPΣε γενικές γραμμές, δείτε τη σημείωση 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] κατά την Εκτέλεση του R3SETUPΤο σφάλμα αυτό εμφανίστηκε κατά την εγκατάσταση
του &sap; 4.6C, και ήταν το αποτέλεσμα
ενός άλλου σφάλματος που προέκυψε νωρίτερα στην εγκατάσταση. Σε
τέτοιες περιπτώσεις θα πρέπει να δείτε τα αντίστοιχα logfiles και να
διορθώσετε το αρχικό πρόβλημα.
Αν αφού ελέγξετε τα logfiles διαπιστώσετε ότι το σφάλμα είναι
πράγματι αυτό (κοιτάξτε τις σημειώσεις του &sap;), μπορείτε να
ορίσετε το STATUS σε αυτό το βήμα
από ERROR σε OK (στο
αρχείο CENTRDB.R3S) και να εκτελέσετε ξανά
το R3SETUP. Μετά την εγκατάσταση, πρέπει να
εκτελέσετε το RSWBOINS από τη συναλλαγή
SE38. Δείτε τη σημείωση 0162266 του &sap; για
τα RFCRSWBOINI
και RFCRADDBDIF.[RFCRADDBDIF_IND_IND] κατά την Εκτέλεση R3SETUPΌπως και πριν, και εδώ ισχύει η ίδια λογική: σιγουρευτείτε ποιο
είναι το πρωταρχικό σφάλμα κοιτάζοντας τα logfiles.Αν επιβεβαιώσετε ότι η σημείωση του &sap; 0162266
ανταποκρίνεται στο πρόβλημά σας, απλά
ορίστε το STATUS σε αυτό το βήμα
από ERROR σε OK (στο
αρχείο CENTRDB.R3S) και τρέξτε πάλι
το R3SETUP. Μετά την εγκατάσταση, πρέπει να
εκτελέσετε το RADDBDIF από τη συναλλαγή
SE38.sigaction sig31: File size limit exceededΤο σφάλμα αυτό μπορεί να εμφανιστεί κατά την εκκίνηση των
διεργασιών του &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Ανεπιτυχής Εκκίνηση του saposcolΥπάρχουν επίσης μερικά προβλήματα με το
πρόγραμμα 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 πάνω στο αρχείο.ELFbrandingΌταν ο φορτωτής 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 @@
MurrayStokelyΣυνεισφορά από τον ΕικονικοποίησηΣύνοψηΤο λογισμικό εικονικοποίησης επιτρέπει σε πολλαπλά λειτουργικά
συστήματα να εκτελούνται ταυτόχρονα στον ίδιο υπολογιστή. Σε υπολογιστές
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. Πολυπλοκότερες
ρυθμίσεις δικτύου περιγράφονται στο
κεφάλαιο .FukangChen (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-currentmdroot-7.0.bz2xmexample1.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;.