Πώς να χρησιμοποιήσετε το Port Knocking στο Linux (και γιατί δεν πρέπει)

Το Port knocking είναι ένας τρόπος για να ασφαλίσετε έναν διακομιστή κλείνοντας θύρες τείχους προστασίας—ακόμα και αυτές που γνωρίζετε ότι θα χρησιμοποιηθούν. Αυτές οι θύρες ανοίγουν κατ’ απαίτηση εάν —και μόνο εάν— το αίτημα σύνδεσης παρέχει το μυστικό χτύπημα.

Το Port Knocking είναι ένα “Μυστικό χτύπημα”

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

Το Port knocking είναι ένα σύγχρονο αντίστοιχο. Εάν θέλετε οι άνθρωποι να έχουν πρόσβαση σε υπηρεσίες στον υπολογιστή σας, αλλά δεν θέλετε να ανοίξετε το τείχος προστασίας σας στο διαδίκτυο, μπορείτε να χρησιμοποιήσετε το port knocking. Σας επιτρέπει να κλείνετε τις θύρες στο τείχος προστασίας σας που επιτρέπουν τις εισερχόμενες συνδέσεις και να τις ανοίγετε αυτόματα όταν γίνεται ένα προκαθορισμένο μοτίβο προσπαθειών σύνδεσης. Η σειρά των προσπαθειών σύνδεσης λειτουργεί ως το μυστικό χτύπημα. Ένα άλλο μυστικό χτύπημα κλείνει το λιμάνι.

Το port knocking είναι κάτι σαν καινοτομία, αλλά είναι σημαντικό να γνωρίζετε ότι είναι ένα παράδειγμα ασφάλεια μέσω της αφάνειας, και αυτή η ιδέα είναι θεμελιωδώς εσφαλμένη. Το μυστικό του τρόπου πρόσβασης σε ένα σύστημα είναι ασφαλές γιατί μόνο όσοι ανήκουν σε μια συγκεκριμένη ομάδα το γνωρίζουν. Αλλά από τη στιγμή που αυτό το μυστικό αποκαλυφθεί – είτε επειδή αποκαλύφθηκε, παρατηρηθεί, μαντέψετε ή επεξεργαστείτε – η ασφάλειά σας είναι άκυρη. Καλύτερα να προστατεύσετε τον διακομιστή σας με άλλους, ισχυρότερους τρόπους, όπως η απαίτηση συνδέσεων βάσει κλειδιών για έναν διακομιστή SSH.

Οι πιο ισχυρές προσεγγίσεις για την ασφάλεια στον κυβερνοχώρο είναι πολυεπίπεδες, επομένως, ίσως το port knocking θα έπρεπε να είναι ένα από αυτά τα επίπεδα. Όσο περισσότερα στρώματα, τόσο το καλύτερο, σωστά; Ωστόσο, θα μπορούσατε να υποστηρίξετε ότι το knocking της θύρας δεν προσθέτει πολλά (αν μη τι άλλο) σε ένα σωστά σκληρυμένο, ασφαλές σύστημα.

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

Εγκατάσταση knockd

Για να δείξουμε το knocking της θύρας, θα το χρησιμοποιήσουμε για τον έλεγχο της θύρας 22, που είναι η θύρα SSH. θα χρησιμοποιήσουμε ένα εργαλείο που ονομάζεται knockd. Χρησιμοποιήστε το apt-get για να εγκαταστήσετε αυτό το πακέτο στο σύστημά σας εάν χρησιμοποιείτε Ubuntu ή άλλη διανομή που βασίζεται στο Debian. Σε άλλες διανομές Linux, χρησιμοποιήστε το εργαλείο διαχείρισης πακέτων της διανομής σας Linux.

Πληκτρολογήστε τα εξής:

sudo apt-get install knockd

Μάλλον το έχετε ήδη τείχος προστασίας iptables εγκατεστημένο στο σύστημά σας, αλλά ίσως χρειαστεί να εγκαταστήσετε το πακέτο iptables-persistent. Διαχειρίζεται την αυτόματη φόρτωση των αποθηκευμένων κανόνων iptable.

Πληκτρολογήστε τα εξής για να το εγκαταστήσετε:

sudo apt-get install iptables-persistent

