Το τείχος προστασίας στο Linux διαδραματίζει ζωτικό ρόλο στην ασφάλεια ενός συστήματος υπολογιστή. Λειτουργεί ως εμπόδιο, ελέγχοντας και φιλτράροντας την κυκλοφορία του δικτύου για να προστατεύει το σύστημα από μη εξουσιοδοτημένη πρόσβαση, επιθέσεις και άλλες απειλές. Χωρίς ένα σωστά διαμορφωμένο Τείχος προστασίας, ο διακομιστής θα μπορούσε να είναι ευάλωτος σε διάφορους τύπους κυβερνοεπιθέσεων, οδηγώντας σε σοβαρές συνέπειες για την ασφάλεια και την εμπιστευτικότητα των δεδομένων.
Σε αυτό το άρθρο, θα εξετάσουμε δύο βασικά εργαλεία για τη διαμόρφωση του τείχους προστασίας Linux: το τείχος προστασίας και το iptables. Θα πραγματοποιήσουμε μια συγκριτική ανάλυση των χαρακτηριστικών, της λειτουργικότητας και των πλεονεκτημάτων τους. Επιπλέον, θα παρέχουμε λεπτομερείς οδηγίες για τη ρύθμιση και τη χρήση καθενός από αυτά τα εργαλεία, καθώς και θα συζητήσουμε τις βέλτιστες πρακτικές για την ασφάλεια του συστήματός σας με ένα Τείχος προστασίας στην πλατφόρμα Linux. Όλες οι ενέργειες θα επιδεικνύονται σε α εικονικού διακομιστή με πρόσβαση root.
Διαμόρφωση τείχους προστασίας στο Linux
Firewall (Firewall Daemon) είναι ένα πρόγραμμα για τη διαχείριση του τείχους προστασίας σε λειτουργικά συστήματα Linux. Παρέχει μια διεπαφή χρήστη για τη διαμόρφωση κανόνων τείχους προστασίας, επιτρέποντας ή αποκλείοντας συνδέσεις εφαρμογών δικτύου. Είναι προεγκατεστημένο από προεπιλογή στις περισσότερες διανομές διακομιστή. Εάν το Firewalld δεν είναι προεγκατεστημένο, μπορεί να εγκατασταθεί ανεξάρτητα από τα επίσημα αποθετήρια της διανομής.
Για συστήματα Red Hat (όπως RHEL, CentOS, Fedora) η εγκατάσταση πραγματοποιείται με την εντολή:
yum install firewalld
Για Debian/Ubuntu:
apt-get install firewalld
Μετά την εγκατάσταση, μπορεί να ξεκινήσει και να ενεργοποιηθεί αμέσως με την εντολή:
systemctl start firewalld
Στη συνέχεια, πρέπει να προσθέσετε την υπηρεσία στην εκκίνηση:
systemctl enable firewalld
Σε αυτό το σημείο, συνιστούμε να απενεργοποιήσετε το ufw, καθώς δεν συνιστάται η ταυτόχρονη χρήση αυτού του εργαλείου με τείχος προστασίας ή iptables. Ελέγξτε την κατάσταση:
systemctl status ufw
Για να το σταματήσετε, πληκτρολογήστε την εντολή:
systemctl stop ufw
Για πλήρη απενεργοποίηση:
ufw disable
Μετά από αυτές τις ενέργειες, μπορείτε να προχωρήσετε στη διαμόρφωση του τείχους προστασίας.
Πρώτον, είναι απαραίτητο να ορίσουμε ζώνες εμπιστοσύνης. Το Firewalld χρησιμοποιεί την έννοια των ζωνών για να καθορίσει το επίπεδο εμπιστοσύνης για τις διεπαφές δικτύου. Σε κάθε διεπαφή έχει εκχωρηθεί μία ζώνη και οι κανόνες του τείχους προστασίας εφαρμόζονται με βάση τη ζώνη. Η λίστα με όλες τις διαθέσιμες ζώνες ανοίγει με την εντολή:
firewall-cmd --get-zones
Συνήθως χρησιμοποιούνται 4 κύριες ζώνες:
- Δημόσιο: Αυτή η ζώνη προορίζεται για δίκτυα που θεωρείτε μη ασφαλή.
- Private: Ισχύει για οικιακά δίκτυα ή άλλες αξιόπιστες συνδέσεις δικτύου.
- Εσωτερικός: Χρησιμοποιείται για εσωτερικά δίκτυα, όπως αυτά εντός οργανισμού ή εταιρικού δικτύου.
- DMZ: Αυτή η ζώνη είναι όπου συνήθως τοποθετούνται διακομιστές που θα πρέπει να είναι προσβάσιμοι από το διαδίκτυο.
Ωστόσο, αυτό είναι μόνο ένα παράδειγμα. Μπορείτε να προσθέσετε τη δική σας ζώνη χρησιμοποιώντας την εντολή:
firewall-cmd --permanent --new-zone=nameyourzone
Μετά την προσθήκη, απαιτείται επαναφόρτωση:
firewall-cmd --reload
Για να διαγράψετε μια ζώνη, χρησιμοποιείται παρόμοια μέθοδος
firewall-cmd --permanent --delete-zone=nameyourzone
Μετά τον καθορισμό των ζωνών, είναι απαραίτητο να επιτρέπεται η κυκλοφορία για τις απαραίτητες υπηρεσίες και λιμάνια. Για να επιτρέψετε μια συγκεκριμένη υπηρεσία, χρησιμοποιήστε την εντολή:
firewall-cmd --zone=public --add-service=name
Πού όνομα είναι το όνομα της υπηρεσίας. Για παράδειγμα, για να επιτρέψετε την κυκλοφορία για Apache:
firewall-cmd --zone=public --add-service=http
Για να ορίσετε επιτρεπόμενες θύρες, χρησιμοποιήστε την εντολή:
firewall-cmd --zone=public --add-port=number/protocol
Για παράδειγμα, η τυπική θύρα 22 για SSH θα μοιάζει με αυτό:
firewall-cmd --zone=public --add-port=22/tcp
Σε αυτό το στάδιο, οι κύριοι κανόνες έχουν ήδη δημιουργηθεί. Στη συνέχεια, καθορίστε τον τρόπο επεξεργασίας της κυκλοφορίας ανάλογα με την πηγή, τον προορισμό, τη θύρα και άλλα κριτήρια. Για να προσθέσετε έναν κανόνα (χρησιμοποιώντας το δημόσιο ζώνη ως παράδειγμα):
firewall-cmd --zone=public rule
Για παράδειγμα, για να επιτρέπεται η εισερχόμενη κίνηση από οποιαδήποτε πηγή στη θύρα 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
Για να καταργήσετε έναν κανόνα:
firewall-cmd --permanent --remove-rule=rule_specification
Πού αποφανθεί είναι ο τύπος κανόνα (π.χ. λιμάνι, υπηρεσία, rich-rule, κ.λπ.), και κανόνα_προδιαγραφή είναι η προδιαγραφή του ίδιου του κανόνα.
Αφού κάνετε αλλαγές στη διαμόρφωση του Firewalld, είναι απαραίτητο να τις αποθηκεύσετε και να τις εφαρμόσετε. Για να αποθηκεύσετε τις αλλαγές, χρησιμοποιήστε την εντολή:
firewall-cmd --runtime-to-permanent
Για να εφαρμόσετε αλλαγές:
firewall-cmd --reload
Μετά την ολοκλήρωση της ρύθμισης, μπορείτε να επαληθεύσετε τις επιλεγμένες παραμέτρους ανοίγοντας τη λίστα όλων των κανόνων:
firewall-cmd --list-all
Εάν προκύψουν προβλήματα, ελέγξτε τα αρχεία καταγραφής Firewalld με την εντολή:
journalctl -u firewalld
Σημείωση: Καλύψαμε μόνο τον γενικό αλγόριθμο για τη ρύθμιση της σύνδεσης. Το εργαλείο έχει εκτεταμένη λειτουργικότητα. Για πλήρεις πληροφορίες σχετικά με όλες τις διαθέσιμες επιλογές, μπορείτε να χρησιμοποιήσετε το επίσημα έγγραφα ή ανοίξτε τη βοήθεια:
firewall-cmd --help
Διαμόρφωση iptables σε Linux
Σε αντίθεση με το Firewalld, το iptables είναι ένα παλαιότερο αλλά ακόμα ευρέως χρησιμοποιούμενο εργαλείο στο Linux για τη διαχείριση του τείχους προστασίας. Παρέχει μια πιο άμεση και ευέλικτη προσέγγιση στους κανόνες φιλτραρίσματος πακέτων σε επίπεδο πυρήνα Linux. Ωστόσο, το iptables απαιτεί πιο προηγμένες γνώσεις και εμπειρία σε σύγκριση με το Firewalld, καθιστώντας το λιγότερο προσβάσιμο για αρχάριους. Ελέγξτε την προεγκατεστημένη έκδοση του εργαλείου με την εντολή:
iptables -V
Εάν το εργαλείο δεν είναι εγκατεστημένο, θα πρέπει να εγκατασταθεί. Η εντολή για εγκατάσταση στο Ubuntu, Debian:
apt install iptables
Για συστήματα Red Hat (π.χ. CentOS, Fedora):
yum install iptables
Η εντολή για ενεργοποίηση μετά την εγκατάσταση:
systemctl start iptables
Για προσθήκη στην εκκίνηση, εκτελέστε:
systemctl enable iptables
Πριν ξεκινήσετε τη διαμόρφωση του iptables, είναι σημαντικό να κατανοήσετε πώς λειτουργεί. Σε αυτό βοηθά η σύνταξη του προγράμματος. Φαίνεται ως εξής:
iptables -t table action chain additional_parameters
Ας εμβαθύνουμε σε κάθε στοιχείο.
Το Iptables έχει τέσσερις κύριους πίνακες: φίλτρο, nat, mangle και ακατέργαστο. Κάθε ένα έχει σχεδιαστεί για την επεξεργασία ορισμένων τύπων πακέτων και έχει τις δικές του αλυσίδες κανόνων:
- φιλτράρισμα: Αυτός είναι ο πιο συχνά χρησιμοποιούμενος πίνακας που περιέχει κανόνες φιλτραρίσματος πακέτων. Χρησιμοποιείται για τη λήψη αποφάσεων σχετικά με το εάν θα επιτραπούν ή θα απορριφθούν πακέτα.
- nat: Αυτός ο πίνακας χρησιμοποιείται για την τροποποίηση διευθύνσεων δικτύου και θυρών σε πακέτα. Συχνά χρησιμοποιείται για τη ρύθμιση μεταμφιέσεων (NAT).
- μάγγανο: Σε αυτόν τον πίνακα, μπορείτε να τροποποιήσετε τις κεφαλίδες πακέτων. Χρησιμοποιείται για εξειδικευμένες λειτουργίες πακέτων, όπως σήμανση.
- ακατέργαστος: Αυτός ο πίνακας χρησιμοποιείται για τη διαμόρφωση κανόνων που ισχύουν πριν περάσουν από το σύστημα παρακολούθησης σύνδεσης. Συνήθως χρησιμοποιείται για τη ρύθμιση κανόνων που δεν πρέπει να τροποποιούνται από το σύστημα παρακολούθησης, όπως η απόρριψη πακέτων από συγκεκριμένες διευθύνσεις.
Κάθε τραπέζι περιέχει ένα σύνολο αλυσίδων. Οι αλυσίδες είναι μια ακολουθία κανόνων που ελέγχονται διαδοχικά. Υπάρχουν τρεις προκαθορισμένες αλυσίδες:
- INPUT (εισερχόμενη). Οι κανόνες αυτής της αλυσίδας καθορίζουν τι πρέπει να κάνετε με τα εισερχόμενα πακέτα.
- OUTPUT (εξερχόμενη). Αυτή η αλυσίδα ισχύει για όλα τα πακέτα που στέλνει ο υπολογιστής σας σε άλλες συσκευές ή υπολογιστές στο δίκτυο.
- FORWARD (προώθηση). Οι κανόνες σε αυτήν την αλυσίδα καθορίζουν τι πρέπει να κάνετε με τα προωθημένα πακέτα.
Τέλος, κάθε αλυσίδα έχει κάποια δράση (στόχο). Στην πράξη, χρησιμοποιούνται 5 κύριες ενέργειες:
- Δέχομαι: Αφήστε το πακέτο να περάσει μέσα από το τείχος προστασίας.
- DROP: Απορρίψτε το πακέτο και απορρίψτε το χωρίς καμία απάντηση.
- ΑΠΟΡΡΙΠΤΩ: Απορρίψτε το πακέτο και στείλτε στον αποστολέα ένα μήνυμα σφάλματος ICMP.
- LOG: Καταγράψτε το πακέτο στο αρχείο καταγραφής συστήματος και εκτελέστε μια άλλη ενέργεια (π.χ. ΑΠΟΔΟΧΗ ή ΑΠΟΔΟΧΗ).
- ΑΠΌΔΟΣΗ: Σταματήστε να ελέγχετε τους κανόνες στην τρέχουσα αλυσίδα και επιστρέψτε στην αλυσίδα κλήσης (αν υπάρχει).
Για να ξεκινήσετε τη ρύθμιση, ανοίξτε τη λίστα των υπαρχόντων κανόνων με την εντολή:
iptables -L
Ως οδηγός για τη διαμόρφωση των Iptables, ας δούμε πρακτικά παραδείγματα των πιο συχνά χρησιμοποιούμενων εντολών. Για ευκολία, θα χωρίσουμε τα παραδείγματα σε 3 ομάδες, ανάλογα με τη συγκεκριμένη αλυσίδα.
Αλυσίδα ΕΙΣΑΓΩΓΉ:
- Να επιτρέπεται η εισερχόμενη κίνηση μέσω πρωτοκόλλου TCP στη θύρα 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Να επιτρέπεται η εισερχόμενη κίνηση μέσω πρωτοκόλλου UDP στη θύρα 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Αποκλείστε την εισερχόμενη κίνηση από μια συγκεκριμένη διεύθυνση IP:
iptables -A INPUT -s 192.168.1.100 -j DROP
Αλυσίδα ΠΑΡΑΓΩΓΉ:
- Να επιτρέπεται η εξερχόμενη κίνηση μέσω πρωτοκόλλου TCP στη θύρα 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Να επιτρέπεται η εξερχόμενη κίνηση μέσω πρωτοκόλλου UDP στη θύρα 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Αποκλεισμός της εξερχόμενης κίνησης σε μια συγκεκριμένη θύρα (για παράδειγμα, 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Αλυσίδα ΕΜΠΡΟΣ:
- Αποκλεισμός προωθούμενης κυκλοφορίας από ένα συγκεκριμένο εύρος διευθύνσεων IP:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Αποκλείστε την προώθηση πακέτων από μια συγκεκριμένη διεπαφή δικτύου:
iptables -A FORWARD -i eth1 -j DROP
3. Περιορίστε τον αριθμό ταυτόχρονων συνδέσεων για μια συγκεκριμένη θύρα (σε αυτό το παράδειγμα, 10 συνδέσεις ανά λεπτό στη θύρα 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Όπως μπορείτε να δείτε, σε κάθε ξεχωριστή περίπτωση, χρησιμοποιείται ένα πρόσθετο όρισμα (εντολή). Για να λάβετε μια πλήρη λίστα πιθανών ορισμάτων και τη συνολική υποστήριξη για τη λειτουργικότητα του εργαλείου, εισαγάγετε:
iptables -h
Για να βεβαιωθείτε ότι οι ρυθμίσεις είναι σωστές, εισαγάγετε ξανά την εντολή για να δείτε τη λίστα κανόνων:
iptables -L
Για να διαγράψετε έναν συγκεκριμένο κανόνα, χρησιμοποιήστε την εντολή:
iptables -D chain rule_number
Για παράδειγμα, εάν θέλετε να διαγράψετε τον κανόνα αριθμό 1 από την αλυσίδα INPUT, η εντολή θα μοιάζει με αυτό:
iptables -D INPUT 1
Για να διαγράψετε όλους τους κανόνες με μία εντολή:
iptables -F
Σημαντική σημείωση: Οι κανόνες iptables δεν αποθηκεύονται αυτόματα μετά την επανεκκίνηση του συστήματος ή της υπηρεσίας. Για να αποθηκεύσετε τους κανόνες, πρέπει να προστεθούν σε ένα αρχείο ρυθμίσεων και να αποκατασταθούν μετά την επανεκκίνηση. Ο iptables-save και iptables-restore Τα βοηθητικά προγράμματα μπορούν να βοηθήσουν σε αυτό. Για να αποθηκεύσετε τους κανόνες, πληκτρολογήστε την εντολή:
iptables-save > /etc/iptables/rules.v4
Αυτό αποθηκεύει τους τρέχοντες κανόνες iptables στο αρχείο rules.v4. Για επαναφορά μετά την επανεκκίνηση, πληκτρολογήστε:
iptables-restore < /etc/iptables/rules.v4
Αυτή η εντολή επαναφέρει τους κανόνες από το αρχείο rules.v4.
Συμπέρασμα
Η διαμόρφωση του τείχους προστασίας σε Linux χρησιμοποιώντας τείχος προστασίας ή iptables είναι μια σημαντική πτυχή της διασφάλισης της ασφάλειας του διακομιστή. Και τα δύο εργαλεία προσφέρουν αξιόπιστα μέσα διαχείρισης της κυκλοφορίας δικτύου και προστασίας του συστήματος από μη εξουσιοδοτημένη πρόσβαση και κυβερνοεπιθέσεις. Η επιλογή μεταξύ firewalld και iptables εξαρτάται από τις συγκεκριμένες ανάγκες και προτιμήσεις του χρήστη, λαμβάνοντας υπόψη τη διαφορετική λειτουργικότητα και τα δυνατά τους σημεία.