كيف يمكنك استخدام OpenVPN للوصول بأمان إلى موارد AWS الخاصة

تم تعديل هذه المقالة من جزء من دورة Pluralsight الجديدة الخاصة بي ، "توصيل الموارد المحلية ببنية AWS الأساسية الخاصة بك."

هل تحتاج أحيانًا إلى الاتصال بالموارد التي قمت بتشغيلها على Amazon Web Services؟ يعد الوصول إلى مثيلات EC2 العامة باستخدام SSH وتشفير بيانات S3 الخاصة بك آمنًا بدرجة كافية لجميع المقاصد والأغراض. ولكن ماذا عن الدخول إلى مثيل قاعدة بيانات RDS الخلفية أو العمل مع البيانات المستندة إلى AWS والتي ليست عامة؟ هناك جميع أنواع الأسباب التي تجعل المسؤولين يحافظون على هذه الموارد بعيدًا عن متناول عامة الناس. ولكن إذا لم تتمكن من الوصول إليهم عند الحاجة ، فما الفائدة التي من المحتمل أن يفعلوها لك؟

لذلك ستحتاج إلى إيجاد طريقة آمنة وموثوقة حول قوائم ACL ومجموعات الأمان التي تحمي أشيائك. أحد الحلول التي أغطيها في الدورة التدريبية "توصيل الموارد المحلية ببنية AWS الأساسية الخاصة بك" حول Pluralsight هو الاتصال المباشر. ولكن إذا كان سعر Direct Connect يمثل ميزانية باهظة لشركتك ، فقد يؤدي نوع من نفق VPN إلى الحيلة.

ما هي الشبكة الافتراضية الخاصة؟

غالبًا ما تُستخدم الشبكات الخاصة الافتراضية (VPN) للسماح بنشاط الشبكة المقيد أو التصفح المجهول. لكن هذا ليس ما يدور حوله هذا المقال.

VPN هي اتصال من نقطة إلى نقطة يتيح لك نقل البيانات بأمان بين موقعين عبر شبكة عامة. بشكل فعال ، يمكن تصميم النفق لدمج موقعين خاصين منفصلين جغرافيًا في شبكة خاصة واحدة. في سياقنا ، قد يعني ذلك توصيل شبكة مكتبك المحلي بـ AWS VPC الذي يستضيف مواردك الخاصة.

هناك طريقتان للقيام بذلك:

  • اتصال VPN مُدار مبني على AWS Virtual Private Gateway
  • استخدام VPN الخاص بك.

ستركز هذه المقالة على طريقة "افعل ذلك بنفسك".

خادم وصول OpenVPN

كما يوحي الاسم ، OpenVPN هو مشروع مفتوح المصدر ، ويمكنك دائمًا تنزيل إصدار المجتمع المجاني وإعداد الأشياء على خادم VPN الخاص بك. لكن شركة OpenVPN توفر أيضًا خادم وصول OpenVPN مصمم لهذا الغرض باعتباره 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 access server". يوفر OpenVPN عددًا من الصور الرسمية المرتبطة بتراخيص تقدم أعدادًا متزايدة من العملاء المتصلين.

سأختار صورة Ubuntu هذه التي تعمل من خلال ترتيب "إحضار ترخيصك الخاص". كما كتبت سابقًا ، لن نحتاج في الواقع إلى ترخيص لما سنفعله.

يؤدي تحديد AMI إلى فتح نافذة منبثقة تخبرنا كم ستكلفنا هذه الصورة في الساعة باستخدام أنواع مثيلات مختلفة وخيارات تخزين EBS. هذه ليست سوى تكاليف البنية التحتية العادية لـ AWS ، ولا تشمل رسوم الترخيص.

عندما يتعلق الأمر بنوع المثيل ، سأقوم بالرجوع إلى إصدار t2.micro لإبقائه ضمن المستوى المجاني. قد يتطلب خادم الإنتاج المزدحم طاقة أكبر قليلاً.

لأنني سأريد بدء مثيل ثانٍ في نفس الشبكة الفرعية في غضون بضع دقائق ، سأختار ، على سبيل المثال ، "us-east-1b" من صفحة تكوين تفاصيل المثيل ، وسأقوم بتدوين ملاحظة لاحقًا.

