25 Χρήσιμοι κανόνες τείχους προστασίας IPtable που πρέπει να γνωρίζει κάθε διαχειριστής Linux


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

Εδώ είναι χρήσιμο τα iptables. Το Iptables είναι ένα τείχος προστασίας γραμμής εντολών Linux που επιτρέπει στους διαχειριστές συστήματος να διαχειρίζονται την εισερχόμενη και την εξερχόμενη κίνηση μέσω ενός συνόλου κανόνων πίνακα με δυνατότητα διαμόρφωσης.

Το Iptables χρησιμοποιεί ένα σύνολο πινάκων που έχουν αλυσίδες που περιέχουν σύνολο ενσωματωμένων ή καθορισμένων κανόνων από το χρήστη. Χάρη σε αυτά ένας διαχειριστής συστήματος μπορεί να φιλτράρει σωστά την κίνηση δικτύου του συστήματός του.

Σύμφωνα με το εγχειρίδιο iptables, υπάρχουν επί του παρόντος 3 τύποι πινάκων:

    1. FILTER – αυτός είναι ο προεπιλεγμένος πίνακας, ο οποίος περιέχει τις ενσωματωμένες αλυσίδες για:

      1. INPUT   – πακέτα που προορίζονται για τοπικές πρίζες
      2. FORWARD – πακέτα που δρομολογούνται μέσω του συστήματος
      3. OUTPUT – πακέτα που δημιουργούνται τοπικά
    2. NAT – ένας πίνακας στον οποίο συμβουλευόμαστε όταν ένα πακέτο προσπαθεί να δημιουργήσει μια νέα σύνδεση. Διαθέτει τα εξής ενσωματωμένα:

      1. PREROUTING – χρησιμοποιείται για την τροποποίηση ενός πακέτου μόλις ληφθεί
      2. OUTPUT – χρησιμοποιείται για την τροποποίηση τοπικά δημιουργούμενων πακέτων
      3. POSTROUTING – χρησιμοποιείται για την αλλαγή πακέτων καθώς πρόκειται να σβήσουν
    3. MANGLE – αυτός ο πίνακας χρησιμοποιείται για την αλλαγή πακέτων. Μέχρι την έκδοση του πυρήνα 2.4 αυτός ο πίνακας είχε μόνο δύο αλυσίδες, αλλά τώρα είναι 5:

      1. ΠΡΟΔΡΟΜΟΛΟΓΗΣΗ – για την αλλαγή των εισερχόμενων συνδέσεων
      2. ΕΞΟΔΟΣ – για την τροποποίηση τοπικά δημιουργούμενων  πακέτων
      3. INPUT – για εισερχόμενα πακέτα
      4. POSTROUTING – για την αλλαγή πακέτων καθώς πρόκειται να σβήσουν
      5. FORWARD – για πακέτα που δρομολογούνται μέσω του κουτιού

Σε αυτό το άρθρο, θα δείτε μερικές χρήσιμες εντολές που θα σας βοηθήσουν να διαχειριστείτε το τείχος προστασίας του Linux box μέσω iptables. Για τους σκοπούς αυτού του άρθρου, θα ξεκινήσω με απλούστερες εντολές και θα προχωρήσω σε πιο σύνθετες μέχρι το τέλος.

1. Έναρξη/Διακοπή/Επανεκκίνηση Iptables Firewall

Αρχικά, θα πρέπει να γνωρίζετε πώς να διαχειρίζεστε την υπηρεσία iptables σε διαφορετικές διανομές Linux. Αυτό είναι αρκετά εύκολο:

Σε διανομές Linux που βασίζονται στο SystemD

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

Σε διανομές Linux που βασίζονται στο SysVinit

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Ελέγξτε όλους τους κανόνες του τείχους προστασίας IPtables

Εάν θέλετε να ελέγξετε τους υπάρχοντες κανόνες σας, χρησιμοποιήστε την ακόλουθη εντολή:

iptables -L -n -v

Αυτό θα πρέπει να επιστρέψει έξοδο παρόμοια με αυτή που ακολουθεί:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Εάν προτιμάτε να ελέγξετε τους κανόνες για έναν συγκεκριμένο πίνακα, μπορείτε να χρησιμοποιήσετε την επιλογή -t ακολουθούμενη από τον πίνακα που θέλετε να ελέγξετε. Για παράδειγμα, για να ελέγξετε τους κανόνες στον πίνακα NAT, μπορείτε να χρησιμοποιήσετε:

iptables -t nat -L -v -n

3. Αποκλεισμός συγκεκριμένης διεύθυνσης IP στο Τείχος προστασίας IPtables

Εάν εντοπίσετε μια ασυνήθιστη ή καταχρηστική δραστηριότητα από μια διεύθυνση IP, μπορείτε να αποκλείσετε αυτήν τη διεύθυνση IP με τον ακόλουθο κανόνα:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Όπου πρέπει να αλλάξετε "xxx.xxx.xxx.xxx" με την πραγματική διεύθυνση IP. Να είστε πολύ προσεκτικοί όταν εκτελείτε αυτήν την εντολή, καθώς μπορεί να αποκλείσετε κατά λάθος τη δική σας διεύθυνση IP. Η επιλογή -A προσθέτει τον κανόνα στο τέλος της επιλεγμένης αλυσίδας.

Σε περίπτωση που θέλετε να αποκλείσετε μόνο την κυκλοφορία TCP από αυτήν τη διεύθυνση IP, μπορείτε να χρησιμοποιήσετε την επιλογή -p που καθορίζει το πρωτόκολλο. Με αυτόν τον τρόπο η εντολή θα μοιάζει με αυτό:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Ξεμπλοκάρετε τη διεύθυνση IP στο Τείχος προστασίας IPtables

Εάν έχετε αποφασίσει ότι δεν θέλετε πλέον να αποκλείετε αιτήματα από συγκεκριμένη διεύθυνση IP, μπορείτε να διαγράψετε τον κανόνα αποκλεισμού με την ακόλουθη εντολή:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

Η επιλογή -D διαγράφει έναν ή περισσότερους κανόνες από την επιλεγμένη αλυσίδα. Εάν προτιμάτε να χρησιμοποιήσετε τη μεγαλύτερη επιλογή, μπορείτε να χρησιμοποιήσετε το --delete.

5. Αποκλεισμός της συγκεκριμένης θύρας στο Τείχος προστασίας IPtables

Μερικές φορές μπορεί να θέλετε να αποκλείσετε τις εισερχόμενες ή εξερχόμενες συνδέσεις σε μια συγκεκριμένη θύρα. Είναι ένα καλό μέτρο ασφαλείας και θα πρέπει πραγματικά να το σκεφτείτε κατά τη ρύθμιση του τείχους προστασίας σας.

Για να αποκλείσετε τις εξερχόμενες συνδέσεις σε μια συγκεκριμένη θύρα χρησιμοποιήστε:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Για να επιτρέψετε τις εισερχόμενες συνδέσεις χρησιμοποιήστε:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

Και στα δύο παραδείγματα αλλάξτε το "xxx" με την πραγματική θύρα που θέλετε να επιτρέψετε. Εάν θέλετε να αποκλείσετε την κυκλοφορία UDP αντί για TCP, απλώς αλλάξτε το "tcp" με το "udp" στο παραπάνω κανόνας iptables.

6. Επιτρέψτε πολλαπλές θύρες σε πίνακες IP χρησιμοποιώντας Multiport

Μπορείτε να επιτρέψετε πολλές θύρες ταυτόχρονα, χρησιμοποιώντας multiport, παρακάτω μπορείτε να βρείτε έναν τέτοιο κανόνα τόσο για εισερχόμενες όσο και για εξερχόμενες συνδέσεις:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Να επιτρέπεται η συγκεκριμένη περιοχή δικτύου σε συγκεκριμένη θύρα σε πίνακες IP

Ίσως θέλετε να περιορίσετε ορισμένες συνδέσεις σε συγκεκριμένη θύρα σε ένα δεδομένο δίκτυο. Ας υποθέσουμε ότι θέλετε να επιτρέψετε τις εξερχόμενες συνδέσεις στη θύρα 22 στο δίκτυο 192.168.100.0/24.

Μπορείτε να το κάνετε με αυτήν την εντολή:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Αποκλεισμός του Facebook στο Τείχος προστασίας IPtables

Σε ορισμένους εργοδότες αρέσει να εμποδίζουν την πρόσβαση των υπαλλήλων τους στο Facebook. Παρακάτω είναι ένα παράδειγμα πώς να αποκλείσετε την κυκλοφορία στο Facebook.

Σημείωση: Εάν είστε διαχειριστής συστήματος και πρέπει να εφαρμόσετε αυτούς τους κανόνες, έχετε υπόψη σας ότι οι συνάδελφοί σας ενδέχεται να σταματήσουν να μιλούν μαζί σας :)

Βρείτε πρώτα τις διευθύνσεις IP που χρησιμοποιεί το Facebook:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Στη συνέχεια, μπορείτε να αποκλείσετε αυτό το δίκτυο Facebook με:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Λάβετε υπόψη ότι το εύρος των διευθύνσεων IP που χρησιμοποιεί το Facebook μπορεί να διαφέρει στη χώρα σας.

9. Ρύθμιση Port Forwarding σε IPtables

Μερικές φορές μπορεί να θέλετε να προωθήσετε την κίνηση μιας υπηρεσίας σε μια άλλη θύρα. Μπορείτε να το πετύχετε με την ακόλουθη εντολή:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Η παραπάνω εντολή προωθεί όλη την εισερχόμενη κίνηση στη διεπαφή δικτύου eth0, από τη θύρα 25 στη θύρα 2525. Μπορείτε να αλλάξετε τις θύρες με αυτές που χρειάζεστε.

10. Αποκλεισμός πλημμύρας δικτύου στη θύρα Apache με πίνακες IP

Μερικές φορές οι διευθύνσεις IP μπορεί να ζητούν πάρα πολλές συνδέσεις προς θύρες Ιστού στον ιστότοπό σας. Αυτό μπορεί να προκαλέσει πολλά προβλήματα και για να αποτρέψετε τέτοια προβλήματα, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κανόνα:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

Η παραπάνω εντολή περιορίζει τις εισερχόμενες συνδέσεις από ανά λεπτό σε 100 και ορίζει μια ριπή ορίου σε 200. Μπορείτε να επεξεργαστείτε το όριο και το limit-burst στις δικές σας συγκεκριμένες απαιτήσεις.

11. Αποκλεισμός εισερχόμενων αιτημάτων Ping σε πίνακες IP

Σε ορισμένους διαχειριστές συστήματος αρέσει να αποκλείουν εισερχόμενα αιτήματα ping για λόγους ασφαλείας. Αν και η απειλή δεν είναι τόσο μεγάλη, είναι καλό να γνωρίζετε πώς να αποκλείσετε ένα τέτοιο αίτημα:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Επιτρέψτε την πρόσβαση επαναφοράς

Η πρόσβαση αναδρομής (πρόσβαση από 127.0.0.1) είναι σημαντική και θα πρέπει να την αφήνετε πάντα ενεργή:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. Διατηρήστε ένα αρχείο καταγραφής πακέτων δικτύου που έχουν πέσει σε πίνακες IP

Εάν θέλετε να καταγράψετε τα πακέτα που απορρίφθηκαν στη διεπαφή δικτύου eth0, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Μπορείτε να αλλάξετε την τιμή μετά το "--log-prefix" με κάτι της επιλογής σας. Τα μηνύματα είναι συνδεδεμένα στο /var/log/messages και μπορείτε να τα αναζητήσετε με:

grep "IPtables dropped packets:" /var/log/messages

14. Αποκλεισμός της πρόσβασης σε συγκεκριμένη διεύθυνση MAC σε πίνακες IP