Όταν εμφανιστεί η οθόνη διαμόρφωσης IPV4, πατήστε το πλήκτρο διαστήματος για να αποδεχτείτε την επιλογή «Ναι».

Πατήστε το πλήκτρο διαστήματος για να αποδεχτείτε το

Πατήστε ξανά το πλήκτρο διαστήματος στην οθόνη διαμόρφωσης IPv6 για να αποδεχτείτε την επιλογή «Ναι» και να προχωρήσετε.

Πατήστε το πλήκτρο διαστήματος για να αποδεχτείτε το

Η ακόλουθη εντολή λέει στα iptables να επιτρέψουν τη συνέχιση των εγκατεστημένων και των συνεχιζόμενων συνδέσεων. Τώρα θα εκδώσουμε μια άλλη εντολή για να κλείσουμε τη θύρα SSH.

  Πώς να εγκαταστήσετε το ZFS σε Linux

Εάν κάποιος συνδέεται μέσω SSH όταν εκδώσουμε αυτήν την εντολή, δεν θέλουμε να αποκοπεί:

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

Αυτή η εντολή προσθέτει έναν κανόνα στο τείχος προστασίας, που λέει:

-Α: Προσθέστε τον κανόνα στον πίνακα κανόνων του τείχους προστασίας. Δηλαδή, προσθέστε το στο κάτω μέρος.
ΕΙΣΟΔΟΣ: Αυτός είναι ένας κανόνας για τις εισερχόμενες συνδέσεις.
-m conntrack: Οι κανόνες του τείχους προστασίας ενεργούν στην κίνηση δικτύου (πακέτα) που ταιριάζουν με τα κριτήρια του κανόνα. Η παράμετρος -m αναγκάζει τα iptables να χρησιμοποιούν επιπλέον μονάδες αντιστοίχισης πακέτων—σε αυτήν την περίπτωση, αυτό που ονομάζεται conntrack λειτουργεί με τις δυνατότητες παρακολούθησης σύνδεσης δικτύου του πυρήνα.
–cstate ESTABLISHED,RELATED: Καθορίζει τον τύπο σύνδεσης στον οποίο θα ισχύει ο κανόνας, δηλαδή ESTABLISHED και RELATED συνδέσεις. Μια εδραιωμένη σύνδεση είναι αυτή που βρίσκεται ήδη σε εξέλιξη. Μια σχετική σύνδεση είναι αυτή που πραγματοποιείται λόγω μιας ενέργειας από μια εγκατεστημένη σύνδεση. Ίσως κάποιος που είναι συνδεδεμένος θέλει να κατεβάσει ένα αρχείο. Αυτό μπορεί να συμβεί μέσω μιας νέας σύνδεσης που ξεκίνησε από τον κεντρικό υπολογιστή.
-j ΑΠΟΔΟΧΗ: Εάν η κίνηση ταιριάζει με τον κανόνα, μεταβείτε στον στόχο ΑΠΟΔΟΧΗ στο τείχος προστασίας. Με άλλα λόγια, η κίνηση γίνεται αποδεκτή και επιτρέπεται να διέρχεται από το τείχος προστασίας.

Τώρα μπορούμε να εκδώσουμε την εντολή για να κλείσουμε τη θύρα:

sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

Αυτή η εντολή προσθέτει έναν κανόνα στο τείχος προστασίας, που λέει:

-Α: Προσθέστε τον κανόνα στον πίνακα κανόνων του τείχους προστασίας, δηλαδή προσθέστε τον στο κάτω μέρος.
ΕΙΣΟΔΟΣ: Αυτός ο κανόνας αφορά τις εισερχόμενες συνδέσεις.
-p tcp: Αυτός ο κανόνας ισχύει για κίνηση που χρησιμοποιεί το πρωτόκολλο ελέγχου μετάδοσης.
–dport 22: Αυτός ο κανόνας ισχύει ειδικά για την κυκλοφορία TCP που στοχεύει τη θύρα 22 (τη θύρα SSH).
-j ΑΠΟΡΡΙΨΗ: Εάν η κίνηση ταιριάζει με τον κανόνα, μεταβείτε στον στόχο ΑΠΟΡΡΙΨΗ στο τείχος προστασίας. Έτσι, εάν η κίνηση απορριφθεί, δεν επιτρέπεται μέσω του τείχους προστασίας.

