Iptables είναι το κύριο τείχος προστασίας (firewall) που συνοδεύει τις περισσότερες διανομές Linux από προεπιλογή. Είναι υπεύθυνο για τη διαχείριση της ασφάλειας του δικτύου. Λειτουργεί συγκρίνοντας τα πακέτα δεδομένων με ένα σύνολο κανόνων, δίνοντας οδηγίες στο σύστημα να αποδεχτεί, να απορρίψει ή να προωθήσει μια σύνδεση σύμφωνα με τους κανόνες. Σε αυτόν τον οδηγό, θα σας δείξουμε πώς να εμφανίσετε και να διαγράψετε κανόνες, να ελέγξετε και να μηδενίσετε τους μετρητές πακέτων και byte, καθώς και να εκκαθαρίσετε αλυσίδες (flush chains). Έτοιμοι; Ας ξεκινήσουμε!
Προαπαιτούμενα
Πριν ξεκινήσουμε τον οδηγό, ας ξεκαθαρίσουμε κάτι. Όλες οι συμβουλές και τα κόλπα που παρουσιάζονται σε αυτόν τον οδηγό εκτελούνται σε μια ξεχωριστή εικονική μηχανή. Είναι καλή ιδέα να το κάνετε και εσείς αυτό, καθώς εξαλείφει κάθε πιθανότητα να μετατρέψετε το σύστημά σας σε ένα απόλυτο χάος. Μόνο αφού κατακτήσετε αυτές τις διαδικασίες, θα πρέπει να προσπαθήσετε να τις εφαρμόσετε σε πραγματικές συνθήκες.
Για αυτόν τον οδηγό, θα χρησιμοποιήσουμε το Ubuntu για την επίδειξη όλων των βημάτων. Ωστόσο, θα πρέπει να λειτουργούν με παρόμοιο τρόπο ανεξάρτητα από τη διανομή.
Εμφάνιση κανόνων
Εμφάνιση κανόνων ανά προδιαγραφή
Αρχικά, ας ελέγξουμε όλους τους ενεργούς κανόνες ανά προδιαγραφή. Εκτελέστε την ακόλουθη εντολή:
|
1 |
sudo iptables -S |

Αν έχετε εργαστεί ξανά με τη δημιουργία κανόνων iptables, ίσως έχετε παρατηρήσει την ομοιότητα. Τα αποτελέσματα μοιάζουν με τις εντολές που χρησιμοποιήθηκαν για τη δημιουργία τους, εκτός από το μέρος «iptables». Μοιράζονται επίσης παρόμοια δομή με τα αρχεία ρυθμίσεων των κανόνων iptables.
Εμφάνιση συγκεκριμένης αλυσίδας
Ας δοκιμάσουμε κάτι πιο ακριβές. Αντί να αναφέρει όλους τους κανόνες iptables, πείτε στο iptables να αναφέρει τους κανόνες μιας συγκεκριμένης αλυσίδας. Για παράδειγμα, TCP, INPUT, OUTPUT κ.λπ. Για να το κάνετε αυτό, καθορίστε το όνομα της αλυσίδας μετά τη σημαία «-S»:
|
1 |
sudo iptables -S <chain> |

Εμφάνιση κανόνων ως πίνακες
Η προβολή πίνακα είναι χρήσιμη κατά τη σύγκριση διαφορετικών κανόνων. Χρησιμοποιήστε τη σημαία «-L» για να πείτε στο iptables να αναφέρει όλους τους ενεργούς κανόνες σε μορφή πίνακα:
|
1 |
sudo iptables -L |

Το αποτέλεσμα περιέχει όλους τους τρέχοντες κανόνες ταξινομημένους ανά αλυσίδα. Παρόμοια με την προηγούμενη ενότητα, είναι επίσης δυνατό να φιλτράρετε το αποτέλεσμα της λίστας ανά συγκεκριμένη αλυσίδα, όπως INPUT, TCP και OUTPUT κ.λπ. Για να το κάνετε αυτό, καθορίστε την αλυσίδα μετά τη σημαία «-L»:
|
1 |
sudo iptables -L <chain> |

