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

Τι μετρά στην πραγματικότητα κάθε επιλογή

Το MaxSessions περιορίζει τον αριθμό των ανοιχτών συνεδριών που μεταφέρει μία ταυτοποιημένη σύνδεση δικτύου. Συνεδρία εδώ σημαίνει shell, αίτημα exec, υποσύστημα όπως SFTP ή παρόμοιο κανάλι πολυπλεγμένο μέσα σε ένα transport SSH. Μια δεύτερη κλήση ssh ανοίγει ένα δεύτερο transport, ταυτοποιείται ξανά και παίρνει τη δική της άδεια. Ο αριθμός συνεδριών της πρώτης σύνδεσης είναι άσχετος γι’ αυτό.

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

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

Πού το MaxSessions παύει να είναι ποσόστωση

Ένα μπλοκ Match User αλλάζει ποιες τιμές διαμόρφωσης ισχύουν για αυτόν τον χρήστη, άρα είναι το φυσικό σημείο για αυστηρότερο MaxSessions σε λογαριασμό υπηρεσίας. Αυτό που δεν μπορεί να κάνει είναι να συγκεντρώσει ανά σύνδεση, γιατί η επιλογή αξιολογείται ανά transport. Δύο transports παίρνουν το καθένα το δικό του όριο, και ο χρήστης καταλήγει με το διπλάσιο από ό,τι επιτρέπει το μπλοκ.

Η προώθηση είναι μια ξεχωριστή έκπληξη. Η προώθηση TCP δεν χρειάζεται κανάλι συνεδρίας, άρα το MaxSessions 0 μπορεί να απαγορεύσει shells και υποσυστήματα ενώ ακόμη επιτρέπει σήραγγες -L και -R. Μια υπηρεσία που μόνο προωθεί και θεωρεί τον αριθμό συνεδριών ποσόστωση σήραγγάς της δεν μετρά τίποτα απολύτως. Αυτή η συμπεριφορά τεκμηριώνεται στην αναφορά διαμόρφωσης διακομιστή OpenSSH, και αξίζει να τη διαβάσετε πριν σχεδιάσετε γύρω από ένα όνομα επιλογής.

Εκτυπώστε την ενεργή διαμόρφωση αντί για το αρχείο που νομίζετε ότι έχει φορτωθεί. Οι ενσωματώσεις και οι κατάλογοι drop-in συχνά σημαίνουν ότι η τιμή που ισχύει δεν είναι η τιμή που επεξεργαστήκατε.

Το MaxStartups προστατεύει τον daemon, όχι τον συνδρομητή

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

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

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

Μια θέση ανά χρήστη χρειάζεται κοινή κατάσταση

Μια γνήσια πολιτική ενός ενεργού transport χρειάζεται κράτηση που φυλάσσεται κάπου έξω από το sshd. Το βήμα αποδοχής πρέπει να διεκδικεί ατομικά τη θέση του λογαριασμού, να την απελευθερώνει όταν κλείνει η σύνδεση, να τη λήγει όταν ένας πελάτης εξαφανίζεται χωρίς να κλείσει, και να αποφασίζει αν μια νέα προσπάθεια απορρίπτεται ή αντικαθιστά την παλιά. Αυτή η τελευταία απόφαση είναι απόφαση προϊόντος, όχι τεχνική λεπτομέρεια, γιατί η αντικατάσταση μιας ενεργής σήραγγας αποσυνδέει κάποιον.

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

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

Ελέγξτε την πολιτική με δύο πραγματικές συνδέσεις

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

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

sshd -T | grep -iE "maxsessions|maxstartups|allowtcpforwarding|permitopen"
ss -tn state established '( sport = :22 )' | head
ssh -N -L 8080:127.0.0.1:80 [email protected]

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

Σχετικά άρθρα