Ένας server στο Internet δέχεται τις πρώτες προσπάθειες σύνδεσης μέσα σε λεπτά από τη στιγμή που αποκτά δημόσια IP.
Το hardening δεν είναι μια ρύθμιση, είναι στρώσεις: μείωση της επιφάνειας επίθεσης, δυσκολία στην εκμετάλλευση, και ορατότητα όταν κάτι συμβεί. Ακολουθεί η βασική λίστα που εφαρμόζω σε servers Debian και Ubuntu, με τις ρυθμίσεις και το σκεπτικό τους.
Ένας κανόνας πριν από όλα: όταν αλλάζετε SSH ή firewall, κρατάτε ανοιχτή μια δεύτερη συνεδρία μέχρι να επιβεβαιώσετε ότι μπορείτε να συνδεθείτε ξανά, και έχετε πάντα πρόσβαση από την κονσόλα του παρόχου.
SSH: μόνο κλειδιά, ελάχιστη επιφάνεια
Κλειδιά Ed25519, ή ακόμη καλύτερα FIDO2 (ed25519-sk), όπου το ιδιωτικό κλειδί δεν φεύγει ποτέ από το hardware token. Στο /etc/ssh/sshd_config.d/10-hardening.conf:
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
AuthenticationMethods publickey
MaxAuthTries 3
LoginGraceTime 20
AllowUsers deploy admin
X11Forwarding no
AllowAgentForwarding noΕλέγξτε τη σύνταξη με sshd -t πριν κάνετε reload. Η αλλαγή της θύρας του SSH μειώνει τον «θόρυβο» στα logs, αλλά δεν είναι μέτρο ασφαλείας από μόνη της.
nftables: deny by default
Ένα ελάχιστο ruleset που απορρίπτει ό,τι δεν επιτρέπεται ρητά, με περιορισμό ρυθμού στις νέες συνδέσεις SSH:
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
ct state established,related accept
ct state invalid drop
meta l4proto { icmp, ipv6-icmp } accept
tcp dport 22 ct state new limit rate 10/minute accept
tcp dport { 80, 443 } accept
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
Για την προστασία από brute force σε επίπεδο εφαρμογής, το fail2ban παραμένει αξιόπιστο, ενώ το CrowdSec προσθέτει κοινόχρηστη πληροφόρηση για κακόβουλες IP.
Σημείωση για servers με Plesk ή άλλο control panel: το panel συχνά διαχειρίζεται το firewall μόνο του (π.χ. το Plesk Firewall). Μην προσθέτετε χειροκίνητα rulesets που θα συγκρουστούν μαζί του· εφαρμόστε την ίδια λογική μέσα από το panel.
Kernel: sysctl
Στο /etc/sysctl.d/99-hardening.conf, και εφαρμογή με sysctl –system:
# Λιγότερες πληροφορίες για επιτιθέμενους
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
# Περιορισμός του ptrace σε γονικές διεργασίες
kernel.yama.ptrace_scope = 1
# Χωρίς eBPF για μη προνομιούχους χρήστες
kernel.unprivileged_bpf_disabled = 1
# Προστασία από ορισμένες επιθέσεις μέσω links
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
# Δίκτυο: όχι redirects, έλεγχος πηγής, SYN cookies
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
Δοκιμάστε πρώτα σε staging: το ptrace_scope μπορεί να επηρεάσει debuggers, και το rp_filter μπορεί να επηρεάσει servers με ασύμμετρη δρομολόγηση.
auditd: ορατότητα
Το hardening μειώνει την πιθανότητα παραβίασης. Το auditing σας λέει αν συνέβη.
Μερικοί βασικοί κανόνες, στο /etc/audit/rules.d/hardening.rules:
# Αλλαγές σε λογαριασμούς και δικαιώματα
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k scope
-w /etc/sudoers.d/ -p wa -k scope
# Αλλαγές στη ρύθμιση του SSH
-w /etc/ssh/sshd_config -p wa -k sshd
# Κάθε εντολή που εκτελείται με δικαιώματα root
-a always,exit -F arch=b64 -S execve -F euid=0 -k rootcmdΑναζήτηση με ausearch -k identity, συνόψεις με aureport. Ο τελευταίος κανόνας παράγει πολλές εγγραφές σε φορτωμένους servers: προσαρμόστε τον, και στείλτε τα logs σε κεντρικό σύστημα, ώστε ένας εισβολέας να μην μπορεί να τα σβήσει τοπικά.
Ενημερώσεις και έλεγχος
• Αυτόματες ενημερώσεις ασφαλείας με το unattended-upgrades, και needrestart για να ξέρετε ποιες υπηρεσίες τρέχουν ακόμη παλιές βιβλιοθήκες μετά από μια ενημέρωση.
• Live patching του kernel, όπου υπάρχει, για να μην περιμένετε το επόμενο προγραμματισμένο reboot.
• Lynis για περιοδικό έλεγχο: lynis audit system δίνει μια λίστα ευρημάτων και προτάσεων, και ένα «hardening index» για να παρακολουθείτε την πρόοδο.
Για συζήτηση στο /forum
1. Χρησιμοποιείτε κλειδιά FIDO2 για SSH σε production; Πώς λύσατε το θέμα των εφεδρικών κλειδιών;
2. fail2ban ή CrowdSec, και γιατί; Έχετε δει πραγματική διαφορά από την κοινόχρηστη πληροφόρηση του CrowdSec;
3. Πού στέλνετε τα logs του auditd, και πώς αποφεύγετε να πνιγείτε στον όγκο τους;






0 σχόλια
iGuRu.gr