Ας αναλύσουμε λίγο το αποτέλεσμα. Στη δική μας περίπτωση, λόγω των κανόνων, το αποτέλεσμα θα φαίνεται λίγο ακατάστατο. Η πρώτη γραμμή του αποτελέσματος δηλώνει το όνομα της αλυσίδας (INPUT) με την προεπιλεγμένη πολιτική της (DROP). Η επόμενη γραμμή καθορίζει τις κεφαλίδες των στηλών του πίνακα. Τα υπόλοιπα είναι οι κανόνες της αλυσίδας. Ας ρίξουμε μια ματιά στο τι υποδεικνύουν οι κεφαλίδες:
- target: Εάν ένα πακέτο ταιριάζει με τον κανόνα, αυτή η ενότητα ορίζει ποια ενέργεια πρέπει να εκτελεστεί. Μπορεί να είναι η αποδοχή του πακέτου, η απόρριψη, η καταγραφή (logging) ή η αποστολή του σε άλλη αλυσίδα.
- prot: Ορίζει το πρωτόκολλο, για παράδειγμα, udp, tcp, icmp ή all.
- opt: Αυτή η στήλη υποδεικνύει τις επιλογές IP. Χρησιμοποιείται σπάνια.
- source: Προέλευση του πακέτου (διεύθυνση IP ή υποδίκτυο). Η τιμή μπορεί να είναι συγκεκριμένη ή anywhere.
- destination: Προορισμός του πακέτου (διεύθυνση IP ή υποδίκτυο). Η τιμή μπορεί να είναι συγκεκριμένη ή anywhere.
Αν το προσέξατε, η τελευταία στήλη δεν έχει ετικέτα. Αυτό συμβαίνει επειδή χρησιμοποιείται για να υποδείξει τις επιλογές ενός κανόνα. Θα περιέχει όλα τα μέρη του κανόνα που δεν χωρούσαν στα προηγούμενα πεδία. Μπορεί να περιέχει οτιδήποτε, από τις θύρες προέλευσης/προορισμού έως την κατάσταση σύνδεσης του πακέτου κ.λπ.
Καταμέτρηση πακέτων και συνολικό μέγεθος
Εκκαθάριση μετρητών πακέτων και byte
Όταν εμφανίζουμε τους κανόνες iptables, μπορούμε επίσης να ελέγξουμε τον αριθμό των πακέτων και το συνολικό μέγεθος των πακέτων σε byte που ταυτίστηκαν με κάθε συγκεκριμένο κανόνα. Είναι μια χρήσιμη μέτρηση όταν χρειάζεται να έχετε μια γενική εικόνα για το ποιοι κανόνες αντιστοιχίζονται με πακέτα.
Σε αυτό το παράδειγμα, θα χρησιμοποιήσουμε την αλυσίδα INPUT. Αυτή τη φορά, προσθέστε τη σημαία «-v» που σημαίνει verbose mode (αναλυτική λειτουργία):
|
1 |
sudo iptables -L INPUT -v |

Θα παρατηρήσετε ότι το αποτέλεσμα του πίνακα περιλαμβάνει τώρα δύο επιπλέον πεδία: pkts και bytes.
Επαναφορά καταμέτρησης πακέτων και συνολικού μεγέθους
Σε ορισμένες περιπτώσεις, ίσως θέλετε να επαναφέρετε τους μετρητές που δείξαμε προηγουμένως. Εάν το σύστημα επανεκκινηθεί, οι μετρητές θα μηδενιστούν αυτόματα. Μπορείτε επίσης να επιβάλετε χειροκίνητα μια επαναφορά. Θα χρησιμοποιήσουμε τη σημαία «-Z» για να επαναφέρουμε τον αριθμό των πακέτων και το συνολικό μέγεθος:
|
1 |
sudo iptables -v -Z |

