Ένα από τα θέματα που παραμένουν πάντα ενδιαφέροντα για τους αναγνώστες του ðhacker αφορά στις υπηρεσίες VPN. Προσφάτως αρχίσαμε και πάλι να δεχόμαστε αρκετές ερωτήσεις για προτάσεις ή και για αναλυτικούς οδηγούς δημιουργίας ασφαλών και σύγχρονων VPN servers. Αυτή τη φορά, η προσέγγισή μας είναι 100% προγραμματική.

Αναλυτικότερα, ξεκινώντας από τον τοπικό μας υπολογιστή κι ένα κλωνοποιημένο Github repository, θα αναπτύξουμε αυτόματα διάφορες υπηρεσίες VPN στο cloud μαζί με απλές αλλά αναλυτικές οδηγίες χρήσης που θα παρέχονται online. Όσοι διαθέτουν τα κατάλληλα credentials θα μπορούν ν’ ανατρέχουν στις οδηγίες ώστε να ρυθμίζουν κατάλληλα το σχετικό client software κι έτσι να ωφελούνται από τις παρεχόμενες υπηρεσίες VPN.

Προκειμένου να πετύχουμε τα παραπάνω στρέφουμε την προσοχή μας στο Streisand project. Χωρίς περιστροφές, παραθέτουμε τι κερδίζουμε με το Streisand.

  • Στον cloud provider της επιλογής μας (π.χ., DigitalOcean, Amazon, Linode) στήνουμε αυτόματα έναν server με Ubuntu.
  • Σε αυτόν τον server ρυθμίζονται κι ενεργοποιούνται –πάντα αυτόματα– υπηρεσίες VPN όπως, π.χ., τυπικό OpenVPN, OpenVPN δρομολογημένο μέσω SSL, OpenSSH (δεν είναι ακριβώς VPN αλλά εξακολουθεί να αποτελεί λύση για ασφαλές web surfing), OpenConnect και WireGuard.
  • Εκτός από τις υπηρεσίες VPN παίρνουμε κι έναν web server, ο οποίος σερβίρει ένα responsive static site με οδηγίες σύνδεσης για κάθε είδος VPN κι αναλόγως του λειτουργικού συστήματος ή της πλατφόρμας του client. Στο περιεχόμενο του web server έχουν πρόσβαση μόνον όσοι διαθέτουν τα κατάλληλα credentials και, πέρα από τις οδηγίες, αποκτούν πρόσβαση σε πιστοποιητικά, προφίλ σύνδεσης, καθώς και κρυπτογραφικά ελεγμένα mirrors με το απαραίτητο client software.

O Ubuntu cloud server που αναπτύσσει αυτόματα το Streisand ονομάζεται Streisand Gateway κι έχει τα unattended updates ενεργοποιημένα, ώστε να ενημερώνεται αυτόματα με τα πλέον πρόσφατα security fixes. Επειδή στο κύριο παράδειγμα εργασίας που παρουσιάζουμε έχουμε τη DigitalOcean ως cloud provider, στο πρώτο μέρος του παρόντος οδηγού συχνά αναφέρουμε τον Streisand Gateway απλά ως droplet. Πριν περάσουμε στη δράση, αξίζει ν’ αναφέρουμε τα πλεονεκτήματα που έχει η προσέγγιση του Streisand σε σύγκριση με έτοιμες λύσεις VPN όπως, π.χ., εκείνη που παρέχεται από το TorGuard.

  • Μπορούμε ν’ αναπτύσσουμε έναν Streisand Gateway όποτε τον χρειαζόμαστε, να τον χρησιμοποιούμε για όσο καιρό θέλουμε και μετά να τον καταστρέφουμε εντελώς.
  • Επειδή οι περισσότεροι cloud providers χρεώνουν με την ώρα και χάρη στις χαμηλές απαιτήσεις σε πόρους που έχει ένας Streisand Gateway, με το Streisand πληρώνουμε πολύ λιγότερο για χρήση VPN σε σύγκριση με τις εμπορικές προτάσεις.
  • Ακόμη κι αν φτιάξουμε έναν Streisand Gateway και τον κρατήσουμε ενεργό για πολλούς μήνες, και πάλι θα πληρώσουμε λιγότερα σε σύγκριση με μια εμπορική πρόταση. Μόνος τρόπος να έχουμε χαμηλότερο μηνιαίο κόστος με την εμπορική λύση, είναι να προπληρώσουμε ένα ή δύο έτη.
  • Με το Streisand χρησιμοποιούμε ανοικτό και δοκιμασμένο στην πράξη λογισμικό, το οποίο υπόκειται συχνότερα σε security audits. Επίσης, κάθε φορά που ανακαλύπτεται κάποιο πρόβλημα οι σχετικές αναβαθμίσεις ακολουθούν χωρίς καθυστερήσεις.

Σε σύγκριση με το Streisand, μόνο δύο πλεονεκτήματα μπορούμε να σκεφτούμε για τις εμπορικές λύσεις:

  1. Μεγαλύτερη ευκολία χρήσης. Δεν χρειάζεται να στήσουμε κάποιον server, παρά μόνο να ξεκινήσουμε το κατάλληλο client software και να συνδεθούμε.
  2. Έτοιμους VPN servers σε διάφορες γεωγραφικές τοποθεσίες. Από τη μεριά μας, απλά διαλέγουμε γεωγραφική τοποθεσία και συνδεόμαστε.

