Tropic Host

Ασφάλεια VPS από την αρχή: κλειδιά SSH, firewall και Fail2ban

7 ελάχιστη ανάγνωση
Tropic
Ασφάλεια VPS από την αρχή: κλειδιά SSH, firewall και Fail2ban

Language: el

Ασφάλεια VPS από την αρχή: κλειδιά SSH, firewall και Fail2ban

Ένα νέο VPS δεν πρέπει να θεωρείται ασφαλές αμέσως μετά την εγκατάσταση του Ubuntu. Πριν ρυθμίσετε την πρόσβαση, ο διακομιστής είναι ήδη ορατός σε scanners: δοκιμάζουν κωδικούς SSH, αναζητούν εκτεθειμένα panels διαχείρισης και ελέγχουν συνηθισμένες ευπάθειες. Σε αυτόν τον οδηγό θα καλύψουμε τα βασικά βήματα για την ασφάλεια ενός VPS από την αρχή: δημιουργία ξεχωριστού χρήστη, ρύθμιση ελέγχου ταυτότητας με κλειδί SSH, περιορισμός θυρών δικτύου με UFW και προσθήκη του Fail2ban. Όλα τα βήματα λειτουργούν σε Ubuntu 22.04 και 24.04 όταν οι εντολές εκτελούνται από χρήστη με δικαιώματα sudo.

Πριν ξεκινήσετε: καταγράψτε τις θύρες

Μην ανοίγετε θύρες «για κάθε ενδεχόμενο». Ένας τυπικός web server χρειάζεται:

  • 22/tcp — SSH· ιδανικά περιορίστε το με βάση IP ή μετακινήστε το σε άλλη θύρα μόνο ως πρόσθετο μέτρο·
  • 80/tcp — HTTP· συνήθως χρειάζεται για ανακατεύθυνση σε HTTPS και επικύρωση πιστοποιητικού·
  • 443/tcp — HTTPS.

Μια θύρα εφαρμογής όπως 3000, 8080 ή 9000 δεν πρέπει να είναι προσβάσιμη από το internet, όταν μπροστά της λειτουργεί Nginx ή Caddy. Συνδέστε την εφαρμογή στο 127.0.0.1 ή επιτρέψτε τη θύρα μόνο στο εσωτερικό δίκτυο. Αρχικά δείτε τι ακούει στον διακομιστή:

sudo ss -tulpn

Μετά την εγκατάσταση του Docker, ελέγξτε ξεχωριστά τους κανόνες iptables: η δημοσίευση -p 3000:3000 μπορεί να εκθέσει μια θύρα έξω από την αναμενόμενη ρύθμιση. Για μια δημόσια υπηρεσία είναι ασφαλέστερο να χρησιμοποιείτε HTTPS proxy και να κρατάτε την εσωτερική θύρα κρυφή.

Βήμα 1. Ενημερώστε το σύστημα και δημιουργήστε διαχειριστή

Συνδεθείτε στο VPS με τα στοιχεία που σας δόθηκαν και εγκαταστήστε τις ενημερώσεις:

sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgrades

Δημιουργήστε έναν προσωπικό χρήστη. Αντικαταστήστε το alex με το δικό σας όνομα:

sudo adduser alex
sudo usermod -aG sudo alex

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

Βήμα 2. Δημιουργήστε κλειδί SSH και εγκαταστήστε το στον διακομιστή

Στον υπολογιστή σας με Linux, macOS ή Windows PowerShell εκτελέστε:

ssh-keygen -t ed25519 -C "alex@my-computer"

Πατήστε Enter για να αποθηκεύσετε το κλειδί στο προεπιλεγμένο αρχείο και ορίστε passphrase. Μην στείλετε ποτέ το ιδιωτικό κλειδί σε συνομιλία, μην το βάλετε σε repository και μην το αντιγράψετε στο VPS. Στον διακομιστή πρέπει να μεταφερθεί μόνο το αρχείο με την επέκταση .pub:

ssh-copy-id alex@SERVER_IP

Αν το ssh-copy-id δεν είναι διαθέσιμο, εμφανίστε το δημόσιο κλειδί με Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub στο PowerShell και προσθέστε το στον διακομιστή:

sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keys

Επικολλήστε το κλειδί σε μία γραμμή και δοκιμάστε τη σύνδεση πριν απενεργοποιήσετε τους κωδικούς:

ssh alex@SERVER_IP
sudo whoami

Το αναμενόμενο αποτέλεσμα της τελευταίας εντολής είναι root. Αν ο πελάτης SSH δεν βρίσκει το κλειδί, δηλώστε το ρητά: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.

Βήμα 3. Απενεργοποιήστε τη σύνδεση root και τον έλεγχο με κωδικό

Δημιουργήστε αντίγραφο της ρύθμισης SSH:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

Βεβαιωθείτε ότι το αρχείο περιέχει αυτές τις παραμέτρους:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3

Στο Ubuntu οι ρυθμίσεις μπορεί να βρίσκονται στο /etc/ssh/sshd_config.d/*.conf, επομένως ελέγξτε την ενεργή διαμόρφωση:

sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'

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

sudo systemctl reload ssh

Κρατήστε ανοιχτή την παλιά σύνδεση SSH και δοκιμάστε τη σύνδεση με κλειδί σε νέο παράθυρο. Η απενεργοποίηση των κωδικών χωρίς επαληθευμένο κλειδί είναι ο συνηθέστερος τρόπος να χάσετε την πρόσβαση σε έναν server.

Βήμα 4. Ρυθμίστε το UFW χωρίς να αποκλείσετε το SSH

Το UFW είναι ένα βολικό περιτύλιγμα γύρω από τους κανόνες δικτύου του Linux. Αρχικά ορίστε ασφαλείς προεπιλογές και μετά επιτρέψτε τις θύρες SSH και web:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable

Επιβεβαιώστε την ενεργοποίηση μόνο αφού προσθέσετε τον κανόνα SSH. Ελέγξτε το αποτέλεσμα:

sudo ufw status verbose
sudo ufw status numbered

Για μόνιμη IP γραφείου μπορείτε να περιορίσετε το SSH σε αυτή τη διεύθυνση:

sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'

Χρησιμοποιήστε αυτή την επιλογή μόνο με μόνιμη IP και πρόσβαση στην κονσόλα του παρόχου: αν αλλάξει η διεύθυνση, μπορεί να κλειδωθείτε έξω.

Πώς να ανοίξετε προσωρινά μια θύρα εφαρμογής

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

sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcp

Μετά τη δοκιμή διαγράψτε τον χρησιμοποιώντας τον αριθμό που εμφανίζει το ufw status numbered:

sudo ufw delete RULE_NUMBER

Μην χρησιμοποιήσετε sudo ufw allow 1:65535/tcp: ένας τέτοιος κανόνας μετατρέπει το firewall σε τυπική διαδικασία χωρίς ουσιαστική προστασία.

Βήμα 5. Ενεργοποιήστε το Fail2ban για SSH

Το Fail2ban αναλύει τα logs και προσθέτει προσωρινό κανόνα αποκλεισμού μετά από αρκετές αποτυχημένες προσπάθειες σύνδεσης. Δεν αντικαθιστά τα κλειδιά SSH ή το firewall, αλλά μειώνει τον θόρυβο από αυτοματοποιημένες προσπάθειες brute force.

Δημιουργήστε τοπική ρύθμιση, ώστε οι ενημερώσεις πακέτων να μην αντικαταστήσουν τις επιλογές σας:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Ορίστε λογικές τιμές στην ενότητα [DEFAULT]:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw

[sshd]
enabled = true
port = 22

Ξεκινήστε την υπηρεσία και ελέγξτε το jail:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd

Στην έξοδο του sshd ελέγξτε τον αριθμό αποτυχημένων προσπαθειών και αποκλεισμένων διευθύνσεων. Μην προσθέσετε τη δική σας IP στη λίστα αποκλεισμού. Για μόνιμη εξαίρεση χρησιμοποιήστε ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP στην ενότητα [DEFAULT].

Βήμα 6. Ενεργοποιήστε τις αυτόματες ενημερώσεις

Οι αυτόματες ενημερώσεις είναι χρήσιμες για τα πακέτα ασφαλείας, όμως οι επανεκκινήσεις του kernel πρέπει να διαχειρίζονται ξεχωριστά:

sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgrades

Μία φορά την εβδομάδα ελέγξτε αν απαιτείται επανεκκίνηση:

test -f /var/run/reboot-required && echo 'Требуется перезапуск'

Πριν κάνετε χειροκίνητη επανεκκίνηση, βεβαιωθείτε ότι έχετε λειτουργικό κλειδί και πρόσβαση στην κονσόλα του VPS. Μετά την επανεκκίνηση ελέγξτε τις υπηρεσίες της εφαρμογής, το Nginx, το UFW και το Fail2ban.

Βήμα 7. Ελέγξτε το αποτέλεσμα εξωτερικά

Ελέγξτε την προστασία από άλλον υπολογιστή και όχι μόνο διαβάζοντας τη διαμόρφωση:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IP

Η εντολή πρέπει να καταλήξει σε απόρριψη. Δοκιμάστε ξεχωριστά μια λειτουργική σύνδεση με κλειδί:

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IP

Στο VPS ελέγξτε τις διευθύνσεις ακρόασης και τους κανόνες:

sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshd

Η θύρα της εφαρμογής πρέπει να ακούει στο 127.0.0.1, αν δεν προορίζεται για άμεση πρόσβαση. Από εξωτερικό host μπορείτε να χρησιμοποιήσετε nmap SERVER_IP, αλλά σαρώστε μόνο τον δικό σας server: ο έλεγχος υποδομής άλλου χωρίς άδεια μπορεί να παραβιάζει τον νόμο και τους κανόνες του παρόχου.

Αντίγραφα ασφαλείας και ανάκτηση

Η προστασία SSH δεν προστατεύει από διαγραμμένα δεδομένα, λάθος διαχειριστή ή παραβιασμένη εφαρμογή. Αποθηκεύστε τα αντίγραφα της βάσης δεδομένων, της διαμόρφωσης και των αρχείων χρηστών ξεχωριστά από το VPS. Μια ελάχιστη λύση είναι καθημερινό backup, αρκετές εκδόσεις από προηγούμενες ημέρες και περιοδικές δοκιμές ανάκτησης.

Μην γράφετε κωδικούς ή tokens σε scripts απλού κειμένου. Αν διαρρεύσει ένα μυστικό, ανακαλέστε το αμέσως και δημιουργήστε νέο.

Πώς να επιλέξετε VPS για ασφαλές project

Η ασφάλεια ξεκινά από τον έλεγχο της υποδομής. Σε ένα VPS μπορείτε να επιλέξετε μόνοι σας το λειτουργικό σύστημα, τους κανόνες firewall, τη μέθοδο πρόσβασης, τα backups και τη θέση των υπηρεσιών. Για έναν μικρό ιστότοπο ή API, ένα σταθερό δίκτυο, αποθήκευση SSD και κονσόλα ανάκτησης είναι σημαντικότερα από την υπερβολική ποσότητα εικονικών πυρήνων.

Όταν ξεκινάτε ένα project σε VPS στο tropic.host, καθορίστε από πριν τα δημόσια σημεία εισόδου: στις περισσότερες περιπτώσεις αρκούν SSH, HTTP και HTTPS. Κρατήστε τη βάση δεδομένων και τα panels διαχείρισης μέσα στο εσωτερικό δίκτυο. Καθώς μεγαλώνει ένα project, ξεχωριστά VPS για την εφαρμογή, τη βάση δεδομένων και το monitoring βοηθούν στην απομόνωση των περιοχών αστοχίας.

Συνηθισμένα λάθη

  • Απενεργοποίηση κωδικών πριν δοκιμαστεί η σύνδεση με κλειδί. Κρατήστε ανοιχτή την τρέχουσα συνεδρία και δοκιμάστε ξεχωριστά νέα σύνδεση.
  • Διατήρηση του 22/tcp ανοιχτού σε όλο τον κόσμο, ενώ θα μπορούσε να επιτρέπεται μόνο από έμπιστες διευθύνσεις.
  • Άμεση δημοσίευση θυρών Docker. Ελέγξτε πρώτα τους κανόνες Docker και UFW.
  • Εγκατάσταση του Fail2ban χωρίς επανέλεγχο των logs. Μετά τις αλλαγές ελέγξτε το journalctl -u ssh και την κατάσταση του jail.

Συμπέρασμα

Η βασική προστασία ενός VPS δεν απαιτεί πολύ χρόνο, όταν τα βήματα γίνονται με τη σωστή σειρά: δημιουργήστε ξεχωριστό χρήστη, εγκαταστήστε κλειδί SSH, επαληθεύστε την πρόσβαση, απενεργοποιήστε τη σύνδεση root και τους κωδικούς, ενεργοποιήστε το UFW, ρυθμίστε το Fail2ban και ενεργοποιήστε τις αυτόματες ενημερώσεις. Στη συνέχεια προσθέστε backups, logging και εξωτερικό monitoring.

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

FAQ

Χρειάζεται να αλλάξω την προεπιλεγμένη θύρα SSH;

Όχι απαραίτητα. Η μετακίνηση της θύρας μειώνει τον αυτοματοποιημένο θόρυβο, αλλά δεν αντικαθιστά τα κλειδιά, την απενεργοποίηση κωδικών, το UFW ή το Fail2ban. Αν αλλάξετε τη θύρα, ενημερώστε τον κανόνα firewall και την παράμετρο port στο jail του Fail2ban.

Τι να κάνω αν χάσω την πρόσβαση μετά τη ρύθμιση του UFW;

Χρησιμοποιήστε την web ή rescue console του παρόχου και ελέγξτε τον κανόνα SSH και τη ρύθμιση sshd. Μην κλείσετε την παλιά λειτουργική συνεδρία μέχρι να επιβεβαιώσετε τη νέα σύνδεση.

Αρκεί το Fail2ban για την προστασία του SSH;

Όχι. Το Fail2ban αντιδρά σε αποτυχημένες συνδέσεις που έχουν ήδη συμβεί. Η βάση πρέπει να είναι κλειδιά SSH, απενεργοποιημένος έλεγχος κωδικού, ελάχιστα δικαιώματα χρηστών και περιορισμένο firewall.

Μπορώ να επιτρέψω SSH μόνο από μία IP;

Ναι, αν η διεύθυνση είναι μόνιμη: προσθέστε κανόνα UFW allow from για αυτή την IP. Προετοιμάστε από πριν πρόσβαση στην κονσόλα του παρόχου ή άλλο εφεδρικό τρόπο, επειδή η σύνδεση θα αποκλειστεί όταν αλλάξει η IP.

Πόσο συχνά πρέπει να ελέγχω την ασφάλεια του VPS;

Μετά από κάθε αλλαγή στο SSH, το firewall ή τη δημοσίευση θυρών Docker, κάντε έλεγχο θυρών και δοκιμή σύνδεσης. Ως τακτική συντήρηση, ελέγχετε ενημερώσεις και logs τουλάχιστον μία φορά την εβδομάδα και δοκιμάζετε τακτικά την ανάκτηση από backup.