حماية موقع الويب الخاص بك مع Cloudflare دون تعريض المنافذ للإنترنت

0 الأسهم
0
0
0
0

مقدمة

أهلاً بكم في هذا الدليل التعليمي حول كيفية حماية موقعك الإلكتروني باستخدام Cloudflare. يشرح هذا الدليل كيفية استضافة موقع إلكتروني على خادم، وكيفية حمايته باستخدام حماية Cloudflare الممتازة والمجانية من المستوى السابع مع الحفاظ على الأمان، وكيفية إغلاق منافذ الخادم لمنع أي مُخترق من تجاوز Cloudflare ومهاجمة الخادم مباشرةً.

حول كلاود فلير

قبل أن نبدأ، ملاحظة صغيرة حول Cloudflare وميزاتها:

  • تُعد Cloudflare واحدة من أكبر الشبكات في العالم. واليوم، تفتخر الشركات والمؤسسات غير الربحية والمدونون وأي شخص لديه حضور على الإنترنت بمواقع وتطبيقات أسرع وأكثر أمانًا. فهي محمية من هجمات DDoS، وخوادمها الخلفية محمية من المهاجمين. كما تقدم Cloudflare مجموعة من خدمات الأمان التي تحمي مواقع الويب من هجمات مثل حقن SQL وXSS وهجمات DDoS.
  • تعمل Cloudflare على تشغيل طلبات الإنترنت لملايين المواقع الإلكترونية، حيث تخدم في المتوسط 55 مليون طلب HTTP في الثانية.
  • أدخلت Cloudflare تحسينات عديدة على أمن الإنترنت وأدائه. إنها أداة رائعة لأصحاب المواقع الإلكترونية لحماية مواقعهم من الهجمات وتحسين أدائها. والأفضل من ذلك كله أنها مجانية الاستخدام.
  • مع زيادة حركة المرور لديك، يمكنك دائمًا الترقية إلى خطة مدفوعة للحصول على المزيد من الميزات والأداء الأفضل.
المتطلبات الأساسية
  • اسم النطاق
  • حساب Cloudflare مع المجال المضاف
  • خادم يعمل بنظام Debian 12
  • موقع للحماية

الخطوة 1 - تحديث الخادم وتثبيت NGINX

أولاً، نحتاج إلى تحديث الخادم، ثم نحتاج إلى إضافة مستودع NGINX وتثبيت NGINX.

apt update && apt upgrade -y
apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring -y
# Add the signing key for the nginx packages
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null
# Add the NGINX repository
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
# Pin down the NGINX repository to avoid conflicts with the default Debian repository
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
apt update
# Install NGINX
apt install nginx -y

الخطوة 2 – إعداد الموقع وتكوينه

إن تكوين NGINX لخدمة موقع ويب يتجاوز نطاق هذا البرنامج التعليمي، ولكننا سنستخدم الإعدادات الافتراضية لهذا البرنامج التعليمي ونؤمن الخادم باستخدام Cloudflare.

يجب أن يكون لديك شهادة المنشأ من كلاود فلير إنشاءه وإدراجه في القائمة /etc/nginx/ssl، إنه cf.crt و cf.key ضعها.

بإمكانك إنشاء شهادة أصل في لوحة معلومات Cloudflare عن طريق تحديد المجال الخاص بك والانتقال إلى SSL/TLS » Origin Server » Create Certificate.


يمكنك تكييف التكوين أدناه (على سبيل المثال /etc/nginx/sites-available/default) مع احتياجات موقع الويب الخاص بك.