Λάβετε υπόψη ότι αυτή η εντολή θα επαναφέρει τους μετρητές όλων των αλυσίδων. Όπως και με άλλες εντολές, είναι δυνατό να επαναφέρετε τον μετρητή για συγκεκριμένες αλυσίδες. Για παράδειγμα, η επόμενη εντολή θα επαναφέρει τους μετρητές για την αλυσίδα INPUT:
|
1 |
sudo iptables -v -Z <chain> |

Είναι δυνατό να κάνετε την ενέργεια επαναφοράς του μετρητή πιο ακριβή. Μπορείτε να επαναφέρετε τον μετρητή για έναν συγκεκριμένο κανόνα σε μια συγκεκριμένη αλυσίδα. Για να το κάνετε αυτό, προσθέστε τον αριθμό του κανόνα κάτω από το όνομα της αλυσίδας:
|
1 |
sudo iptables -v -Z <chain> <rule_number> |
Διαγραφή κανόνων
Διαγραφή κανόνων βάσει προδιαγραφών
Υπάρχουν πολλοί τρόποι για να προσεγγίσετε τη διαγραφή κανόνων iptables. Η πρώτη μέθοδος διαγραφής κανόνων είναι βάσει των προδιαγραφών του κανόνα. Για τη διαγραφή, θα χρησιμοποιήσουμε τη σημαία «-D» ακολουθούμενη από τις προδιαγραφές του κανόνα:
|
1 |
sudo iptables -v -D INPUT -s 172.217.194.113 -j DROP |

Εάν έχετε προσθέσει κάποιον κανόνα iptables στο παρελθόν, θα παρατηρήσετε την ομοιότητα. Το μόνο πράγμα που άλλαξε εδώ είναι η σημαία «-D» αντί για τη σημαία «-A».
Διαγραφή κανόνων βάσει αλυσίδας και αριθμού
Η διαγραφή κανόνων βάσει των προδιαγραφών τους απαιτεί λίγο περισσότερη προσπάθεια, σωστά; Τι θα γινόταν αν μπορούσαμε να τους διαγράψουμε χωρίς να χρειάζεται να θυμόμαστε τις προδιαγραφές του κανόνα; Ας διαγράψουμε τους κανόνες βάσει της αλυσίδας και του αριθμού τους! Σε σύγκριση με την πρώτη μέθοδο (διαγραφή βάσει προδιαγραφών), αυτή είναι σχετικά ευκολότερη, καθώς δεν χρειάζεται να έχετε ολόκληρη την προδιαγραφή στα χέρια σας.
Αυτή η μέθοδος απαιτεί την αλυσίδα και τον αριθμό γραμμής του κανόνα-στόχου. Από πού παίρνουμε τον αριθμό γραμμής; Εκτελέστε την ακόλουθη εντολή για να το προσδιορίσετε:
|
1 |
sudo iptables -L --line-numbers |

Θα έχετε ένα μεγάλο αποτέλεσμα με όλους τους κανόνες και τους αριθμούς γραμμών τους. Για να περιορίσετε το αποτέλεσμα, χρησιμοποιήστε το όνομα της αλυσίδας μετά τη σημαία «-L»:
|
1 |
sudo iptables -L <chain> --line-numbers |

