كيفية إعداد خادم VPN IKEv2 باستخدام StrongSwan على Ubuntu 22.04

مقدمة

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

مفتاح تبادل الإنترنت الإصدار 2، المعروف أيضًا بـ IKEv2، هو بروتوكول يسمح بالاتصال المباشر عبر نفق IPSec بين الخادم والعميل. في تطبيقات VPN التي تستخدم IKEv2، يوفر IPSec التشفير لحركة المرور عبر الشبكة. يتم دعم IKEv2 بشكل أصلي على بعض المنصات (OS X 10.11+، iOS 9.1+، و Windows 10) دون الحاجة إلى تطبيقات إضافية، ويتعامل بسلاسة مع مشاكل العميل.

في هذا البرنامج التعليمي، ستقوم بإعداد خادم VPN IKEv2 باستخدام StrongSwan على خادم Ubuntu 22.04. ستتعلم بعد ذلك كيفية الاتصال به باستخدام عملاء Windows، macOS، Ubuntu، iOS، و Android.

المتطلبات المسبقة

لإكمال هذا البرنامج التعليمي، ستحتاج إلى:

الخطوة 1 — تثبيت StrongSwan

أولاً، ستقوم بتثبيت StrongSwan، وهو برنامج خادم IPSec مفتوح المصدر ستقوم بتكوينه كخادم VPN الخاص بك. ستقوم أيضًا بتثبيت مكون البنية التحتية للمفتاح العام (PKI) بحيث يمكنك إنشاء سلطة الشهادات (CA) لتوفير أوراق اعتماد لبنية البنية التحتية الخاصة بك.

ابدأ بتحديث ذاكرة التخزين المؤقتة المحلية للحزمة:

  1. sudo apt update

ثم قم بتثبيت البرنامج عن طريق كتابة:

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

يُستخدم حزمة libcharon-extauth-plugins الإضافية لضمان قدرة مختلف العملاء على المصادقة على خادمك باستخدام اسم مستخدم مشترك وكلمة مرور مشتركة. تم تضمين حزمة libstrongswan-extra-plugins بحيث يدعم Strongswan مجموعات التشفير بنحو منحنى البيض التي تستخدم مجموعة التشفير Curve25519.

الآن بعد أن تم تثبيت كل شيء، تحرك إلى إنشاء الشهادات الخاصة بك.

الخطوة 2 — إنشاء سلطة الشهادات

يتطلب خادم IKEv2 شهادة للتعرف على نفسه أمام العملاء. للمساعدة في إنشاء الشهادة المطلوبة، يأتي حزمة strongswan-pki مع أداة تسمى pki لتوليد سلطة الشهادات وشهادات الخادم.

للبدء، قم بإنشاء عدة مجلدات لتخزين جميع الموارد التي ستعمل عليها. تتطابق هيكلة المجلدات مع بعض المجلدات في /etc/ipsec.d، حيث ستنقل في نهاية المطاف جميع العناصر التي تقوم بإنشائها إلى هناك:

  1. mkdir -p ~/pki/{cacerts,certs,private}

ثم قم بقفل الأذونات للملفات الخاصة بنا حتى لا يمكن رؤيتها من قبل مستخدمين آخرين:

  1. chmod 700 ~/pki

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

قم بتنفيذ هذه الأوامر لإنشاء المفتاح:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

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

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

يتم استخدام العلم “–lifetime 3650” لضمان صلاحية شهادة جذر سلطة الإصدار لمدة 10 سنوات. الشهادة الجذرية لسلطة الإصدار لا تتغير عادة، لأنه يجب إعادة توزيعها على كل خادم وعميل يعتمد عليها، لذا 10 سنوات هي قيمة انتهاء افتراضية آمنة.

يمكنك تغيير قيمة “distinguished name” (DN) إلى شيء آخر إذا رغبت في ذلك. اسم العام (مجال CN) هنا مجرد مؤشر، لذا لا يجب أن يتطابق مع أي شيء في بنيتك التحتية.

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

الخطوة 3 — إنشاء شهادة لخادم الشبكة الافتراضية الخاصة

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

أولاً، قم بإنشاء مفتاح خاص لخادم الشبكة الافتراضية الخاص بك باستخدام الأمر التالي:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

الآن، قم بإنشاء وتوقيع شهادة خادم الشبكة الافتراضية باستخدام مفتاح سلطة الشهادة الذي قمت بإنشائه في الخطوة السابقة. قم بتنفيذ الأمر التالي، لكن قم بتغيير اسم الشائع (CN) وحقل اسم البديل للموضوع (SAN) إلى اسم DNS الخاص بخادم الشبكة الافتراضية الخاص بك أو عنوان IP:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