Μπορείτε να αποκλείσετε την πρόσβαση στο σύστημά σας από συγκεκριμένη διεύθυνση MAC χρησιμοποιώντας:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Φυσικά, θα χρειαστεί να αλλάξετε το "00:00:00:00:00:00" με την πραγματική διεύθυνση MAC που θέλετε να αποκλείσετε.

15. Περιορίστε τον αριθμό των ταυτόχρονων συνδέσεων ανά διεύθυνση IP

Εάν δεν θέλετε να δημιουργήσετε πάρα πολλές ταυτόχρονες συνδέσεις από μία διεύθυνση IP σε δεδομένη θύρα, μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Η παραπάνω εντολή δεν επιτρέπει περισσότερες από 3 συνδέσεις ανά πελάτη. Φυσικά, μπορείτε να αλλάξετε τον αριθμό θύρας για να ταιριάζει με διαφορετική υπηρεσία. Επίσης το --connlimit-bove θα πρέπει να αλλάξει για να ταιριάζει με τις απαιτήσεις σας.

16. Αναζήτηση εντός του κανόνα IPtables

Αφού ορίσετε τους κανόνες iptables, θα θέλετε να κάνετε αναζήτηση από καιρό σε καιρό και ίσως χρειαστεί να τους τροποποιήσετε. Ένας εύκολος τρόπος αναζήτησης εντός των κανόνων σας είναι να χρησιμοποιήσετε:

iptables -L $table -v -n | grep $string

Στο παραπάνω παράδειγμα, θα χρειαστεί να αλλάξετε τον $table με τον πραγματικό πίνακα στον οποίο θέλετε να κάνετε αναζήτηση και τον $string με την πραγματική συμβολοσειρά για την οποία αναζητάτε.

Εδώ είναι ένα παράδειγμα:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Καθορίστε Νέα αλυσίδα IPTables

Με το iptables, μπορείτε να ορίσετε τη δική σας αλυσίδα και να αποθηκεύσετε προσαρμοσμένους κανόνες σε αυτήν. Για να ορίσετε μια αλυσίδα, χρησιμοποιήστε:

iptables -N custom-filter

Τώρα μπορείτε να ελέγξετε αν υπάρχει το νέο σας φίλτρο:

iptables -L
Δείγμα εξόδου
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. Αλυσίδες ή κανόνες τείχους προστασίας IPtables Flush

Εάν θέλετε να ξεπλύνετε τις αλυσίδες τείχους προστασίας, μπορείτε να χρησιμοποιήσετε:

iptables -F

Μπορείτε να ξεπλύνετε αλυσίδες από συγκεκριμένο τραπέζι με:

iptables -t nat -F

Μπορείτε να αλλάξετε το "nat" με τον πραγματικό πίνακα ποιες αλυσίδες θέλετε να ξεπλύνετε.

19. Αποθηκεύστε τους κανόνες IPtables σε ένα αρχείο

Εάν θέλετε να αποθηκεύσετε τους κανόνες του τείχους προστασίας σας, μπορείτε να χρησιμοποιήσετε την εντολή iptables-save. Μπορείτε να χρησιμοποιήσετε τα ακόλουθα για να αποθηκεύσετε και να αποθηκεύσετε τους κανόνες σας σε ένα αρχείο:

iptables-save > ~/iptables.rules

Εξαρτάται από εσάς πού θα αποθηκεύσετε το αρχείο και πώς θα το ονομάσετε.

20. Επαναφέρετε τους κανόνες IPtables από ένα αρχείο

Εάν θέλετε να επαναφέρετε μια λίστα κανόνων iptables, μπορείτε να χρησιμοποιήσετε το iptables-restore. Η εντολή μοιάζει με αυτό:

iptables-restore < ~/iptables.rules

Φυσικά η διαδρομή προς το αρχείο κανόνων σας μπορεί να είναι διαφορετική.

21. Ρύθμιση κανόνων IPtables για Συμμόρφωση PCI

