Δίκτυα στο RedHat/CentOS - μέρος #2  Το θέμα επιλύθηκε

Ότι αφορά το CentOS

  Το θέμα επιλύθηκε

Δημοσίευσηαπό kotsoskorg » Κυρ Φεβ 21, 2010 7:27 am

Δίκτυα στο Red Hat/CentOS/Fedora - Μέρος 2ο
-------------------------------------------

ΠΡΟΛΟΓΟΣ
========

Χαίρετε αγαπητοί μου,

Είχαμε μείνει στην ρύθμιση του firewall απο GIU και αν προσέξατε θα είδατε ότι πιό
κάτω αναφέρω ότι σε αυτό το 2o μέρος του tutorial θα μιλήσουμε και θα προγραμματίσουμε
το πρώτο μας firewall με το χέρι απο κονσόλα χρήστη . Είναι προνόμιο να γνωρίζουμε
τον προγραμματισμό με το χέρι, γιατί τότε έχουμε την δυνατότητα να χρησιμοποιούμε τα
καθαρά server λειτουργικά που έχουνε μόνο κονσόλα και 2 άντε 3 Server GUI front ends.
Η διαφορά του χειρισμού του firewall μέσω κονσόλας είναι πιό δύσκολος, αλλά πιό
ευέλικτος και πιό παραμετροποιήσιμος σε σχέση με τη διεπαφή του γραφικού περιβάλλοντος
χρήστη (GUI).

Πρώτα όμως θα ανατρέξουμε σε μερικές λεπτομέρειες και θα προσθέσουμε λίγη θεωρία στο
όλο σύνολο του tutorial για να μήν μείνουμε με ερωτηματικά στην πορεία.
Κάνετε είσοδο ως υπερχρήστες και πάμε....
------------------------------------------------------------------------------------






1. Ip Filtering - κριτήρια πακέτων
----------------------------------

Το Ip Filtering είναι μια λειτουργία που αποφασίζει για τον χρήστη ποιά datagrams θα
επιτρέπονται και πιά θα απορρίπτονται.Datagrams είναι τα πακέτα διευθύνσεων. Τα κριτήρια
που επιλέγουμε ποιά θα μένουν και ποιά όχι , ορίζονται απο τον χρήστη και είναι:



ΚΡΙΤΗΡΙΑ IP- FILTERING
-+-+-+-+-+-+-+-+-+-+-+
α. Πρωτόκολλα (TCP, UDP ICMP)
b. Διασύνδεση (TCP, UPD)
γ. Τύπος πακέτου (SYN/ACK, δεδομένα, κλήσεις ηχούς PING ή αλλιώς ICMP)
δ. Απο πού έρχεται το πακέτο (πηγαία διεύθυνση)
ε. Που πάει το πακέτο (διεύθυνση προορισμού)


Βασικά, το ip-filtering είναι ουσιαστικά κομμάτι της εγκατάστασης ενός δικτύου και πρέπει να
έχουμε μερικές στοιχειώδεις γνώσεις. Δεν έχει να κάνει βέβαια με τις εφαρμογές που τρέχουν
στο δίκτυο/διαδίκτυο αλλά με τις ίδιες τις συνδέσεις τους. Άρα δεν μπορούμε να αποτρέψουμε
μια εφαρμογή να τρέχει στο διαδίκτυο (που αυτό γίνεται με τους proxy servers) μπορούμε να
αποτρέψουμε όμως να τρέχει απο την προεπιλεγμένη πόρτα της, άσχετα αν κάποιος μπεί και κάνει
χρήση αυτής απο άλλη πόρτα που έχουμε ήδη ανοικτή για κάτι άλλο. Δηλαδή το firewall, δεν μας
εγγυάται πλήρης ασφάλεια απο έναν που έχει βαθείς γνώσεις στα δίκτυα αλλά απο το ολότελα
είναι κι αυτό μια ασφάλεια. Για να μήν λέω ασάφειες, το firewall ασχολείται μόνο με πόρτες
δικτύου τί είδος υλικού περνάει απο αυτές και τίποτε άλλο.

Τα πρωτόκολλα TCP και UDP αφορούν δεδομένα που στέλνονται απο τους χρήστες. UDP είναι π.χ.
τα δεδομένα που στέλνουμε με το MSN, και το GMAIL για να καταλάβετε ενώ TCP είναι όλα τα
πακέτα π.χ. που κατεβάζουμε για να εγκαταστήσουμε μέσω της RPM, YUM κτλ. ICMP είναι τα
πακέτα που στέλνονται ακούσια απο τα λειτουργικά συστήματα για ειδοποιήσεις ασφαλείας και
διατήρηση επικοινωνίας με διάφορους διακομιστές όπως είναι αυτό το forum εδώ. Π.χ. Όταν
κατεβάζουμε ένα πακέτο rpm, αυτό είναι TCP ενώ όταν κάνει έλεγχο για dependences είναι ICMP.


