في الدرس السابق تعلّمنا كيفية تثبيت سحابة خاصة على سيرفرنا الخاص، وكيف يمكننا تشغيلها وإدارتها بشكل كامل بعيدًا عن الخدمات الجاهزة.
في هذا الدرس سنكمل الخطوة الأهم، وهي تأمين هذه السحابة وحمايتها من الوصول غير المصرح به، بحيث لا يمكن الدخول إليها إلا من خلال اتصال آمن ومشفر.
في هذا الشرح سنقوم بتثبيت 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 على السيرفرات الشخصية.