Για το 1) δεν έχουμε πολλά να πούμε, παρά μόνο ότι για να διαβάζετε ðhacker μάλλον δεν πτοείστε από τη φαινομενική δυσκολία ορισμένων εγχειρημάτων. Πολύ περισσότερο, αντί για τις ετοιματζήδικες λύσεις είμαστε βέβαιοι ότι προτιμάτε να σηκώνετε τα μανίκια και να φτιάχνετε πράγματα μόνοι σας. Κατ’ αυτόν τον τρόπο μαθαίνετε πραγματικά, χώρια που διασκεδάζετε περισσότερο. Αναφορικά τέλος με το 2), η αλήθεια είναι ότι σε κάποιες περιπτώσεις είναι βολικό να επιλέγουμε την τοποθεσία του VPN server στον οποίο ετοιμαζόμαστε να συνδεθούμε, π.χ., επειδή επιθυμούμε πρόσβαση σε περιεχόμενο που υπόκειται σε γεωγραφικούς περιορισμούς. Μπορούμε βεβαίως να αναπτύξουμε διαφορετικούς Streisand Gateways σε διάφορα μέρη του πλανήτη, γρήγορα όμως αφενός θα καταλήξουμε να πληρώνουμε περισσότερα, αφετέρου θα εξακολουθεί να μας λείπει η πληθώρα των επιλογών μιας εμπορικής λύσης. Αν η μεγάλη γεωγραφική ευελιξία είναι αυτό που κατά κύριο λόγο σας ενδιαφέρει, προτείνουμε να δοκιμάσετε το TorGuard (κι αν το κάνετε από αυτό το referral URL στηρίζετε και το ðhacker).

Προετοιμασία

Για την αυτοματοποιημένη δημιουργία VPN services με τη βοήθεια του Streisand χρειαζόμαστε έναν υπολογιστή με Linux, Mac OS X ή FreeBSD. Αν έχετε πρόσβαση μόνο σε μηχάνημα με Windows, κάλλιστα μπορείτε να δημιουργήσετε μια εικονική μηχανή με τη διανομή Linux της προτίμησής σας και να εργαστείτε απ’ αυτή. Σε μια τέτοια περίπτωση, ένας δωρεάν desktop hypervizor σαν το VirtualBox είναι ό,τι πρέπει.

Επιχειρώντας να δουλέψουμε με το Streisand πιθανώς θα διαπιστώσουμε ότι μας λείπουν ορισμένα πακέτα λογισμικού. Αυτά θα τα εγκαταστήσουμε με τη βοήθεια του package manager της διανομής μας ή, στην περίπτωση του Mac OS X, με το εργαλείο brew από το Homebrew. Στο πλαίσιο των δοκιμών μας εργαστήκαμε κυρίως με ένα laptop που έτρεχε openSUSE Leap 15. Πολύ σύντομα διαπιστώσαμε ότι χρειαζόμασταν τα πακέτα gcc, libcurl-devel, python-devel, python2-pycurl και python2-pip, οπότε τα εγκαταστήσαμε με τη βοήθεια του zypper. Σε κάθε περίπτωση, ανεξαρτήτως διανομής/λειτουργικού χρειαζόμαστε και το git. Στο σύστημα εργασίας ήταν ήδη εγκατεστημένο, οπότε δεν ασχοληθήκαμε.

Εγκατάσταση πακέτων, απαραίτητων για την εργασία με το Streisand σε περιβάλλον openSUSE Leap 15.Εγκατάσταση πακέτων, απαραίτητων για την εργασία με το Streisand σε περιβάλλον openSUSE Leap 15.

Ξεκινάμε κλωνοποιώντας το Git repository του Streisand. Από ένα τερματικό, μεταβαίνουμε σε έναν βολικό κατάλογο, π.χ., στο home directory του χρήστη μας, και πληκτρολογούμε: git clone https://github.com/StreisandEffect/streisand.git && cd streisand.

Κλωνοποίηση του Streisand Git repository και μετάβαση στο νέο κατάλογο που δημιουργείται.Κλωνοποίηση του Streisand Git repository και μετάβαση στο νέο κατάλογο που δημιουργείται.

Για το bootstrapping, το Streisand χρειάζεται το pip της Python 2.7. Στο Leap 15 υπάρχουν εγκατεστημένες οι εκδόσεις 2.7 και 3.6 της Python, κι εξ ορισμού χρησιμοποιείται το pip της έκδοσης 3.6. Ένας τρόπος προκειμένου να βεβαιωθούμε ότι το Streisand θα βρει το pip της 2.7, είναι να δημιουργήσουμε το κατάλληλο symbolic link:

sudo ln -sf /usr/bin/pip2.7 /etc/alternatives/pip

Εναλλακτικά –και με την προϋπόθεση ότι το πακέτο yast2-alternatives είναι εγκατεστημένο– γράφουμε sudo yast2 alternatives και φροντίζουμε ώστε η τιμή για το pip να είναι η /usr/bin/pip2.7.

Ας προχωρήσουμε τώρα στη διαδικασία του bootstrapping, που με απλά λόγια σημαίνει εγκατάσταση του λογισμικού που απαιτεί το Streisand. Μέσα από το directory που δημιουργήθηκε μετά το cloning, πληκτρολογούμε:

./util/venv-dependencies.sh ./venv

Το λογισμικό που χρειάζεται αλλά απουσιάζει, εγκαθίσταται με τη βοήθεια του pip. Μεταξύ άλλων εργαλείων εγκαθίσταται και το Ansible, το configuration management system που χρησιμοποιεί το Streisand για την αυτόματη ρύθμιση του cloud instance με τα VPN services που επιθυμούμε.

Η διαδικασία bootstrapping μόλις ολοκληρώθηκε επιτυχώς.Η διαδικασία bootstrapping μόλις ολοκληρώθηκε επιτυχώς, γεγονός που σημαίνει ότι το Streisand έχει πλέον ό,τι χρειάζεται για την αυτόματη ανάπτυξη διαφόρων ειδών VPN services στον cloud server μας.

Στη συνέχεια ενεργοποιούμε το Python virtual environment που προετοιμάστηκε κατά το προηγούμενο βήμα. Από τον τοπικό κατάλογο του Streisand, απλά πληκτρολογούμε:

source ./venv/bin/activate

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

Ανάπτυξη VPN services στο cloud

Στο Python virtual environment που μόλις ενεργοποιήσαμε, πληκτρολογούμε:

./streisand

Μας απευθύνονται τότε μια σειρά από απλές ερωτήσεις αναφορικά με τον cloud provider που θα φιλοξενήσει τον νέο server, καθώς και για τις υπηρεσίες που ο εν λόγω server θα τρέχει. Δείτε τα screenshots που ακολουθούν, διαβάστε βεβαίως και τις αντίστοιχες περιγραφές.

Επιλογή cloud provider για ανάπτυξη του νέου server.Σε ποιον cloud provider θέλουμε να δημιουργηθεί ο server που θα φιλοξενήσει τις υπηρεσίες VPN; Από εκείνους που γνωρίζει το Streisand, ο αγαπημένος μας είναι η DigitalOcean. Αν δεν έχετε ήδη λογαριασμό εκεί ή απλά θέλετε νέο λογαριασμό, φτιάξτε τον με κλικ εδώ. Αποκτάτε έτσι $100 σε credit για 60 ημέρες, ενώ στηρίζετε και το hosting του ðhacker. Υπόψιν ότι το droplet (VPS) που δημιουργεί το Streisand στη DigitalOcean κοστίζει $5 το μήνα, επομένως για δύο μήνες είστε 100% καλυμμένοι και ταυτόχρονα σας περισσεύουν $90 για άλλα projects.

Επιλογή υπηρεσιών προς εγκατάσταση στον υπό δημιουργία cloud server και υπόδειξη ιδιωτικού κλειδιού SSH.Οι προεπιλογές για τις υπηρεσίες που πρόκειται να εγκατασταθούν στον νέο cloud server είναι μια χαρά (δείτε και το αρχείο ~/.streisand/site.yml), προτιμάμε όμως να τις δούμε κι ενδεχομένως να κάνουμε μία ή δύο αλλαγές. Γι’ αυτό και στη σχετική ερώτηση απαντάμε καταφατικά (1). Χρειάζεται εξάλλου να έχουμε ένα ζεύγος ιδιωτικού/δημοσίου κλειδιού SSH, καθώς και να υποδείξουμε στο Streisand την πλήρη διαδρομή προς το ιδιωτικό κλειδί (εξ ορισμού είναι η ~/.ssh/id_rsa) (2). Αν μας πείτε πως δεν έχετε ζεύγος ιδιωτικού/δημοσίου κλειδιού SSH για το χρήστη στο λογαριασμό του οποίου τώρα βρίσκεστε, θα σας κοιτάξουμε εμφανώς σαστισμένα. Μετά από λίγα δευτερόλεπτα ελαφρώς άβολης σιωπής, θα σας πούμε να πάτε σε ένα νέο τερματικό, να δημιουργήσετε ένα ζεύγος κλειδιών πληκτρολογώντας ssh-keygen και μετά να επιστρέψετε στο τερματικό του Streisand.

Σύντομες ερωτήσεις για καθεμία από τις υπηρεσίες που ξέρει ν' αναπτύσσει το Streisand.Ερωτήσεις για καθεμία από τις υπηρεσίες που ξέρει ν’ αναπτύσσει το Streisand. Σχεδόν σε κάθε ερώτηση αφήσαμε την προκαθορισμένη απάντηση (απλά πατούσαμε το [Enter]). Η μόνη μας τροποποίηση, με αρνητική απάντηση, αφορούσε στο Tinyproxy, μιας και δεν πρόκειται να το χρησιμοποιήσουμε. Παρατηρήστε εξάλλου ότι για τις υπηρεσίες VPN θα δημιουργηθούν πέντε προφίλ πελατών, επομένως για κάθε μία εξ αυτών μπορούμε να έχουμε πέντε διαφορετικούς χρήστες. Στην πραγματικότητα επιτρέπεται να έχουμε περισσότερους από πέντε, όμως τότε κάποιοι θα πρέπει να χρησιμοποιούν τα ίδια πιστοποιητικά.

Επιλογή datacenter που θα φιλοξενήσει τον cloud server μας και καθορισμός του ονόματός του. H DigitalOcean έχει datacenters σε διάφορες τοποθεσίες στον πλανήτη και τώρα υποδεικνύουμε ποιο από αυτά θα φιλοξενήσει το νέο droplet (1). Γενικά, καλό είναι να επιλέξουμε datacenter που βρίσκεται γεωγραφικά κοντά μας. Αμέσως μετά πληκτρολογούμε ένα όνομα για τον νέο server, το οποίο θα αποτελέσει το hostname του (2). Το προεπιλεγμένο είναι μια χαρά.

Πληκτρολόγηση token για πλήρη πρόσβαση στο DigitalOcean API.Στο σημείο αυτό οφείλουμε να πληκτρολογήσουμε ένα προσωπικό token για το DigitalOcean API, ώστε το Streisand να φτιάξει το droplet που θα αποτελέσει τον cloud server μας.

Υπόδειξη δημοσίου κλειδιού SSH που έχουμε ήδη ανεβάσει στο λογαριασμό της DigitalOcean και τώρα χρειάζεται να υπάρχει στο υπό δημιουργία droplet.Υποδεικνύουμε το όνομα του δημοσίου κλειδιού SSH που βρίσκεται ήδη στο λογαριασμό μας στη DigitalOcean και τώρα χρειάζεται να υπάρχει στο αρχείο .ssh/authorized_keys του χρήστη root, στο υπό δημιουργία droplet (1). Προσοχή: Το εν λόγω κλειδί πρέπει να ταυτίζεται με εκείνο του τοπικού μας χρήστη, δηλαδή του χρήστη από το λογαριασμό του οποίου έχουμε τρέξει το Streisand. Αν δεν έχετε ήδη ανεβάσει το κλειδί στη DigitalOcean τότε συνδεθείτε στο web dashboard της υπηρεσίας, από τη στήλη αριστερά κάντε κλικ στο Security, στο μεγάλο πλαίσιο δεξιά σκρολάρετε έως ότου δείτε την ενότητα SSH keys, κι απλά πατήστε στο κουμπί [Add SSH Key] δεξιά. Και μετά την πληκτρολόγηση του ονόματος του κλειδιού, το Streisand μάς προτρέπει να πατήσουμε το [Enter] ώστε να πιάσει δουλειά (2).