ملاحظة: إذا كنت تستخدم عنوان IP بدلاً من اسم DNS، ستحتاج إلى تحديد مدخلات --san متعددة. يجب تعديل السطر في الكتلة الأمر السابقة حيث تحدد الاسم المميز (--dn ...) بالمدخل الإضافي كما في السطر المقتبس التالي:

--dn "CN=عنوان IP" --san @عنوان_IP --san عنوان_IP \

السبب وراء هذا المدخل الإضافي --san @عنوان_IP هو أن بعض العملاء سيتحققون مما إذا كانت الشهادة TLS تحتوي على إدخال DNS وإدخال عنوان IP لخادم عند التحقق من هويته.

الخيار --flag serverAuth يستخدم للإشارة إلى أن الشهادة ستُستخدم صراحة لمصادقة الخادم، قبل تأسيس النفق المشفر. الخيار --flag ikeIntermediate يستخدم لدعم عملاء macOS الأقدم.

الآن بعد أن قمت بإنشاء جميع ملفات TLS/SSL التي يحتاجها StrongSwan، يمكنك نقل الملفات إلى المكان المناسب في الدليل /etc/ipsec.d عن طريق كتابة:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

في هذه الخطوة، قمت بإنشاء زوج من الشهادات التي ستُستخدم لتأمين التواصل بين العميل والخادم. كما قمت بتوقيع الشهادات بمفتاح CA، حتى يتمكن العميل من التحقق من صحة خادم الـ VPN باستخدام شهادة الـ CA. مع كل هذه الشهادات جاهزة، أنت جاهز للمتابعة في تكوين SrongSwan.

الخطوة 4 — تكوين StrongSwan

StrongSwan لديه ملف تكوين افتراضي يحتوي على بعض الأمثلة، ولكن علينا أن نقوم بمعظم التكوين بأنفسنا. لنقم بنسخ الملف للاحتفاظ به كمرجع قبل البدء من الصفر:

  1. sudo mv /etc/ipsec.conf{,.original}

قم بإنشاء وفتح ملف تكوين جديد فارغ باستخدام محرر النص المفضل لديك. هنا، ستستخدم nano:

  1. sudo nano /etc/ipsec.conf

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

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

أولاً، سنخبر StrongSwan بتسجيل حالات البرنامج الخادم للتصحيح والسماح بالاتصالات المكررة. أضف هذه السطور إلى الملف:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

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

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

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

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

بعد ذلك، سنقوم بتكوين معلمات IPSec للجانب “الأيسر” للخادم. يضمن كل من المعلمات التالية أن يتم تكوين الخادم لقبول الاتصالات من العملاء وتحديد هويته بشكل صحيح. ستقوم بإضافة كل إعدادات هذه إلى ملف /etc/ipsec.conf بمجرد أن تصبح على دراية بما هي عليه ولماذا تستخدم:

  • left=%any قيمة %any تضمن أن الخادم سيستخدم واجهة الشبكة حيث يتلقى الاتصالات الواردة للتواصل مع العملاء فيما بعد. على سبيل المثال، إذا كنت تقوم بتوصيل عميل عبر شبكة خاصة، سيستخدم الخادم عنوان الآي بي الخاص حيث يتلقى حركة المرور لبقية الاتصال.
  • leftid=@server_domain_or_IP تتحكم هذه الخيار في الاسم الذي يقدمه الخادم للعملاء. عند الجمع بين الخيار التالي leftcert، يضمن خيار leftid تطابق الاسم المكون للخادم والاسم المميز (DN) الذي يتم تضمينه في الشهادة العامة.
  • leftcert=server-cert.pem هذا الخيار هو مسار الشهادة العامة للخادم التي قمت بتكوينها في الخطوة 3. بدون ذلك، لن يتمكن الخادم من المصادقة على نفسه أمام العملاء، أو إنهاء عملية التفاوض على إعداد IKEv2.
  • leftsendcert=always القيمة always تضمن أن أي عميل يتصل بالخادم سيتلقى دائمًا نسخة من الشهادة العامة للخادم كجزء من عملية الاتصال الأولية.
  • leftsubnet=0.0.0.0/0 آخر خيار “left” الذي ستضيفه يخبر العملاء عن الشبكات الفرعية التي يمكن الوصول إليها خلف الخادم. في هذه الحالة، يُستخدم 0.0.0.0/0 لتمثيل مجموعة كاملة من عناوين IPv4، مما يعني أن الخادم سيخبر العملاء بإرسال جميع حركة المرور عبر الشبكة الظاهرية الخاصة بالشبكة الافتراضية الخاصة.

