Τίποτα στο fail2ban δεν απορρίπτει πακέτο από μόνο του: καλεί μια ενέργεια, και αυτή η ενέργεια ονομάζει πρωτόκολλο και θύρα. Όταν το jail αναφέρει ban ενώ ο δαίμονας συνεχίζει να δέχεται συνδέσεις, το ban είναι συνήθως πραγματικό και στενότερο από ό,τι υπονοεί το log. Ένας πελάτης που επανασυνδέεται μέσω της άλλης μεταφοράς δεν συναντά ποτέ τον κανόνα που εγκαταστάθηκε. Συγκρίνετε τι εγκατέστησε η ενέργεια με το τι ακούει ο δαίμονας πριν αλλάξετε οτιδήποτε, γιατί η απόδειξη βρίσκεται στην αλυσίδα του τείχους προστασίας που έγραψε η ενέργεια, όχι στη λίστα του jail.

Διαβάστε την αλυσίδα, όχι τη σύνοψη του jail

Το fail2ban εισάγει τη δική του αλυσίδα πριν από την αλυσίδα της υπηρεσίας, οπότε μια λίστα μετρητών δείχνει ακριβώς τι υπάρχει. Μια αλυσίδα με το όνομα του jail, που περιέχει έναν κανόνα του οποίου η στήλη πρωτοκόλλου γράφει udp, εξηγεί πλήρως τις συνδέσεις TCP που συνεχίζουν να φτάνουν. Μόνο πακέτα UDP από την απαγορευμένη πηγή απορρίπτονται. Η υπηρεσία έχει ακροατή TCP, και τίποτα σε εκείνη την αλυσίδα δεν τον αγγίζει.

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

Η ενέργεια ονομάζει ένα πρωτόκολλο, και εκεί σπάει

Κάθε banaction είναι ένα πρότυπο εντολής τείχους προστασίας, και το πρωτόκολλο βρίσκεται σε ένα από τα placeholders του. Η στενότητα είναι σκόπιμη, αφού ένα jail ιστού και ένα jail DNS δεν έχουν καμία δουλειά να μπλοκάρουν ίδιες θύρες. Γίνεται παγίδα όταν η υπηρεσία ακούει σε περισσότερες από μία μεταφορές, κάτι που οι δαίμονες VPN κάνουν συστηματικά. Το φίλτρο μπορεί να παρακολουθεί αποτυχημένες συνδέσεις και από τις δύο μεταφορές, ενώ η ενέργεια καλύπτει μία.

Οι εγκαταστάσεις SoftEther και OpenVPN ακούν συνήθως σε UDP και TCP ταυτόχρονα, και επειδή η γραμμή του log φαίνεται ίδια και στις δύο περιπτώσεις, το φίλτρο παρακολουθεί και τις δύο. Η ασυμμετρία δεν εμφανίζεται ποτέ στην αναφορά του ίδιου του jail. Το fail2ban μέτρησε σωστά τις αποτυχίες και μετά εγκατέστησε έναν κανόνα που ισχύει για το μισό της κίνησης από την οποία έφτασαν αυτές οι αποτυχίες.

Κάντε το ban να καλύπτει και τις δύο μεταφορές

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

action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
         %(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]

Μην προσπαθήσετε να το συντομεύσετε με protocol = all. Το προεπιλεγμένο banaction είναι ενέργεια multiport, και επεκτείνεται σε -p <protocol> -m multiport --dports <port>· χωρίς πρωτόκολλο L4 δεν υπάρχει τίποτα για να ελέγξει η αντιστοίχιση θύρας, οπότε το iptables απορρίπτει τον κανόνα ενώ το jail εξακολουθεί να αναφέρει επιτυχημένο ban. Μια ενέργεια όλων των θυρών όπως το iptables-allports ή το nftables-allports δέχεται μία καταχώριση, αλλά απαγορεύει κάθε θύρα σε εκείνη την πηγή, που είναι διαφορετική απόφαση και απαιτεί δική της αιτιολόγηση. Αφήστε το protocol σε tcp ή udp και δεχτείτε τις δύο καταχωρίσεις.

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

iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp

Κάθε αλυσίδα πρέπει να παραθέτει έναν κανόνα, με -p tcp στην πρώτη και -p udp στη δεύτερη, και οι δύο να ονομάζουν τη διεύθυνση που απαγορεύτηκε. Στη συνέχεια επιβεβαιώστε ότι η ίδια διεύθυνση απορρίπτεται και στις δύο μεταφορές. Ένα ban που δεν είδατε στην αλυσίδα είναι ελπίδα, και η επόμενη αναφορά του ίδιου συμπτώματος θα κοστίσει ξανά την ίδια ώρα.

Τι εξακολουθεί να χάνει ένα ban, και η επόμενη περίπτωση

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

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

Κρατήστε την εντολή επαναφόρτωσης και την παράθεση της αλυσίδας στο runbook δίπλα στο jail. Το επόμενο άτομο θα χρειαστεί και τα δύο, και η σύνοψη του jail δεν θα του πει τίποτα από τα δύο.

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