Ο προγραμματισμός του IP-Filtering γίνεται βάσει των κριτηρίων που προανέφερα κυριολεκτικά.




2. Iptables
-----------

Το εργαλείο που ο χρήστης αλληλεπιδρά μέσω της γραμμής εντολών της κονσόλας τερματικού για να
εισαγάγει κανόνες λειτουργίας στο firewall βάσει κάποιου συγκεκριμένου τρόπου σύνταξης λέγεται
iptables και πληκτρολογείται με πεζά. Με μια πρώτη ματιά αν το δείτε δεν γεμίζει το μάτι μας,
αλλά αν τρέξετε την εντολή : iptables -h , θα δείτε ότι είναι πλήρως παραμετροποιήσιμη απο τον
χρήστη. Χρησιμοποιεί έννοιες όπως Ip,tcp, udp, icmp, καθώς και ports. H πλήρης λίστα με τους
τρέχοντες κανόνες λειτουργίας που φαίνονται με την εντολή iptables -L -v και το αποτέλεσμα στην
οθόνη μας θα ήταν κάπως έτσι -μελετήστε λίγο πώς είναι κατα ομάδα τοποθετημένα, τις στήλες και
τα ονόματα των στηλών καθώς και τον τίτλο που έχει κάθε ομάδα:


(πραγματικό παράδειγμα)

Εικόνα

Το iptables δημιουργεί 3 ομάδες: μια για τα εισερχόμενα πακέτα(INPUT), μια για πακέτα που
κυκλοφορούν διαμέσω του μηχανήματος μας(FORWARD) και μια για τα εξερχόμενα(OUTPUT). Η
ομάδα RH-Firewall είναι αναλυτικός πίνακας τους συνόλου των INPUT-OUTPUT-FORWARD. Τις
ομάδες αυτές τις ονομάζει chains, και τις βλέπουμε πιό πάνω. Δίπλα σε κάθε ομάδα βλέπουμε
μέσα σε παρένθεση την πολιτική που έχουμε επιλέξει να ακολουθεί αυτή, και ανάλογα μπορεί
να είναι ACCEPT ή DROP.
Η πολιτική (policy) αφορά τον τρόπο διαχείρισης πακέτων και την προεπιλέγουμε πολύ πρίν
βάλουμε κανόνες στο firewall. Υπάρχουν 2 περιπτώσεις πολιτικής που μπορούμε να επιλέξουμε:

α. Αν επιλέξουμε την πολιτική DROP στην εκάστοτε ομάδα τότε πολύ απλά λέμε στο firewall πως
ΔΕΝ ΘΑ ΔΕΧΕΤΑΙ κανένα πακέτο πλήν των πακέτων που πληρούν τους κανόνες που θα βάλουμε
μελλοντικά.

β. Αν επιλέξουμε την πολιτική ACCEPT την εκάστοτε ομάδα, τότε λέμε στο firewall πως ΘΑ
ΔΕΧΕΤΑΙ ΤΑ ΠΑΝΤΑ απο πακέτα πλήν αυτών που πληρούν τους κανόνες που θα βάλουμε εισάγοντας
παρακάτω.

Είναι πολύ σημαντικό, το τί θα επιλέξουμε και προφανώς όπως μερικοί ήδη καταλάβατε στην
ομάδα INPUT η πολιτική θα πρέπει να βρίσκεται στο DROP ούτως ώστε να ελέγχουμε το τί
εισέρχεται, και στο OUTPUT να είναι ACCEPT αφού σε γενικές γραμμές τα πακέτα που φεύγουν
απο εμάς δεν αποτελούν κάποιο κίνδυνο για το σύστημα μας.



Κάτω απο κάθε ομάδα, βλέπουμε τις γραμμές με τους κανόνες που έχουμε βάλει, στοιχισμένες
τέλεια σε στήλες και απο πάνω τους και τον τίτλο της στήλης για να μας κάνει την ζωή πιό
εύκολη στο διάβασμα. Στην στήλη που δεν έχει τίτλο βλέπουμε κάποια modules που τρέχουν
και είναι κάτι σαν applets με εξτρά λειτουργίες για περισσότερη ασφάλεια. Συγκεκριμένα,
στην ομάδα με τίτλο INPUT βλέπετε αυτά τα modules

state RELATED,ESTABLISHED
tcp dpt:22
tcp dpt:666