الآن وبعد أن أصبحت على دراية بكل من الخيارات المتعلقة بالجانب “left”، أضفها جميعًا إلى الملف بهذه الطريقة:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

ملاحظة: عند تكوين معرف الخادم (leftid)، قم بتضمين حرف @ فقط إذا كان سيتم تعريف خادم VPN بواسطة اسم نطاق:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

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

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

بعد ذلك، يمكننا تكوين معلمات IPSec “اليمين” الخاصة بالعميل. كل من المعلمات التالية تخبر الخادم كيفية قبول الاتصالات من العملاء، وكيفية مصادقة العملاء على الخادم، ونطاقات عناوين IP الخاصة وخوادم DNS التي سيستخدمها العملاء. أضف كل هذه الإعدادات إلى ملف /etc/ipsec.conf بمجرد أن تصبح على دراية بما هي ولماذا تستخدم:

  • right=%any الخيار %any لجانب “اليمين” من الاتصال يُعلم الخادم بقبول الاتصالات الواردة من أي عميل عن بُعد.
  • rightid=%any يضمن هذا الخيار أن الخادم لن يرفض الاتصالات من العملاء الذين يقدمون هويتهم قبل إنشاء النفق المشفر.
  • rightauth=eap-mschapv2 يكوّن هذا الخيار الطريقة التي سيستخدمها العملاء للمصادقة على الخادم. يُستخدم eap-mschapv2 هنا لتوافق عريض لدعم عملاء مثل أجهزة Windows و macOS و Android.
  • rightsourceip=10.10.10.0/24 يُعلم هذا الخيار الخادم بتعيين عناوين IP الخاصة للعملاء من نطاق العناوين 10.10.10.0/24 المحدد.
  • rightdns=8.8.8.8,8.8.4.4 هذه العناوين IP هي محل حل مساعد DNS العامة لشركة Google. يمكن تغييرها لاستخدام حلول محلية أخرى، أو حلول محلية لخادم VPN، أو أي حلول أخرى يمكن للعملاء الوصول إليها.
  • rightsendcert=never تعليمة هذا الخيار تُعلم الخادم أن العملاء لا يحتاجون إلى إرسال شهادة للتحقق من هويتهم.

الآن بعد أن أصبحت على دراية بالخيارات “الصحيحة” المطلوبة لخادم VPN، قم بإضافة السطور التالية إلى /etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

الآن سنُخبر StrongSwan بطلب بيانات اعتماد المستخدم من العميل عند الاتصال:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

أخيرًا، قم بإضافة السطور التالية لدعم عملاء Linux و Windows و macOS و iOS و Android. تحدد هذه السطور مجموعة متنوعة من خوارزميات تبادل المفتاح والتجزئة والمصادقة والتشفير (المعروفة باسم أطقم التشفير) التي سيسمح StrongSwan للعملاء المختلفين باستخدامها:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

تمييز كل طقم تشفير مدعوم عن الآخرين بفاصلة. على سبيل المثال، chacha20poly1305-sha512-curve25519-prfsha512 هو طقم واحد، وaes256gcm16-sha384-prfsha384-ecp384 هو طقم آخر. تم اختيار أطقم التشفير المدرجة هنا لضمان أوسع نطاق من التوافق عبر عملاء Windows و macOS و iOS و Android و Linux.

يجب أن يبدو ملف التكوين الكامل مثل هذا:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

احفظ وأغلق الملف بعد التحقق من أنك قمت بإضافة كل سطر بشكل صحيح. إذا استخدمت nano، فافعل ذلك بالضغط على CTRL + X، ثم Y، ثم ENTER.

الآن بعد تكوين معلمات الـ VPN، يمكنك المضي قدمًا في إنشاء حساب حتى يتمكن المستخدمون من الاتصال بالخادم.

الخطوة 5 — تكوين مصادقة الـ VPN

تم تكوين خادم الـ VPN الخاص بك الآن لقبول اتصالات العملاء، لكن لا توجد أي بيانات اعتماد مكونة بعد. ستحتاج إلى تكوين بعض الأشياء في ملف تكوين خاص يُسمى ipsec.secrets:

  • تحتاج إلى إخبار StrongSwan أين يمكن العثور على المفتاح الخاص لشهادة الخادم الخاص بنا، بحيث يتمكن الخادم من المصادقة على العملاء.
  • تحتاج أيضًا إلى إعداد قائمة بالمستخدمين الذين سيُسمح لهم بالاتصال بالـ VPN.

