Πώς μπορείτε να χρησιμοποιήσετε το OpenVPN για ασφαλή πρόσβαση σε ιδιωτικούς πόρους AWS

Αυτό το άρθρο προσαρμόστηκε από μέρος της νέας σειράς μαθημάτων Pluralsight, «Σύνδεση πόρων εσωτερικού δικτύου με την υποδομή AWS».

Μερικές φορές πρέπει να συνδεθείτε με πόρους που έχετε εκτελέσει στις Υπηρεσίες Web του Amazon; Η πρόσβαση στις δημόσιες παρουσίες EC2 με χρήση SSH και η κρυπτογράφηση των δεδομένων S3 σας είναι, για όλες τις προθέσεις και σκοπούς, αρκετά ασφαλής. Τι γίνεται όμως με το να μπαίνεις σε μια παρουσία βάσης δεδομένων RDS back-end ή να δουλεύεις με δεδομένα που βασίζονται σε AWS που δεν είναι δημόσια; Υπάρχουν όλοι οι λόγοι για τους οποίους οι διαχειριστές διατηρούν αυτούς τους πόρους μακριά από το ευρύ κοινό. Αλλά αν δεν μπορείτε να τα καταφέρετε όταν χρειάζεστε, τι καλό είναι να σας κάνουν;

Επομένως, θα πρέπει να βρείτε έναν ασφαλή και αξιόπιστο τρόπο γύρω από τα ACL και τις ομάδες ασφαλείας που προστατεύουν τα πράγματά σας. Μία λύση που καλύπτω στο μάθημα «Σύνδεση εσωτερικών πόρων με την υποδομή AWS» στο Pluralsight είναι το Direct Connect. Αλλά αν η τιμή της Direct Connect είναι μια οικονομική επιβάρυνση για την εταιρεία σας, τότε κάποιο είδος σήραγγας VPN μπορεί να κάνει το κόλπο.

Τι είναι ένα εικονικό ιδιωτικό δίκτυο;

Τα εικονικά ιδιωτικά δίκτυα (VPN) χρησιμοποιούνται συχνά για να επιτρέπουν κατά τα άλλα περιορισμένη δραστηριότητα δικτύου ή ανώνυμη περιήγηση. Αλλά δεν είναι αυτό το άρθρο.

Το VPN είναι μια σύνδεση από σημείο σε σημείο που σας επιτρέπει να μεταφέρετε δεδομένα με ασφάλεια μεταξύ δύο ιστότοπων σε ένα δημόσιο δίκτυο. Ουσιαστικά, μια σήραγγα μπορεί να σχεδιαστεί για να συνδυάζει δύο γεωγραφικά διαχωρισμένους ιδιωτικούς ιστότοπους σε ένα μοναδικό ιδιωτικό δίκτυο. Στο πλαίσιο μας, αυτό θα σήμαινε τη σύνδεση του τοπικού δικτύου γραφείων σας με το AWS VPC που φιλοξενεί τους ιδιωτικούς πόρους σας.

Υπάρχουν δύο τρόποι για να το κάνετε αυτό:

  • Μια διαχειριζόμενη σύνδεση VPN που δημιουργήθηκε πάνω από μια εικονική ιδιωτική πύλη AWS
  • Χρησιμοποιώντας το δικό σας VPN.

Αυτό το άρθρο θα επικεντρωθεί στη μέθοδο "κάνετε μόνοι σας".

Ο διακομιστής πρόσβασης OpenVPN

Όπως υποδηλώνει το όνομα, το OpenVPN είναι ένα έργο ανοιχτού κώδικα και μπορείτε πάντα να κάνετε λήψη της δωρεάν έκδοσης κοινότητας και να ρυθμίσετε τα πράγματα στον δικό σας διακομιστή VPN. Ωστόσο, η εταιρεία OpenVPN παρέχει επίσης έναν ειδικά κατασκευασμένο OpenVPN Access Server ως EC2 AMI, ο οποίος βγαίνει από το κουτί με φιλική προς το AWS ενσωμάτωση και αυτοματοποιημένα εργαλεία διαμόρφωσης.

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