Καθώς το Streisand εργάζεται, από το web dashboard της DigitalOcean μπορούμε να παρακολουθούμε τη δημιουργία του νέου droplet.Καθώς το Streisand εργάζεται, από το web dashboard της DigitalOcean μπορούμε να παρακολουθούμε τη δημιουργία του νέου droplet. Παρατηρήστε τη γεωγραφική περιοχή του datacenter που το φιλοξενεί (για εμάς FRA1), το λειτουργικό του σύστημα (Ubuntu Server), το δημόσιο IP του, το πλήθος των πυρήνων, το μέγεθος της μνήμης RAM καθώς και το κόστος του ανά μήνα. Η χρέωση, πάντως, γίνεται ανά ώρα, οπότε μπορείτε να καταστρέψετε το droplet όποτε θέλετε και να χρεωθείτε μόνο για τις ώρες που ήταν ενεργό.

Προαιρετική αντιστοίχιση FQDN στο δημόσιο IP του cloud server. Αν έχουμε κάποιο domain καθώς και πρόσβαση στον name server που το εξυπηρετεί, μπορούμε τότε να ορίσουμε ένα FQDN για το νέο droplet και το Streisand θα φροντίσει να ζητήσει, από το Let’s Encrypt project, ένα υπογεγραμμένο πιστοποιητικό TLS για τον web server (nginx) του droplet. Στο περιεχόμενο του συγκεκριμένου web server έχουν πρόσβαση μόνον όσοι διαθέτουν το κατάλληλο συνθηματικό. Σ’ αυτόν βρίσκουν αναλυτικές οδηγίες σύνδεσης για κάθε μία από τις παρεχόμενες υπηρεσίες VPN, καθώς και download links προς connection profiles και clients. Αν δεν έχουμε δικό μας domain ή πρόσβαση στον αντίστοιχο name server, τότε το Streisand δημιουργεί ένα self-signed certificate για τον web server.

Το A record για το subdomain που δείχνει στον Streisand Gateway.Διαθέτουμε το domain colder.xyz και στον Streisand cloud server αντιστοιχίσαμε το subdomain dalvik.colder.xyz. Ο name server για το domain παρέχεται από το Mail-in-a-Box κι από το web panel του MiaB βλέπουμε το σχετικό A record. Υπενθυμίζουμε ότι το δημόσιο IP του droplet φαίνεται κι από το web dashboard της DigitalOcean.

Πληκτρολόγηση διεύθυνσης email για λήψη ενημερώσεων αναφορικά με το πιστοποιητικό από το Let's Encrypt.Στην περίπτωση που έχουμε αντιστοιχίσει FQDN στο droplet, και συνεπώς το Streisand έχει ζητήσει πιστοποιητικό από το Let’s Encrypt για τον αντίστοιχο web server, αν θέλουμε πληκτρολογούμε μια έγκυρη διεύθυνση email. Σε αυτή θα λαμβάνουμε μηνύματα όταν το πιστοποιητικό πρόκειται να λήξει ή όταν συμβαίνουν σημαντικές αλλαγές στην υπηρεσία του Let’s Encrypt.

Το Streisand μόλις ολοκλήρωσε όλες τις εργασίες του, διαθέτουμε πλέον τον δικό μας cloud server για ασφαλή πρόσβαση στο Internet, και στους ανθρώπους που εμπιστευόμαστε έχουμε την επιλογή να δώσουμε ένα αρχείο HTML με οδηγίες σύνδεσης.Το Streisand μόλις ολοκλήρωσε όλες τις εργασίες του, διαθέτουμε πλέον τον δικό μας cloud server για ασφαλή πρόσβαση στο Internet, και στους ανθρώπους που εμπιστευόμαστε έχουμε την επιλογή να δώσουμε ένα αρχείο HTML με οδηγίες σύνδεσης.

Το περιεχόμενο του αρχείου HTML που δημιούργησε το Streisand, με τις οδηγίες σύνδεσης στον cloud server.Το περιεχόμενο του αρχείου HTML που δημιούργησε το Streisand, με τις οδηγίες σύνδεσης στον cloud server. Το συγκεκριμένο αρχείο βρίσκεται στον κατάλογο generated-docs, εντός του καταλόγου στον οποίο κλωνοποιήσαμε το Streisand. Στην περίπτωσή μας, αυτή ήταν η πλήρης διαδρομή προς το εν λόγω HTML:

~/github/streisand/generated-docs/streisand.html

(Σημειώστε ότι, γενικά, το όνομα του αρχείου HTML είναι ίδιο με το όνομα που μας ζητήθηκε να πληκτρολογήσουμε πριν λίγο, όταν τρέξαμε το script streisand.) Όπως αναφέραμε, το streisand.html μπορούμε να το δώσουμε σε ανθρώπους που εμπιστευόμαστε, ώστε να αποκτήσουν πρόσβαση στις υπηρεσίες VPN που παρέχει ο Streisand Gateway. Αλλά χρειάζεται να του ρίξουμε κι εμείς μια ματιά, τουλάχιστον την πρώτη φορά που θα επιχειρήσουμε να συνδεθούμε στον server. Ανοίγοντάς το, π.χ., στον Firefox, βλέπουμε κατ’ αρχάς το FQDN ή το δημόσιο IP του server (1). Επιπλέον, μαθαίνουμε και τα credentials (username και password) για τη σύνδεση στο ασφαλές web site του server (2). Εκεί βρίσκουμε αναλυτικές οδηγίες για τη σύνδεση σε κάθε μία από τις υπηρεσίες που παρέχονται από τον Streisand Gateway. Επίσης, παρατίθενται download links προς τα αρχεία ρυθμίσεων, καθώς και τους clients που χρειαζόμαστε. Σημειώστε πως το λογισμικό που κατεβάζουμε βρίσκεται αποθηκευμένο στον ίδιο τον Streisand Gateway. Εκτός από τα αρχεία ρυθμίσεων, τα οποία δημιουργούνται αυτόματα από το Streisand, οι clients για διάφορες πλατφόρμες μεταφέρονται στον cloud server από τα αντίστοιχα επίσημα sites. Φυσικά, γίνονται όλοι οι απαραίτητοι έλεγχοι ψηφιακών υπογραφών ή/και hashes, ώστε να διασφαλίζεται η γνησιότητα του λογισμικού.