لنفتح ملف الأسرار للتحرير:

  1. sudo nano /etc/ipsec.secrets

أولاً، قم بإخبار StrongSwan أين يمكن العثور على المفتاح الخاص وكيفية تحليله.

/etc/ipsec.secrets
: RSA "server-key.pem"

تأكد من أن السطر يبدأ بحرف : وأن هناك مسافة بعد ذلك حتى يظهر السطر بأكمله على النحو التالي : RSA "server-key.pem".

ثم، ستقوم بتحديد بيانات اعتماد المستخدم. يمكنك استخدام أي اسم مستخدم وكلمة مرور تريدها:

/etc/ipsec.secrets
your_username : EAP "your_password"

احفظ وأغلق الملف. الآن بعد الانتهاء من العمل مع معلمات الـ VPN، قم بإعادة تشغيل خدمة الـ VPN حتى يتم تطبيق تكويننا:

  1. sudo systemctl restart strongswan-starter

الآن بعد أن تم تكوين خادم VPN بالكامل مع خيارات الخادم وبيانات اعتماد المستخدم، حان الوقت للانتقال إلى تكوين الجزء الأهم: جدار الحماية.

الخطوة 6 — تكوين جدار الحماية وتمكين توجيه IP النواة

مع اكتمال تكوين StrongSwan، تحتاج إلى تكوين جدار الحماية للسماح بمرور حركة المرور لشبكة الـ VPN وتوجيهها.

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

  1. sudo ufw allow OpenSSH

ثم قم بتمكين جدار الحماية بكتابة:

  1. sudo ufw enable

ثم، أضف قاعدة للسماح بحركة المرور UDP عبر منافذ IPSec القياسية، 500 و 4500:

  1. sudo ufw allow 500,4500/udp

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

  1. ip route show default

يجب أن تتبع الواجهة العامة الكلمة “dev”. على سبيل المثال، يُظهر هذا النتيجة الواجهة المسماة eth0، كما هو موضح في المثال التالي:

Output
default via your_server_ip dev eth0 proto static

عندما تكون لديك واجهة الشبكة العامة الخاصة بك، قم بفتح ملف /etc/ufw/before.rules في محرر النصوص الخاص بك. القواعد في هذا الملف تتم إضافتها إلى جدار الحماية قبل بقية القواعد العادية للمدخلات والمخرجات. يتم استخدامها لتكوين ترجمة عناوين الشبكة (NAT) بحيث يمكن للخادم توجيه الاتصالات من وإلى العملاء والإنترنت بشكل صحيح.

  1. sudo nano /etc/ufw/before.rules

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

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

بعد ذلك، بعد أسطر تعريف السلسلة و*filter، أضف كتلة إضافية من التكوين:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

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

عند الانتهاء، احفظ وأغلق الملف بعد التحقق من أنك قمت بإضافة كل سطر بشكل صحيح. إذا كنت تستخدم nano، فافعل ذلك عن طريق الضغط على CTRL + X، ثم Y، ثم ENTER.

قبل إعادة تشغيل جدار الحماية، يجب أن تقوم أيضًا بتغيير بعض معلمات نواة الشبكة للسماح بالتوجيه من واجهة واحدة إلى أخرى. الملف الذي يتحكم في هذه الإعدادات يسمى /etc/ufw/sysctl.conf. ستحتاج إلى تكوين بعض الأشياء في الملف.

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

افتح ملف تكوين معلمات نواة UFW باستخدام nano أو محرر النص الذي تفضله:

  1. sudo nano /etc/ufw/sysctl.conf

الآن، أضف الإعداد التالي net/ipv4/ip_forward=1 في نهاية الملف لتمكين توجيه الحزم بين الواجهات:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

بعد ذلك، قم بحظر إرسال واستقبال حزم إعادة توجيه ICMP عن طريق إضافة الأسطر التالية في نهاية الملف:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

وأخيرًا، قم بإيقاف اكتشاف مسار MTU عن طريق إضافة هذا السطر إلى نهاية الملف:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

احفظ الملف عند الانتهاء. الآن يمكنك تمكين كل تغييراتك عن طريق تعطيل وإعادة تمكين جدار الحماية، حيث يقوم UFW بتطبيق هذه الإعدادات في أي وقت يتم فيه إعادة تشغيله:

  1. sudo ufw disable
  2. sudo ufw enable

سيُطلب منك تأكيد العملية. اكتب Y لتمكين UFW مرة أخرى بالإعدادات الجديدة.

الخطوة 7 — اختبار اتصال الشبكة الافتراضية الخاصة على نظام التشغيل Windows و macOS و Ubuntu و iOS و Android

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

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

سترى إخراجًا مشابهًا لهذا:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

انسخ هذا الإخراج إلى جهاز الكمبيوتر الخاص بك، بما في ذلك الأسطر -----BEGIN CERTIFICATE----- و -----END CERTIFICATE-----، واحفظه في ملف باسم معروف، مثل ca-cert.pem. تأكد من أن الملف الذي تقوم بإنشائه يحمل امتدادًا .pem.

بديلًا، استخدم SFTP لنقل الملف إلى جهاز الكمبيوتر الخاص بك.

بمجرد أن يتم تنزيل ملف ca-cert.pem إلى جهاز الكمبيوتر الخاص بك، يمكنك إعداد الاتصال بالشبكة الافتراضية الخاصة.

الاتصال من Windows

هناك طرق متعددة لاستيراد شهادة الجذر وتكوين Windows للاتصال بشبكة VPN. تستخدم الطريقة الأولى أدوات رسومية لكل خطوة. تستخدم الطريقة الثانية أوامر PowerShell، التي يمكن تنظيمها وتعديلها لتناسب تكوين VPN الخاص بك.

ملاحظة: تمت اختبار هذه التعليمات على تثبيتات Windows 10 الجارية بالإصدارات 1903 و 1909.

تكوين Windows باستخدام الأدوات الرسومية

أولاً، قم بتوريد شهادة الجذر عن طريق اتباع هذه الخطوات:

  1. اضغط WINDOWS+R لإظهار مربع الحوار Run، وأدخل mmc.exe لتشغيل وحدة التحكم في إدارة Windows.

  2. من قائمة File، انتقل إلى Add or Remove Snap-in، حدد Certificates من قائمة الوحدات المتوفرة، وانقر فوق Add.

  3. نريد أن تعمل شبكة VPN مع أي مستخدم، لذا حدد Computer Account وانقر فوق Next.

  4. نقوم بتكوين الأمور على الكمبيوتر المحلي، لذا حدد Local Computer، ثم انقر فوق Finish.

  5. تحت جذر الوحدة، قم بتوسيع الإدخال الشهادات (الكمبيوتر المحلي)، ثم قم بتوسيع سلطات الشهادة الجذر الموثوق بها، وبعد ذلك حدد الإدخال الشهادات:

  6. من القائمة الإجراءات، حدد جميع المهام وانقر على استيراد لعرض معالج استيراد الشهادات. انقر على التالي للانتقال مرورًا على التقديم.

  7. في الشاشة الملف للاستيراد، اضغط على زر تصفح، وتأكد من تغيير نوع الملف من “شهادة X.509 (.cer;.crt)” إلى “جميع الملفات (.)”، وحدد ملف ca-cert.pem الذي قمت بحفظه. ثم انقر على التالي.

  8. تأكد من تعيين متجر الشهادات على سلطات جذر الشهادات الموثوق بها، وانقر على التالي.

  9. انقر على إنهاء لاستيراد الشهادة.

ثم قم بتكوين الشبكة الافتراضية الخاصة بالشبكة الافتراضية الخاصة بهذه الخطوات:

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

تكوين Windows باستخدام PowerShell

لإستيراد شهادة CA الجذر باستخدام PowerShell، افتح موجه PowerShell بامتيازات المسؤول أولاً. للقيام بذلك، انقر بزر الماوس الأيمن فوق أيقونة قائمة “ابدأ” واختر Windows PowerShell (مسؤول). يمكنك أيضًا فتح موجه الأوامر بصلاحيات المسؤول وكتابة powershell.

ثم سنقوم بإستيراد الشهادة باستخدام cmdlet PowerShell Import-Certificate. في الأمر التالي، سيضمن الوسيط الأول -CertStoreLocation أن الشهادة تم استيرادها إلى متجر Trusted Root Certification Authorities في الكمبيوتر بحيث يمكن لجميع البرامج والمستخدمين التحقق من شهادة خادم VPN. يجب أن يشير الوسيط -FilePath إلى الموقع الذي نسخت فيه الشهادة. في المثال التالي، المسار هو C:\Users\sammy\Documents\ca-cert.pem. تأكد من تعديل الأمر ليتناسب مع الموقع الذي استخدمته.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

سيخرج الأمر بنتيجة مشابهة للتالي:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

الآن لتكوين VPN باستخدام PowerShell، قم بتشغيل الأمر التالي. قم بتعويض اسم DNS أو عنوان IP الخاص بالخادم على الخط -ServerAddress. ستضمن العلامات المختلفة تكوين Windows بشكل صحيح مع معلمات الأمان المناسبة التي تتوافق مع الخيارات التي حددتها في /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

إذا كان الأمر ناجحًا، فلن يكون هناك أي مخرجات. للتحقق من تكوين VPN بشكل صحيح، استخدم cmdlet Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

ستتلقى نتائج مشابهة للتالي:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

افتراضيًا، يختار ويندوز الخوارزميات الأقدم والأبطأ. قم بتشغيل الأمر Set-VpnConnectionIPsecConfiguration لترقية معلمات التشفير التي ستستخدمها ويندوز لتبادل مفتاح IKEv2، ولتشفير الحزم:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

ملاحظة: إذا كنت ترغب في حذف اتصال VPN وإعادة تكوينه باستخدام خيارات مختلفة، يمكنك تشغيل الأمر Remove-VpnConnection.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

سيتخطى العلامة -Force عملية التأكيد على إزالتها. يجب أن تكون غير متصل بـ VPN إذا قمت بمحاولة إزالتها باستخدام هذا الأمر.

الاتصال بـ VPN

بمجرد استيراد الشهادة وتكوين VPN باستخدام أي من الطريقتين، سيكون اتصال VPN الجديد الخاص بك مرئيًا تحت قائمة الشبكات. حدد VPN وانقر اتصال. ستُطلب منك إدخال اسم المستخدم وكلمة المرور. اكتبهما، ثم انقر موافق، وستتصل.

الاتصال من macOS

اتبع هذه الخطوات لاستيراد الشهادة:

  1. انقر نقرًا مزدوجًا فوق ملف الشهادة. ستظهر Keychain Access مع مربع حوار يقول “Keychain Access يحاول تعديل مفتاح النظام. أدخل كلمة المرور للسماح بذلك.”
  2. أدخل كلمة المرور الخاصة بك، ثم انقر فوق تعديل Keychain
  3. انقر مرتين على شهادة VPN التي تم استيرادها حديثًا. يظهر نافذة خصائص صغيرة حيث يمكنك تحديد مستويات الثقة. قم بتعيين الأمان عبر البروتوكول الإنترنت (IPSec) إلى الثقة دائمًا وسيتم طلب كلمة المرور مرة أخرى. يتم حفظ هذا الإعداد تلقائيًا بعد إدخال كلمة المرور.

الآن بعد استيراد الشهادة والثقة بها، قم بتكوين اتصال VPN باستخدام هذه الخطوات:

  1. انتقل إلى تفضيلات النظام واختر الشبكة.
  2. انقر على الزر “زائد” الصغير في الزاوية السفلية اليسرى لقائمة الشبكات.
  3. في النافذة المنبثقة التي تظهر، قم بتعيين الواجهة إلى VPN، واختر نوع VPN إلى IKEv2، وقم بإعطاء الاتصال اسمًا.
  4. في حقل الخادم و المعرف عن بعد، أدخل اسم النطاق أو عنوان IP للخادم. اترك المعرف المحلي فارغًا.
  5. انقر فوق إعدادات المصادقة، اختر اسم المستخدم، وأدخل اسم المستخدم وكلمة المرور التي قمت بتكوينها لمستخدم VPN الخاص بك. ثم انقر موافق.

أخيرًا، انقر فوق الاتصال للاتصال بالشبكة الخاصة الافتراضية. يجب أن تكون الآن متصلاً بالشبكة الافتراضية الخاصة.

الاتصال من أوبونتو

للاتصال من جهاز Ubuntu، يمكنك إعداد وإدارة StrongSwan كخدمة أو استخدام أمر مرة واحدة في كل مرة ترغب في الاتصال. يتم توفير التعليمات لكل منهما.

إدارة StrongSwan كخدمة

لإدارة StrongSwan كخدمة، ستحتاج إلى أداء خطوات التكوين التالية.

أولاً، قم بتحديث ذاكرة التخزين المؤقت المحلية باستخدام apt

  1. sudo apt update

بعد ذلك، قم بتثبيت StrongSwan والوصلات اللازمة للمصادقة:

  1. sudo apt install strongswan libcharon-extra-plugins

