news

Hardening Linux server: SSH, nftables, sysctl και auditd

Μάθετε πώς να εφαρμόσετε server hardening. Ρυθμίσεις για SSH κλειδιά, nftables, sysctl parameters και auditd για μέγιστη ασφάλεια.

terminal 3

Ένας server στο Internet δέχεται τις πρώτες προσπάθειες σύνδεσης μέσα σε λεπτά από τη στιγμή που αποκτά δημόσια IP.

Το hardening δεν είναι μια ρύθμιση, είναι στρώσεις: μείωση της επιφάνειας επίθεσης, δυσκολία στην εκμετάλλευση, και ορατότητα όταν κάτι συμβεί. Ακολουθεί η βασική λίστα που εφαρμόζω σε servers Debian και Ubuntu, με τις ρυθμίσεις και το σκεπτικό τους.

Ένας κανόνας πριν από όλα: όταν αλλάζετε SSH ή firewall, κρατάτε ανοιχτή μια δεύτερη συνεδρία μέχρι να επιβεβαιώσετε ότι μπορείτε να συνδεθείτε ξανά, και έχετε πάντα πρόσβαση από την κονσόλα του παρόχου.

SSH: μόνο κλειδιά, ελάχιστη επιφάνεια

Κλειδιά Ed25519, ή ακόμη καλύτερα FIDO2 (ed25519-sk), όπου το ιδιωτικό κλειδί δεν φεύγει ποτέ από το hardware token. Στο /etc/ssh/sshd_config.d/10-hardening.conf:

Code
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:

Code
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:

Code
# Λιγότερες πληροφορίες για επιτιθέμενους
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:

Code
# Αλλαγές σε λογαριασμούς και δικαιώματα
-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
Μέλος του forum; Συμμετέχετε στη συζήτηση στο forum. Συζήτηση στο forum →

Συμμετέχετε στη συζήτηση

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

Το μήνυμα σας δεν θα δημοσιευτεί εάν:

  1. Περιέχει υβριστικά, συκοφαντικά, ρατσιστικά, προσβλητικά ή ανάρμοστα σχόλια.
  2. Προκαλεί βλάβη σε ανηλίκους.
  3. Παρενοχλεί την ιδιωτική ζωή και τα ατομικά και κοινωνικά δικαιώματα άλλων χρηστών.
  4. Διαφημίζει προϊόντα ή υπηρεσίες ή διαδικτυακούς τόπους.
  5. Περιέχει προσωπικές πληροφορίες (διεύθυνση, τηλέφωνο κλπ).