Raspberry Pi | Ενεργοποιούμε την πρόσβαση στο server μας από οποιοδήποτε μέρος του κόσμου με το Let's Encrypt (SSL) και το DuckDNS


Μπορεί το Raspberry Pi να έχει δημιουργηθεί πρωτίστως ως μία συσκευή για την εκμάθηση προγραμματισμού, μία από τις μεγαλύτερες όμως πρακτικές χρήσεις του είναι η μετατροπή του σε server. Είδαμε μερικά είδη server στα άρθρα μας και θα δούμε σύντομα και άλλα, σήμερα όμως θα μάθουμε τον τρόπο με τον οποίο μπορούμε να έχουμε ασφαλή πρόσβαση στο server μας, από οποιοδήποτε μέρος του κόσμου. Για αυτό το σκοπό θα χρησιμοποιήσουμε το Let's Encrypt και το DuckDNS.

Το Let's Encrypt είναι μία υπηρεσία η οποία μας προσφέρει δωρεάν πιστοποιητικά SSL. Ρυθμίζοντας ένα από αυτά στη διεύθυνση στην οποία απαντάει ο server μας (π.χ. www.doctorandroid.gr), μπορούμε να την επισκεφτούμε μέσω κρυπτογραφημένης σύνδεσης. Αυτό σημαίνει ότι στη διεύθυνση θα βλέπουμε ως πρόθεμα το "https" και όχι το "http" και η διαφορά είναι ότι αν κάποιος παρακολουθεί τη σύνδεσή μας, θα μπορεί να δει ότι μπήκαμε στη συγκεκριμένη σελίδα, αλλά δε θα μπορεί να μάθει τι κάναμε μέσα σ 'αυτήν, ούτε να δει τα αρχεία που ανταλλάξαμε μαζί της.


Η υπηρεσία DuckDNS είναι μία από τις πολλές που μας προσφέρουν μία σταθερή και κυρίως "ευδιάβαστη" διεύθυνση, από την οποία μπορούμε να μπούμε στο server μας. Συνδυάζει την εξωτερική IP του δικτύου μας (π.χ. "63.103.256.58") με μία κανονική διεύθυνση του τύπου "doctor.duckdns.org" και όποτε η IP μας αλλάζει, το DuckDNS ενημερώνεται και την αποθηκεύει αυτόματα, οπότε το μόνο που χρειάζεται να θυμόμαστε είναι η δική του διεύθυνση.


Για να βγάλουμε λοιπόν το server μας στο ίντερνετ θα χρειαστεί να κάνουμε τρία πράγματα:

  1. να ανοίξουμε μία πόρτα στο router μας από την οποία θα γίνεται η επικοινωνία με τον έξω κόσμο,
  2. να καπαρώσουμε ένα όνομα στο DuckDNS για δική μας χρήση,
  3. να ρυθμίσουμε σε αυτό το όνομα ένα πιστοποιητικό SSL για ασφαλή σύνδεση.

Σημαντική σημείωση 1:
Μπορεί με το πιστοποιητικό SSL η σύνδεσή μας να είναι πλέον ασφαλής, αυτό όμως δε σημαίνει ότι ο server μας είναι και αυτός ασφαλής. Θα χρειαστεί να πάρουμε έξτρα μέτρα για το server, όπως για παράδειγμα να σηκώσουμε ένα firewall και να τον αναβαθμίζουμε τακτικά.


Διαφήμιση

Ανοίγουμε την πόρτα στο router (Port forwarding)


Ας ξεκινήσουμε με το άνοιγμα της πόρτας στο router (άνοιγμα θύρας για να είμαστε ακριβείς), το λεγόμενο port forwarding όπως είναι ευρύτερα γνωστό. Οι διευθύνσεις με πρόθεμα "http" είναι ρυθμισμένες να βγαίνουν από την πόρτα με αριθμό 80, ενώ οι αντίστοιχες "https" από την 443. Εμείς λοιπόν θα ανοίξουμε μόνο την 443.

Σε πολλούς οδηγούς στο ίντερνετ θα δείτε ότι μας ζητούν να τις ανοίξουμε και τις δύο, αλλά αυτό δεν είναι πάντα απαραίτητο. Πρώτα από όλα πολλοί πάροχοι (ISP) έχουν πλέον μπλοκάρει τη συγκεκριμένη θύρα για λόγους ασφαλείας, ενώ και εμείς δε θα έπρεπε να θέλουμε εξ 'αρχής να μπαίνουμε στο server μας από μία "http" διεύθυνση. Εφόσον λοιπόν θα εγκαταστήσουμε αργότερα ένα πιστοποιητικό SSL στο server μας, η χρήση του "http" και κατ 'επέκτασιν της πόρτας 80 είναι άχρηστη.



Η διαδικασία port forwarding είναι διαφορετική σε κάθε router, γιατί πολύ απλά τα μενού τους είναι διαφορετικά. Για αυτό το σκοπό έχει δημιουργηθεί η σελίδα Port Forward, στην οποία μπορούμε να βρούμε αναλυτικές οδηγίες για όλες σχεδόν τις συσκευές.

Τα βήματα όμως σε γενικές γραμμές είναι τα εξής. Όντας συνδεδεμένοι στο τοπικό μας δίκτυο, κάνουμε login στη διεύθυνση του router μας (π.χ. "192.168.1.1") και πηγαίνουμε στο μενού με ονομασία "Port forwarding" ή "Virtual server" ή "NAT". Εκεί υπάρχει ένας άδειος πίνακας στον οποίο μπορούμε να καταχωρήσουμε τους κανόνες port forwarding. Δημιουργούμε λοιπόν μία νέα καταχώριση με τα εξής στοιχεία (αν αυτά απαιτούνται):

From: 443
To: 443
Port: 443
Internal IP: Η static IP
που ορίσαμε στο server μας (π.χ. 192.168.1.100)
External IP: το αφήνουμε κενό

Σε αυτό τον κανόνα δίνουμε δηλαδή ένα εύρος θυρών που θέλουμε να ανοίξουμε (στη συγκεκριμένη περίπτωση είναι από την 443 έως την 443), λέμε στη συνέχεια ποια θύρα θέλουμε να χρησιμοποιήσουμε (την 443 συγκεκριμένα) και ορίζουμε μέσω της εσωτερικής IP, ποια συσκευή μας θα απαντάει σε αυτή τη θύρα. Τέλος αποθηκεύουμε και κάνουμε επανεκκίνηση στο router μας.

Δίνουμε ένα domain name στην IP μας με το DuckDNS


Το επόμενο βήμα είναι να δώσουμε ένα domain name στην εξωτερική IP του δικτύου μας, για να μπορούμε να τη θυμόμαστε εύκολα. Υπάρχουν πολλές υπηρεσίες που μπορούν να μας εξυπηρετήσουν και μερικά router μας δίνουν τη δυνατότητα να τις ρυθμίσουμε απ' ευθείας επάνω τους. Καλό θα ήταν λοιπόν να δούμε αν το router μας έχει τέτοιο στο μενού του και να επιλέξουμε μία από τις υποστηριζόμενες υπηρεσίες. Εμείς χρησιμοποιούμε το DuckDNS γιατί είναι πολύ εύκολο στη χρήση και γιατί μας... αρέσουν τα παπάκια!

Μπαίνουμε λοιπόν στην επίσημη σελίδα του DuckDNS και κάνουμε login με έναν από τους διαθέσιμους λογαριασμούς. Στην κατηγορία "domains" και στο πεδίο "sub domain", βάζουμε τη λέξη που θέλουμε να χρησιμοποιούμε και πατάμε "add domain" για να δούμε αν είναι διαθέσιμη και να την καταχωρήσουμε. Αν για παράδειγμα έχουμε επιλέξει τη λέξη "zouzounia", το domain name μας θα είναι το "zouzounia.duckdns.org".


Η εγκατάσταση του DuckDNS στο Raspberry Pi


Το domain name μας είναι έτοιμο και αυτό που μένει τώρα είναι να εγκαταστήσουμε το DuckDNS στο Raspberry Pi μας. Ανοίγουμε ένα τερματικό στο Raspberry Pi και δημιουργούμε το φάκελο "duckdns" με την εντολή:

sudo mkdir duckdns

Μπαίνουμε στο φάκελο με την εντολή:

sudo cd duckdns

Δημιουργούμε το αρχείο "duckdns.sh" με την εντολή:

sudo leafpad duckdns.sh

Σημαντική σημείωση 2:
Ο λόγος που χρησιμοποιούμε το leafpad είναι για να κάνουμε πιο γραφική την απεικόνιση για τους αρχάριους. Για όσους γνωρίζουν τα κατατόπια στο τερματικό, μπορούν να χρησιμοποιήσουν το nano.


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

echo url="https://www.duckdns.org/update?domains=**τοδικόμουdomain**&token=**τοδικόμουtoken**=" | curl -k -o ~/duckdns/duck.log -K -

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

sudo chmod 700 duck.sh


Τώρα θα χρησιμοποιήσουμε το Cron, ένα πρόγραμμα το οποίο μας επιτρέπει να τρέχουμε το script που δημιουργήσαμε ανά τακτά χρονικά διαστήματα. Με τη βοήθεια του Cron θα μπορέσει το DuckDNS να ενημερώνεται κάθε φορά που η εξωτερική μας IP αλλάζει. Ανοίγουμε λοιπόν το cron με την εντολή:

crontab -e

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

*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

Αποθηκεύουμε το αρχείο του Cron πατώντας Control+o και μετά Control+x (Ctrl+o και Ctrl+x). Τέλος δοκιμάζουμε να τρέξουμε το script μας με την εντολή:

sudo ./duck.sh

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

cat duck.log

Εκεί θα δούμε όλες τις λεπτομέρειες και αν όλα έχουν πάει καλά θα δούμε στο τέλος να γράφει **"OK"**. Αν όχι η ένδειξη θα λέει **"KO"**.

Διαφήμιση

Εγκαθιστούμε το πιστοποιητικό SSL για σύνδεση "https" με το Let's Encrypt


Σειρά έχει τώρα να εγκαταστήσουμε ένα πιστοποιητικό SSL με τη βοήθεια της δωρεάν υπηρεσίας Let's Encrypt. Οι οδηγίες που θα δείξουμε αφορούν τις υπηρεσίες που τρέχουν σε Apache server, καθότι αυτός είναι ο πιο διαδεδομένος.

Εγκαθιστούμε πρώτα το Certbot για τον Apache server με την εντολή:

sudo apt install python-certbot-apache

Αφού εγκατασταθεί, δίνουμε την ακόλουθη εντολή για να κατεβάσουμε το πιστοποιητικό μας:

certbot --apache

Αυτό ήταν όλο! Σε περίπτωση που θέλουμε να δούμε τα πιστοποιητικά μας, αυτά αποθηκεύονται εδώ στην ακόλουθη διαδρομή:

/etc/letsencrypt/live/example.com/

Τώρα μπορούμε να κάνουμε μια επανεκκίνηση στο Raspberry Pi μας και να μπούμε μέσω ενός άλλου δικτύου στο server μας, χρησιμοποιώντας τη διεύθυνση που ορίσαμε στο DuckDNS (π.χ. "https://doctor.duckdns.org").

Bonus: Η εγκατάσταση του DuckDNS και του πιστοποιητικού SSL σε Nextcloud server μέσω snap


Για όσους έχουν χρησιμοποιήσει τον οδηγό μας για εύκολη εγκατάσταση του Nextcloud μέσω πακέτου snap, υπάρχει ένας επίσης εύκολος τρόπος για να κάνουμε όλα τα παραπάνω. Θα χρειαστεί να έχουμε ανοίξει την πόρτα 443 στο router μας, όπως επίσης να κάνουμε τη διαδικασία κατοχύρωσης ενός domain name στο DuckDNS. Για τα υπόλοιπα όμως κάνουμε τα ακόλουθα.

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

sudo nextcloud.occ config:system:get trusted_domains

Θα μας απαντήσει μόνο με την εσωτερική IP του Raspberry Pi (π.χ. "192.168.1.100"). Αυτό σημαίνει ότι το Nextcloud είναι ρυθμισμένο για να δίνει πρόσβαση μόνο σε όσους πληκτρολογούν τη συγκεκριμένη διεύθυνση. Για να προσθέσουμε λοιπόν αυτή που έχουμε καπαρώσει στο DuckDNS, δίνουμε την ακόλουθη εντολή, αλλάζοντας το "τοδικόμουdomain" με το δικό μας:

sudo nextcloud.occ config:system:set trusted_domains 2 --value=τοδικόμουdomain

Σημαντική σημείωση 3:
Με την παραπάνω εντολή, λέμε στο Nextcloud να προσθέσει το domain μας στη θέση δύο (2). Αν θέλουμε να βάλουμε και τρίτο domain, πρέπει να αλλάξουμε τον αριθμό σε τρία (3).


Επιβεβαιώνουμε ότι προστέθηκε το domain μας, δίνοντας ξανά την εντολή:

sudo nextcloud.occ config:system:get trusted_domains

Πάμε τέλος να εγκαταστήσουμε και το πιστοποιητικό SSL από το Let's Encrypt. Αυτό γίνεται δίνοντας απλά την ακόλουθη εντολή:

sudo nextcloud.enable-https lets-encrypt

Η διαδικασία θα ξεκινήσει στο τερματικό και αν έχουμε κάνει όλες τις προηγούμενες ρυθμίσεις σωστά, θα μας απαντήσει θετικά. Δοκιμάζουμε τέλος να μπούμε στο server μας από ένα άλλο δίκτυο, χρησιμοποιώντας τη διεύθυνση του DuckDNS με το πρόθεμα "https" (π.χ. "https://doctor.duckdns.org").


Εν κατακλείδι


Τι έχουμε κάνει λοιπόν με όλα τα παραπάνω; Έχουμε καταφέρει να βγάλουμε το server μας στο ίντερνετ και να έχουμε πρόσβαση σε αυτόν από οπουδήποτε είμαστε στον κόσμο. Έχουμε δηλαδή επιτέλους το δικό μας προσωπικό, ολοκληρωμένο cloud server! Πολύ σημαντικό είναι τώρα να ασχοληθούμε λίγο με την ασφάλειά του, ακολουθώντας τις εξαιρετικά χρήσιμες οδηγίες του Salih από το Cerebrux.

Επειδή τώρα σε αυτό το server θα αρχίσουμε να βάζουμε όλα τα προσωπικά μας αρχεία, τις φωτογραφίες, τη μουσική μας και άλλα δεδομένα, είναι απαραίτητο να μην τα χάσουμε αν κάτι πάει στραβά. Στο επόμενο άρθρο λοιπόν με θέμα το Raspberry Pi, θα δούμε τους καλύτερους τρόπους για να κάνουμε backup τον server μας και με αυτό εννοούμε τους πιο αυτόματους και τους πιο... τεμπέλικους.

Σχόλια

  1. Έχω κολλήσει στο κομμάτι αυτό sudo ./duck.sh
    Το τρέχω και μου επιστρέφει αυτό:
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Warning: Failed to create the file /root/duckdns/duck.log: No such file or
    Warning: directory
    100 2 0 2 0 0 1 0 --:--:-- 0:00:01 --:--:-- 1
    curl: (23) Failed writing body (0 != 2)

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. 1. Δοκίμασε το: sudo duck.sh

      2. Τσέκαρε αν στο φάκελο που βρίσκεσαι με το τερματικό, είναι και το αρχείο duck.sh

      Διαγραφή

Δημοσίευση σχολίου

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

Δείτε επίσης...

Ιδιωτικό απόρρητο | Το αφελές επιχείρημα του ''Δεν έχω τίποτα να κρύψω''

Android | Γιατί δε θα αγόραζα ποτέ smartphone της OnePlus

Φεύγω από την Google (μέρος 15) | ''Ξηλώνουμε'' τα Google apps από το Android

Docker (μέρος 7) | Στήνουμε έναν reverse proxy για τα container μας με το Traefik

Μάθε παιδί μου Linux (μέρος 11) | Δίσκοι, κατατμήσεις και σύστημα αρχείων (filesystem)

Απόρρητο | ''Μπερδεύουμε'' τον αλγόριθμο Google και Facebook με ψεύτικες πληροφορίες

Ubuntu Touch 2020 review | Μια πραγματική mobile GNU/Linux διανομή έτοιμη για καθημερινή χρήση

Android | Περιόρισε την παρακολούθηση των εφαρμογών και κόψε τις διαφημίσεις με το TrackerControl

Docker (μέρος 1) | Τι είναι και πώς το εγκαθιστούμε στον υπολογιστή μας;

Android | Βάλε στην ''απομόνωση'' τις εφαρμογές που δεν εμπιστεύεσαι με το Shelter