server {
listen 443 ssl;
server_name <example.com>;
access_log /var/log/nginx/host.access.log main;
ssl_certificate /etc/nginx/ssl/cf.crt;
ssl_certificate_key /etc/nginx/ssl/cf.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

الخطوة 2.1 – إعادة تحميل NGINX

في هذه المرحلة، نقوم بإعادة تحميل NGINX لتطبيق التغييرات وتوجيه المجال إلى الخادم.

systemctl reload nginx

بعد إعادة تحميل NGINX، يمكنك توجيه النطاق إلى الخادم بإضافة سجل A في لوحة معلومات Cloudflare. تأكد من ضبط حالة الوكيل على "مُوَكَّل" لتفعيل حماية Cloudflare من المستوى السابع، وإلا فسيكون الخادم مُعرَّضًا للإنترنت.

الخطوة 3 – 60% من الطريق

لقد قطعنا الآن 60% من الطريق. الموقع محمي الآن بحماية Cloudflare من المستوى السابع، لكن الخادم لا يزال معرضًا للإنترنت، ويمكن للمهاجم تجاوز Cloudflare ومهاجمة الخادم مباشرةً.

في الخطوات التالية، سنقوم بقفل منافذ الخادم والسماح فقط لنطاقات IP الخاصة بـ Cloudflare بالوصول إلى الخادم.

يمكننا استخدام iptables لتحقيق ذلك، ولكننا سنذهب إلى خطوة أبعد ونستخدم Hetzner Cloud Firewall لإغلاق منافذ الخادم.

الخطوة 4 - إعداد جدار الحماية السحابي Hetzner

في هذه الخطوة، سنقوم بإعداد جدار الحماية السحابي Hetzner لإغلاق منافذ الخادم والسماح فقط لنطاقات IP الخاصة بـ Cloudflare بالوصول إلى الخادم.

يمكنك القيام بذلك من خلال وحدة تحكم Hetzner Cloud، وذلك باختيار مشروعك والنقر على علامة التبويب "جدران الحماية". مع ذلك، فإن نطاقات عناوين IP في Cloudflare متغيرة وقابلة للتغيير بمرور الوقت. لذلك، سنستخدم واجهة برمجة تطبيقات Hetzner Cloud لأتمتة هذه العملية.

أولاً، يتعين عليك القيام ببعض الأشياء في وحدة التحكم السحابية Hetzner:

  • أنشئ رمز واجهة برمجة التطبيقات (API) بالانتقال إلى "الأمان" > "رموز واجهة برمجة التطبيقات" ثم انقر على "إنشاء رمز واجهة برمجة التطبيقات". تأكد من منحه أذونات القراءة والكتابة.
  • دوّن معرف جدار الحماية. يمكنك العثور عليه في عنوان URL عند زيارة صفحة جدار الحماية:
  • تأكد من تطبيق جدار الحماية على الخادم، وإلا فهو عديم الفائدة.

عند العودة إلى خادمك، احفظ البرنامج النصي التالي في ملف، مثل firewall.py. سيُدرج هذا البرنامج النصي نطاق IP الخاص بـ Cloudflare في القائمة البيضاء لجدار حماية Hetzner السحابي.

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

import requests
import json
HETZNER_API_TOKEN = "YOUR_HETZNER_API_TOKEN"
HETZNER_FIREWALL_ID = "YOUR_HETZNER_FIREWALL_ID"
def get_cloudflare_ips():
response = requests.get('https://www.cloudflare.com/ips-v4')
if response.status_code == 200:
return response.text.strip().split('\n')
else:
print("Failed to retrieve Cloudflare IP ranges")
return []
def whitelist_ips_in_hetzner(ip_ranges):
headers = {
'Authorization': f'Bearer {HETZNER_API_TOKEN}',
'Content-Type': 'application/json',
}
payload = {
"rules": [
{
"direction": "in",
"source_ips": ip_ranges,
"port": "443",
"protocol": "tcp",
"description": "Accept port 443"
},
#{
# "direction": "in",
# "source_ips": ["0.0.0.0/0","::/0"],
# "port": "22",
# "protocol": "tcp",
# "description": "Accept SSH connections"
#}
]
}
response = requests.post(f'https://api.hetzner.cloud/v1/firewalls/{HETZNER_FIREWALL_ID}/actions/set_rules', headers=headers, data=json.dumps(payload))
if 200 <= response.status_code < 203:
print("IPs whitelisted successfully in Hetzner Firewall")
else:
print("Failed to whitelist IPs in Hetzner Firewall", response.json())
if __name__ == "__main__":
cloudflare_ips = get_cloudflare_ips()
whitelist_ips_in_hetzner(cloudflare_ips)

الخطوة 5 - تشغيل البرنامج النصي وأتمتته

  • تثبيت بايثون

لتشغيل البرنامج النصي، يجب تثبيت بايثون على الخادم. إذا لم يكن بايثون مثبتًا لديك بعد، يمكنك تثبيته بتشغيل الأمر التالي:

apt install python3 -y
  • تشغيل البرنامج النصي.

بمجرد تثبيت Python، يمكنك تشغيل البرنامج النصي باستخدام:

python3 firewall.py

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

  • أتمتة

بمجرد تشغيل البرنامج النصي بنجاح، يمكنك أتمتته عن طريق إضافته إلى مهمة cron، بحيث يتم تشغيل البرنامج النصي كل 24 ساعة ويقوم بتحديث جدار الحماية السحابي Hetzner باستخدام نطاق IP الخاص بـ Cloudflare.

يمكنك إضافة مهمة cron عن طريق تشغيل crontab -e وإضافة السطر التالي إلى الملف.

* 0 * * * /usr/bin/python3 /path/to/firewall.py

الخطوة 6 - تشديد الحماية من جانب Cloudflare

قم بتسجيل الدخول إلى لوحة معلومات Cloudflare الخاصة بك.

  • انتقل إلى علامة التبويب "SSL/TLS"

لضمان تقديم موقع الويب دائمًا عبر HTTPS وأن يكون الاتصال بين Cloudflare والخادم مشفرًا وآمنًا:

  • تمكين "استخدام HTTPS دائمًا" - تمكين "إعادة الكتابة التلقائية لـ HTTPS" - تعيين وضع تشفير SSL/TLS على "كامل (قوي)".

انتقل إلى علامة التبويب "الأمان"

لضمان حماية موقع الويب من الروبوتات والروابط الساخنة والهجمات الأخرى:

  • تمكين "فحص سلامة المتصفح" - تمكين "حماية الروابط الساخنة" - تمكين "وضع مكافحة الروبوتات"“

لاحظ أن هذا ليس حلاً واحدًا يناسب الجميع ويجب عليك دائمًا مراقبة لوحة معلومات Cloudflare وتغيير الإعدادات وفقًا لاحتياجات موقع الويب الخاص بك.

  • يمكنك أيضًا تمكين "تحديد المعدل" لحماية موقع الويب الخاص بك بشكل أكبر من الهجمات، ولحسن الحظ، تقدم Cloudflare طبقة مجانية لهذه الميزة (بما في ذلك قاعدة واحدة).
  • يمكنك أيضًا استخدام ميزة التخزين المؤقت الخاصة بـ Cloudflare لتخزين محتوى موقع الويب الثابت مؤقتًا وتقليل تحميل الخادم.

ومرة أخرى، يجب عليك مراقبة حركة المرور وتغيير الإعدادات وفقًا لاحتياجات موقع الويب الخاص بك.

يوجد أيضًا هذا البرنامج النصي: https://github.com/guided-hacking/cfautouam

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

نتيجة

في هذا البرنامج التعليمي، تعلمتَ كيفية حماية موقع إلكتروني باستخدام حماية Cloudflare من المستوى السابع، مما يضمن حماية الخادم والموقع الإلكتروني من الهجمات دون تعريض المنافذ للإنترنت. كما قمتَ بأتمتة عملية تحديث جدار الحماية السحابي من Hetzner باستخدام نطاق IP الخاص بـ Cloudflare، مما يعزز الحماية من جانب Cloudflare.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً