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

Εισαγωγή

Πλέον το κόστος για αγορά ενός Virtual Private Server, για προσωπική χρήση, κοστίζει από 5$ τον μήνα.και η διαδικασία απόκτησής του γίνεται σε ένα 20 λεπτό το πολύ. Στο παρόν άρθρο, χρησιμοποιήσαμε ένα VPServer των 5$ από την Digitalocean. Μπορείτε να δημιουργήστε έναν νέο λογαριασμό από το παρακάτω link και θα λάβετε 100$ credits για να τα χρησιμοποιήσετε μέσα σε 60 ημέρες:

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

Το σημαντικότερο πράγμα που θα πρέπει να κάνετε αφού αποκτήσετε ένα VPS, είναι να ακολουθήσετε μερικά κρίσιμα βήματα τα οποία θα «μπαλώσουν» τις πιο διαδεδομένες μεθόδους μέσω τον οποίων γίνεται η προσπάθεια επίθεσης στον server σας. Με λίγα λόγια, πριν καν αρχίσετε τις δοκιμές η το deployment των web εφαρμογών σας αφιερώστε τα πρώτα 10 λεπτά για να εφαρμόσετε βασικές και κρίσιμες ρυθμίσεις ασφάλειας.

Αφού κάνετε αυτά, σταδιακά μπορείτε να εφαρμόσετε άλλα πιο περίπλοκα συστήματα ασφάλειας εφόσον και αν χρειάζονται (π.χ. IDS και άλλα). Αλλά όπως θα δείτε παρακάτω ακολουθώντας τα παρακάτω βήματα ασφάλειας του VPS σας στα πρώτα 10 λεπτά έχετε μπαλώσει τα πιο κρίσιμα σημεία.

Τέλος να αναφέρω ότι τα παρακάτω βήματα τα έχω κάνει σε VPS με:

  • Ubuntu 16.04
  • Debian 8
  • CentOS 7 (ελάχιστες διαφορές τις οποίες θα σημειώσω)
Advertisements

Αλλαγή password

ssh root@H-IP-tou-Server

Έχετε συνδεθεί με ssh στον Server σας και τις περισσότερες φορές, την πρώτη φορά που θα κάνετε login στον VPS σας θα σας ζητήσει να αλλάξετε τον κωδικό του μοναδικού χρήστη που υπάρχει στον server και δεν είναι άλλος από τον root. 

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

passwd

Δεν χρειάζεται φαντάζομαι να σας πω ότι ο κωδικός του root αλλά και οποιουδήποτε χρήστη (όπως θα κάνουμε παρακάτω) θα πρέπει να είναι ένας κωδικός που αποτελείται από :

  • πάνω από 8 χαρακτήρες
  • να έχει κεφαλαία
  • να έχει σύμβολα
  • να έχει αριθμούς

Ένα τρικ που χρησιμοποιώ είναι να μετατρέπω ελληνικές φράσεις σε greeklish και να προσθέτω και σύμβολά και αριθμούς π.χ. το «Α να χαθείς τομάρι»

4naX@83!s7om4r1 (αναχαθειστομαρι)

Εναλλακτικά χρησιμοποιώ π.χ. το script που είδαμε στο άρθρο Δημιουργία τυχαίων κωδικών. Τέλος τα ελέγχω μερικές φορές για το πόσο ισχυρά είναι όπως είδαμε στο άρθρο Έλεγχος κωδικών.

Ενημερώσεις συστήματος

Πριν προχωρήσετε, θα πρέπει αμέσως μετά την αλλαγή του κωδικού του root να ενημερώσετε το σύστημα με τις τελευταίες ενημερώσεις λογισμικού με χρήση του apt  σε VPS με Debian/Ubuntu:

apt update

apt upgrade

Τα παραπάνω μπορούν να γίνουν αυτόματα με την χρήση του uCareSystem

Αντίστοιχα σε CentOS χρησιμοποιούμε το yum

yum update

Δημιουργία νέου χρήστη