Πρέπει να ξεκινήσουμε το netfilter-persistent daemon. Μπορούμε να το κάνουμε με αυτήν την εντολή:

sudo systemctl start netfilter-persistent

Θέλουμε να περάσει το netfilter-persistent έναν κύκλο αποθήκευσης και επαναφόρτωσης, έτσι φορτώνει και ελέγχει τους κανόνες iptable.

Πληκτρολογήστε τις παρακάτω εντολές:

sudo netfilter-persistent save

sudo netfilter-persistent reload

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

Διαμόρφωση knockd

Υπάρχουν δύο αρχεία που επεξεργάζεστε για να διαμορφώσετε το knockd. Το πρώτο είναι το ακόλουθο αρχείο διαμόρφωσης knockd:

sudo gedit /etc/knockd.conf

Το πρόγραμμα επεξεργασίας gedit ανοίγει με φορτωμένο το αρχείο διαμόρφωσης knockd.

Θα επεξεργαστούμε αυτό το αρχείο για να ταιριάζει στις ανάγκες μας. Οι ενότητες που μας ενδιαφέρουν είναι “openSSH” και “closeSSH”. Οι ακόλουθες τέσσερις καταχωρήσεις υπάρχουν σε κάθε ενότητα:

sequence: Η ακολουθία των θυρών που πρέπει να έχει κάποιος πρόσβαση για να ανοίξει ή να κλείσει τη θύρα 22. Οι προεπιλεγμένες θύρες είναι 7000, 8000 και 9000 για να την ανοίξει και 9000, 8000 και 7000 για να την κλείσει. Μπορείτε να τις αλλάξετε ή να προσθέσετε περισσότερες θύρες στη λίστα. Για τους σκοπούς μας, θα μείνουμε με τις προεπιλογές.
seq_timeout: Η χρονική περίοδος εντός της οποίας κάποιος πρέπει να έχει πρόσβαση στις θύρες για να ενεργοποιήσει το άνοιγμα ή το κλείσιμο.
εντολή: Η εντολή που αποστέλλεται στο τείχος προστασίας iptables όταν ενεργοποιείται η ενέργεια ανοίγματος ή κλεισίματος. Αυτές οι εντολές είτε προσθέτουν έναν κανόνα στο τείχος προστασίας (για να ανοίξετε τη θύρα) είτε τον αφαιρέσετε (για να κλείσετε τη θύρα).
tcpflags: Ο τύπος του πακέτου που πρέπει να λάβει κάθε θύρα στη μυστική ακολουθία. Ένα πακέτο SYN (συγχρονισμός) είναι το πρώτο σε ένα TCP αίτημα σύνδεσης, που ονομάζεται α τριπλή χειραψία.

  Πώς να εγκαταστήσετε νέες εκδόσεις πυρήνα Linux στο OpenSUSE Leap

Η ενότητα “openSSH” μπορεί να διαβαστεί ως “πρέπει να υποβληθεί αίτημα σύνδεσης TCP στις θύρες 7000, 8000 και 9000—με αυτή τη σειρά και εντός 5 δευτερολέπτων—για να σταλεί η εντολή για το άνοιγμα της θύρας 22 στο τείχος προστασίας”.

Η ενότητα “closeSSH” μπορεί να διαβαστεί ως “πρέπει να υποβληθεί αίτημα σύνδεσης TCP στις θύρες 9000, 8000 και 7000—με αυτή τη σειρά και εντός 5 δευτερολέπτων—για να σταλεί η εντολή για το κλείσιμο της θύρας 22 στο τείχος προστασίας”.

Οι κανόνες του τείχους προστασίας

Οι καταχωρήσεις “εντολών” στις ενότητες openSSH και closeSSH παραμένουν οι ίδιες, εκτός από μία παράμετρο. Έτσι αποτελούνται:

-Α: Προσθέστε τον κανόνα στο κάτω μέρος της λίστας κανόνων του τείχους προστασίας (για την εντολή openSSH).
-D: Διαγράψτε την εντολή από τη λίστα κανόνων του τείχους προστασίας (για την εντολή closeSSH).
INPUT: Αυτός ο κανόνας αφορά την εισερχόμενη κίνηση δικτύου.
-s %IP%: Η διεύθυνση IP της συσκευής που ζητά σύνδεση.
-p: Πρωτόκολλο δικτύου. σε αυτήν την περίπτωση, είναι TCP.
–dport: Το λιμάνι προορισμού. στο παράδειγμά μας, είναι η θύρα 22.
-j ΑΠΟΔΟΧΗ: Μετάβαση στον στόχο αποδοχής εντός του τείχους προστασίας. Με άλλα λόγια, αφήστε το πακέτο να περάσει από τους υπόλοιπους κανόνες χωρίς να ενεργήσετε σε αυτό.

Το knockd αρχείο διαμόρφωσης επεξεργάζεται

Οι τροποποιήσεις που θα κάνουμε στο αρχείο επισημαίνονται με κόκκινο παρακάτω:

Επεκτείνουμε το “seq_timeout” στα 15 δευτερόλεπτα. Αυτό είναι γενναιόδωρο, αλλά αν κάποιος πυροδοτεί χειροκίνητα σε αιτήματα σύνδεσης, μπορεί να χρειαστεί τόσο πολύ χρόνο.

Στην ενότητα “openSSH” αλλάζουμε την επιλογή -A (append) στην εντολή σε -I (insert). Αυτή η εντολή εισάγει έναν νέο κανόνα τείχους προστασίας στην κορυφή της λίστας κανόνων τείχους προστασίας. Εάν αφήσετε την επιλογή -A, προσαρτά τη λίστα κανόνων του τείχους προστασίας και τη βάζει στο κάτω μέρος.

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

Η εντολή κλεισίματος αφαιρεί τον κανόνα που προστέθηκε από το openSSH από τους κανόνες του τείχους προστασίας. Η κίνηση SSH αντιμετωπίζεται για άλλη μια φορά από τον προϋπάρχοντα κανόνα «η θύρα 22 είναι κλειστή».

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

Οι χτυπημένες επεξεργασίες αρχείου ελέγχου

Το αρχείο ελέγχου knockd είναι εντελώς απλούστερο. Ωστόσο, προτού προχωρήσουμε και το επεξεργαστούμε, πρέπει να γνωρίζουμε το εσωτερικό όνομα για τη σύνδεσή μας στο δίκτυο. για να το βρείτε, πληκτρολογήστε αυτήν την εντολή:

ip addr

ο

Η σύνδεση που χρησιμοποιεί αυτό το μηχάνημα για την έρευνα αυτού του άρθρου ονομάζεται enp0s3. Σημειώστε το όνομα της σύνδεσής σας.

Η ακόλουθη εντολή επεξεργάζεται το αρχείο ελέγχου knockd:

sudo gedit /etc/default/knockd

Εδώ είναι το αρχείο knockd στο gedit.

Οι λίγες επεξεργασίες που πρέπει να κάνουμε επισημαίνονται με κόκκινο:

  Πώς να εγκαταστήσετε το Webtorrent σε Linux

Αλλάξαμε την καταχώριση “START_KNOCKD=” από 0 σε 1.

Καταργήσαμε επίσης τον κατακερματισμό # από ​​την αρχή της καταχώρισης “KNOCKD_OPTS=” και αντικαταστήσαμε το “eth1” με το όνομα της σύνδεσης δικτύου μας, enp0s3. Φυσικά, εάν η σύνδεση δικτύου σας είναι eth1, δεν θα την αλλάξετε.

Η απόδειξη είναι στην πουτίγκα

Ήρθε η ώρα να δούμε αν αυτό λειτουργεί. Θα ξεκινήσουμε το knockd daemon με αυτήν την εντολή:

sudo systemctrl start knockd

Τώρα, θα μεταβούμε σε άλλο μηχάνημα και θα προσπαθήσουμε να συνδεθούμε. Εγκαταστήσαμε το εργαλείο knockd και σε αυτόν τον υπολογιστή, όχι επειδή θέλουμε να ρυθμίσουμε το port knocking, αλλά επειδή το πακέτο knockd παρέχει ένα άλλο εργαλείο που ονομάζεται knock. Θα χρησιμοποιήσουμε αυτό το μηχάνημα για να πυροβολήσουμε στη μυστική ακολουθία μας και θα κάνουμε το χτύπημα για εμάς.

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

