أخر الأخبار

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN

تسمح لك الشبكات الافتراضية الخاصة (VPN) بإخفاء عمليات نقل البيانات عبر الإنترنت وتحسين الأمان أثناء تصفح الإنترنت من الأماكن العامة. يوفر لك العديد من مزودي الخدمات عبر الإنترنت خيارات VPN المجانية والمدفوعة لتتمكن من استخدامها. ومع ذلك ، حتى أفضل الخطط المدفوعة يمكن أن تكون غير موثوقة أو بطيئة في بعض الأحيان.

إذا تمكنت فقط من إنشاء VPN الخاص بك بين الكمبيوتر المحمول والكمبيوتر المنزلي.

في الواقع ، هذه العملية أسهل مما تظن. سنناقش اليوم كيف يمكنك استخدام OpenVPN لإنشاء اتصال آمن بين العميل والخادم على جهاز Linux.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

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

ماذا تحتاج

ستحتاج إلى جهازي كمبيوتر – أحدهما هو جهاز الخادم بينما الآخر هو العميل. يمكن أن يكون جهاز الملقم عبارة عن سطح مكتب منزلي أو مثيل Linux من DigitalOcean أو Linode. جهاز العميل هو جهاز الكمبيوتر الذي تستخدمه بانتظام. نظرًا لأن هذا البرنامج التعليمي يتم على نظام التشغيل Linux ، يحتاج كلا الجهازين إلى تشغيل نظام التشغيل Linux أيضًا.

ملاحظة: في هذا البرنامج التعليمي ، سوف نستخدم Ubuntu كتوزيعة لنا لكل من جهاز الخادم والعميل.

تثبيت OpenVPN

للبدء ، تحتاج إلى تثبيت OpenVPN و Easy-RSA على الخادم الخاص بك. ثم قم بتثبيت OpenVPN على جهاز العميل الخاص بك.

على Ubuntu يجب عليك تثبيت Easy-RSA من صفحة Github هذه. يتضمن Ubuntu إصدار Easy-RSA 2 في مستودعاته. يقدم ارتباط Github الإصدار 3 من Easy-RSA ، والذي يتبع الأوامر التي سأستخدمها في هذه المقالة.

sudo apt-get install openvpn
git clone https://github.com/OpenVPN/easy-rsa.git

في الدليل الذي قمت بنسخ مستودع Github إليه ، انسخ دليل “easyrsa3” الذي يحتوي عليه في “/ etc / easy-rsa /”.

