Ο Οδηγός για αρχάριους στο iptables, το Τείχος προστασίας Linux
Το Iptables είναι ένα εξαιρετικά ευέλικτο βοηθητικό πρόγραμμα τείχους προστασίας που έχει κατασκευαστεί για λειτουργικά συστήματα Linux. Είτε είστε αρχάριος Linux geek ή διαχειριστής του συστήματος, υπάρχει πιθανώς κάποιο τρόπο που iptables μπορεί να είναι μια μεγάλη χρήση για εσάς. Διαβάστε παρακάτω καθώς θα σας δείξουμε πώς να διαμορφώσετε το πιο ευπροσάρμοστο τείχος προστασίας του Linux.
Φωτογραφία από ezioman.
Σχετικά με το iptables
Το iptables είναι ένα βοηθητικό πρόγραμμα τείχους προστασίας γραμμής εντολών που χρησιμοποιεί αλυσίδες πολιτικής για να επιτρέψει ή να αποκλείσει την κυκλοφορία. Όταν μια σύνδεση προσπαθεί να εγκατασταθεί στο σύστημά σας, το iptables αναζητά έναν κανόνα στη λίστα του για να ταιριάζει με αυτό. Εάν δεν βρει ένα, καταφεύγει στην προεπιλεγμένη ενέργεια.
Το iptables σχεδόν πάντα έρχεται προεγκατεστημένο σε οποιαδήποτε διανομή Linux. Για να το ενημερώσετε / εγκαταστήσετε, απλώς ανακτήστε το πακέτο iptables:
sudo apt-get να εγκαταστήσετε το iptables
Υπάρχουν εναλλακτικές λύσεις GUI σε iptables όπως το Firestarter, αλλά το iptables δεν είναι πραγματικά τόσο δύσκολο όταν έχετε μερικές εντολές κάτω. Θέλετε να είστε πολύ προσεκτικοί κατά τη διαμόρφωση των κανόνων του iptables, ειδικά εάν είστε SSH'd σε ένα διακομιστή, επειδή μια λανθασμένη εντολή μπορεί να σας κλειδώσει μόνιμα μέχρι να επιδιορθωθεί με το χέρι στη φυσική μηχανή.
Τύποι Αλυσίδων
Το iptables χρησιμοποιεί τρεις διαφορετικές αλυσίδες: είσοδος, προώθηση και έξοδο.
Εισαγωγή - Αυτή η αλυσίδα χρησιμοποιείται για τον έλεγχο της συμπεριφοράς των εισερχόμενων συνδέσεων. Για παράδειγμα, εάν ένας χρήστης προσπαθήσει να SSH στον υπολογιστή / διακομιστή σας, το iptables θα προσπαθήσει να ταιριάξει τη διεύθυνση IP και τη θύρα με έναν κανόνα στην αλυσίδα εισόδου.
Προς τα εμπρός - Αυτή η αλυσίδα χρησιμοποιείται για εισερχόμενες συνδέσεις που δεν παρέχονται στην περιοχή. Σκεφτείτε ένα δρομολογητή - τα δεδομένα στέλνονται πάντα σε αυτό, αλλά σπάνια προορίζονται για τον ίδιο τον δρομολογητή. τα δεδομένα διαβιβάζονται ακριβώς στο στόχο της. Εκτός αν κάνετε κάποιο δρομολόγιο, NATing ή κάτι άλλο στο σύστημά σας που απαιτεί προώθηση, δεν θα χρησιμοποιήσετε ακόμη και αυτή την αλυσίδα.
Υπάρχει ένας τρόπος σίγουρης πυρκαγιάς για να ελέγξετε αν το σύστημά σας χρησιμοποιεί ή δεν χρειάζεται την αλυσίδα προώθησης.
iptables -L -v
Το παραπάνω στιγμιότυπο οθόνης είναι ενός διακομιστή που εκτελείται για μερικές εβδομάδες και δεν έχει περιορισμούς στις εισερχόμενες ή εξερχόμενες συνδέσεις. Όπως μπορείτε να δείτε, η αλυσίδα εισόδου έχει επεξεργαστεί 11GB πακέτων και η αλυσίδα εξόδου έχει επεξεργαστεί 17GB. Η αλυσίδα προώθησης, από την άλλη πλευρά, δεν χρειάζεται να επεξεργαστεί ένα μόνο πακέτο. Αυτό οφείλεται στο γεγονός ότι ο διακομιστής δεν κάνει καμία προώθηση ή δεν χρησιμοποιείται ως συσκευή pass-through.
Παραγωγή - Αυτή η αλυσίδα χρησιμοποιείται για εξερχόμενες συνδέσεις. Για παράδειγμα, αν προσπαθήσετε να ping howtogeek.com, το iptables θα ελέγξει την αλυσίδα εξόδου του για να δει τι είναι οι κανόνες σχετικά με το ping και το howtogeek.com προτού αποφασίσει να επιτρέψει ή να αρνηθεί την προσπάθεια σύνδεσης.
Η προειδοποίηση
Παρόλο που το pinging ενός εξωτερικού κεντρικού υπολογιστή φαίνεται σαν κάτι που θα χρειαζόταν μόνο να διασχίσει την αλυσίδα εξόδου, να έχετε κατά νου ότι για να επιστρέψετε τα δεδομένα, θα χρησιμοποιηθεί και η αλυσίδα εισόδου. Όταν χρησιμοποιείτε το iptables για να κλειδώσετε το σύστημά σας, θυμηθείτε ότι πολλά πρωτόκολλα θα απαιτήσουν αμφίδρομη επικοινωνία, έτσι ώστε και οι αλυσίδες εισόδου και εξόδου θα πρέπει να ρυθμιστούν σωστά. Το SSH είναι ένα κοινό πρωτόκολλο που οι άνθρωποι ξεχνούν να επιτρέψουν και στις δύο αλυσίδες.
Προεπιλεγμένη συμπεριφορά αλυσίδας πολιτικής
Πριν εισέλθετε και ρυθμίσετε συγκεκριμένους κανόνες, θα θέλετε να αποφασίσετε τι θέλετε να είναι η προεπιλεγμένη συμπεριφορά των τριών αλυσίδων. Με άλλα λόγια, τι θέλετε να κάνετε το iptables εάν η σύνδεση δεν ταιριάζει με υπάρχοντες κανόνες?
Για να δείτε τι οι αλυσίδες πολιτικής σας ρυθμίζονται αυτήν τη στιγμή για να κάνουν με την ασύγκριτη επισκεψιμότητα, εκτελέστε το iptables -L
εντολή.
Όπως μπορείτε να δείτε, χρησιμοποιήσαμε επίσης την εντολή grep για να μας δώσετε καθαρότερη απόδοση. Σε αυτό το στιγμιότυπο οθόνης, οι αλυσίδες μας υπολογίζονται επί του παρόντος να δέχονται κίνηση.
Πολλές φορές, δεν θα θέλετε το σύστημά σας να δέχεται συνδέσεις από προεπιλογή. Εάν δεν έχετε αλλάξει προηγουμένως τους κανόνες αλυσίδας πολιτικής, αυτή η ρύθμιση πρέπει ήδη να ρυθμιστεί. Είτε έτσι είτε αλλιώς, εδώ είναι η εντολή για την αποδοχή συνδέσεων από προεπιλογή:
iptables - policy INPUT ACCEPT
iptables - πολιτική ACCEPT OUTPUT
iptables - πολιτική ΠΡΟΩΘΗΣΗ ΠΡΑΓΜΑΤΟΠΟΙΗΣΗΣ
Με την παράλειψη του κανόνα αποδοχής, μπορείτε στη συνέχεια να χρησιμοποιήσετε το iptables για να απορρίψετε συγκεκριμένες διευθύνσεις IP ή αριθμούς θυρών, συνεχίζοντας να αποδέχεστε όλες τις άλλες συνδέσεις. Θα φτάσουμε σε αυτές τις εντολές μέσα σε ένα λεπτό.
Εάν προτιμάτε να αρνηθείτε όλες τις συνδέσεις και να καθορίσετε με μη αυτόματο τρόπο ποιες από αυτές θέλετε να επιτρέψετε να συνδεθείτε, θα πρέπει να αλλάξετε την πολιτική προεπιλογής των αλυσίδων σας. Κάνοντας αυτό θα ήταν πιθανώς χρήσιμο μόνο για διακομιστές που περιέχουν ευαίσθητες πληροφορίες και έχουν πάντα τις ίδιες διευθύνσεις IP που τους συνδέονται.
iptables - πολιτική INPUT DROP
iptables - πολιτική εξόδου
iptables - πολιτική FORWARD DROP
Απαντήσεις συγκεκριμένης σύνδεσης
Με τις προεπιλεγμένες πολιτικές αλυσίδας, μπορείτε να ξεκινήσετε την προσθήκη κανόνων στο iptables, ώστε να γνωρίζει τι πρέπει να κάνει όταν συναντά μια σύνδεση από ή προς μια συγκεκριμένη διεύθυνση ή θύρα IP. Σε αυτόν τον οδηγό, θα εξετάσουμε τις τρεις πιο βασικές και κοινώς χρησιμοποιούμενες "απαντήσεις".
Αποδέχομαι - Αφήστε τη σύνδεση.
Πτώση - Αφήστε τη σύνδεση, ενεργήστε όπως δεν συνέβη ποτέ. Αυτό είναι καλύτερο αν δεν θέλετε η πηγή να συνειδητοποιήσει ότι το σύστημά σας υπάρχει.
Απορρίπτω - Μην επιτρέπετε τη σύνδεση, αλλά στείλετε ξανά σφάλμα. Αυτό είναι καλύτερο αν δεν θέλετε μια συγκεκριμένη πηγή να συνδεθεί στο σύστημά σας, αλλά θέλετε να γνωρίζουν ότι το τείχος προστασίας τους έχει μπλοκάρει.
Ο καλύτερος τρόπος να δείξουμε τη διαφορά μεταξύ αυτών των τριών κανόνων είναι να δείξουμε πώς μοιάζει όταν ένας υπολογιστής προσπαθεί να σβήσει μια μηχανή Linux με το iptables ρυθμισμένο για κάθε μια από αυτές τις ρυθμίσεις.
Επιτρέποντας τη σύνδεση:
Απόρριψη της σύνδεσης:
Απόρριψη της σύνδεσης:
Επιτρέποντας ή αποκλείοντας συγκεκριμένες συνδέσεις
Με τις αλυσίδες πολιτικής σας ρυθμισμένες, μπορείτε τώρα να διαμορφώσετε το iptables για να επιτρέψετε ή να αποκλείσετε συγκεκριμένες διευθύνσεις, περιοχές διευθύνσεων και θύρες. Στα παραδείγματα αυτά, θα ορίσουμε τις συνδέσεις ΠΤΩΣΗ
, αλλά μπορείτε να τα αλλάξετε ΑΠΟΔΕΧΟΜΑΙ
ή ΑΠΟΡΡΙΠΤΩ
, ανάλογα με τις ανάγκες σας και τον τρόπο με τον οποίο διαμορφώσατε τις αλυσίδες πολιτικής σας.
Σημείωση: Σε αυτά τα παραδείγματα πρόκειται να χρησιμοποιήσουμε iptables -A
να προστεθούν κανόνες στην υπάρχουσα αλυσίδα. Το iptables αρχίζει στην κορυφή της λίστας του και περνάει από κάθε κανόνα μέχρι να βρει ένα που ταιριάζει. Εάν πρέπει να εισαγάγετε έναν κανόνα πάνω από τον άλλο, μπορείτε να το χρησιμοποιήσετε iptables -I [αλυσίδα] [αριθμός]
για να καθορίσετε τον αριθμό που θα πρέπει να βρίσκεται στη λίστα.
Συνδέσεις από μια ενιαία διεύθυνση IP
Αυτό το παράδειγμα δείχνει πώς να αποκλείσετε όλες τις συνδέσεις από τη διεύθυνση IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Συνδέσεις από μια σειρά διευθύνσεων IP
Αυτό το παράδειγμα δείχνει τον τρόπο αποκλεισμού όλων των διευθύνσεων IP στην περιοχή δικτύου 10.10.10.0/24. Μπορείτε να χρησιμοποιήσετε μια μάσκα δικτύου ή μια τυποποιημένη σημείωση κάθετης για να καθορίσετε το εύρος διευθύνσεων IP.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
ή
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Συνδέσεις σε συγκεκριμένη θύρα
Αυτό το παράδειγμα δείχνει τον τρόπο αποκλεισμού των συνδέσεων SSH από 10.10.10.10.
iptables -A INPUT -p tcp -δέντρο ssh -s 10.10.10.10 -j DROP
Μπορείτε να αντικαταστήσετε το "ssh" με οποιοδήποτε πρωτόκολλο ή αριθμό θύρας. ο -p tcp
ένα μέρος του κώδικα λέει στο iptables τι είδους σύνδεση χρησιμοποιεί το πρωτόκολλο. Εάν αποκλείσατε ένα πρωτόκολλο που χρησιμοποιεί UDP και όχι TCP, τότε -p udp
θα ήταν αναγκαία.
Αυτό το παράδειγμα δείχνει πώς μπορείτε να αποκλείσετε τις συνδέσεις SSH από οποιαδήποτε διεύθυνση IP.
iptables -A INPUT -p tcp -dport ssh -j DROP
Κράτη σύνδεσης
Όπως αναφέρθηκε προηγουμένως, πολλά πρωτόκολλα πρόκειται να απαιτήσουν αμφίδρομη επικοινωνία. Για παράδειγμα, εάν θέλετε να επιτρέψετε συνδέσεις SSH στο σύστημά σας, οι αλυσίδες εισόδου και εξόδου θα χρειαστούν έναν κανόνα που θα τους προστεθεί. Αλλά τι γίνεται αν θέλετε να επιτρέπεται μόνο η είσοδος SSH στο σύστημά σας; Δεν θα προσθέσει κανόνα στην αλυσίδα εξόδου και θα επιτρέψει εξερχόμενες προσπάθειες SSH?
Εκεί βρίσκονται οι καταστάσεις σύνδεσης, οι οποίες σας δίνουν τη δυνατότητα που θα χρειαστείτε για να επιτρέψετε αμφίδρομη επικοινωνία, αλλά θα επιτρέψετε μόνο τη δημιουργία συνδέσεων μίας κατεύθυνσης. Ρίξτε μια ματιά σε αυτό το παράδειγμα, όπου οι συνδέσεις SSH FROM 10.10.10.10 επιτρέπονται, αλλά οι συνδέσεις SSH TO 10.10.10.10 δεν είναι. Εντούτοις, το σύστημα επιτρέπεται να στέλνει πληροφορίες πίσω από SSH, εφόσον η σύνοδος έχει ήδη καθιερωθεί, πράγμα που καθιστά δυνατή την επικοινωνία SSH μεταξύ αυτών των δύο κεντρικών υπολογιστών.
iptables -A INPUT -p tcp --δίσκου ssh -s 10.10.10.10 -m κατάσταση -σταμία ΝΕΑ, ESTABLISHED -j ΑΠΟΔΟΧΗ
iptables -Α OUTPUT -p tcp - αθλητισμός 22 -d 10.10.10.10 -m κατάσταση -state ESTABLISHED -j ΑΠΟΔΟΧΗ
Αποθήκευση αλλαγών
Οι αλλαγές που κάνετε στους κανόνες του iptables θα διαλυθούν την επόμενη φορά που θα γίνει επανεκκίνηση της υπηρεσίας iptables, εκτός αν εκτελέσετε μια εντολή για να αποθηκεύσετε τις αλλαγές. Αυτή η εντολή μπορεί να διαφέρει ανάλογα με τη διανομή σας:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables αποθήκευση
Ή
/etc/init.d/iptables αποθήκευση
Άλλες εντολές
Καταχωρίστε τους τρέχοντες κανόνες iptables:
iptables -L
Προσθήκη του -v
επιλογή θα σας δώσει πληροφορίες πακέτων και byte και προσθέτοντας -n
θα απαριθμήσει τα πάντα αριθμητικά. Με άλλα λόγια - ονόματα κεντρικών υπολογιστών, πρωτόκολλα και δίκτυα εμφανίζονται ως αριθμοί.
Για να διαγράψετε όλους τους ισχύοντες κανόνες, μπορείτε να εκδώσετε την εντολή flush.
iptables -F