Στο αποτέλεσμα, θα παρατηρήσετε την επιπλέον στήλη num. Υποδεικνύει τον αριθμό γραμμής για κάθε κανόνα. Μόλις προσδιορίσουμε τον αριθμό-στόχο, εκτελέστε τη διαγραφή:
|
1 |
sudo iptables -v -D <chain> <line_number> |
Εκκαθάριση αλυσίδων
Στην περίπτωση του iptables, τι είναι η εκκαθάριση μιας αλυσίδας; Είναι η διαδικασία διαγραφής όλων των κανόνων σε μια συγκεκριμένη αλυσίδα. Εάν χρειάζεται να διαγράψετε μαζικά κανόνες, τότε μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο. Πριν εκτελέσετε εκκαθάριση αλυσίδας, συνιστούμε ανεπιφύλακτα να δημιουργήσετε ένα αντίγραφο ασφαλείας των υπαρχόντων κανόνων χρησιμοποιώντας το iptables-save. Είναι ένα ενσωματωμένο εργαλείο του iptables που θα εμφανίσει όλες τις τρέχουσες αλυσίδες και κανόνες. Το αποτέλεσμα μπορεί να εξαχθεί σε ένα αρχείο κειμένου:
|
1 |
sudo iptables-save > ~/Desktop/iptables-backup.txt |
![]()
Εκκαθάριση μίας μόνο αλυσίδας
Ας δούμε πώς να εκκαθαρίσετε μια αλυσίδα. Χρησιμοποιήστε τη σημαία «-F» ακολουθούμενη από την αλυσίδα-στόχο:
|
1 |
sudo iptables -v -F <chain> |

Εκκαθάριση όλων των αλυσίδων
Πριν εκκαθαρίσετε όλες τις αλυσίδες, βεβαιωθείτε ότι κατανοείτε τι κάνετε. Αυτό θα διαγράψει όλους τους κανόνες για το τείχος προστασίας iptables. Θα πρέπει να βεβαιωθείτε ότι έχετε δημιουργήσει εκ των προτέρων ένα αντίγραφο ασφαλείας των κανόνων iptables.
Έτοιμοι; Εκκαθαρίστε όλες τις αλυσίδες iptables εκτελώντας την ακόλουθη εντολή:
|
1 |
sudo iptables -v -F |

Εκκαθάριση κανόνων, διαγραφή αλυσίδων και αποδοχή όλων
Η εκτέλεση των βημάτων που περιγράφονται σε αυτήν την ενότητα θα απενεργοποιήσει αποτελεσματικά το τείχος προστασίας, επιτρέποντας απεριόριστη κίνηση δικτύου. Παρόμοια με την προηγούμενη ενότητα, συνιστούμε να έχετε ένα αντίγραφο ασφαλείας του iptables πριν προχωρήσετε. Αρχικά, θα αλλάξουμε την προεπιλεγμένη πολιτική καθεμιάς από τις ενσωματωμένες αλυσίδες σε ACCEPT. Αυτό γίνεται για να διασφαλιστεί ότι το iptables δεν θα σας αποκλείσει από τον διακομιστή σας μέσω SSH:
|
1 |
sudo iptables -v -P INPUT ACCEPT && sudo iptables -v -P FORWARD ACCEPT && sudo iptables -v -P OUTPUT ACCEPT |

Τώρα, εκκαθαρίστε τους πίνακες nat και mangle:
|
1 2 |
sudo iptables -v -t nat -F sudo iptables -v -t mangle -F |


Εκκαθαρίστε όλες τις αλυσίδες και διαγράψτε όλες τις μη προεπιλεγμένες αλυσίδες:
|
1 2 |
sudo iptables -v -F sudo iptables -v -X |


Στη συνέχεια, ας δούμε το αποτέλεσμα:
|
1 |
sudo iptables -L --line-numbers |
Τελικές σκέψεις
Το iptables είναι ένα ισχυρό τείχος προστασίας. Ελπίζουμε αυτός ο οδηγός να σας φάνηκε χρήσιμος για να μάθετε πώς να εμφανίζετε σε λίστα και να διαγράφετε κανόνες του τείχους προστασίας iptables. Και μην ξεχάσετε να κάνετε πρακτική εξάσκηση πριν τους εφαρμόσετε σε πραγματικό περιβάλλον.
Καλή συνέχεια!



Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.