Μπορεί το VPS σας, πέρα από το root να σας δίνει έναν ακόμα χρήστη ή μπορεί και όχι. Σε κάθε περίπτωση είναι καλή πρακτική να δημιουργήσουμε έναν φρέσκο χρήστη και τον κωδικό του:

adduser onoma-xristi

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

Τέλος πρέπει να του δώσουμε δικαιώματα sudo οπότε στο Ubuntu / Debian εκτελούμε:

gpasswd -a onoma-xristi sudo

ενώ στο CentOS η διαδικασία είναι:


adduser onoma-xristi
passwd onoma-xristi
gpasswd -a onoma-xristi wheel

Ωραία τώρα ο χρήστης που δημιουργήσατε, αν χρειαστεί ποτέ να εκτελέσει εντολές διαχείρισης, μπορεί να χρησιμοποιεί το sudo.

Πιστοποίηση με SSH κλειδί

Μέχρι στιγμής αλλάξαμε τον κωδικό στον root, δημιουργήσαμε έναν νέο χρήστη για να χρησιμοποιούμε μόνο αυτόν και όχι τον root και τώρα ήρθε η ώρα να ρυθμίσουμε τον server μας ώστε να μην δέχεται σύνδεση με χρήση κωδικού αλλά μόνο με την χρήση κλειδιού SSH. Όποιος (εσείς) έχει το κλειδί, μπαίνει… όλοι οι άλλοι … πόρτα…

Στον προσωπικό σας υπολογιστή, θα δημιουργήσουμε ένα ζεύγος Ιδιωτικού-Δημόσιου κλειδιού. Έπειτα το δημόσιο κλειδί θα το ανεβάσουμε στον Server και αφού πούμε στον server να μην δέχεται συνδέσεις με χρήση κωδικού, θα μπορείτε πλέον να συνδέεστε σε αυτόν μόνο εσείς που έχετε το ιδιωτικό κλειδί.

Δημιουργία Ζεύγους κλειδιών

Πάμε λοιπόν στο προσωπικό σας υπολογιστή, σε ένα δεύτερο τερματικό (δεν κλείνουμε το τερματικό στο οποίο είμαστε συνδεδεμένοι στον server) και εκτελέσετε:

ssh-keygen

θα δείτε στο τερματικό σας να λέει κάτι σαν το παρακάτω:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/onoma_xristi/.ssh/id_rsa):

Εκεί, αν θέλετε να κρατήσετε την διαδρομή (/home/onoma_xristi/.ssh/) και το όνομα (id_rsa) με τα οποία θα αποθηκευτεί το ιδιωτικό/δημόσιο κλειδί σας πατήστε απλά enter. Προσωπικά προτιμώ να του δίνω διαφορετικό όνομα στο αρχείο π.χ. sklavos1_rsa

Αφού πατήσετε Enter, θα σας ζητήσει να δώσετε ένα συνθηματικό το οποίο ασφαλίζει το Ιδιωτικό τμήμα του κλειδιού (αυτό που θα μείνει στον υπολογιστή σας). Μπορείτε να πατήσετε Enter για να μην δώσετε συνθηματικό, αν είστε σίγουροι ότι ο υπολογιστής σας, η το ιδιωτικό κλειδί δεν θα πέσει σε λάθος χέρια. Αν όμως είναι π.χ laptop ή υπολογιστής δουλειάς, καλό είναι να προσθέσετε και ένα συνθηματικό για το ιδιωτικό κλειδί ώστε μονο εσείς να μπορείτε να το χρησιμοποιήσετε.

Αντιγραφή του δημόσιου κλειδιού στον Server

Η παραπάνω λοιπόν διαδικασία θα δημιουργήσει ένα ιδιωτικό κλειδί id_rsa και ένα δημόσιο κλειδί id_rsa.pub, μέσα στον κρυφό φάκελο .ssh του προσωπικού σας καταλόγου. Φαντάζομαι, έχετε καταλάβει ότι το ιδιωτικό κλειδί δεν το μοιραζόμαστε με κανέναν.

Υπάρχουν 2 τρόποι για να μεταφέρουμε το δημόσιο κλειδί μας στον Server:

  • Με το χέρι
  • Αυτόματα