الآن صفحة Security Group هي المكان الذي تتألق فيه إعدادات OpenVPN AMI حقًا. نقدم مجموعة أمان تفتح لنا كل ما نحتاج إليه. المنفذ 22 مخصص لحركة مرور SSH إلى الخادم ، 943 هو المنفذ الذي سنستخدمه للوصول إلى المسؤول GUI ، و 443 عبارة عن حركة مرور HTTP مشفرة بواسطة TLS ، وسوف يستمع OpenVPN لاتصالات العميل الواردة على المنفذ 1194.

ملاحظة : إذا كان ذلك عمليًا ، فسيكون من الجيد عادةً تشديد هذه القواعد بحيث يتم قبول الطلبات من نطاقات عناوين IP الصالحة للشركة فقط ، ولكن هذا سيكون جيدًا للاختبار قصير المدى.

من هنا ، سأراجع إعداداتي ، وأؤكد أنني حصلت على مفتاح تشفير SSH المدرج ، وسحب المشغل.

بمجرد تشغيل المثيل ، سأعرض معلومات تسجيل الدخول المهمة - بما في ذلك حقيقة أن حساب المستخدم الذي سنستخدمه في SSH في الخادم يسمى openvpnas - ودليل البدء السريع. سأتلقى أيضًا بريدًا إلكترونيًا يحتوي على روابط لنفس المعلومات.

مرة أخرى في وحدة التحكم في مثيلات EC2 ، بينما ينتهي الجهاز الجديد من التمهيد ، أظهرنا عنوان IP العام الخاص بنا. إذا احتجنا في أي وقت إلى إعادة تشغيل المثيل ، فليس هناك ما يضمن أننا سنحصل على عنوان IP نفسه مرة أخرى ، مما قد يتسبب في قدر معقول من الفوضى. لذلك من الجيد تعيين المثيل IP Elastic.

للقيام بذلك ، سأضغط على عناوين IP المرنة ثم تخصيص عنوان جديد. لاحظ العنوان الجديد وأغلق الصفحة. الآن ، مع تحديد هذا العنوان ، انقر فوق الإجراءات ، و "ربط العنوان". سوف أنقر مرة واحدة في مربع المثيل ويتم سرد مثيل OpenVPN الخاص بي - بعلامته المفيدة -. أحتاج فقط إلى تحديده ، انقر فوق "Associate" وقد انتهيت. من الآن فصاعدًا ، سيكون هذا هو عنوان IP العام الدائم للوصول إلى خادمنا.

الوصول إلى الخادم

سأقوم بلصق عنوان IP العام في الجهاز كجزء من أمر SSH الخاص بي الذي يستدعي زوج المفاتيح الذي قمت بتعيينه لهذه الحالة.

ssh -i KeyPairName.pem [email protected]

إذا كنت تقوم بالوصول من جهاز يعمل بنظام Windows أو macOS ، فقد تعمل الأشياء بشكل مختلف قليلاً ، لكن الوثائق ستمنحك كل المساعدة التي تحتاجها.

قبل أن أغادر وحدة تحكم المثيلات ، سأقوم بوظيفة أكثر أهمية. مع تحديد مثيل OpenVPN ، سأضغط على الإجراءات ثم على الشبكات ثم "تغيير التحقق من المصدر / الوجهة". سوف أتأكد من تعطيل الفحص. لن يكون هناك الكثير ممكناً ما لم أفعل ذلك.

الآن إلى جلسة SSH الخاصة بي. بمجرد أن تبدأ ، أواجه اتفاقية ترخيص OpenVPN EULA ، ثم معالج الإعداد. إذا كنت بحاجة إلى تغيير أحد الإعدادات لاحقًا ، فيمكنك دائمًا تشغيل المعالج مرة أخرى باستخدام هذا الأمر:

sudo ovpn-init — ec2.

Most of the wizard’s defaults will work fine, but it’s worth quickly explaining what’s happening. Here are the questions and some color commentary where necessary:

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.]

When the wizard completes, I’m shown some connection information and advised to install the network time daemon NTP. That won’t be necessary on this Ubuntu box, as it’s already installed and running by default.

As I mentioned earlier, I will need to give the openvpn user a password so I can use it to log into the web GUI. I do that as sudo with the passwd command.

sudo passwd openvpn

That’s all the server-side stuff we’ll need. Now I’m going to use a browser to log into the web GUI. I use our server’s public IP address with the secure https prefix, followed by slash and admin.

///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 في العمل.