مقدمة
هل ترغب في الوصول إلى الإنترنت بشكل آمن من هاتفك الذكي أو جهاز الكمبيوتر المحمول الخاص بك عند الاتصال بشبكة غير موثوقة (مثل شبكة الواي فاي في فندق أو مقهى)؟ لحسن الحظ، هناك طريقة لتحقيق رغبتك. يمكنك الاتصال بأمان بشبكة غير موثوقة كما لو كنت على شبكة خاصة باستخدام شبكة افتراضية خاصة (VPN).
ما هي الـ VPN؟
يرمز مصطلح VPN إلى الشبكة الافتراضية الخاصة (Virtual Private Network). وهو يتيح إمكانية فتح نفق آمن إلى خادم موثوق. ثم يتم إرسال واستقبال جميع الطلبات عبر هذا الخادم. وتتمثل الميزة في تأمين وصولك ومعاملاتك عند استخدام الشبكات العامة مثل شبكة الواي فاي المجانية في الفندق.
من خلال الـ VPN، يتم تشفير جميع البيانات ومعالجتها عبر الخادم. ولا تملك الأجهزة التي تقع في المنتصف، مثل أجهزة التوجيه (الراوتر) التابعة لجهات خارجية وما شابه، أي طريقة لإعادة توجيه حركة المرور إلى وجهات غير مرغوب فيها. وأيضًا، بمجرد إنشاء الاتصال بنجاح، تصبح جزءًا من شبكة الخادم. ويمكن الآن أيضًا الوصول إلى الخوادم أو أجهزة الكمبيوتر أو الأجهزة الأخرى مثل الطابعات التي لا يمكن الوصول إليها عادةً إلا في شبكة الخادم المحلية من خلال نفق الـ VPN. ومع ذلك، نظرًا لأنه ليس من الضروري إرسال جميع البيانات عبر نفق مشفر، فمن الممكن تكوين عميل الـ VPN بحيث يتم إرسال جزء محدد فقط من الطلبات عبر نفق الـ VPN. بينما تتم معالجة بقية حركة المرور بشكل طبيعي عبر الإنترنت.
في هذا البرنامج التعليمي، سنرشدك خلال خطوات إعداد خادم OpenVPN على Ubuntu 18.04.
المتطلبات
يجب أن يكون لديك صلاحية الوصول إلى خادم Ubuntu 18.04 لاستضافة خدمة OpenVPN الخاصة بك لإكمال هذا البرنامج التعليمي. قبل البدء في هذا الدليل، تحتاج أيضًا إلى تكوين مستخدم غير جذر (non-root) بصلاحيات sudo. يمكنك تثبيت خادمك بسهولة باتباع البرنامج التعليمي الخاص بنا حول إعداد خادم Ubuntu.
بالإضافة إلى ذلك، ستحتاج إلى جهاز كمبيوتر منفصل ليعمل كـ جهة إصدار شهادات (CA). من الناحية الفنية، يمكنك استخدام خادم OpenVPN أو جهاز الكمبيوتر المحلي الخاص بك كجهة إصدار شهادات. ومع ذلك، لا نوصي بهذا لأن ذلك سيعرض شبكة الـ VPN الخاصة بك لثغرات أمنية. وفقًا لوثائق OpenVPN الرسمية، يجب عليك وضع جهة إصدار الشهادات على جهاز كمبيوتر منفصل مخصص لاستيراد طلبات الشهادات وتوقيعها. لذلك، نفترض أن جهة إصدار الشهادات الخاصة بك موجودة على خادم Ubuntu 18.04 منفصل يحتوي أيضًا على مستخدم غير جذر بصلاحيات sudo وجدار حماية أساسي. طوال هذا الدليل، ستكون جميع خطوات التثبيت والتكوين بسيطة قدر الإمكان لكل عملية تثبيت. يمكنك أيضًا إلقاء نظرة على البرنامج التعليمي الخاص بنا حول كيفية إعداد خادم Open VPN تحت Docker.
الخطوة 1 – تثبيت OpenVPN و EasyRSA
أولاً، قم بتحديث فهرس حزم خادم الـ VPN الخاص بك وتثبيت OpenVPN. يمكنك تثبيت OpenVPN باستخدام apt لأنه متوفر في مستودعات Ubuntu الافتراضية:
|
1 2 |
sudo apt update sudo apt install openvpn |
الخطوة 2: إنشاء جهة إصدار شهادات
قم بإنشاء جهة إصدار شهادات (CA) بسيطة لإصدار شهادات موثوقة لخادم OpenVPN. للقيام بذلك، قم بتنزيل أحدث إصدار من EasyRSA على كل من جهاز CA وخادم OpenVPN باستخدام wget. للحصول على أحدث إصدار، انتقل إلى صفحة الإصدارات (Releases) لمشروع EasyRSA الرسمي على GitHub، وانسخ رابط التنزيل للملف الذي ينتهي بـ .tgz والصقه في الأمر التالي:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
ثم، قم بفك ضغط ملف tarball:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

عند هذه النقطة، تم تثبيت جميع البرامج المطلوبة بنجاح على جهاز الكمبيوتر والخادم الخاص بجهة إصدار الشهادات (CA).
الخطوة 3 – تكوين متغيرات EasyRSA وبناء جهة إصدار الشهادات (CA)
يأتي EasyRSA مع ملف تكوين يمكنك تعديله لتحديد عدد من المتغيرات لجهة إصدار الشهادات (CA) الخاصة بك باستخدام هذا الأمر:
|
1 |
cd ~/EasyRSA-3.0.4/ |
يوجد ملف في الدليل باسم vars.example. قم بإنشاء نسخة من هذا الملف، وقم بتسمية النسخة vars بدون امتداد ملف:
|
1 |
cp vars.example vars |
استخدم محرر النصوص المفضل لديك لفتح هذا الملف الجديد:
|
1 |
nano vars |
بعد ذلك، ابحث عن الإعدادات التي تحدد القيم الافتراضية للحقول للشهادات الجديدة. ستكون مشابهة لهذا:
|
1 2 3 4 5 6 |
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" |
قم بتحديث هذه المتغيرات إلى ما تريد كما هو موضح أدناه:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
احفظ الملف وأغلقه بمجرد أن تصبح جاهزًا. الخطوة التالية هي استدعاء برنامج easyrsa النصي وتشغيله باستخدام خيار init-pki لبدء البنية التحتية للمفاتيح العامة على خادم CA:
|
1 |
./easyrsa init-pki |

بعد ذلك، قم بتشغيل الأمر build-ca مع خيار nopass حتى لا يُطلب منك إدخال كلمة مرور في كل مرة تتفاعل فيها مع المرجع المصدق (CA) الخاص بك:
|
1 |
./easyrsa build-ca nopass |
في المخرجات، سيُطلب منك تأكيد الاسم الشائع للمرجع المصدق (CA) الخاص بك:

وبذلك، يصبح المرجع المصدق (CA) الخاص بك جاهزًا للبدء في توقيع طلبات الشهادات.
الخطوة 4 - إنشاء شهادة الخادم والمفتاح وملفات التشفير
بعد أن يصبح المرجع المصدق (CA) جاهزًا، يمكنك إنشاء المفتاح الخاص وطلب الشهادة من الخادم ثم إرساله إلى المرجع المصدق للتوقيع عن طريق إنشاء الشهادة المطلوبة. أولاً، انتقل إلى دليل EasyRSA على خادم OpenVPN:
|
1 |
cd EasyRSA-3.0.4 |
من هناك، قم بتشغيل برنامج easyrsa النصي باستخدام خيار init-pki. على الرغم من أنك قمت بالفعل بتشغيل هذا الأمر على جهاز المرجع المصدق (CA)، إلا أنه يجب تشغيل هذا الأمر هنا أيضًا. وذلك لأن أدلة PKI الخاصة بالخادم والمرجع المصدق مختلفة:
|
1 |
./easyrsa init-pki |
ثم استدعِ برنامج easyrsa النصي مرة أخرى، هذه المرة مع خيار gen-req، متبوعًا بالاسم العام للكمبيوتر’:
|
1 |
./easyrsa gen-req server nopass |
سيؤدي هذا إلى إنشاء مفتاح خاص للخادم وملف طلب شهادة باسم server.req. انسخ مفتاح الخادم إلى دليل /etc/openvpn/:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
انقل ملف server.req إلى جهاز المرجع المصدق (CA) الخاص بك باستخدام طريقة آمنة (مثل SCP في المثال التالي):
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
بعد ذلك، انتقل إلى دليل EasyRSA على جهاز المرجع المصدق (CA) الخاص بك:
|
1 |
cd EasyRSA-3.0.4/ |
استخدم برنامج easyrsa النصي مرة أخرى لاستيراد ملف server.req وإضافة اسمه الشائع بعد مسار الملف:
|
1 |
./easyrsa import-req /tmp/server.req server |
بعد ذلك، قم بتوقيع الطلب عن طريق تشغيل برنامج easyrsa النصي مع خيار sign-req متبوعًا بنوع الطلب والاسم الشائع. بالنسبة لطلب شهادة خادم OpenVPN، تأكد من استخدام نوع طلب الخادم:
|
1 |
./easyrsa sign-req server server |
يطلب منك المخرج التحقق من أن الطلب من مصدر موثوق. اكتب yes واضغط على Enter للتأكيد. يرجى التحقق من التفاصيل الموضحة أدناه لضمان الدقة. يرجى ملاحظة أن هذا الطلب لم يتم التحقق من كلمة المرور الخاصة به بعد.
اطلب الموضوع وقم بتوقيعه كشهادة خادم لمدة 3650 يومًا:

إذا قمت بتشفير مفتاح CA، فسيُطلب منك إدخال كلمة المرور عند هذه النقطة. بعد ذلك، استخدم طريقة آمنة لنقل الشهادة الموقعة مرة أخرى إلى خادم VPN الخاص بك:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
انقل ملف ca.rt إلى الخادم قبل تسجيل الخروج من جهاز كمبيوتر CA:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
بعد ذلك، قم بتسجيل الدخول إلى خادم OpenVPN الخاص بك مرة أخرى وانسخ الملفين server.crt و ca.crt إلى دليل /etc/openvpn/ الخاص بك:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
بعد ذلك، انتقل إلى دليل EasyRSA الخاص بك:
|
1 |
cd ~/EasyRSA-3.0.4/ |
أدخل الكود التالي لإنشاء مفتاح Diffie-Hellman قوي يمكنك استخدامه أثناء تبادل المفاتيح:
|
1 |
./easyrsa gen-dh |
عند الانتهاء، قم بإنشاء توقيع HMAC لتحسين وظيفة فحص حالة TLS الخاصة بالخادم:
|
1 |
openvpn --genkey --secret ta.key |
عند اكتمال الأمر، انسخ الملفين الجديدين إلى دليل / etc / openvpn /:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/ |
بهذه الطريقة، يتم إنشاء جميع الشهادات وملفات المفاتيح المطلوبة بواسطة الخادم. الآن، يمكنك إنشاء الشهادة والمفتاح المناسبين اللذين سيستخدمهما جهاز الكمبيوتر العميل للوصول إلى خادم OpenVPN.
الخطوة 4 - إنشاء شهادة العميل وزوج المفاتيح
بعد ذلك، سنقوم بإنشاء مفتاح عميل وعدة شهادات. إذا كان لديك عدة عملاء، يمكنك تكرار هذه العملية لكل عميل. ومع ذلك، يرجى ملاحظة أنه يجب عليك تمرير قيمة اسم فريدة إلى البرنامج النصي لكل عميل. في هذا البرنامج التعليمي، سنقوم بتسمية زوج الشهادة/المفتاح الأول client1. أولاً، قم بإنشاء بنية دليل في دليلك الرئيسي لتخزين شهادات العميل وملفات المفاتيح:
|
1 |
mkdir -p ~/client-configs/keys |
بما أنك تقوم بحفظ زوج الشهادة/المفتاح وملف تكوين العميل في هذا الدليل لأسباب أمنية، يجب عليك الآن إلغاء الأذونات:
|
1 |
chmod -R 700 ~/client-configs |
ثم انتقل مجددًا إلى دليل EasyRSA وقم بتشغيل البرنامج النصي easyrsa مع الخيارين gen-req و nopass بالإضافة إلى الاسم العام للعميل:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
اضغط على Enter لتأكيد الاسم الشائع. بعد ذلك، انسخ ملف client1.key إلى دليل / client-configs / keys / الذي تم إنشاؤه مسبقًا:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
بعد ذلك، استخدم طريقة آمنة لنقل ملف client1.req إلى جهاز كمبيوتر CA الخاص بك:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
قم بتسجيل الدخول إلى جهاز كمبيوتر CA الخاص بك، وانتقل إلى دليل EasyRSA واستورد طلب الشهادة:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

ثم، كما في الخطوة السابقة، قم بتوقيع الطلب على الخادم. ولكن هذه المرة تحتاج إلى تحديد نوع طلب العميل:
|
1 |
./easyrsa sign-req client client1 |
عند المطالبة، اكتب yes لتأكيد رغبتك في توقيع طلب الشهادة وأن طلب الشهادة من مصدر موثوق. يرجى إدخال الكلمة “yes” للمتابعة أو إدخال أي شيء آخر للإلغاء:
|
1 |
تأكيد طلب تفاصيل: نعم |

إذا قمت بتشفير مفتاح CA، فسيُطلب منك أيضًا إدخال كلمة المرور هنا. سيؤدي هذا إلى إنشاء ملف شهادة عميل باسم client1.crt. قم بنقل هذا الملف مرة أخرى إلى الخادم:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
قم بالاتصال مجددًا عبر SSH بخادم OpenVPN الخاص بك وانسخ شهادة العميل إلى الدليل / client-configs / keys / :
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
بعد ذلك، انسخ ملفي ca.crt و ta.key إلى الدليل / client-configs / keys / :
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/ |
في الوقت نفسه، تم إنشاء جميع الشهادات والمفاتيح الخاصة بالخادم والعميل وحفظها في الأدلة المقابلة على الخادم. الآن يمكنك الاستمرار في إعداد OpenVPN على الخادم.
الخطوة 5 – تكوين خدمة OpenVPN
بعد إنشاء شهادات العميل والخادم، يمكنك تكوين خدمة OpenVPN لاستخدام هذه الاعتمادات. أولاً، انسخ ملف تكوين OpenVPN النموذجي إلى دليل التكوين الخاص بك ثم استخرجه لاستخدامه كأساس للإعداد:
|
1 2 |
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz |
افتح ملف تكوين الخادم في محرر النصوص المفضل لديك:
|
1 |
sudo nano /etc/openvpn/server.conf |
ثم، ابحث عن جزء HMAC من خلال البحث عن أمر tls-auth:
|
1 |
tls-auth ta.key 0 # هذا الملف سري |
ابحث عن جزء كلمة المرور من خلال البحث عن سطر كلمة المرور المعلق. يوفر تشفير AES-256-CBC مستوى جيدًا من التشفير وهو مدعوم بشكل جيد. يجب ألا يكون السطر معلقًا، ولكن إذا كان كذلك، فاحذف “;” التي قبله:
|
1 |
cipher AES-256-CBC |
أسفل ذلك، أضف أمر Auth لتحديد خوارزمية ملخص الرسائل HMAC. يعد SHA256 خيارًا جيدًا لهذا:
|
1 |
auth SHA256 |
بعد ذلك، ابحث عن السطر الذي يحتوي على عبارة dh التي تحدد معلمات Diffie-Hellman. نظرًا لبعض التغييرات الأخيرة في EasyRSA، قد يختلف اسم ملف مفتاح Diffie-Hellman عن اسم الملف المدرج في ملف تكوين الخادم النموذجي. إذا لزم الأمر، قم بتغيير اسم الملف المدرج هنا عن طريق حذف 2048 لمطابقته مع مفتاح الخطوة السابقة:
|
1 |
dh dh.pem |
أخيرًا، ابحث عن إعدادات المستخدم والمجموعة واحذف “;” في بداية كل سطر:
|
1 2 |
user nobody group nogroup |
حتى الآن، يجب أن تسمح التغييرات التي أجريتها على ملف server.conf النموذجي لـ OpenVPN بالعمل.
الخطوة 6 – تكوين شبكة الخادم
قم بتكوين إعادة توجيه IP لتوجيه حركة المرور بشكل صحيح عبر VPN. هذا أمر ضروري لوظيفة VPN التي يوفرها خادمك:
|
1 |
sudo nano /etc/sysctl.conf |
ابحث عن السطر المعلق الذي يحدد net.ipv4.ip_forward. قم بإزالة حرف “#” من بداية السطر لإلغاء تعليق هذا الإعداد:
|
1 |
net.ipv4.ip_forward=1 |
احفظ الملف وأغلقه بمجرد الانتهاء. لقراءة الملف وضبط القيم للجلسة الحالية، اكتب:
|
1 |
sudo sysctl -p |