الآن، ستحتاج إلى نسخة من شهادة CA في الدليل /etc/ipsec.d/cacerts بحيث يمكن لعميلك التحقق من هوية الخادم. قم بتشغيل الأمر التالي لنسخ ملف ca-cert.pem إلى المكان المناسب:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

لضمان أن VPN يعمل فقط حسب الطلب، استخدم systemctl لتعطيل StrongSwan من التشغيل تلقائيًا:

  1. sudo systemctl disable --now strongswan-starter

بعد ذلك، قم بتكوين اسم المستخدم وكلمة المرور التي ستستخدمها للمصادقة على خادم VPN. قم بتحرير /etc/ipsec.secrets باستخدام nano أو المحرر الذي تفضله:

  1. sudo nano /etc/ipsec.secrets

أضف السطر التالي، وقم بتحرير قيم اسم المستخدم وكلمة المرور المظللة لتتطابق مع تلك التي قمت بتكوينها على الخادم:

/etc/ipsec.secrets
your_username : EAP "your_password"

أخيرًا، قم بتحرير ملف /etc/ipsec.conf لتكوين عميلك بحيث يتطابق مع تكوين الخادم:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
     # يجب أن يتطابق هذا مع قيمة `leftid` في تكوين الخادم الخاص بك 
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

للاتصال بالشبكة الافتراضية الخاصة، اكتب:

  1. sudo systemctl start strongswan-starter

للفصل مرة أخرى، اكتب:

  1. sudo systemctl stop strongswan-starter

استخدام عميل charon-cmd للاتصالات مرة واحدة

لإدارة StrongSwan كخدمة، ستحتاج إلى أداء الخطوات التكوينية التالية.

أولاً، قم بتحديث ذاكرة التخزين المؤقتة المحلية باستخدام apt

  1. sudo apt update

ثم، قم بتثبيت StrongSwan والإضافات المطلوبة للمصادقة:

  1. sudo apt install strongswan libcharon-extra-plugins

الآن، ستحتاج إلى نسخة من شهادة CA في الدليل /etc/ipsec.d/cacerts بحيث يمكن لعميلك التحقق من هوية الخادم. قم بتشغيل الأمر التالي لنسخ ملف ca-cert.pem إلى المكان المناسب:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

في هذه النقطة يمكنك الاتصال بخادم الشبكة الظاهرية الخاص بك باستخدام charon-cmd باستخدام شهادة CA الخاصة بالخادم، عنوان IP لخادم الشبكة الظاهرية، واسم المستخدم الذي قمت بتكوينه.

قم بتشغيل الأمر التالي كلما أردت الاتصال بالشبكة الظاهرية:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

عند الطلب، قم بتقديم كلمة مرور مستخدم الشبكة الظاهرية وسوف تتم الاتصال بالشبكة الظاهرية. للفصل، اضغط CTRL+C في الطرفية وانتظر إغلاق الاتصال.

الاتصال من iOS

لتكوين اتصال VPN على جهاز iOS، اتبع هذه الخطوات:

  1. أرسل لنفسك بريدًا إلكترونيًا مع الشهادة الجذرية المرفقة.
  2. افتح البريد الإلكتروني على جهاز iOS الخاص بك واضغط على ملف الشهادة المرفق، ثم اضغط تثبيت وأدخل رمز الخاص بك. بمجرد التثبيت، اضغط تم.
  3. انتقل إلى الإعدادات، عام، VPN واضغط على إضافة تكوين VPN. ستظهر شاشة تكوين اتصال VPN.
  4. اضغط على النوع واختر IKEv2.
  5. في حقل الوصف، أدخل اسمًا قصيرًا لاتصال VPN. يمكن أن يكون أي شيء ترغب فيه.
  6. في حقلي الخادم و المعرّف البعيد، أدخل اسم النطاق أو عنوان IP للخادم. يمكن ترك حقل المعرّف المحلي فارغًا.
  7. أدخل اسم المستخدم وكلمة المرور في قسم المصادقة، ثم اضغط على تم.
  8. حدد اتصال VPN الذي أنشأته للتو، واضغط على المفتاح في أعلى الصفحة لتوصيلك.

الاتصال من Android