sudo mkdir /etc/easy-rsa
sudo cp -r ./easyrsa3/* /etc/easy-rsa/

البنية التحتية للمفتاح العام (PKI)

تستخدم OpenVPN البنية التحتية للمفتاح العام (PKI) لتحديد هوية الخوادم والعملاء بحيث يمكن لتلك الكيانات المنفصلة التحدث مع بعضها البعض. يستخدم PKI مرجع مصدق رئيسي (CA) إلى جانب الشهادات الفردية والمفاتيح الخاصة لكل خادم وعميل.

يجب أن يقوم المرجع المصدق بتسجيل شهادات الخادم والعميل. يتحقق OpenVPN بعد ذلك من أن الخادم يقوم بمصادقة هوية كل عميل ، وفي نفس الوقت ، يتحقق كل عميل من هوية الخادم.

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

إنشاء شهادة CA

من أجل تشديد الأمان من المستحسن أن يكون جهاز CA الخاص بك مختلفًا عن الملقم الخاص بك. للإيجاز ، سوف تستخدم هذه المقالة نفس الجهاز لكلتا المهمتين. يجب تغيير إجراءات نسخ الملفات لاستيعاب موقفك – سواء كان ذلك باستخدام scp لنقل الشبكة أو باستخدام مفتاح USB لنقل الملفات يدويًا.

ملاحظة: إذا كنت تستخدم جهاز كمبيوتر منفصل كجهاز المرجع المصدق (CA) ، فستحتاج إلى تثبيت برنامج Easy-RSA على هذا الجهاز.

1. عليك تغيير الأدلة إلى “/ etc / easy-rsa /:”

cd / etc / easy-rsa /

2. إذا لزم الأمر ، انسخ “/etc/easy-rsa/vars.example” إلى “/ etc / easy-rsa / vars” ، ثم افتح vars لتحرير محتوياته:

sudo cp ./vars.example ./vars

sudo nano ./vars

3. أدخل التفاصيل مثل بلدك ، مقاطعتك ، المدينة ، المؤسسة ، والبريد الإلكتروني. أزل الخطوط الموجودة هنا عن طريق إزالة “#” في بداية كل منها.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس
بمجرد الانتهاء من التعديل، قم بالحفظ (Ctrl + O) والخروج (Ctrl + X).
4. قم بتكوين PKI الجديد الخاص بك وقم بتوليد المفتاح الرئيسي لمرجع الشهادة الذي ستستخدمه لتسجيل شهادات الخادم والعميل الفردية:
export EASYRSA=$(pwd)

sudo ./easyrsa init-pki

sudo ./easyrsa build-ca
انسخ ملف ca.crt الذي أنشأته للتو إلى دليل خادم OpenVPN. يجب عليك أيضًا تغيير مالكها ومجموعتها مع Chown:
sudo cp /etc/easy-rsa/pki/ca.crt /etc/openvpn/server/

sudo chown root:root /etc/openvpn/server/ca.cr

إنشاء شهادة الخادم والمفتاح الخاص

عليك التغيير مرة أخرى إلى دليل Easy-RSA وإنشاء شهادة الخادم ومفتاحه الخاص:
cd /etc/easy-rsa

sudo ./easyrsa init-pki

sudo ./easyrsa gen-req ServerName nopass

يمكنك تغيير “ServerName” في الأمر أعلاه إلى أي اسم تريده. تأكد من عكس هذا التغيير عند نسخ المفتاح الجديد إلى دليل خادم OpenVPN:

sudo cp /etc/easy-rsa/pki/private/ServerName.key / etc / openvpn / server /

طريقة تبادل مفاتيح

تستخدم OpenVPN طريقة تبادل مفاتيح Diffie-Hellman (DH) لتبادل مفاتيح التشفير بشكل آمن عبر الشبكة. ستقوم بإنشاء ملف معلمات DH باستخدام الأمر التالي:

sudo openssl dhparam -out /etc/openvpn/server/dh.pem 2048

يعرض الرقم النهائي ، 2048 ، في هذا الأمر عدد البتات المستخدمة في إنشاء الملف. على سبيل المثال ، يمكنك استخدام 4096 ، ولكن الأمر سيستغرق وقتًا أطول في إنشاء الملف ولن يؤدي إلى تحسين الأمان إلى حد كبير. الافتراضي هو 2048 ، وهذه القيمة كافية لمعظم حالات الاستخدام.

مصادقة الرسائل المستندة إلى التجزئة

يستخدم OpenVPN أيضًا تسجيل مصادقة الرسائل المستندة إلى التجزئة (HMAC) للحماية من الثغرات الأمنية في مصادقة رسائل SSL / TLS. قم بإنشاء الملف باستخدام هذا الأمر:

sudo openvpn --genkey --secret /etc/openvpn/server/ta.key

ملفات العميل

في هذه المرحلة ، تكون قد قمت بإنشاء عدد من الملفات لخادمك. حان الوقت الآن لإنشاء ملفات لعملائك. يمكنك تكرار هذه العملية عدة مرات لأكبر عدد من العملاء حسب احتياجك. يمكنك إنشاء ملفات العميل بأمان على أي جهاز كمبيوتر مثبت عليه Easy-RSA.

أدخل دليل Easy-RSA وقم بتهيئة PKI مرة أخرى إذا لم تكن قد قمت بذلك بالفعل:

cd /etc/easy-rsa

sudo ./easyrsa init-pki

قم بإنشاء مفتاح العميل والشهادة. تغيير الدلائل إذا قمت بتخطي الخطوة السابقة.

cd /etc/easy-rsa

sudo ./easyrsa gen-req ClientName nopass

إذا كررت العملية ، فلن تحتاج إلى تهيئة PKI لكل عميل جديد. فقط تأكد من تغيير “ClientName” ليكون فريدًا في كل مرة.

تسجيل الخادم وشهادات العميل

يجب أن تقوم CA الآن بتسجيل شهادات الخادم والعميل الخاصة بك.

إذا نظرت في ملف “/ etc / easy-rsa / pki / reqs /” ، يجب أن تشاهد جميع ملفات الطلب (.req) تم إنشاء Easy-RSA في أوامر genrc-rech السابقة من easyrsa.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

في لقطة الشاشة هذه يوجد ملفين .req اثنين فقط. سيختلف رقمك إذا قمت بإجراء أكثر من عميل في الخطوة السابقة.

إذا كنت تستخدم جهاز CA منفصل ، فيجب عليك الآن نقل ملفات .req هذه إلى CA لتسجيلها. بمجرد اكتمال ذلك ، قم بالتغيير إلى دليل Easy-RSA وقم بتسجيل ملفاتك باستخدام الأوامر التالية ، مع التأكد من عكس الموقع المناسب لكل عنوان .req واسم كل خادم وعميل.

cd /etc/easy-rsa
sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ServerName.req Server1
sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ClientName.req Client1
sudo ./easyrsa sign-req server Server1
sudo ./easyrsa sign-req client Client1

لاحظ أنك ستحتاج إلى تزويد Easy-RSA باسم مختلف لخادمك وشهادات العميل. سيتم استخدام ServerName.req هنا ، على سبيل المثال ، لإنشاء Server1.crt.

يجب عليك الآن العثور على ملفين جديدين – “/etc/easy-rsa/pki/issued/Server1.crt” و “/etc/easy-rsa/pki/issued/Client1.crt” – سيتم نقلهما إلى كل من الجهازين (أنظر في القسم التالي من هذه المقالة). يمكنك حذف أي ملفات .req تبقى.

المرور على طول ملفات .CRT

الآن الشهادات الموقعة (كل .crt) جاهزة للعمل لأصحابها. قم بنقل ملف الخادم إلى موقع OpenVPN الخاص به وقم بإنشاء دليل جديد لشهادات العميل:

sudo mv /etc/easy-rsa/pki/issued/Server1.crt /etc/openvpn/server/

sudo chown root:root /etc/openvpn/server/Server1.crt

sudo mkdir /etc/easy-rsa/pki/signed

sudo mv /etc/easy-rsa/pki/issued/Client1.crt /etc/easy-rsa/pki/signed/

يمنحك إنشاء مجلد “… pki / signed /” هنا موقعًا مصنّفًا لوضع شهادات متعددة للعميل.

الخادم المشترك وملفات العميل

الآن يجب أن يكون لديك خمسة ملفات في الدليل “/ etc / openvpn / server /”: ca.crt و dh.pem و Server1.crt و ServerName.key و ta.key.

ستحتاج إلى اثنين من تلك الملفات نفسها في مجلد عميل OpenVPN على جهاز العميل. عليك نسخها باستخدام scp أو قرص فلاش حسب الاقتضاء. انسخ كل من “/etc/openvpn/server/ca.crt” و “/etc/openvpn/server/ta.key” إلى “/ etc / openvpn / client /.”

تأكد من نسخ شهادة العميل ومفتاح هذا الموقع نفسه. انسخ “/etc/easy-rsa/pki/signed/Client1.crt” و “/etc/easy-rsa/pki/private/ClientName.key” إلى العميل الخاص بك “/ etc / openvpn / client /”. كرر هذه العملية لأي عملاء إضافيين قد تكون أنشأتهم.

لأي عميل ، يجب أن يكون لديك الآن أربعة ملفات في “/ etc / openvpn / client:” Client1.crt و ClientName.key و ca.crt و ta.key.

الخادم وملفات تكوين العميل

خطوتك الأخيرة قبل بدء VPN هي تحرير ملفات التهيئة للخادم والعميل. أولاً ، حدد موقع ملفات “server.conf” الافتراضية وملف “client.conf”. من المحتمل أن يكونوا في أحد هذه المواقع:

“/usr/share/openvpn/examples”

"/ usr / share / doc / openvpn / examples / sample-config-files /" (توجد إعدادات Ubuntu هنا)

ملاحظة: في Ubuntu ، ستحتاج إلى فك ملف "server.conf.gz". استخدم gunzip -d ./server.conf.gz للحصول على ملف server.conf من الحزمة المضغوطة.

انسخ كل ملف تهيئة إلى دليل “/ etc / openvpn / server /” و / etc / openvpn / client / الخاص بكل منهما.

في server.conf ، قم بإجراء التغييرات التالية. تأكد من أن أسماء ومواقع ca.crt و Server1.crt و ServerName.key و dh.pem مسردة في ملف التهيئة الخاص بك. قد تحتاج إلى استخدام المسارات الكاملة – مثل السطر الذي يقرأ “cert /etc/openvpn/server/Server1.crt”.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

قم بتغيير السطر tls-auth … ليتم قراءته tls-crypt ta.key. مرة أخرى ، قد يكون من الضروري وجود مسار كامل.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

(قم بإزالة “؛”) من سطر”user nobody” و “group nobody”.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

بالنسبة لعميلك ، ستجري تغييرات مماثلة. بعد إنشاء ملف التهيئة ، عكس أسماء ومواقع ca.crt و Client1.crt و ClientName.key و ta.key (مع نفس الخطوة من tls-auth … إلى tls-crypt …) ، أدخل الاسم أو عنوان IP ومنفذ الخادم الخاص بك.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

وقت التواصل

الآن يمكنك بدء خادمك وعميلك. هذه مسألة بسيطة إذا ذهب كل شيء أعلاه كما هو مخطط له.

ابدأ الخادم مع:

openvpn /etc/openvpn/server/server.conf

والعميل مع:

openvpn /etc/openvpn/client/client.conf

سيظهر الإنشاء الناجح للشبكة الظاهرية الخاصة (VPN) بظهور عند العميل قراءة “تم الانتهاء من تسلسل التهيئة” في نهاية مخرجاته. ستجد أيضًا نوعًا جديدًا من الاتصال في واجهات الشبكة المتاحة لديك.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

تعرض لقطة الشاشة هذه واجهة “tun0”. هذا ما قدمه خادم OpenVPN. يمكنك رؤية عنوانه كـ 10.8.0.1 و ping ذلك العنوان من العميل للتحقق من اتصال ناجح.

إنشاء شبكة افتراضية خاصة (VPN) على Linux باستخدام OpenVPN - لينكس

توجيه حركة مرور الإنترنت من خلال الخادم

في هذه المرحلة ، ستحتاج على الأرجح إلى الوصول إلى الإنترنت عبر خادمك من العميل البعيد. لإجراء ذلك ، ستحتاج أولاً إلى تغيير ملف تهيئة الخادم. أضف السطر “push-gateway def1” إلى ملف تهيئة الخادم الخاص بك.

echo "push \" redirect-gateway def1 \ "" | sudo tee -a /etc/openvpn/server/server.conf

ستحتاج أيضًا إلى إخبار الخادم الخاص بك لتوجيه طلبات حركة مرور الإنترنت الخاصة بالعميل بشكل صحيح. سيغير هذا الأمر قواعد تصفية حزم Iptables الخاصة بك:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

إذا لم تكن قد قمت بتغيير سطر “server 10.8.0.0 255.255.255.0” في ملف server.conf ، يجب أن يعمل عنوان IP في ذلك الأمر. ستحتاج إلى تغيير “eth0” لتتطابق مع واجهة ethernet لخادمك. يمكنك أن ترى من لقطات الشاشة السابقة التي يستخدمها جهازي “enp19s0”.

بعد ذلك ، يمكنك دفع إعدادات DNS إلى العميل. قد يتم دفع أي عنوان يمكن أن يصل إليه العميل. يمكنك استخدام هذا الأمر كنقطة بداية:

echo "push \"dhcp-option DNS 10.8.0.1\"" | sudo tee -a /etc/openvpn/server/server.conf

أخيرًا ، يمكنك تمكين إعادة توجيه الحزمة على الخادم كما يلي:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

يجب أن تكون الآن قادرًا على استخدام العميل للوصول إلى الإنترنت من خلال VPN.

الخلاصة

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

إذا لم يكن هناك شيء آخر ، فستكون هذه تجربة تعليمية جيدة لما يلزم لإنشاء نفق رقمي آمن. شكرا لانضمامك لي حتى النهاية.

زر الذهاب إلى الأعلى