Κατά τη σύνδεση στον web server του Streisand Gateway απαιτείται πληκτρολόγηση username και password.Κατά τη σύνδεση στον web server του Streisand Gateway απαιτείται πληκτρολόγηση username και password. Με βάση τις επιλογές που κάναμε στο πλαίσιο των δοκιμών μας, ο web server στον οποίο τώρα συνδεόμαστε βρίσκεται στη διεύθυνση https://dalvik.colder.xyz.

Παραδείγματα χρήσης

Την πρώτη φορά που στήσαμε τον Streisand Gateway και επισκεφτήκαμε το responsive web site με τις οδηγίες, δοκιμάσαμε διαφορετικά είδη “VPN”. Βάζουμε εισαγωγικά, κάτι που γενικά το αποφεύγουμε συνειδητά, διότι σ’ αυτήν ειδικά την περίπτωση δεν αναφερόμαστε μόνο σε τεχνολογίες Virtual Private Networking αλλά και σε συνδέσεις SSH. Προτείνουμε να ακολουθήσετε τις οδηγίες δοκιμάζοντας κι εσείς διάφορες τεχνολογίες ασφαλούς σύνδεσης, πάντα για το λειτουργικό σύστημα αλλά και για τη συσκευή που σας ενδιαφέρει (π.χ., για laptop με Windows ή Mac OS X, για smartphone με Android ή iOS κ.ο.κ.). Στη συνέχεια περιγράφουμε εν συντομία την εμπειρία μας δοκιμάζοντας τρία διαφορετικά είδη ασφαλών συνδέσεων στο Internet, πάντα μέσω του ολοκαίνουργιου Streisand Gateway.

Σημείωση

Σε περίπτωση που θελήσετε να χρησιμοποιήσετε στον web browser απευθείας τα URLs που παραθέτουμε, φροντίσετε ώστε να έχετε ήδη κάνει login στον δικό σας Streisand Gateway κι αντικαθιστάτε το dalvik.colder.xyz με το FQDN ή με το IP του δικού σας droplet. Αντικαθιστάτε παρομοίως και στα αρχεία ρυθμίσεων.

SSH tunneling

Οι οδηγίες που ακολουθούν εφαρμόζονται είτε σε περιβάλλον Linux είτε σε περιβάλλον Mac OS X. Αρχικά κατεβάσαμε το ιδιωτικό κλειδί που χρησιμεύει για passwordless login στο droplet, από την ακόλουθη διεύθυνση:

https://dalvik.colder.xyz/ssh/streisand_rsa

Το αρχείο streisand_rsa είναι το εν λόγω ιδιωτικό κλειδί και το μεταφέραμε στον κατάλογο ~/.ssh του χρήστη μας, φροντίζοντας ώστε να έχει και τα κατάλληλα δικαιώματα:

mv ~/Downloads/streisand_rsa ~/.ssh/
chmod 0600 ~/.ssh/streisand_rsa 

Στη συνέχεια, στο αρχείο ~/.ssh/config (φτιάξτε το αν δεν υπάρχει ήδη) προσθέσαμε την ακόλουθη ενότητα:

Host streisand
    User forward
    Port 443
    HostName dalvik.colder.xyz
    IdentitiesOnly yes
    IdentityFile ~/.ssh/streisand_rsa

Ακολούθως εγκαθιδρύσαμε ένα SOCKS tunnel από το τοπικό port 50999/TCP προς τον Streisand Gateway:

ssh -vN -D 50999 streisand

Τέλος, ρυθμίσαμε τον Firefox ώστε να βγαίνει στο Internet μέσω του συγκεκριμένου tunnel. Για το πώς μπορείτε να πετύχετε το ίδιο διαβάστε τις οδηγίες που παρατίθενται στον ίδιο τον Streisand Gateway:

https://dalvik.colder.xyz/ssh/#windows

(Διαβάστε ειδικά την ενότητα “Configuring Firefox to connect through a SOCKS proxy”. Θα παρατηρήσετε ότι το SOCKS port που αναφέρεται εκεί είναι το 8080 κι όχι το 50999, που χρησιμοποιούμε στο παράδειγμά μας. Απλά φροντίστε να δώσετε στον Firefox το ίδιο port που δώσατε και στην παράμετρο -D του ssh.)

Εγκαθίδρυση SSH tunnel προς τον Streisand Gateway, με τα debugging messages ορατά.Καθώς εγκαθιδρύουμε ένα SSH tunnel προς τον Streisand Gateway, αν έχουμε ζητήσει την εμφάνιση debug info στο τερματικό (παράμετρος -v για το ssh) τότε βλέπουμε, μεταξύ άλλων, το host key fingerprint του απομακρυσμένου μηχανήματος στο οποίο τώρα επιχειρούμε σύνδεση. Το συγκεκριμένο fingerprint πρέπει να ταυτίζεται με ένα από τα δύο που παρατίθενται στο https://dalvik.colder.xyz/ssh/#linux-and-macos. Διαφορετικά, είτε προσπαθούμε να συνδεθούμε σε άλλον server είτε είμαστε θύματα επίθεσης Man-in-the-Middle. Μη γελάτε, η πιθανότητα του προαναφερθέντος ενδεχομένου δεν είναι πάντα μηδέν :)

Χάρη στις προαναφερθείσες ενέργειες, η σύνδεση του Firefox προς τον έξω κόσμο γίνεται μέσω ενός κρυπτογραφημένου καναλιού προς τον Streisand Gateway. Είναι νομίζουμε περιττό να σημειώσουμε ότι οποιαδήποτε άλλη εφαρμογή επικοινωνεί με τον έξω κόσμο, συνεχίζει να το κάνει μέσω του ISP μας. Ακριβώς γι’ αυτό, το SSH tunneling θα το δείτε ν’ αναφέρεται κι ως poor man’s VPN. Μερικές φορές, πάντως, αποτελεί τον μοναδικό διαθέσιμο τρόπο για ασφαλές web browsing. Σκεφτείτε, π.χ., ότι βρισκόσαστε σε μηχάνημα στο οποίο δεν έχετε δικαιώματα για εγκατάσταση λογισμικού, οπότε δεν μπορείτε να έχετε τον κατάλληλο VPN client. Ακόμη κι αν το κατάλληλο client software είναι ήδη εγκατεστημένο, ίσως για την εκτέλεσή του να απαιτούνται δικαιώματα διαχειριστή κι ο λογαριασμός του χρήστη σας δεν τα έχει.

Αν επιθυμείτε να εφαρμόσετε την συγκεκριμένη τεχνική σύνδεσης σε περιβάλλον Windows ή Android, διαβάστε τις αντίστοιχες οδηγίες στο https://dalvik.colder.xyz/ssh.

Σημείωση

Οι περισσότερο προσεκτικοί θα παρατηρήσατε ότι το port που αναγράφεται στο αρχείο ~/.ssh/config είναι το 443. Απ’ αυτό το port ο Streisand Gateway ακούει για συνδέσεις SSH. Το ίδιο port, όμως, χρησιμοποιεί κι ο nginx αλλά κι ο OpenVPN server, όπως εύκολα μπορείτε να διαπιστώσετε. Πώς είναι δυνατόν να έχουμε τρεις διαφορετικές υπηρεσίες να χρησιμοποιούν το ίδιο port; Στην πραγματικότητα δεν είναι δυνατόν, γι’ αυτό και στο δημόσιο network interface του Streisand Gateway έχουμε μία μόνο υπηρεσία να περιμένει πακέτα στο port 443. Αυτή η υπηρεσία δεν είναι άλλη από τον protocol demultiplexer ονόματι sslh. Το sslh είναι σε θέση να εξετάζει τα πακέτα, να καταλαβαίνει για ποια υπηρεσία προορίζονται και κατόπιν να τα ανακατευθύνει σ’ αυτή. Γιατί όμως το sslh να χρησιμοποιεί το port 443 κι όχι κάποιο άλλο, αδιάφορο high port; Πολύ απλά, διότι κανένας ISP και σχεδόν κανένα εταιρικό firewall μπλοκάρει συνδέσεις προς το port 443.

Good ol’ OpenVPN

Είναι το είδος VPN με το οποίο έχουμε ασχοληθεί αρκετές φορές, το είδος VPN που σχεδόν όλες οι εταιρείες υλοποιούν για τους εργαζομένους ή/και για τους πελάτες τους.

Παίζοντας με τον καινούργιο Streisand Gateway, δοκιμάσαμε το OpenVPN σε περιβάλλον Linux καθώς και Mac OS X. Η γενική σελίδα οδηγιών, για όλα τα υποστηριζόμενα λειτουργικά συστήματα και πλατφόρμες, είναι στο https://dalvik.colder.xyz/openvpn.

Στις οδηγίες για το Mac OS X (https://dalvik.colder.xyz/openvpn/#macos) προτείνεται να κατεβάσουμε τον δωρεάν client ονόματι Tunnelblick (https://dalvik.colder.xyz/mirror/openvpn). Το συγκεκριμένο λογισμικό είναι μια χαρά, προτιμάμε ωστόσο να χρησιμοποιούμε το (επί πληρωμή) Viscosity. Έτσι, για τη σύνδεσή μας το μόνο που χρειαστήκαμε από τον Streisand Gateway ήταν ένα από τα λεγόμενα combined profiles (https://dalvik.colder.xyz/openvpn/#combined-profiles). Το αρχείο που κατεβάσαμε, με κατάληξη ovpn, το εισάγαμε (import) στο Viscosity κι αμέσως μετά ήμασταν σε θέση να εγκαθιδρύουμε ασφαλείς συνδέσεις OpenVPN προς τον Streisand Gateway.

Στο Linux εξάλλου μας αρέσει να ξεκινάμε συνδέσεις OpenVPN από το τερματικό και με τη βοήθεια του openvpn, το οποίο λειτουργεί τόσο ως server όσο κι ως client. (Αν δεν το έχετε, εγκαταστήστε το τώρα με τη βοήθεια του package manager της διανομής σας.) Γι’ αυτό κι από τον Streisand Gateway κατεβάσαμε ένα από τα combined profiles και σε ένα τερματικό πληκτρολογήσαμε κάτι τέτοιο:

sudo openvpn 167.99.245.10-combined.ovpn

Η σύνδεση επετεύχθη επιτυχώς, σε λίγο όμως διαπιστώσαμε ότι είχαμε DNS leak: παρά το ότι βγαίναμε στο Internet μέσω του Streisand Gateway, εξακολουθούσαμε να χρησιμοποιούμε τους name servers του ISP μας (διαβάστε στην τελευταία ενότητα πώς ελέγχουμε για DNS leaks). Πρόκειται για γνωστό φαινόμενο στις διανομές Linux, ειδικά όταν ξεκινάμε συνδέσεις OpenVPN από το τερματικό και με χρήση του openvpn. Στην τεκμηρίωση που παρέχεται από πλευράς Streisand Gateway γίνεται αναφορά στα DNS leaks, και μάλιστα στο https://dalvik.colder.xyz/openvpn/#linux προτείνεται μια λύση. Ουσιαστικά, αρκεί να προσθέσουμε μερικές γραμμές στην αρχή του προφίλ σύνδεσης και, χάρη σε ένα script ονόματι update-resolv-conf, κάθε φορά που ξεκινάμε ή σταματάμε μια σύνδεση OpenVPN το αρχείο /etc/resolv.conf τροποποιείται καταλλήλως, ώστε να εμπεριέχει τους name servers που πρέπει να περιέχει (εκείνους του Streisand Gateway όταν η σύνδεση εγκαθιδρύεται, κι εκείνους του ISP όταν η σύνδεση διακόπτεται). Όλα καλά, μόνο που ούτε το update-resolv-conf ούτε κάποιο παρόμοιο script υπήρχε στη διανομή μας (openSUSE Leap 15). Κατεβάσαμε, λοιπόν, το script update-resolv-conf.sh από το Github repository masterkorp/openvpn-update-resolv-conf, το μεταφέραμε κάτω από το /etc/openvpn και φροντίσαμε ώστε να είναι εκτελέσιμο. Στη συνέχεια, στην αρχή του προφίλ σύνδεσης προσθέσαμε τις ακόλουθες τρεις γραμμές:

script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.sh

Από εκεί και μετά, κάθε φορά που εγκαθιδρύαμε μια σύνδεση OpenVPN προς τον Streisand Gateway –πάντα από το τερματικό και με χρήση του openvpn– δεν είχαμε DNS leaks.

Stealth OpenVPN, μέσω SSL

Οι συνδέσεις OpenVPN είναι απόλυτα ασφαλείς, υπό την έννοια ότι μεταξύ του υπολογιστή μας και του Streisand Gateway όλα τα δεδομένα διακινούνται ισχυρά κρυπτογραφημένα και κανείς, ούτε καν ο ISP μας, δεν είναι σε θέση να τα αποκρυπτογραφεί. O ISP, όμως, είναι σε θέση να γνωρίζει πότε χρησιμοποιούμε OpenVPN. Δεν ξέρει τι διακινούμε, καταλαβαίνει ωστόσο ότι υφίσταται σύνδεση OpenVPN. Από εκεί και πέρα, δεν είναι παράλογο να υποθέσουμε ότι έχει (τουλάχιστον) τρεις επιλογές:

  1. Να μην κάνει τίποτε απολύτως και να μας αφήσει να εγκαθιδρύουμε ό,τι είδους συνδέσεις επιθυμούμε, όποτε το επιθυμούμε και για όση ώρα το επιθυμούμε.
  2. Να προβεί σε bandwidth throttling, ουσιαστικά ελαττώνοντας την ταχύτητα σύνδεσης κι έτσι εμποδίζοντάς μας να χρησιμοποιούμε υπηρεσίες όπως, π.χ., video streaming.
  3. Να μπλοκάρει εντελώς τις κρυπτογραφημένες μας συνδέσεις.

Είναι προφανές ότι με την πρώτη επιλογή δεν έχει κανείς πρόβλημα. Αν όμως ο ISP αποφασίσει να εφαρμόσει τη δεύτερη ή την τρίτη επιλογή, είναι επίσης προφανές ότι μας δημιουργεί πρόβλημα.

Για τις περιπτώσεις που ο ISP μάς δυσκολεύει τη ζωή όσον αφορά στις συνδέσεις OpenVPN, μία λύση είναι να τις διοχετεύουμε μέσω μιας τυπικής σύνδεσης SSL προς ένα τυπικό TCP port (κανένας ISP δεν έχει λόγο να μπλοκάρει τέτοιου είδους συνδέσεις). Η υλοποίηση της συγκεκριμένης λύσης από πλευράς Streisand επιτυγχάνεται σε δύο βήματα: α) εγκαθίδρυση σύνδεσης SSL από τον υπολογιστή μας έως τον Streisand Gateway με τη βοήθεια του εργαλείου stunnel, β) δρομολόγηση του OpenVPN traffic μέσω της προαναφερθείσας σύνδεσης SSL.

Θέλοντας να δοκιμάσουμε συνδέσεις OpenVPN μέσω SSL, παίξαμε σε περιβάλλον Linux αλλά και σε Mac OS X. Από τη στιγμή που εργαζόμαστε παρόμοια σε κάθε ένα από τα δύο λειτουργικά, στη συνέχεια παραθέτουμε τα βήματα που ακολουθήσαμε από το laptop με openSUSE Leap.

Οι γενικές οδηγίες για το OpenVPN tunneling μέσω SSL είναι στο https://dalvik.colder.xyz/openvpn/stunnel.html. Χρειάζεται να έχουμε εγκατεστημένο το εργαλείο stunnel, το οποίο κατά πάσα πιθανότητα περιλαμβάνεται στα πακέτα κάθε σύγχρονης διανομής. Σε διαφορετική περίπτωση, στις οδηγίες του Streisand Gateway παρέχεται download link προς ένα κρυπτογραφικά ελεγμένο archive με τον πηγαίο κώδικα του stunnel (https://dalvik.colder.xyz/mirror/stunnel), ώστε να το μεταγλωττίσουμε μόνοι μας. Στην περίπτωση του openSUSE, πάντως, απλά εγκαταστήσαμε το αντίστοιχο πακέτο RPM:

sudo zypper -n in stunnel

Στη συνέχεια πήραμε ένα απλό configuration file για το stunnel, απευθείας από το https://dalvik.colder.xyz/openvpn/stunnel.conf. Κρατήσαμε ένα αντίγραφο εφεδρείας του πρωτότυπου /stc/stunnel/stunnel.conf (είναι αυτό που περιλαμβάνεται στο πακέτο του stunnel), μετακινήσαμε το stunnel.conf που κατεβάσαμε από τον Streisand Gateway στο /stc/stunnel/ και, τέλος, του αλλάξαμε το ιδιοκτησιακό καθεστώς ώστε ν’ ανήκει στον root:

sudo mv /etc/stunnel/stunnel.conf /etc/stunnel/stunnel.conf.orig
sudo mv ~/Downloads/stunnel.conf /etc/stunnel/
sudo chown root:root /etc/stunnel/stunnel.conf

Ρίχνοντας μια ματιά στο /etc/stunnel/stunnel.conf διαπιστώσαμε ότι το stunnel αφουγκράζεται για συνδέσεις στο port 41194/TCP του localhost. Επίσης, η σύνδεση που εγκαθιδρύει στον Streisand Gateway γίνεται προς το port 993. Για όποιον τρίτο μπει στον κόπο να ελέγξει, λοιπόν, είναι σαν να υφίσταται μια φυσιολογική σύνδεση SSL προς κάποιον IMAP server.

Το stunnel το ξεκινήσαμε πληκτρολογώντας, απλά, sudo stunnel. Παρεμπιπτόντως, στις οδηγίες στον Streisand Gateway ο χρήστης παροτρύνεται να ξεκινήσει την αντίστοιχη υπηρεσία Systemd. Στο Leap 15, όμως, η εκκίνησή της αποτύγχανε. Πάντως όπως κι αν ξεκινήσουμε το stunnel, με τη βοήθεια του εργαλείου ss διαπιστώνουμε αφενός ότι το προγραμματάκι είναι ενεργοποιημένο, αφετέρου ότι το port 41194 είναι όντως TCP.

Έλεγχος ορθής λειτουργίας του stunnel, με τη βοήθεια του εργαλείου ss.Παρατηρώντας την έξοδο του εργαλείου ss διαπιστώνουμε ότι το stunnel αφουγκράζεται για συνδέσεις από το port 41194 του localhost.

Χρειαζόμασταν κι ένα προφίλ για το openvpn, το οποίο θα συνδέεται στο port 41194 του localhost. Φυσικά, αυτό παρέχεται από τον Streisand Gateway και συγκεκριμένα από τη σελίδα https://dalvik.colder.xyz/openvpn/stunnel.html (δείτε την ενότητα “OpenVPN Setup”). Στην περίπτωσή μας επρόκειτο για το αρχείο 167.99.245.10-stunnel.ovpn, το οποίο τροποποιήσαμε ελαφρώς προκειμένου να αποφύγουμε τα DNS leaks (δείτε και την προηγούμενη ενότητα του παρόντος άρθρου). Η εγκαθίδρυση σύνδεσης OpenVPN μέσω SSL έγινε με τον αναμενόμενο τρόπο: sudo openvpn 167.99.245.10-stunnel.ovpn.

Από τα μηνύματα του openvpn διαπιστώνουμε ότι πραγματοποιείται σύνδεση στο τοπικό port που χρησιμοποιεί το stunnel.Από τα μηνύματα του openvpn στο τερματικό μας, βεβαιωνόμαστε ότι έχουμε το σωστό connection profile: μόλις πετύχαμε σύνδεση στο port 41194/TCP του localhost, το οποίο χρησιμοποιεί το stunnel.

Παρατηρώντας και την έξοδο του εργαλείου ss, επαληθεύουμε ότι το openvpn έχει πράγματι συνδεθεί στο τοπικό port του stunnel.Παρατηρώντας και την έξοδο του εργαλείου ss, επαληθεύουμε ότι το openvpn έχει πράγματι συνδεθεί στο τοπικό port του stunnel. Στο (1) φαίνεται από πού ακούει το stunnel για συνδέσεις, ενώ στο (2) βλέπουμε πού έχει συνδεθεί το openvpn.

Έλεγχος για δημόσια διεύθυνση IP και DNS leaks

Θέλοντας να ελέγξουμε στοιχειωδώς τη λειτουργικότητα μιας σύνδεσης VPN, δύο πράγματα οφείλουμε να βρίσκουμε: α) τη δημόσια διεύθυνση IP με την οποία βγαίνουμε στο Internet, και β) τον name server ή τους name servers που πραγματικά χρησιμοποιούμε όσο η σύνδεση VPN είναι ενεργή.

Ένας τρόπος για να δούμε το δημόσιο IP μας από το τερματικό, είναι να πληκτρολογήσουμε curl ifconfig.me; echo. Αν η σύνδεση VPN είναι ενεργή, θα πρέπει τότε να πάρουμε το IP του droplet μας στη DigitalOcean (βρείτε το και στο web dashboard του λογαριασμού σας). Εναλλακτικά, από τον web browser της προτίμησής μας αρκεί να επισκεφτούμε κάποιο από τα sites που επιστρέφουν το δημόσιο IP μας. Πηγαίνετε, για παράδειγμα, σε αυτή τη σελίδα του TorGuard.

Αναφορικά με τους name servers, αυτό που μας ενδιαφέρει είναι να διαπιστώσουμε αν έχουμε DNS leaks. Στο site του TorGuard υπάρχει μια σελίδα που μπορούμε να επισκεπτόμαστε ακριβώς γι’ αυτό το σκοπό. Αν θέλετε ακόμα πιο λεπτομερείς ελέγχους, πηγαίνετε τότε στον δικτυακό τόπο του DNS leak test και κάντε κλικ στο κουμπί [Extended test].

Πριν σας αφήσουμε να παίξετε, να πειραματιστείτε και να χαρείτε τον Streisand Gateway, ας σημειώσουμε ότι αξίζει να δείτε κι ορισμένες άλλες τεχνολογίες VPN που παρέχει το Streisand αλλά δεν ασχοληθήκαμε στο παρόν κείμενο. Κατά νου έχουμε το ταχύτατο WireGuard για χρήστες Linux καθώς και το επίσης γρήγορο κι ελαφρύ OpenConnect, το οποίο υποστηρίζει πλήρως Cisco AnyConnect clients.