Κανόνες εισόδου SSH και VPN: τι ελέγχει πραγματικά η λίστα επιτρεπόμενων
Ακολουθήστε μία σύνδεση από τον πελάτη στον διακομιστή: ποιο άγκιστρο διασχίζει, γιατί το κόλλημα και η άρνηση σημαίνουν διαφορετικούς κανόνες και γιατί η απόρριψη δεν είναι ποτέ πολιτική.
Συνδεθείτε μία φορά πριν αλλάξετε έναν κανόνα και σημειώστε αν ο πελάτης κολλάει ή απορρίπτεται αμέσως. Αυτή η μία διαφορά σας λέει ποια απόφαση έριξε το πακέτο και εξοικονομεί μία ώρα ανάγνωσης αρχείων πολιτικής. Η υπόλοιπη διαδρομή είναι σύντομη: το πακέτο διασχίζει ένα άγκιστρο, ταιριάζει με έναν κανόνα και είτε φτάνει σε έναν ακροατή είτε όχι. Η λίστα επιτρεπόμενων είναι απλώς λογιστική γύρω από αυτά τα τρία γεγονότα.
Ακολουθήστε μία απόπειρα SSH μέχρι το άγκιστρο εισόδου
Ένας πελάτης στέλνει ένα SYN στη διεύθυνση του διακομιστή στη θύρα 22, και ο πυρήνας αποφασίζει αν αυτό το πακέτο προορίζεται για τοπική υπηρεσία. Αν ναι, εκτελείται η διαδρομή εισόδου και το σύνολο κανόνων είτε δέχεται το πακέτο είτε το απορρίπτει. Η σιωπή σημαίνει ότι το SYN πέθανε πριν το δει ο ακροατής, ενώ η γρήγορη άρνηση σημαίνει ότι κάτι απάντησε με επαναφορά. Είναι διαφορετικές ετυμηγορίες από διαφορετικούς κανόνες, και οι δύο είναι θεμιτά αποτελέσματα.
Επιβεβαιώστε μετά τον ακροατή, γιατί κανένας κανόνας δεν σώζει μια υπηρεσία που δεν υπάρχει. Εκτελέστε ss -ltnp και ελέγξτε ότι κάτι είναι δεσμευμένο στη θύρα και στην οικογένεια διευθύνσεων που περιμένετε, και μετά διαβάστε ssh -v στον πελάτη για να δείτε πού σταματά.
Η προώθηση είναι ξεχωριστή απόφαση
Σε έναν διακομιστή VPN το πιο ενδιαφέρον άγκιστρο είναι το forward, γιατί η κίνηση του πελάτη δρομολογείται μέσα από το μηχάνημα αντί να παραδίδεται σε αυτό. Ένας διακομιστής που τρέχει μόνο τον δικό του πελάτη VPN χρειάζεται πολύ μικρότερο σύνολο κανόνων από έναν που προωθεί πακέτα άλλων. Η ανάμιξη των δύο σχεδίων σε ένα μηχάνημα παράγει κανόνες που φαίνονται σωστοί και δεν περνούν τίποτα.
Γράψτε την εσωτερική πολιτική ως ξεχωριστό ερώτημα: ποιες διευθύνσεις πελατών επιτρέπεται να φτάσουν σε ποιους προορισμούς μέσα από τη σήραγγα. Κρατήστε τη διαχειριστική διαδρομή, όπως το SSH, στη διαδρομή εισόδου με δικό της περιορισμό πηγής. Ένας επιτρεπτικός κανόνας forward που προστέθηκε κατά τη δοκιμή είναι το κλασικό ελάττωμα που επιβιώνει της δοκιμής, γι’ αυτό μετά από μια αλλαγή εξετάστε όλο το σύνολο κανόνων και όχι τη γραμμή που επεξεργαστήκατε. Το άνοιγμα του ακροατή της σήραγγας δεν είναι άδεια για κάθε συνδεδεμένο πελάτη να διαχειρίζεται τον διακομιστή.
Το drop και το reject είναι ενέργειες, όχι πολιτικές
Η πολιτική μιας βασικής αλυσίδας δέχεται ή απορρίπτει, και αυτή είναι ολόκληρη η λίστα επιλογών, όπως αναφέρει η αναφορά του nftables. Η απόρριψη υπάρχει ως ενέργεια κανόνα με επιλεγμένη απάντηση, γι’ αυτό η γραφή της ως πολιτικής αποτυγχάνει τόσο στο nftables όσο και στο iptables. Στην πράξη το drop δεν δίνει στον πελάτη καμία πληροφορία, ενώ το reject του δίνει ένα σφάλμα με το οποίο μπορεί να δουλέψει.
table inet admin {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
ip saddr 203.0.113.0/28 tcp dport 22 accept
udp dport 51820 accept
icmp type { destination-unreachable, time-exceeded } accept
}
}
Διαβάστε αυτό το σκίτσο ως το σχήμα μιας απόφασης και όχι ως αρχείο για επικόλληση, γιατί τα εύρη διευθύνσεων είναι παραδείγματα. Ένα ρητό reject στη θύρα SSH κάνει έναν μη εξουσιοδοτημένο πελάτη να αποτύχει σε ένα δευτερόλεπτο αντί να περιμένει ένα όριο χρόνου, κάτι που συντομεύει τη δική σας αποσφαλμάτωση. Η σιωπή αποθαρρύνει την τυχαία σάρωση και δεν λέει απολύτως τίποτα σε έναν εξουσιοδοτημένο χρήστη. Διαλέξτε ανά υπηρεσία και γράψτε το γιατί, γιατί αλλιώς ο επόμενος άνθρωπος θα το γυρίσει πίσω.
Κρατήστε την κίνηση ελέγχου που πραγματικά χρειάζεστε
Ο αποκλεισμός όλου του ICMP είναι μια δημοφιλής προεπιλογή που σπάει την ανακάλυψη MTU της διαδρομής, και το σύμπτωμα είναι μια σύνδεση που εγκαθίσταται και μετά κολλάει σε μεγαλύτερα πακέτα. Η ανακάλυψη γειτόνων στο IPv6 εξαρτάται από δικούς της τύπους ICMPv6, και η απόρριψή τους σπάει τον σύνδεσμο πριν ερωτηθεί οποιοσδήποτε κανόνας TCP. Και τα δύο ανήκουν στη λίστα επιτρεπόμενων ως ονομασμένες εξαρτήσεις και όχι ως γενικές άδειες. Μια πολιτική που σπάει βουβά την ανακάλυψη είναι χειρότερη από μία που δέχεται λίγη διαγνωστική κίνηση.
Να επιτρέπετε τις καταστάσεις established και related για συνδέσεις που ξεκινήσατε εσείς, και αφήστε τη μηχανή κατάστασης να χειριστεί τις απαντήσεις. Μετά επιβεβαιώστε ότι η διαδρομή απάντησης δεν είναι φραγμένη πιο έξω, γιατί ένας περιορισμός μόνο για εξερχόμενη κίνηση πιο πάνω παράγει το ίδιο όριο χρόνου που θα καταλογίζατε στον διακομιστή.
Αποδείξτε την ανάκτηση πριν αποσύρετε την παλιά διαδρομή
Κρατήστε ανοιχτή μια συνεδρία κονσόλας, εφαρμόστε την αλλαγή και ανοίξτε μια εντελώς νέα σύνδεση διαχείρισης από άλλο τερματικό. Μια υπάρχουσα συνεδρία δεν αποδεικνύει τίποτα, γιατί μπορεί να επιβιώσει ενός κανόνα που μπλοκάρει κάθε νέα σύνδεση, κάτι που την κάνει το πιο πειστικό ψευδώς θετικό στη δουλειά με τείχη προστασίας. Αν ένα σύστημα παρακολούθησης ελέγχει τον διακομιστή, προσθέστε τη διεύθυνση πηγής του πριν την αλλαγή και όχι μετά την πρώτη ειδοποίηση. Μετά δοκιμάστε ένα μεγάλο και ένα μικρό πακέτο για να αποδείξετε ότι η ανακάλυψη ακόμη λειτουργεί.
Για μια υπηρεσία VPN επαναλάβετε από πελάτη που δεν συνδέθηκε ποτέ, γιατί μια συνεδρία που συνεχίστηκε μπορεί να επαναχρησιμοποιήσει κατάσταση που μια νέα πρέπει να διαπραγματευτεί. Καταγράψτε το ακριβές σύνολο κανόνων που πέρασε, με άθροισμα ελέγχου ή αντίγραφο, ώστε μια μεταγενέστερη αλλαγή να συγκρίνεται αντί να μαντεύεται. Συντονιστείτε με όποιον κατέχει τη σειρά των κανόνων, γιατί ένας προηγούμενος κανόνας κερδίζει βουβά αυτόν που προσθέσατε.