που στην πρώτη γραμμή σημαίνει ότι τρέχω ένα SPI και στην δεύτερη και τρίτη γραμμήέχω 2
πόρτες ανοικτές, την 22 για SSH και την 666 για κάποια άλλη λειτουργία.



************************ ΤΙ ΕΙΝΑΙ ΤΟ SPI ΠΟΥ ΑΝΑΦΕΡΑΜΕ ΠΙΟ ΠΑΝΩ*******************************
***
*** SPI (Statefull Packets Inspection)
*** ----------------------------------
***
*** Είναι ένα πρότυπο που εφαρμόζεται σε πολλά firewall. Αφορά τον έλεγχο των datagrams. Εδώ το
*** τείχος προστασίας έχει μνήμη αφιερωμένη και σ αυτήν κρατάει κατασταστικό ποιά datagrams έχουν
*** ξαναέρθει, ποιά κρίθηκαν ακατάλληλα και ποιά κατάλληλα, ποιά πέρασαν και ποιά αποκλείστηκαν
*** απο αυτό. Είναι ένα σύστημα βελτίωσης της ασφάλειας του δικτύου μας. Π.χ. έστω ότι ένα datagram
*** αποδείχθηκε κακόβουλο στο παρελθόν, στο μέλλον αν το ίδιο επιχειρήσει να προσπελλάσει ξανά το
*** σύστημα μας , το firewall έχοντας παλαιότερη επαφή ή εμπειρία απο αυτό, θα το αναγνωρίσει και θα
*** το καταστείλει άμεσα. Το SPI δεν είναι κάτι το νέο, αποτελεί standard πλέον και τρέχει χρόνια
*** τώρα στα firewalls τόσο σε οικιακούς χρήστες όσο και σε επιχειρίσεις μέχρι κάποιου επιπέδου.
***



Πιό πολύ θα ήθελα να εμβαθύνω στην ομάδα INPUT ή οποία αφορά την είσοδο πακέτων στον υπολογιστή μας
και είναι ουσιαστικά η δικλείδα ασφαλείας μας με τον "έξω" απο τον υπολογιστή μας κόσμο και τα datagrams
που μας έρχονται απο τους άλλους.


Το κάθε πακέτο συγκρίνεται με τους κανόνες και γίνεται δεκτό (ACCEPT) ή αποβάλλεται (DROP). Οι
κανόνες που έχουμε εμείς εισαγάγει , αποθηκεύονται σε αρχείο κειμένου στον υπολογιστή μας και
που το iptables τους συμβουλεύεται κατα την έναρξη του.
Επίσης να πούμε ότι ο έλεγχος ενός πακέτου ξεκινάει συγκρίνοντας με τους κανόνες ώς λίστα ΑΠΟ ΠΑΝΩ
ΠΡΟΣ ΤΑ ΚΑΤΩ. Το επισημαίνω αυτό γιατί, αν ένα πακέτο ταιριάζει με ένα έστω κριτήριο το οποίο λέει
ότι αποβάλλεται, τότε ο περαιτέρω έλεγχος απο τα κριτήρια που απομένουν διακόπτεται, αφού δεν είναι
πλέον απαραίτητος.





3. Προγραμματισμός με τα Ip-tables
----------------------------------


Ανακαιφαλαίωση εντολών που είδαμε απο το προηγούμενο tutorial μέχρι και αυτό:



iptables -h ---- η βοήθεια του iptables

rpm -q iptables ---- μας λέει αν έχουμε εγκατεστημένα τα iptables κι αν ναί πιά έκδοση

yum install iptables ---- εγκαθιστά τα iptables στον υπολογιστή μας

yum update iptables ---- αναβαθμίζει τα iptables άν υπάρχει διαθέσιμη νεότερη έκδοση

service iptables start ---- εκκινεί τα iptables
service iptables stop ---- παύει την λειτουργία των iptables
service iptables restart ---- κάνει επανεκκίνηση στα iptables

iptables -L -v ----- εμφανίζει την λίστα με τους κανόνες(-L) περιεκτικότατα(-v :συντομογραφία του verbose)

lsmod | grep ip_tables ---- μας δείχνει αν τρέχουν τα iptables









3α. Και ιδού ο πρώτος μας κώδικας (ακολουθεί ανάλυση):
------------------------------------------------------

(σημ. επιβάλλεται να βρίσκεστε με δικαιώματα υπερχρήστη)



iptables -P INPUT DROP
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP


Τέλεια... επιτέλους ρε παιδιά και λίγος κώδικας να ξεμουδιάσει το μυαλουδάκι.

Θέλετε να τον αναλύσουμε ?


Η πρώτη γραμμή λέει στο iptables να γυρίσει την πολιτική(-P) της ομάδας INPUT σε DROP. Αυτό σημαίνει όπως είπαμε
πως δεν θα περνάει κανένα πακέτο πλήν αυτών που πληρούν τους κανόνες που βάζουμε στις πιό κάτω γραμμές.