Πόσο κοστίζει? Εάν δοκιμάζετε μόνο πράγματα και δεν σκοπεύετε να αποκτήσετε πρόσβαση στο VPN χρησιμοποιώντας περισσότερες από δύο συνδέσεις κάθε φορά, τότε το ίδιο το AMI είναι δωρεάν. Θα εξακολουθείτε να είστε προσεκτικοί για τα κανονικά κόστη μιας παρουσίας EC2, αλλά εάν ο λογαριασμός σας εξακολουθεί να πληροί τις προϋποθέσεις για τη δωρεάν βαθμίδα, τότε μπορείτε επίσης να το λάβετε δωρεάν.

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

Να τι θα κάνουμε σε αυτόν τον οδηγό:

  • Επιλέξτε, προμηθεύστε και ξεκινήστε ένα Ubuntu AMI με προεγκατεστημένο το OpenVPN Access Server στο VPC μου
  • Πρόσβαση στο διακομιστή χρησιμοποιώντας SSH και διαμόρφωση του VPN
  • Ρύθμιση χρήστη διαχειριστή
  • Ρύθμιση ενός τοπικού υπολογιστή ως προγράμματος-πελάτη OpenVPN και σύνδεση σε μια ιδιωτική παρουσία στο AWS VPC μου

Ετοιμος?

Εκκίνηση διακομιστή πρόσβασης OpenVPN

Από τον πίνακα ελέγχου EC2 - και διασφαλίζοντας ότι βρισκόμαστε στη σωστή περιοχή AWS - ξεκινήστε μια παρουσία για να λειτουργεί ως διακομιστής VPN. Αντί να χρησιμοποιήσω ένα από τα AMI Γρήγορης Εκκίνησης, θα κάνω κλικ στην καρτέλα AWS Marketplace και θα αναζητήσω "διακομιστή πρόσβασης openvpn". Το OpenVPN παρέχει έναν αριθμό επίσημων εικόνων που συνδέονται με άδειες που προσφέρουν αυξανόμενους αριθμούς συνδεδεμένων πελατών.

Θα πάω με αυτήν την εικόνα του Ubuntu που λειτουργεί μέσω μιας ρύθμισης "Φέρτε τη δική σας άδεια". Όπως έγραψα νωρίτερα, δεν θα χρειαζόμαστε πραγματικά άδεια για αυτό που πρόκειται να κάνουμε.

Επιλέγοντας το AMI ανοίγει ένα αναδυόμενο παράθυρο που μας λέει πόσο θα κοστίζει αυτή η εικόνα ανά ώρα χρησιμοποιώντας διάφορους τύπους παρουσιών και επιλογές αποθήκευσης EBS. Ωστόσο, αυτά είναι μόνο τακτικά κόστη υποδομής AWS και δεν περιλαμβάνουν τέλη άδειας.

Όσον αφορά τον τύπο παρουσίας, θα υποβαθμίσω σε t2.micro για να το διατηρήσω εντός της ελεύθερης βαθμίδας. Ένας πολυάσχολος διακομιστής παραγωγής μπορεί να απαιτεί λίγο περισσότερη ισχύ.

Επειδή θα θέλω να ξεκινήσω μια δεύτερη παρουσία στο ίδιο υποδίκτυο σε λίγα λεπτά, θα επιλέξω, ας πούμε, "us-east-1b" από τη σελίδα Configure Instance Details και θα κάνω μια σημείωση για αργότερα.

Τώρα η σελίδα της ομάδας ασφαλείας είναι όπου οι ρυθμίσεις του OpenVPN AMI λάμπουν πραγματικά. Έχουμε μια ομάδα ασφαλείας που ανοίγει ό, τι χρειαζόμαστε. Η θύρα 22 είναι για SSH κυκλοφορία στο διακομιστή, το 943 είναι η θύρα που θα χρησιμοποιήσουμε για πρόσβαση στο διαχειριστή GUI, το 443 είναι κρυπτογραφημένη με TLS κίνηση HTTP και το OpenVPN θα ακούσει για εισερχόμενες συνδέσεις πελατών στη θύρα 1194.

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

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

Μόλις ξεκινήσει η παρουσία, θα εμφανιστούν σημαντικές πληροφορίες σύνδεσης - συμπεριλαμβανομένου του γεγονότος ότι ο λογαριασμός χρήστη που θα χρησιμοποιήσουμε για SSH στον διακομιστή ονομάζεται openvpnas - και έναν οδηγό γρήγορης εκκίνησης. Θα λάβω επίσης ένα email που περιέχει συνδέσμους για τις ίδιες πληροφορίες.

