Ο διακομιστής ρυθμίζεται μία φορά και μετά ζει μόνος του. Έναν μήνα αργότερα κάποια πακέτα περιμένουν αναβάθμιση, το πιστοποιητικό έχει πλησιάσει σε τρεις εβδομάδες από τη λήξη, μετά την εγκατάσταση κάποιου άσχετου πράγματος εμφανίστηκε μια γραμμή παραπάνω στη διαμόρφωση του SSH, και το jail που υποτίθεται ότι παρακολουθεί τις συνδέσεις έχει σταματήσει χωρίς να το προσέξει κανείς. Τίποτα από αυτά δεν φωνάζει. Όλα απλώς παύουν σιωπηλά να ισχύουν.
Παρακάτω δώδεκα πράγματα που αξίζει να ελέγχονται τακτικά, με τις εντολές. Ο γύρος παίρνει ένα τέταρτο. Η σειρά πηγαίνει από αυτό μέσα από το οποίο μπαίνει κανείς προς αυτό που χαλάει από μόνο του.
SSH: πέντε γραμμές
Αυτό που πρέπει να κοιταχτεί δεν είναι το αρχείο αλλά η ενεργή διαμόρφωση: συντίθεται από το /etc/ssh/sshd_config, ολόκληρο τον κατάλογο sshd_config.d και τις προεπιλογές της μεταγλώττισης.
sudo sshd -T | grep -iE 'permitrootlogin|passwordauthentication|permitemptypasswords|maxauthtries|x11forwarding'
Αυτό που θέλουμε να δούμε: permitrootlogin no, passwordauthentication no, permitemptypasswords no, maxauthtries στο 3–4 και x11forwarding no. Τα τρία πρώτα είναι η πόρτα, τα δύο τελευταία οι μεντεσέδες της — ένα όριο προσπαθειών ανά σύνδεση και μια προώθηση γραφικών που σε διακομιστή δεν χρησιμεύει σε τίποτα.
Δύο επιφυλάξεις, και οι δύο εύκολοι τρόποι να κλειδωθείτε απ’ έξω. Πρώτον: μην απενεργοποιείτε τη σύνδεση με κωδικό και τη σύνδεση ως root προτού επιβεβαιώσετε ότι το κλειδί σας λειτουργεί — σε ξεχωριστή συνεδρία, χωρίς να κλείσετε την τρέχουσα. Αν το διαβάζετε αυτό συνδεδεμένοι ως root με κωδικό, αυτές ακριβώς οι δύο γραμμές θα κλειδώσουν απ’ έξω εσάς.
Δεύτερον: η σειρά των αρχείων. Το OpenSSH παίρνει την τιμή μιας παραμέτρου που θα συναντήσει πρώτη, και τα αρχεία του sshd_config.d διαβάζονται αλφαβητικά. Οι εικόνες cloud αφήνουν εκεί συνήθως ένα 50-cloud-init.conf, το οποίο θα υπερισχύσει του δικού σας αρχείου αν το ονομάσατε κάπως σαν 90-hardening.conf. Οι δικές σας ρυθμίσεις πάνε κάτω από μικρότερο αριθμό — 00- ή 10-. Και το αποτέλεσμα ελέγχεται με sshd -T, όχι διαβάζοντας το αρχείο.
Τείχος προστασίας: ένας έλεγχος
sudo ufw status verbose
Εδώ αξίζει να θυμάστε ότι αυτή η έξοδος δείχνει προθέσεις, όχι αποτελέσματα. Ένας κανόνας μπορεί να βρίσκεται στη λίστα και να μην κλείνει τίποτα: το ίδιο το UFW είναι απενεργοποιημένο, τη θύρα την εξυπηρετεί κάτι που δημοσίευσε το Docker (γράφει δικούς του κανόνες στο iptables κάτω από το UFW), ή η κίνηση φτάνει στον διακομιστή από άλλον δρόμο. Αξίζει λοιπόν να αντιπαραβάλλετε τη λίστα κανόνων με αυτό που πραγματικά ακούει προς τα έξω:
sudo ss -tulpn | grep -v '127.0.0.1\|::1'
fail2ban: δύο έλεγχοι
Δεν αρκεί να τρέχει η υπηρεσία — χρειάζεται και ένα jail που δουλεύει για το SSH.
sudo fail2ban-client status
sudo fail2ban-client status sshd
Η συχνότερη ενόχληση εδώ είναι ένα βουβό jail. Σε Debian 12 και πρόσφατα Ubuntu το /var/log/auth.log μπορεί να μην υπάρχει καθόλου: το rsyslog δεν είναι εγκατεστημένο και οι εγγραφές ζουν μόνο στο journald. Ένα jail με το εργοστασιακό logpath τότε ξεκινά, δηλώνεται ενεργό και δεν αποκλείει ποτέ κανέναν. Θεραπεύεται στρέφοντάς το στο ημερολόγιο του systemd:
printf '[sshd]\nenabled = true\nbackend = systemd\n' | sudo tee /etc/fail2ban/jail.d/sshd-systemd.local
sudo systemctl restart fail2ban
Το σημάδι που το αποκαλύπτει χωρίς ψάξιμο στις διαμορφώσεις: στο fail2ban-client status sshd τα «Currently failed» και «Total failed» μένουν στο μηδέν ενώ το ημερολόγιο περιέχει ολοφάνερα αποτυχημένες συνδέσεις.
Ενημερώσεις: τρεις έλεγχοι
Χωριστά: πόσα πακέτα περιμένουν συνολικά, πόσα από αυτά αφορούν την ασφάλεια και αν το σύστημα ζητά επανεκκίνηση μετά από ενημέρωση πυρήνα.
sudo apt update
apt list --upgradable 2>/dev/null | grep -c -- '-security'
ls /var/run/reboot-required 2>/dev/null && echo 'απαιτείται επανεκκίνηση'
Ο τρίτος έλεγχος είναι αν οι αυτόματες ενημερώσεις ασφαλείας είναι ενεργές, ώστε οι δύο πρώτοι να μην γίνουν μηνιαίο τελετουργικό:
systemctl status unattended-upgrades --no-pager
cat /etc/apt/apt.conf.d/20auto-upgrades
Σε αυτό το αρχείο πρέπει να υπάρχει ένα 1 και στις δύο γραμμές. Αν λείπει το πακέτο: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades.
Πιστοποιητικά: ένας έλεγχος
Ένα πιστοποιητικό Let's Encrypt ζει ενενήντα ημέρες, και η ανανέωση δουλεύει μόνη της ακριβώς μέχρι την ημέρα που σταματά. Αυτό που πρέπει να κοιταχτεί δεν είναι ο πίνακας του καταχωρητή αλλά αυτό που ο διακομιστής πραγματικά σερβίρει:
echo | openssl s_client -connect localhost:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
sudo certbot renew --dry-run
Η πρώτη εντολή δίνει την ημερομηνία λήξης του πιστοποιητικού που σερβίρεται για εκείνο το όνομα· η δεύτερη επιβεβαιώνει ότι η ανανέωση θα περάσει, χωρίς αναμονή της πραγματικής προθεσμίας. Αξίζει να περάσετε όλα τα ονόματα που εξυπηρετεί ο διακομιστής, όχι μόνο τον κύριο τομέα: αυτό που ξεχνιέται είναι κατά κανόνα ο υποτομέας που προστέθηκε αργότερα.
Δίσκος: ένας έλεγχος
df -h
df -i
Δύο εντολές, επειδή ο χώρος και οι εγγραφές αρχείων εξαντλούνται ανεξάρτητα η μία από την άλλη. Στους περισσότερους διακομιστές η δεύτερη χτυπά πρώτη στο ταβάνι — εκατομμύρια μικρά αρχεία σε συνεδρίες PHP ή στην κρυφή μνήμη της εφαρμογής δίνουν IUse% στο 100 με ελεύθερα γιγαμπάιτ. Για τις δύο περιπτώσεις έχουμε χωριστό κείμενο.
Τι δεν πάει καλά με αυτή τη λίστα
Η λίστα είναι σωστή, αλλά έχει μια ιδιότητα: απαιτεί να τη θυμάται κάποιος. Ένα τέταρτο την εβδομάδα δεν είναι πολύ, όσο ο διακομιστής είναι ένας και όσο υπάρχει αφορμή. Μετά από δύο ήρεμους μήνες ο γύρος παραλείπεται, και ότι το jail σταμάτησε το μαθαίνει κανείς από ξένα ημερολόγια.
Γι’ αυτό συγκεντρώσαμε ακριβώς αυτούς τους δώδεκα ελέγχους σε έναν ξεχωριστό δωρεάν πίνακα — Arcivéo FREE. Εγκαθίσταται με μία εντολή, τρέχει στον δικό σας διακομιστή, δεν μας στέλνει τίποτα και δεν χρειάζεται εγγραφή. Ένας συλλέκτης τρέχει από το cron κάθε πέντε λεπτά και γράφει τα ίδια σε μια τοπική βάση: συνδέσεις SSH και απορριφθείσες συνδέσεις, την κατάσταση του UFW και του fail2ban, εκκρεμείς ενημερώσεις ασφαλείας, τις προθεσμίες των πιστοποιητικών, τον χώρο στον δίσκο. Το ιστορικό καλύπτει επτά ημέρες, η διεπαφή υπάρχει σε 34 γλώσσες. Η τιμή είναι μηδέν, και σε διακομιστή εργασίας: η άδεια επιτρέπει την εγκατάσταση του πίνακα σε δικά σας μηχανήματα, συμπεριλαμβανομένων των εταιρικών, και δεν επιτρέπει τη μεταπώλησή του ούτε τη λειτουργία του ως υπηρεσία για διακομιστές τρίτων.
Η στοίβα της δωρεάν έκδοσης είναι λιτή: εγκαθιστά και ενεργοποιεί το UFW και το fail2ban, και από εκεί και πέρα δείχνει την κατάσταση. Το ModSecurity, η Suricata, το AIDE και τα υπόλοιπα αρθρώματα δεν υπάρχουν σε αυτήν, αυτά ανήκουν στην επί πληρωμή. Αλλά για να πάψετε να κουβαλάτε τον εβδομαδιαίο γύρο στο μυαλό σας, αρκεί. Πώς φαίνονται τα ίδια δεδομένα στον πλήρη πίνακα το δείχνουν οι σελίδες επίδειξης παρακάτω.