Η δεύτερη γραμμή λέει τα iptables να μηδενίσουν τα πάντα (-F που σημαίνει Flush). Μετά απο αυτό, όλοι οι
προηγούμενοι κανόνες που διατηρούσε το firewall χάθηκαν απο όλες τις ομάδες (INPUT, FORWARD και OUTPUT).
Αν αναρωτιέστε αν πήγε τζάμπα η προηγούμενη εντολή, να σας πώ ότι η εντολή flush επηρρεάζει μόνο τους κανόνες
και ΟΧΙ τις πολιτικές. Τώρα όμως παράλληλα δεν περνάει τίποτα απο πακέτα, αφού τα εισερχόμενα πακέτα τρώνε όλα DROP
και οι κανόνες που υπήρχαν έχουν διαγραφεί απο το firewall!


Τρίτη γραμμή: επισύναψε(-Α απο το Append) , στην ομάδα INPUT , την διεπαφή lo (to i συντόμευση του interface)
(lo συντόμευση του localhost=τοπικό δικτυο) , να είναι δεκτική (-j συντομογραφία του jump) (ACCEPT=δεκτική/ανοικτή)
Aνοίξαμε το 127.0.0.1


Τέταρτη: επισύναψε στην ομάδα INPUT επίσης το module(-m απο την λέξη module) ,state (Statefull Packet Inspection) να
ελέγχει(--state) για ESTABLISHED και RELATED πακέτα (ESTABLISHED=εξακριβωμένα) (RELATED=συγγενικά) ,και να τα αφήνει
ελεύθερα (-j ACCEPT). Μόλις εκκινήσαμε το SPI!


Πέμπτη: επισύναψε στην ομάδα INPUT, την πόρτα (-p) ,τύπου tcp και θύρα προορισμού 22 (--dport 22= destination port 22),
να είναι ανοικτή (-j ACCEPT). Ανοίξαμε την port 22 , είναι για SSH.


Έκτη γραμμή: Η πολιτική (-P) στην ομάδα OUTPUT να είναι ανοικτή στα πάντα!


Έβδομη γραμμή: Η πολιτική (-P) στην ομάδα FORWARD να είναι κλειστή στα πάντα (DROP). Έτσι αποτρέπουμε στους υπολογιστές
που ανήκουν στο τοπικό μας δίκτυο να ψαχουλεύουν στο μηχάνημα μας.


Αυτό το μικρό coding που βλέπετε είναι υπεραρκετό για ένα απλό αλλά ισχυρότατο firewall. Δεν περνάει τίποτα απο το internet
που δεν είναι γνωστό χάρις στο SPI, η telnet είναι κλειστή,η θύρα 80,21,3306 ανοίγει μόνο απο μέσω εξερχόμενης αρα είναι
ασφαλείς, η 22 είναι ssd και θέλει τουλάχιστον username και pass για να γίνει reachable. Επίσης όσοι δοκιμάσουν να μπούν απο
φιλικό δίκτυο στο pc θα παίρνουν access denied αφού η FORWARD είναι στα DROP!


----------------------------------

Τα λόγια είναι περιττά!!Όπως βλέπετε το linux σχεδόν μιλάει με τον χρήστη! Οι εντολές είναι τόσο "ανθρώπινες", που
θα καταλάβαινε την σημασία τους και ένας αρχάριος με λίγη βοήθεια. Βέβαια η βοήθεια είναι πάντα κάτι το καλό.
Ελπίζω να σας διαφώτισα αρκετά. Μελετήστε το καλά γιατί, στο επόμενο σας περιμένει ένα πολύ ενδιαφέρον μέρος του
δικτυακού Linux: Θα στήσουμε τα δικά μας Domain Names (DNS)

Εώς τότε τα λέμε φίλοι....
http://www.WebDeveloping.grhttp://kotsoskorg2.blogspot.com/
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναί ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ PC-BSD 7.1.1 σε Amilo Pi1536, PC-BSD 7.1 σε C2D 3.16, PC-BSD 7.1.1 σε Srvr Tyan 771+2*Xeon E5420 2.50Ghz
RAM 2GB, 4Gb, 8Gb │ X1400 mobility, Ati 3650, Ati 3650 │ HD Aud │ TFT 15.4" , TFT 19", TFT 19"
Άβαταρ μέλους
kotsoskorg
babeTUX
babeTUX
 
Δημοσιεύσεις: 97
Εγγραφή: Τρί Ιουν 02, 2009 11:24 am
Τοποθεσία: Καβάλα

Επιστροφή στο CentOS



Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης

cron