Ορισμένοι διαχειριστές συστήματος ενδέχεται να χρειαστεί να διαμορφώσουν τους διακομιστές τους ώστε να είναι συμβατοί με το PCI. Υπάρχουν πολλές απαιτήσεις από διαφορετικούς προμηθευτές συμμόρφωσης PCI, αλλά υπάρχουν λίγες κοινές.

Σε πολλές από τις περιπτώσεις, θα χρειαστεί να έχετε περισσότερες από μία διευθύνσεις IP. Θα χρειαστεί να εφαρμόσετε τους παρακάτω κανόνες για τη διεύθυνση IP του ιστότοπου. Να είστε ιδιαίτερα προσεκτικοί όταν χρησιμοποιείτε τους παρακάτω κανόνες και να τους χρησιμοποιείτε μόνο εάν είστε σίγουροι για το τι κάνετε:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Εάν χρησιμοποιείτε cPanel ή παρόμοιο πίνακα ελέγχου, ίσως χρειαστεί να αποκλείσετε και τις θύρες του. Εδώ είναι ένα παράδειγμα:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Σημείωση: Για να βεβαιωθείτε ότι πληροίτε τις απαιτήσεις του προμηθευτή PCI, ελέγξτε προσεκτικά την αναφορά του και εφαρμόστε τους απαιτούμενους κανόνες. Σε ορισμένες περιπτώσεις μπορεί να χρειαστεί να αποκλείσετε την κυκλοφορία UDP και σε ορισμένες θύρες.

22. Να επιτρέπονται οι εγκατεστημένες και σχετικές συνδέσεις

Καθώς η κίνηση του δικτύου είναι ξεχωριστή για την εισερχόμενη και την εξερχόμενη, θα θέλετε να επιτρέψετε την καθιερωμένη και σχετική εισερχόμενη κυκλοφορία. Για εισερχόμενες συνδέσεις κάντε το με:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Για εξερχόμενη χρήση:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Αποθέστε Μη έγκυρα πακέτα σε πίνακες IP

Είναι πιθανό ορισμένα πακέτα δικτύου να έχουν επισημανθεί ως μη έγκυρα. Μερικοί άνθρωποι μπορεί να προτιμούν να καταγράφουν αυτά τα πακέτα, αλλά άλλοι προτιμούν να τα απορρίψουν. Για να απορρίψετε μη έγκυρα πακέτα, μπορείτε να χρησιμοποιήσετε:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Αποκλεισμός σύνδεσης στη διεπαφή δικτύου

Ορισμένα συστήματα μπορεί να έχουν περισσότερες από μία διεπαφές δικτύου. Μπορείτε να περιορίσετε την πρόσβαση σε αυτήν τη διεπαφή δικτύου ή να αποκλείσετε συνδέσεις από συγκεκριμένη διεύθυνση IP.

Για παράδειγμα:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Αλλάξτε το “xxx.xxx.xxx.xxx ” με την πραγματική διεύθυνση IP (ή το δίκτυο) που θέλετε να αποκλείσετε.

25. Απενεργοποιήστε τα εξερχόμενα μηνύματα μέσω πινάκων IPT

Εάν το σύστημά σας δεν πρέπει να στέλνει μηνύματα ηλεκτρονικού ταχυδρομείου, μπορείτε να αποκλείσετε τις εξερχόμενες θύρες στις θύρες SMTP. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε αυτό:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

συμπέρασμα

Το Iptables είναι ένα ισχυρό τείχος προστασίας από το οποίο μπορείτε εύκολα να επωφεληθείτε. Είναι ζωτικής σημασίας για κάθε διαχειριστή συστήματος να μάθει τουλάχιστον τα βασικά του iptables. Εάν θέλετε να βρείτε πιο λεπτομερείς πληροφορίες σχετικά με το iptables και τις επιλογές του, συνιστάται ιδιαίτερα να διαβάσετε το εγχειρίδιο:

man iptables

Εάν πιστεύετε ότι πρέπει να προσθέσουμε περισσότερες εντολές σε αυτήν τη λίστα, μοιραστείτε τις μαζί μας, υποβάλλοντάς τις στην ενότητα σχολίων παρακάτω.