Αντιγραφή με το χέρι:

Ας δούμε πρώτα την διαδικασία «με το χέρι», για να κατανοήσουμε τι γίνεται και μετά θα δούμε τον αυτόματο.

Πάμε λοιπόν στο τερματικό που δημιουργήσαμε τα κλειδιά, όπου προβάλουμε το περιεχόμενο του δημόσιου κλειδιού:

gedit ~/.ssh/id_rsa.pub

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

cat ~/.ssh/id_rsa.pub

ssh-rsa  MqkKCszIK9PbUhIROg5EBUTKgwqJr[....]9u9n437p0nuT50m5pQbRAg  user@computer.local

Για λόγους ευκολίας προβάλω μόνο ένα τμήμα αυτού. Σημασία έχει λοιπόν όλο αυτό το πράγμα χωρίς να μας ξεφύγει κάτι να το αντιγράψουμε με δεξί κλικ στην προσωρινή μνήμη.

Πάμε τώρα στο τερματικό όπου ήμαστε ακόμα συνδεδεμένοι στον server και από χρήστες root θα συνδεθούμε με τον νέο χρήστη που είχαμε δημιουργήσει στο προηγούμενο βήμα:

su - onoma_xristi

αφού συνδεθούμε δημιουργούμε τον κρυφό φάκελο .ssh, αλλάζουμε τα δικαιώματα χρήσης του και έπειτα δημιουργούμε το αρχείο στο οποίο θα κάνουμε επικόλληση τα περιεχόμενα του δημόσιου κλειδιού που αντιγράψατε πριν λίγο. Πάμε λοιπόν:

mkdir .ssh

chmod 700 .ssh

nano .ssh/authorized_keys

Με την τελευταία εντολή, θα έχει ανοίξει το αρχείο autorized_keys στο οποί κάνουμε επικόλληση (πχ με CTRL+SHIFT+V) τα περιεχόμενα του αρχείου id_rsa.pub.

Advertisements

Αφού το κάνετε επικόλληση, πατήστε CTRL-X και κλείσιμο, το πλήκτρο Y για αποθήκευση και πατήστε ENTER για επιβεβαίωση. Τέλος περιορίζουμε και τα δικαιώματα χρήσης του αρχείου:

chmod 600 .ssh/authorized_keys

Τώρα μπορείτε να δώσετε exit στο τερματικό και να πατήσετε enter για να επιστρέψετε στο χρήστη root.

Αυτόματη αντιγραφή:

Εναλλακτικά για την αυτόματη αντιγραφή χρησιμοποιούμε την εντολή ssh-copy-id η οποία θα κάνει όλες τις παραπάνω ενέργειες (δημιουργία φακέλου, ρύθμιση δικαιωμάτων, αντιγραφή δημόσιου κλειδιού κλπ) αυτόματα. Η σύνταξη της εντολής έχει την εξής μορφή

ssh-copy-id -i  onoma-xristi@H-IP-tou-Server

Άρα αν με το ssh-keygen έχουμε δημιουργήσει το ζεύγος κλειδιών με όνομα trollingvps_rsa το οποίο βρίσκεται στην διαδρομή /home/username/.ssh/ του προσωπικού μας υπολογιστή, τότε για να αντιγράψουμε το δημόσιο τμήμα του στον Server μας δίνουμε:

ssh-copy-id -i ~/.ssh/trollingvps_rsa.pub onoma-xristi@H-IP-tou-Server

με το που πατήσουμε enter θα ξεκινήσει η διαδικασία της μεταφοράς και θα μας ζητήσει τον κωδικό του που είχαμε φτιάξει νωρίτερα στον Server.

Απαγόρευση εισόδου με κωδικό αλλά και ως root

Μια και το όνομα χρήστη root είναι ήδη γνωστό από όλους στον πλανήτη μας, όπως και οι «δύναμή» του, ήρθε η ώρα να πούμε στον server, ότι δεν θα δέχεσαι συνδέσεις που προσπαθούν να κάνουν χρήση του root αλλά ούτε και συνδέσεις με όνομα χρήστη και κωδικό.

Όπως είμαστε στο τερματικό με την ενεργή σύνδεση μας με τον χρήστη root ανοίγουμε το αρχείο /etc/ssh/sshd_config:

nano /etc/ssh/sshd_config

και εντοπίζουμε την γραμμή PermitRootLogin yes και PasswordAuthentication yes και τα αλλάζουμε σε :

PermitRootLogin no

PasswordAuthentication no

Αφού τα αλλάξετε, πατήστε CTRL-X και κλείσιμο, το πλήκτρο Y για αποθήκευση και πατήστε ENTER για επιβεβαίωση.

Τέλος ενημερώνουμε τον server για τις αλλαγές με μια επανεκκίνηση της υπηρεσίας ssh:

systemctl reload sshd

Πριν κάνουμε εντελώς έξοδο από τον server, καλό είναι να ανοίξουμε ένα δεύτερο τερματικό και να συνδεθούμε στον server μας ώστε να επιβεβαιώσουμε ότι όλες οι ρυθμίσεις μας ήταν σωστές.:

Στο δεύτερο λοιπόν τερματικό πρώτα δοκιμάζουμε πάλι μια σύνδεση με τον root χρήστη όπου λογικά θα φάμε πόρτα:

ssh root@H-IP-tou-SERVER

Permission denied (publickey).

Ωραία την φάγαμε την πόρτα μας, οπότε πάμε να συνδεθούμε με τον χρήστη που είχαμε δημιουργήσει και στον οποίο ΔΕΝ πρέπει να ζητήσει κωδικό σύνδεσης (εκτός ίσως από το συνθηματικό χρήσης του ιδιωτικού κλειδιού):

ssh onoma-xristi@H-IP-tou-SERVER

onoma-xristi@vpserever:~$

Τέλεια, αν όλα έχουν πάει καλά είμαστε συνδεδεμένοι με τον λογαριασμό του χρήστη που είχαμε δημιουργήσει.

Αλλαγή πρόσβασης στην… πόρτα του ssh

Πάμε τώρα να αλλάξουμε και την θύρα σύνδεσης στην SSH, μιας και η εξορισμού είναι η 22 και την ξέρει και η κυρα Χάιδω από το Κοτρονίτση.

Τώρα που ήμαστε συνδεδεμένοι με τον νέο λογαριασμό θα χρησιμοποιήσουμε sudo για τις εργασίες διαχείρισης.

sudo nano /etc/ssh/sshd_config

και εντοπίζουμε την γραμμή που λέει Port 22 και τον αριθμό 22 τον αλλάζουμε σε κάτι ανάμεσα σε 49152–65535 τα οποία θεωρητικά είναι ελεύθερα για χρήση. Αφού τα αλλάξετε με έναν αριθμό τις επιλογής σας (απλά πρέπει να τον θυμάστε), πατήστε CTRL-X και κλείσιμο, το πλήκτρο Y για αποθήκευση και πατήστε ENTER για επιβεβαίωση.

Για να ενεργοποιήσουμε τις αλλαγές δίνουμε:

sudo systemctl reload sshd

Αν τώρα κάνουμε έξοδο/αποσύνδεση από τον server με exit και προσπαθήσουμε να συνδεθούμε με τον κλασσικό τρόπο:

ssh onoma-xristi@H-IP-tou-SERVER

ssh: connect to host   port 22: Connection refused

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

ssh onoma-xristi@H-IP-tou-SERVER -p XXXXXX

όπου XXXXX βάζετε τον αριθμό με τον οποίο αντικαταστήσατε το 22 στην γραμμή Port στο αρχείο /etc/ssh/sshd_config… (μην μου πείτε ότι δεν θυμάστε…)

Τα παραπάνω είναι οι απαραίτητες πρώτες ρυθμίσεις για το ssh. Περισσότερα μπορείτε να κάνετε ακολουθώντας τον παρακάτω οδηγό:

Advertisements

Firewall

Ας σηκώσουμε και ένα ωραιότατο τοίχος προστασίας στα τελευταία λεπτά που μας έμειναν. Αυτή την στιγμή η μόνη υπηρεσία που τρέχει το VPS μας είναι το SSH σε μια πόρτα που το έχουμε ορίσει στο αρχείο /etc/ssh/sshd_config.

Στο Debian και Ubuntu θα χρησιμοποιήσουμε το Uncomplicated FireWall :

sudo ufw allow XXXXΧ/tcp

ενώ στο CentOS το Firewall CMD:

sudo firewall-cmd --add-port XXXXX/tcp --permanent

όπου XXXXX βάζετε όπως είπαμε την νέα θύρα που ακούει η υπηρεσία SSH. Η παραπάνω εντολή λέει στο Firewall, να επιτρέπεις σύνδεση μόνο αν σου ζητήσω την πόρτα XXXXX όλα τα άλλα να τα έχεις κλειστά…

Με λίγα λόγια μόνο η πόρτα XXXXX είναι ενεργή, όλες οι άλλες μπλοκάρονται με το καλημέρα. Αν κάποια στιγμή θελήσετε να τρέχετε μια ιστοσελίδα (π.χ. port 80) ή κάποια άλλη web εφαρμογή να θυμάστε απλά να ενεργοποιήσετε την πόρτα που χρειάζεστε.

Περίφημα, τώρα μπορούμε να ενεργοποιήσουμε το Firewall στο Ubuntu / Debian:

sudo ufw enable

ή στο CentOS:

sudo systemctl enable firewalld

Ρύθμιση αυτόματων ενημερώσεων

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

Αυτόματες ενημερώσεις ασφαλείας Debian και Ubuntu

Στο Debian και Ubuntu οι αυτόματες εγκαταστάσεις διορθώσεων για κενά ασφαλείας μπορούν να ενεργοποιηθούν με χρήση και ρύθμιση του πακέτου «unattended-upgrades» για το οποίο μπορείτε να διαβάσετε στο άρθρο : Πως να ενεργοποιήσετε τις αυτόματες ενημερώσεις συστήματος. Εδώ απλά θα σημειώσουμε τα βασικά στοιχεία:

  1. επιβεβαιώστε ότι το πακέτο unattended-upgrades είναι εγκατεστημένο
  2. ανοίξτε το αρχείο /etc/apt/apt.conf.d/10periodic με τον nano η vim και τροποποιείστε το κατάλληλα
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Αποθηκεύστε το και κλείστε το αρχείο.

Αυτόματες ενημερώσεις ασφαλείας στο CentOS

Στο CentOS οι αυτόματες εγκαταστάσεις διορθώσεων για κενά ασφαλείας του λειτουργικού συστήματος μπορούν να ενεργοποιηθούν με χρήση και ρύθμιση του πακέτου «yum-cron»

  1. Το κάνετε εγκατάσταση: yum -y install yum-cron
  2. έπειτα ανοίγετε το αρχείο /etc/yum/yum-cron.conf με τον nano η vim και τροποποιείστε κατάλληλα τις γραμμές:
update_cmd = security
update_messages = yes
download_updates = yes
apply_updates = yes

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

sudo systemctl start yum-cron

Επίλογος

Με όλες τις παραπάνω ενέργειες εντός περίπου 10 λεπτών έχουμε εφαρμόσει βασικές ρυθμίσεις ασφάλειας:

  1. Αλλαγή password root
  2. Δημιουργία χρήστη και ανάθεση δικαιωμάτων διαχειριστή με sudo
  3. Πιστοποίηση μόνο με κλειδί SSH και αλλαγή θύρας SSH
  4. Ρύθμιση βασικού Firewall
  5. Ρύθμιση αυτόματων ενημερώσεων για κενά ασφαλείας

Ίσως, είναι καλή ιδέα να κάνουμε μια επανεκκίνηση τον server μας ή και να δημιουργήσουμε ένα snapshot αυτού μέσα από το Panel που μας δίνει ο πάροχος του VPS μας. Από εδώ και πέρα κάθε επιπρόσθετη υπηρεσία που θα προσθέτουμε στον Server μας θα πρέπει να συνοδεύεται από και από τις κατάλληλες ρυθμίσεις ασφαλείας.