بعد ذلك، أضف واجهة الشبكة العامة لجهازك:
|
1 |
ip route | grep default |
واجهتك العامة هي السلسلة النصية الموجودة في مخرجات هذا الأمر والتي تلي كلمة “dev”. على سبيل المثال، تظهر هذه النتيجة الواجهة المسماة ens3.

افتح الملف /etc/ufw/before.rules لإضافة التكوين ذي الصلة:
|
1 |
$ sudo nano /etc/ufw/before.rules |
بالقرب من الجزء العلوي من الملف، أضف الأسطر المميزة أدناه لتعيين السياسة الافتراضية لسلسلة POSTROUTING في جدول nat وإخفاء أي حركة مرور قادمة من VPN. استبدل ens3 في سطر -A POSTROUTING أدناه بالواجهة التي عثرت عليها في الأمر أعلاه:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # القواعد التي يجب تشغيلها قبل القواعد المضافة بواسطة سطر أوامر ufw. مخصصة # يجب إضافة القواعد إلى إحدى هذه السلاسل: # ufw-before-input # ufw-before-output # ufw-before-forward # START OPENVPN RULES # قواعد جدول NAT *nat :POSTROUTING ACCEPT [0:0] # السماح بمرور حركة المرور من عميل OpenVPN إلى wlp11s0 (قم بتغييرها إلى الواجهة التي اكتشفتها!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # END OPENVPN RULES # لا تحذف هذه السطور المطلوبة، وإلا ستحدث أخطاء . . . |
احفظ الملف وأغلقه بمجرد الانتهاء. بعد ذلك، تحتاج إلى إخبار UFW بالسماح بالحزم الممررة افتراضيًا أيضًا. للقيام بذلك، افتح الملف /etc/default/ufw:
|
1 |
sudo nano /etc/default/ufw |
في الداخل، ابحث عن التوجيه DEFAULT_FORWARD_POLICY وقم بتغيير القيمة من DROP إلى ACCEPT:
|
1 |
DEFAULT_FORWARD_POLICY="ACCEPT" |
احفظ الملف وأغلقه عند الانتهاء. بعد ذلك، اضبط جدار الحماية لتمكين حركة المرور إلى OpenVPN. إذا لم تقم بتغيير المنفذ والبروتوكول في الملف /etc/openvpn/server.conf، فستحتاج إلى فتح حركة مرور UDP إلى المنفذ 1194. إذا قمت بتعديل المنفذ و/أو البروتوكول، فاستبدل القيم التي حددتها هنا. في حال نسيت إضافة منفذ SSH عند اتباع البرنامج التعليمي المتطلب سابقًا، فأضفه هنا أيضًا:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
بعد إضافة تلك القواعد، قم بتعطيل UFW وإعادة تمكينه لإعادة تشغيله وتحميل التغييرات من جميع الملفات التي قمت بتعديلها:
|
1 2 |
sudo ufw disable sudo ufw enable |

تهانينا، تم تكوين خادمك الآن للتعامل بشكل صحيح مع حركة مرور OpenVPN!
الخاتمة
إذا اتبعت هذا البرنامج التعليمي حتى النهاية، فستتمكن الآن من تصفح الإنترنت بأمان. ستتمكن من إبقاء هويتك وموقعك وحركة مرورك بعيدًا عن أعين المتطفلين.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.