Πίσω στην κονσόλα παρουσιών EC2, ενώ το νέο μηχάνημα ολοκληρώνει την εκκίνηση, εμφανίζεται η δημόσια διεύθυνση IP. Εάν χρειαζόταν ποτέ να επανεκκινήσουμε την παρουσία, δεν υπάρχει καμία εγγύηση ότι θα λάβουμε ξανά το ίδιο IP, κάτι που θα μπορούσε να προκαλέσει ένα εύλογο χάος. Επομένως, είναι καλή ιδέα να εκχωρήσετε στην περίπτωση ένα Elastic IP.

Για να το κάνω αυτό, θα κάνω κλικ σε Ελαστικά IP και μετά θα εκχωρήσω νέα διεύθυνση. Σημειώστε τη νέα διεύθυνση και κλείστε τη σελίδα. Τώρα, με την επιλεγμένη διεύθυνση, κάντε κλικ στην επιλογή Ενέργειες και στο "Associate Address". Θα κάνω κλικ μία φορά στο πλαίσιο Instance και εμφανίζεται η παρουσία μου OpenVPN - με τη χρήσιμη ετικέτα του -. Πρέπει να το επιλέξω μόνο, να κάνω κλικ στο "Associate" και τελειώσω. Από τώρα και στο εξής, αυτή θα είναι η μόνιμη δημόσια IP για πρόσβαση στον διακομιστή μας.

Πρόσβαση στο διακομιστή

Θα επικολλήσω τη δημόσια διεύθυνση IP στο τερματικό ως μέρος της εντολής SSH που καλεί το ζεύγος κλειδιών που έχω ορίσει για αυτήν την παρουσία.

ssh -i KeyPairName.pem [email protected]

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

Πριν φύγω από την κονσόλα Instances, ωστόσο, θα εκτελέσω μια ακόμη σημαντική λειτουργία. Έχοντας επιλέξει την παρουσία OpenVPN, θα κάνω κλικ στο Actions και στη συνέχεια στο Networking και μετά στο "Change Source / Dest check". Θα βεβαιωθώ ότι ο έλεγχος είναι απενεργοποιημένος. Τίποτα δεν θα είναι δυνατό αν δεν το κάνω.

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

sudo ovpn-init — ec2.

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

primary Access Server node? yes [You’d answer no if you were setting up a backup or failover node.] specify the network interface and IP address to be used by the Admin Web UI [1 — For all interfaces; can be changed to static later.] specify the port number for the Admin Web UI [default] specify the TCP port number for the OpenVPN Daemon [default] Should client traffic be routed by default through the VPN? [no--That’s not the kind of VPN we’re building here. What we’re doing is only about getting remote clients safely and securely into our VPC. The same applies to client DNS traffic.] Should client DNS traffic be routed by default through the VPN? [no] Use local authentication via internal DB? [no — can be useful, but we’ll use Linux/AWS authentication for simplicity.] Should private subnets be accessible to clients by default? [yes — that’s the whole point of the VPN, after all.] login to the Admin UI as “openvpn”? [yes] Provide OpenVPN Access Server license key [Unnecessary for testing.]

Όταν ολοκληρωθεί ο οδηγός, μου εμφανίζονται κάποιες πληροφορίες σύνδεσης και σας συμβουλεύω να εγκαταστήσω το NTP daemon ώρας δικτύου. Αυτό δεν θα είναι απαραίτητο σε αυτό το πλαίσιο του Ubuntu, καθώς είναι ήδη εγκατεστημένο και λειτουργεί από προεπιλογή.

Όπως ανέφερα νωρίτερα, θα πρέπει να δώσω στον χρήστη openvpn έναν κωδικό πρόσβασης, ώστε να μπορώ να τον χρησιμοποιήσω για να συνδεθώ στο web GUI. Το κάνω αυτό ως sudo με την εντολή passwd.

sudo passwd openvpn