knock 192.168.4.24 7000 8000 9000 -d 500

Αυτό λέει στο knock για να στοχεύσει τον υπολογιστή στη διεύθυνση IP 192.168.4.24 και να ενεργοποιήσει ένα αίτημα σύνδεσης στις θύρες 7000, 8000 και 9000, με τη σειρά του, με -d (καθυστέρηση) 500 χιλιοστών του δευτερολέπτου μεταξύ τους.

Ένας χρήστης που ονομάζεται “dave” κάνει στη συνέχεια ένα αίτημα SSH στο 192.168.4.24:

ssh [email protected]

Η σύνδεσή του γίνεται αποδεκτή, εισάγει τον κωδικό πρόσβασής του και ξεκινά η απομακρυσμένη συνεδρία του. Η γραμμή εντολών του αλλάζει από [email protected] προς το [email protected] Για να αποσυνδεθεί από τον απομακρυσμένο υπολογιστή, πληκτρολογεί:

exit

Η γραμμή εντολών του επιστρέφει στον τοπικό του υπολογιστή. Χρησιμοποιεί το knock για άλλη μια φορά και αυτή τη φορά στοχεύει τις θύρες με αντίστροφη σειρά για να κλείσει τη θύρα SSH στον απομακρυσμένο υπολογιστή.

knock 192.168.4.24 9000 8000 7000 -d 500

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

Λοιπόν, πώς έμοιαζε αυτό από την άλλη πλευρά; Ο διαχειριστής συστήματος στον κεντρικό υπολογιστή που ανοίγει τη θύρα χρησιμοποιεί την ακόλουθη εντολή για να προβάλει νέες εγγραφές που φτάνουν στο αρχείο καταγραφής συστήματος:

tail -f /var/log/syslog

Βλέπετε τρεις καταχωρήσεις openSSH. Αυτά αυξάνονται καθώς κάθε θύρα στοχεύεται από το βοηθητικό πρόγραμμα remote knock.
Όταν πληρούνται και τα τρία στάδια της ακολουθίας ενεργοποίησης, μια καταχώρηση που λέει “ΑΝΟΙΞΕ ΣΟΥΣΑΜΙ,” καταγράφεται
Η εντολή για την εισαγωγή του κανόνα στη λίστα κανόνων iptables αποστέλλεται. Επιτρέπει την πρόσβαση μέσω SSH στη θύρα 22 από τη συγκεκριμένη διεύθυνση IP του υπολογιστή που έδωσε το σωστό μυστικό χτύπημα (192.168.4.23).
Ο χρήστης “dave” συνδέεται μόνο για λίγα δευτερόλεπτα και μετά αποσυνδέεται.
Βλέπετε τρεις εγγραφές closeSSH. Αυτά αυξάνονται καθώς κάθε θύρα στοχεύεται από το βοηθητικό πρόγραμμα remote knock – λέει στον κεντρικό υπολογιστή που χτυπά τη θύρα να κλείσει τη θύρα 22.
Αφού ενεργοποιηθούν και τα τρία στάδια, λαμβάνουμε ξανά το μήνυμα “OPEN SESAME”. Η εντολή αποστέλλεται στο τείχος προστασίας για να καταργηθεί ο κανόνας. (Γιατί να μην “ΚΛΕΙΣΕΙ ΣΟΥΣΑΜΙ” όταν κλείνει το λιμάνι; Ποιος ξέρει;)

Τώρα ο μόνος κανόνας στη λίστα κανόνων iptables σχετικά με τη θύρα 22 είναι αυτός που πληκτρολογήσαμε στην αρχή για να κλείσουμε αυτήν τη θύρα. Έτσι, η θύρα 22 είναι πλέον κλειστή ξανά.

Χτυπήστε το στο κεφάλι

Αυτό είναι το κόλπο του λιμανιού. Αντιμετωπίστε το ως εκτροπή και μην το κάνετε στον πραγματικό κόσμο. Ή, αν πρέπει, μην βασίζεστε σε αυτό ως τη μόνη σας μορφή ασφάλειας.