اتبع هذه الخطوات لاستيراد الشهادة:

  1. أرسل إلى نفسك بريدًا إلكترونيًا مع شهادة CA المرفقة. احفظ شهادة CA في مجلد التنزيلات الخاص بك.
  2. قم بتنزيل عميل StrongSwan VPN من متجر Play.
  3. افتح التطبيق. اضغط على أيقونة “المزيد” () في الزاوية العلوية اليمنى وحدد شهادات CA.
  4. انقر على رمز “المزيد” (. . .) في الزاوية العلوية اليمنى مرة أخرى. حدد استيراد الشهادة.
  5. انتقل إلى مجلد التنزيلات وحدد ملف الشهادة الخاصة بالسلطة الشهادات فيه ثم استيرده إلى التطبيق.

الآن بعد استيراد الشهادة إلى تطبيق StrongSwan، يمكنك تكوين اتصال VPN باستخدام هذه الخطوات:

  1. في التطبيق، انقر على إضافة ملف تعريف VPN في الأعلى.
  2. املأ الخادم بعنوان النطاق الخاص بخادم VPN الخاص بك أو عنوان الآي بي العام الخاص به.
  3. تأكد من اختيار IKEv2 EAP (اسم المستخدم/كلمة المرور) كنوع لاتصال VPN.
  4. املأ اسم المستخدم وكلمة المرور باستخدام بيانات الاعتماد التي قمت بتعريفها على الخادم.
  5. قم بإلغاء تحديد تحديد تلقائيًا في قسم شهادة السلطة الشهادات وانقر على تحديد شهادة السلطة الشهادات.
  6. انقر على علامة التبويب المستوردة في الجزء العلوي من الشاشة واختر السلطة الشهادات التي قمت باستيرادها (سيتم تسميتها “سلطة الجذر لشبكة VPN” إذا لم تغير “DN” من قبل).
  7. إذا كنت ترغب في ذلك، املأ اسم الملف التعريفي (اختياري) بوصف أكثر دقة.

عندما ترغب في الاتصال بالشبكة الظاهرية الخاصة، انقر على الملف التعريفي الذي أنشأته للتو في تطبيق StrongSwan.

تصحيح الاتصالات

إذا كنت غير قادر على استيراد الشهادة، تأكد من أن الملف لديه امتداد .pem، وليس .pem.txt.

إذا كنت غير قادر على الاتصال بالشبكة الظاهرية الخاصة (VPN)، تحقق من اسم الخادم أو عنوان الآي بي الذي استخدمته. يجب أن يتطابق اسم النطاق أو عنوان الآي بي للخادم مع ما قمت بتكوينه كاسم مشترك (CN) أثناء إنشاء الشهادة. إذا لم يتطابقا، فلن يعمل اتصال الشبكة الظاهرية الخاصة (VPN). على سبيل المثال، إذا قمت بإعداد شهادة بـ CN لـ vpn.example.com، يجب أن تستخدم vpn.example.com عند إدخال تفاصيل خادم الشبكة الظاهرية الخاصة (VPN). قم بالتحقق مرتين من الأمر الذي استخدمته لإنشاء الشهادة، والقيم التي استخدمتها عند إنشاء اتصال VPN الخاص بك.

أخيرًا، قم بالتحقق مرتين من تكوين الشبكة الظاهرية الخاصة (VPN) للتأكد من أن قيمة leftid مكونة بالرمز @ إذا كنت تستخدم اسم نطاق:

/etc/ipsec.conf
    leftid=@vpn.example.com

إذا كنت تستخدم عنوان آي بي، تأكد من أن الرمز @ قد تم حذفه. تأكد أيضًا من أنه عندما قمت بإنشاء ملف server-cert.pem ، قمت بتضمين العلمات --san @عنوان_آي_بي و --san عنوان_آي_بي.

الاستنتاج

في هذا البرنامج التعليمي، قمت بإنشاء خادم VPN يستخدم بروتوكول IKEv2. لقد تعلمت عن التوجيهات التي تتحكم في الجانبين الأيسر والأيمن من الاتصال على كل من الخادم والعملاء. كما قمت بتكوين عميل Windows أو macOS أو iOS أو Android أو Linux للاتصال بالشبكة الظاهرية الخاصة (VPN).

لإضافة أو إزالة المستخدمين، انتقل إلى الخطوة 5 مرة أخرى. كل سطر في /etc/ipsec.secrets مخصص لمستخدم واحد، لذا يكفي تعديل الملف لإضافة أو إزالة المستخدمين أو تغيير كلمات المرور.

الآن يمكنك أن تطمئن بأن أنشطتك على الإنترنت ستبقى آمنة أينما ذهبت وبأي جهاز تستخدمه للوصول إلى الإنترنت.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04