Αυτά είναι όλα τα πράγματα που χρειαζόμαστε από τον διακομιστή. Τώρα πρόκειται να χρησιμοποιήσω ένα πρόγραμμα περιήγησης για να συνδεθώ στο GUI ιστού. Χρησιμοποιώ τη δημόσια διεύθυνση IP του διακομιστή μας με το ασφαλές πρόθεμα https, ακολουθούμενο από κάθετο και διαχειριστή.

///admin

You’ll get a “Your connection is not private” warning because we’re using a self-signed certificate rather than one provided by a Certificate Authority.

That’s not a problem for us, since we’re only exposing our VPN to select users from within our company, and they should be able to trust our certificate. So I’ll click through the warning, sign in, and agree to the EULA .

Feel free to spend some time exploring the features provided by the OpenVPN admin console on your own.

Setting up a VPN client

Right now, however, I’m going to open the client UI page using the web access address we were shown before, but this time without the slash admin. This is nothing more than a login screen where you can authenticate using the same openvpn user as before. (You can always create new users back in the admin console.)

Behind the login screen, there’s just this set of links with directions for installing the OpenVPN client app on any of those platforms. The final link, however, is called “Yourself.”

Clicking it will prompt you to download and save a file called client.ovpn. This file contains the configuration settings to match the server and the actual keys we’ll use to authenticate. You definitely want to treat this file with care so it doesn’t fall into the wrong hands. That would include not sending it through plain email across unencrypted connections.

I’ll open the file locally and copy the contents. Then, in a shell within a Linux virtual machine running in my local network, I’ll create a new file called client.ovpn and paste the contents in. If you had clicked through to the “OpenVPN for Linux” link in the client UI earlier, you would have seen that the only additional step necessary was to install OpenVPN using the Apt package manager — or Yum if you’re on a CentOS or Red Hat machine. Well that’ll take just one command. When it’s done its job, we’ll be all set.

nano client.ovpnsudo apt updatesudo apt install openvpn

Next we’ll open the VPN connection. As root — using sudo — I’ll type openvpn with the config flag pointing to the client.ovpn configuration file I just created.

sudo openvpn — config client.ovpn

When prompted to authenticate, use the openvpn account along with the password you created for it back on the server.

Now I’ll open a second shell session on my local client so I can try to ssh in to the OpenVPN server using its local IP address — something that would be impossible without a working VPN connection.

First though, run ip a to list all the network interfaces active on this machine.

ip a

Besides your local network, you should also see one called tun0. This interface was created by OpenVPN and will usually lie within the 172.16.x.x range.

I’ll ssh into the remote server using my private key — which, of course, needs to exist locally — and the server’s private IP address. If it works, you’ll have yourself a VPN!

ssh -i KeyPairName.pem [email protected]

Finally, I’ll demonstrate that the VPN, as it’s currently configured, will allow us access to other private resources within our Amazon VPC. This could be useful if, for instance, you’ve got a database instance running in the VPC that you can’t expose to the public network.

I’m going to launch a standard Ubuntu EC2 instance but I won’t give it a public IP. I’ll specify the same us-east-1b subnet we used for the OpenVPN server to keep things simple. The security group I’ll use will permit SSH access through port 22 but nothing else.

Once that’s running, I’ll note its private IP address and head back to my local client. Once I’m sure the instance is fully launched, I’ll ssh in using the same private key, the “ubuntu” username — since that’s the default for normal Ubuntu EC2 instances — and the private address I just copied.

Again. If it works, you’ll have a fully-configured VPN connection into your AWS private resources. Savor the moment.

Don’t forget to shut down all your servers and release your Elastic IP address when you’re done using them. You don’t want to incur costs unnecessarily.

Αυτό το άρθρο προσαρμόστηκε από μέρος του νέου μαθήματος Pluralsight, "Σύνδεση πόρων εσωτερικού δικτύου με την υποδομή AWS". Υπάρχουν πολλά περισσότερα από τα οποία προήλθε από τον ιστότοπό μου Bootstrap IT, συμπεριλαμβανομένων συνδέσμων για το βιβλίο μου, Linux in Action και ενός υβριδικού μαθήματος που ονομάζεται Linux in Motion που αποτελείται από περισσότερες από δύο ώρες βίντεο και περίπου το 40% του κειμένου του Linux εν ΔΡΑΣΕΙ.