تأمين سحابتك الخاصة باستخدام WireGuard

في الدرس السابق تعلّمنا كيفية تثبيت سحابة خاصة على سيرفرنا الخاص، وكيف يمكننا تشغيلها وإدارتها بشكل كامل بعيدًا عن الخدمات الجاهزة.

في هذا الدرس سنكمل الخطوة الأهم، وهي تأمين هذه السحابة وحمايتها من الوصول غير المصرح به، بحيث لا يمكن الدخول إليها إلا من خلال اتصال آمن ومشفر.

في هذا الشرح سنقوم بتثبيت WireGuard على سيرفر مستقل، ثم نجعل الوصول إلى Nextcloud متاحًا فقط لمن يتصل بالـ VPN.

الهدف النهائي:

جهازك
  │
  ▼
WireGuard VPN
  │
  ▼
Nextcloud

أما أي شخص من الإنترنت فلن يستطيع الوصول إلى السحابة.

أولاً: تثبيت WireGuard

تثبيت الحزمة:

apt update
apt install wireguard

يقوم هذا الأمر بتثبيت برنامج WireGuard والخدمات المطلوبة لتشغيله.


إنشاء المفاتيح

نفذ الأمر:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

سيتم إنشاء ملفين:

المفتاح الخاص:

/etc/wireguard/privatekey

المفتاح العام:

/etc/wireguard/publickey

ما الفرق بينهما؟

Private Key

  • سري جداً.

  • يبقى داخل السيرفر.

  • لا يرسل لأحد.

Public Key

  • يمكن مشاركته.

  • يستخدم للتعريف بالسيرفر.

عرض المفاتيح:

cat /etc/wireguard/privatekey
cat /etc/wireguard/publickey

نحفظها لأننا سنحتاجها

إنشاء ملف الإعداد

افتح الملف:

nano /etc/wireguard/wg0.conf

مثال:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = الصق_المفتاح_الخاص_هنا

شرح الإعدادات

Address

Address = 10.0.0.1/24

عنوان السيرفر داخل شبكة VPN.


ListenPort

ListenPort = 51820

المنفذ الذي يستقبل اتصالات WireGuard.


PrivateKey

PrivateKey = xxxxxxxxx

المفتاح الخاص الذي أنشأناه قبل قليل.


معرفة اسم كرت الشبكة

نفذ:

ip -o -4 route show to default | awk '{print $5}'

مثال النتيجة:

eth0

أو

ens3

احفظ الاسم لأننا سنحتاجه لاحقاً.


إضافة قواعد الإنترنت

إذا كان اسم الكرت:

eth0

يصبح الملف:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = الصق_المفتاح_الخاص_هنا

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

حماية ملفات المفاتيح

نفذ:

chmod -R 600 /etc/wireguard/

هذا يمنع المستخدمين الآخرين من قراءة المفاتيح السرية.


تشغيل الخدمة

تفعيل التشغيل التلقائي:

systemctl enable wg-quick@wg0

تشغيل الخدمة:

systemctl start wg-quick@wg0

إعادة التشغيل بعد أي تعديل:

systemctl restart wg-quick@wg0.service

التحقق من الحالة:

systemctl status wg-quick@wg0.service

إذا ظهر:

active (running)

فكل شيء يعمل بشكل صحيح.

إضافة العميل (جهازك)

داخل ملف السيرفر:

nano /etc/wireguard/wg0.conf

أضف:

[Peer]
PublicKey = المفتاح_العام_للعميل
AllowedIPs = 10.0.0.2/32

ثم:

systemctl restart wg-quick@wg0

ملاحظة مهمة

كل جهاز عميل جديد تريد إضافته، لازم:

  • تنشئ له زوج مفاتيح (Private/Public)

  • تعطيه IP مختلف داخل نفس الشبكة (مثل 10.0.0.3 / 10.0.0.4 …)

  • وتضيفه كـ [Peer] جديد داخل نفس الملف

  • برنامج WireGuard يمكن تشغيله على الكمبيوتر والجوال.

  • هذا شرح زيادة (جرعة إضافية) عشان تتضح الفكرة أكثر:
    https://www.youtube.com/watch?v=OAu-5kgY_qc

الآن ننتقل إلى سيرفر Nextcloud

نفترض أن لديك:

سيرفر WireGuard
ولديه عنوان الأيبي التالي : 213.239.246.40

سيرفر Nextcloud
ولديه عنوان الأيبي التالي : 213.111.246.90

الفكرة الأمنية

حالياً أي شخص يستطيع زيارة:

https://cloud.example.com

ونحن لا نريد ذلك.

نريد أن يعمل Nextcloud فقط إذا جاء الطلب من شبكة WireGuard.


إذا كنت تستخدم Apache

افتح الملف:

nano /etc/apache2/sites-available/nextcloud.conf

أضف داخل VirtualHost:

Require ip 213.239.246.40

مثال:

<Directory /var/www/nextcloud/>
    Require ip 213.239.246.40
</Directory>

ثم:

systemctl restart apache2

إذا كنت تستخدم UFW (الأسهل)

على سيرفر Nextcloud:

السماح لشبكة WireGuard فقط:

ufw allow from 213.239.246.40 to any port 80
ufw allow from 213.239.246.40 to any port 443

منع الجميع:

ufw deny 80/tcp
ufw deny 443/tcp

ثم:

ufw enable

النتيجة

قبل الحماية:

أي شخص على الإنترنت
      │
      ▼
  Nextcloud

بعد الحماية:

أي شخص على الإنترنت
      │
      ▼
   مرفوض

------------------

متصل بـ WireGuard
      │
      ▼
   Nextcloud

وبذلك تصبح السحابة غير ظاهرة للعامة، ولا يمكن الوصول إليها إلا بعد الاتصال بشبكة WireGuard الخاصة بك. وهذا من أفضل أساليب حماية Nextcloud على السيرفرات الشخصية.