ديف أوبس

تثبيت وتخصيص خادم Squid على أوبنتو: دليل شامل

يُعَدّ خادم Squid من أشهر أنظمة البروكسي (Proxy Server) المفتوحة المصدر التي تُستَخدَم على نطاق واسع في بيئات مختلفة، سواء كانت تجارية أو تعليمية أو حكومية. يقدّم Squid وظائف عديدة تسمح بإدارة حركة مرور البيانات والتحكّم فيها، كما يوفّر خصائص التخزين المؤقت للصفحات (Caching) للمساهمة في تحسين الأداء وتخفيض استهلاك النطاق الترددي. يتيح هذا الخادم أيضاً تنفيذ سياسات وصول تضمن حماية أفضل للشبكات الداخلية من خلال ضبط الأذونات وقوائم التحكم في الوصول (ACLs).

يُشكِّل Squid خياراً استراتيجياً للعديد من المؤسسات التي تتطلّع إلى تحسين أداء شبكاتها الداخلية، أو ترغب في تقليل النفقات الناجمة عن استهلاك حزم الإنترنت، أو تهدف إلى مراقبة حركة بيانات المستخدمين وفقاً للسياسات المؤسسية. يتكامل Squid مع عدد من الأدوات الأخرى في عالم البرمجيات الحرة والمفتوحة المصدر، مثل نظام تسجيل البيانات (Logging) وتحليلها باستخدام syslog أو أدوات أُخرى كـLogstash وGrafana.

يستعرض هذا الدليل جميع المراحل الرئيسة للبدء باستخدام Squid على توزيعة أوبنتو (Ubuntu)، ابتداءً من التعريف بأساسيات البروكسي ووصولاً إلى أدق تفاصيل التخصيص والأمان والأداء. يُقدَّم الدليل بأسلوب شامل يعالج مجموعة واسعة من الجوانب النظرية والعملية، مما يضع بين يديك مرجعاً تقنياً متكاملاً حول كيفية تثبيت خادم Squid وإدارته وتطويره.

يُمكن اعتبار هذا المقال دليلاً متكاملاً يستهدف فئات متعددة من القرّاء: مديرو النظم (System Administrators)، والمهندسون التقنيّون، وخبراء الشبكات، بالإضافة إلى المهتمّين بتعلم أدوات وتقنيات البروكسي على مستوى مؤسسي أو شخصي. سوف يتناول المقال – بالتفصيل – الإعدادات الخاصة بأنواع مختلفة من الاستخدامات، سواء كان الخادم مخصصاً لتحسين زمن الوصول (Latency) في تحميل المواقع، أو إدارة السياسات المؤسسية المتعلقة بالإنترنت، أو توفير حجب للمواقع غير المرغوب فيها، أو حتى تعزيز الأمان عبر إنشاء طبقات إضافية للوقاية من التهديدات الأمنية.


الفصل الأول: نبذة حول البروكسي وخادم Squid

ما هو البروكسي؟

يُعَدّ البروكسي (Proxy) وسيطاً بين العميل (Client) والخادم الأصلي (Origin Server). عندما يُرسِل العميل طلباً للوصول إلى موقع ويب أو مورد على الإنترنت، يقوم خادم البروكسي باستقبال الطلب أولاً، ثم يقوم بتمريره إلى الخادم الأصلي ومن ثم استلام الاستجابة وإعادتها إلى العميل. في معظم الأحيان، يتيح البروكسي إمكانيات متعددة تتعدى هذه الوظيفة الأساسية، مثل:

  • التخزين المؤقت (Caching): حفظ نتائج الطلبات واستجابات المواقع بحيث يتم إعادة استخدامها لتلبية الطلبات المستقبلية بصورة أسرع وبدون الحاجة للاتصال المتكرر بالمصدر.
  • التحكم في الوصول (Access Control): السماح أو حجب الوصول إلى مواقع معينة أو بروتوكولات معينة بناءً على سياسات محددة.
  • التصفية (Filtering): فلترة المحتوى بهدف حجب الإعلانات أو محتوى محدد يخالف سياسات بيئة العمل.
  • جمع وتحليل البيانات (Logging & Analytics): تتبع استخدام الإنترنت على مستوى المستخدمين أو الأقسام.
  • تحسين الأداء: تحسين زمن الاستجابة وتقليل استهلاك النطاق الترددي عبر استخدام ذاكرة مؤقتة.

لمحة عن خادم Squid

خادم Squid هو بروكسي مفتوح المصدر يدعم مجموعة واسعة من البروتوكولات مثل HTTP وHTTPS وFTP. اكتسب شهرته لأسباب عدة، منها سهولة تخصيصه وسرعة أدائه ومرونة استخدامه في بيئات مختلفة. يساهم Squid في تحسين الأداء عن طريق تخزين الصفحات والمحتوى مؤقتاً بما يحد من عدد الاتصالات الصادرة، كما يوفر واجهة تحكّم ثرية بضبط قواعد الوصول وسياسات التخزين المؤقت.

يُمكن الاستفادة من خادم Squid في المؤسسات المتوسطة والكبيرة، وحتى على مستوى الاستخدام الشخصي. يُستخدَم كثيراً في مجال الحجب للمواقع (Content Filtering) ومراقبة حركة الإنترنت (Traffic Monitoring)، فضلاً عن تأمين طبقة إضافية من التحكم والخصوصية.

أبرز مزايا Squid

  • مرونة التخصيص: يمكن ضبط معظم جوانب خادم Squid عبر ملف إعداد رئيسي يتضمن خيارات عديدة تُسمَّى بالـDirectives.
  • خيار اقتصادي: كونه مفتوح المصدر ومجاني، يوفّر حلاً تقنياً فعالاً من حيث التكلفة.
  • دعم للتخزين المؤقت: لديه آليات متقدمة لحفظ وتحليل المعلومات وتخزينها مؤقتاً لإعادة استخدامها وتوفير سرعة أكبر للشبكة.
  • إدارة الوصول: يوفر آلية تحكم دقيقة بقوائم الوصول (ACLs) للتحكم في المستخدمين أو الأجهزة أو الشبكات المسموح لها بالوصول إلى موارد الإنترنت.
  • التوافق: يعمل على نُظم تشغيل مختلفة مثل لينكس (Ubuntu, CentOS وغيرها)، وBSD، وسولاريس، وحتى ويندوز.
  • أمان إضافي: يوفّر طبقة عازلة بين الشبكة الداخلية والعالم الخارجي، مما يقلل من احتمالية استهداف الأجهزة الداخلية مباشرة.

الفصل الثاني: المتطلبات الأساسية واعتبارات ما قبل التثبيت

المتطلبات العتادية (Hardware Requirements)

عند تحديد الخادم الذي سيستضيف خدمة Squid، ينبغي مراعاة بعض المتطلبات العتادية التي تتوافق مع حجم الحمل المتوقع وعدد المستخدمين. عموماً، لا يشترط خادم Squid متطلبات فائقة الكفاءة في البيئات الصغيرة أو المتوسطة. لكن في المؤسسات الكبيرة التي تضم آلاف المستخدمين، قد يكون من الضروري توفير موارد عتادية قوية للتعامل مع الطلبات الكثيفة والمتزامنة.

  • المعالج (CPU): يفضّل أن يكون على الأقل ثنائي النواة (Dual-core)، بينما تكون المعالجات ذات النوى المتعددة خياراً أفضل للبيئات المزدحمة.
  • الذاكرة (RAM): تختلف المتطلبات بناءً على عدد المستخدمين وحجم البيانات المُخزَّنة مؤقتاً. كقاعدة عامة، يُنصَح بتوفير 1 غيغابايت من الذاكرة على الأقل للبيئات الصغيرة، وقد يصل الأمر إلى 8 غيغابايت أو أكثر في البيئات الكبيرة.
  • التخزين (Storage): يجب توفير مساحة كافية على القرص الصلب للتخزين المؤقت. عادةً يُنصح بتخصيص قسم منفصل للتخزين المؤقت (Cache)، مع مراعاة استخدام أقراص سريعة للوصول بشكل أسرع إلى البيانات.
  • البطاقة الشبكية (Network Interface): يُفضَّل بطاقات شبكة بسرعة 1 جيجابت على الأقل للبيئات المتوسطة، وقد يتطلب الأمر سرعة 10 جيجابت في حالات الاستخدام الضخم.

المتطلبات البرمجية (Software Requirements)

يعتمد Squid على مجموعة من الحزم والأدوات ليتكامل مع النظام. في أوبنتو، معظم الحزم الأساسية تأتي مُضمَّنة في المستودعات الرسمية. ومع ذلك، يُنصَح بالتحقق من توافر أحدث نسخة مستقرة من Squid لضمان الحصول على إصلاحات الأخطاء والتحسينات الأخيرة.

  • توزيعة أوبنتو: الإصدار 20.04 أو الأحدث هو الموصى به، لأنه يحظى بدعم طويل الأمد (LTS).
  • حزم البناء (Build Essentials): في حال الحاجة إلى بناء Squid من المصدر.
  • مكتبات OpenSSL: لتوفير دعم الاتصالات الآمنة (SSL/TLS) في حال استخدام بروكسي HTTPS.

اعتبارات أمنية

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

  • استخدام جدار ناري (Firewall) متقدّم للتأكد من أن المنافذ المفتوحة لخادم Squid هي المنافذ الضرورية فقط.
  • تحديث نظام أوبنتو بشكل منتظم لمنع الثغرات.
  • ضبط قوائم التحكم في الوصول لمنع الاستخدام غير المصرح به.

تحديد الأهداف والاستخدامات

قبل البدء بعملية التثبيت، يُنصَح بتحديد الهدف الرئيس من نشر خادم Squid، سواء كان التخزين المؤقت للمحتوى (Caching) أو ضبط سياسات وصول للمواقع أو دمج الاثنين معاً. كما يجب مراعاة إذا ما كان الاستخدام يتضمن بروتوكول HTTPS الذي يحتاج إلى ضبط إضافي للشهادات الرقمية.


الفصل الثالث: خطوات التثبيت الأولية لخادم Squid

تثبيت خادم Squid من مستودعات أوبنتو

تمتاز أوبنتو بسهولة إدارة الحزم باستخدام أداة apt. يقدّم المستودع الرسمي نسخة مستقرة من خادم Squid. فيما يلي الخطوات الأولية لتثبيت خادم Squid على أوبنتو:

  1. تحديث قوائم الحزم:
    sudo apt update
    sudo apt upgrade
        
  2. تثبيت خادم Squid:
    sudo apt install squid
        
  3. التحقق من حالة الخدمة:
    systemctl status squid
        

    ستظهر رسالة تفيد بأن الخدمة مفعَّلة وتعمل بصورة طبيعية ما لم تحدث مشكلة.

إعداد الملف الرئيسي للإعدادات

يُدار خادم Squid عبر ملف إعداد رئيسي عادة ما يكون /etc/squid/squid.conf. توجد في هذا الملف مجموعة كبيرة من التوجيهات (Directives) التي تتحكّم بسلوك الخادم.

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

تهيئة إعدادات الشبكة والجدار الناري

تحتاج المنافذ الشبكية الخاصة بـSquid إلى أن تكون متاحة عبر الجدار الناري. المنفذ الافتراضي للبروكسي HTTP هو 3128، بينما المنفذ 443 (أو 13128) قد يُستخدَم للاتصالات الآمنة. لتأكيد السماح بالاتصالات على المنفذ 3128 مثلاً، يمكن استخدام الأوامر التالية (اعتماداً على أداة الجدار الناري المثبتة):

sudo ufw allow 3128/tcp
sudo ufw reload

بعد ذلك، يجب التأكد من إمكانية وصول العملاء (Clients) في الشبكة الداخلية إلى خادم Squid عبر العنوان (IP) المناسب. يتم ذلك إما بإعداد عنوان IP ثابت للخادم أو بتهيئة نظام الـ DNS أو حتى باستخدام DHCP مع حجز عنوان IP محدد للخادم.


الفصل الرابع: الأساسيات في تخصيص خادم Squid

توجيهات أساسية في ملف الإعداد (squid.conf)

ملف /etc/squid/squid.conf يحوي توجيهات لا حصر لها تُحدِّد كيفية عمل Squid. فيما يلي بعض التوجيهات المهمة التي ينبغي معرفتها:

  • http_port
    يُحدد هذا التوجيه المنفذ الذي يستمع عليه خادم Squid لطلبات العملاء. على سبيل المثال:

    http_port 3128
        

    يمكن إضافة خيارات أخرى مثل تحديد عنوان IP معين أو بروتوكول معين.

  • cache_dir
    يُحدد موقع وحجم التخزين المؤقت. على سبيل المثال:

    cache_dir ufs /var/spool/squid 2048 16 256
        

    الصيغة تضم نوع نظام الملفات (ufs أو aufs أو غيرها)، والمجلد الذي سيُخَزَّن فيه الكاش، الحجم بالميغابايت، وعدد الأدلة الفرعية، وعوامل أخرى.

  • acl
    تُستخدَم لإنشاء قوائم تحكم في الوصول. مثال:

    acl local_network src 192.168.1.0/24
    acl allowed_sites dstdomain .example.com
        
  • http_access
    يُستخدَم مع تعريفات ACL لتحديد السماح أو المنع. مثال:

    http_access allow local_network
    http_access deny all
        

ضبط الوصول والتحكم (Access Control Lists – ACLs)

تشكّل قوائم التحكم في الوصول (ACLs) واحدة من أهم عناصر التخصيص في Squid. تسمح هذه القوائم بتحديد الشروط أو المعايير التي تنطبق على استخدام البروكسي. عادةً ما يتم الإعلان عن ACL جديدة عبر اسم فريد يحدد نوعها ثم القيمة (أو القيم) المقابلة.

acl local_users src 192.168.1.0/24
acl blocked_sites dstdomain .facebook.com .youtube.com

بعد الإعلان عن الـ ACL، يأتي دور الأوامر http_access allow أو http_access deny لتحديد الإجراءات المسموح بها أو المرفوضة:

http_access deny blocked_sites
http_access allow local_users
http_access deny all

من المهم إدراك أن التعليمات تُقرأ بالترتيب، وعند تطابق الشرط مع إحدى القواعد، لا يُنظر إلى القواعد التي تليها. لذا ينبغي ترتيب القواعد بعناية لضمان أداء الدور المنشود.

التخزين المؤقت (Caching) وإدارته

يعتبر التخزين المؤقت من المزايا الرئيسة التي يقدّمها Squid. يتم حفظ صفحات ويب والملفات المستلمة من الإنترنت في ذاكرة وسيطة، بحيث يمكن تلبية الطلبات المستقبلية بسرعة أكبر ومن دون استهلاك إضافي للنطاق الترددي.

  • cache_dir: يحدد موقع الكاش وحجمه. من المهم اختيار نظام ملفات ذي أداء جيد.
  • cache_mem: يُحدِّد مقدار الذاكرة العشوائية (RAM) المستخدمة للتخزين المؤقت من النوع سريع الوصول.
    cache_mem 256 MB
        
  • refresh_pattern: يُحدد قواعد التحديث أو المدة التي يمكن خلالها اعتبار الكائن المخزّن مؤقتاً صالحاً قبل إعادة جلبه من المصدر.
    refresh_pattern -i \.jpg$  1440 90% 43200
        

تأمين الاتصالات (HTTPS Proxy)

يدعم Squid التعامل مع بروتوكول HTTPS، إلا أن ذلك يتطلب ضبطاً إضافياً للشهادات الرقمية والطبقة المشفّرة SSL/TLS. في حال الرغبة في تنفيذ ما يُسمّى SSL Bump لفحص حزم HTTPS الواردة، يتطلب الأمر إصدار شهادة سلطة موثوقة (CA) واستيرادها في المتصفحات أو الأنظمة العميلة. الأمر يتجاوز مجرد الاعتماد على تحويل (Tunnel) البيانات. يتطلب الأمر أيضاً تفعيل التوجيهات التالية:

http_port 3128 ssl-bump cert=/etc/squid/certs/myCA.pem key=/etc/squid/certs/myCA.key
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice all

هذه مجرد مثال بسيط، لكن الضبط الفعلي لـ SSL Bump أعقد من ذلك ويجب دراسة الجوانب القانونية والأمنية لاستخدامه.


الفصل الخامس: تعمّق في إعدادات الأداء وتحسينه

اختيار نظام الملفات وموقع الكاش

عند إعداد التخزين المؤقت، يجب انتقاء موقع فعّال على القرص الصلب. يُنصَح باستخدام أقراص صلبة سريعة (مثل SSD) لتقليل زمن الوصول عند القراءة والكتابة في الكاش. هناك عدة أنواع من الأدلّة (Directory Types) في Squid، أبرزها:

  • ufs: النوع الأقدم والأبسط، يعتمد على نظام ملفات قياسي.
  • aufs: يتيح عمليات إدخال/إخراج متوازية، مما يرفع الأداء في بعض الحالات.
  • diskd: يعتمد على عمليات مراسلة بين العمليات المنفصلة لتسريع وصول القرص.
  • rock: بنية تخزين حديثة نسبيّاً، تسمح بأداء أفضل في بعض السيناريوهات.

يُمكن اختيار النوع عبر تغيير السطر في ملف الإعداد:

cache_dir aufs /var/spool/squid 2048 16 256

يجب الانتباه إلى تهيئة الدليل عبر sudo squid -z قبل تشغيل الخدمة في حال تعديل الـ cache_dir.

ضبط الذاكرة العشوائية (RAM) بحكمة

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

مثال: في خادم يحتوي على 8 غيغابايت RAM، قد تكون قيمة cache_mem 512 MB خياراً جيداً للبداية، ثم تُعدل وفقاً لاختبار الأداء.

إدارة سياسات التحميل المسبق والتحكم في زمن بقاء الكائنات

تدعم Squid سياسة معقدة تُعرف باسم refresh_pattern لتحديد الفترة التي يُعتبر فيها عنصر الويب المخزّن مؤقتاً لا يزال صالحاً قبل إعادة طلبه من المصدر. يمكن أيضاً بناء سياسات مختلفة بناءً على نوع الملف أو الموقع. الهدف هو توازن بين التحديث السريع للمحتوى ومنع التحميل المتكرر من الموقع الأصلي.

refresh_pattern -i \.png$   1440 90% 43200
refresh_pattern -i \.html$  60   20%  240

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

التعامل مع الاتصالات المتعددة والطلبات المتزامنة

من الجوانب المهمة تحسين خادم Squid ليتمكّن من استقبال ومعالجة عدد كبير من الاتصالات في وقت واحد، خصوصاً إن كان في بيئة مؤسسية ذات عدد مستخدمين كبير. يتضمن هذا تهيئة:

  • client_db: عدد المستخدمين النشطين، ويحدد فترة بقاء معلوماتهم في ذاكرة Squid.
  • max_filedescriptors: عدد الملفات المفتوحة الأقصى. يمكن زيادته إذا كان هناك عدد كبير من الاتصالات النشطة المتزامنة.
  • cache_replacement_policy: طريقة استبدال العناصر في الكاش (LRU، GDSF، LFUDA). يؤثر الاختيار في الأداء.

يجب أيضاً فحص موارد النظام مثل ulimit وضبطها بحيث تُتيح عدداً أكبر من الملفات المفتوحة إذا اقتضى الأمر، وذلك حتى لا يصل Squid إلى سقف الموارد المسموح به من قِبل نظام التشغيل.


الفصل السادس: تعزيز الحماية والأمان في خادم Squid

إضافة طبقات التوثيق (Authentication)

يمكن تقييد وصول العملاء إلى خادم Squid من خلال آليات التوثيق المختلفة. أحد الأمثلة الشائعة هو استخدام بروتوكول HTTP Basic Authentication. يتطلب الأمر تثبيت حزمة apache2-utils (على أوبنتو) لإتاحة أداة htpasswd:

sudo apt install apache2-utils
sudo htpasswd -c /etc/squid/passwd user1

بعد ذلك يمكن تفعيل التوثيق في ملف squid.conf:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy Authentication
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all

عندما يحاول أي عميل استخدام الخادم، سيُطلب منه إدخال اسم المستخدم وكلمة المرور المحددة في الملف /etc/squid/passwd. وبالطبع يمكن دمج هذه الآلية مع قوائم وصول أخرى مثل نطاقات IP أو مواعيد زمنية معينة.

تقليل مساحة التعرض للهجمات

يجب تكوين خادم Squid بحيث لا يتجاوز نطاقه ما هو ضروري. على سبيل المثال:

  • إغلاق المنافذ غير المستخدمة ومنع الوصول إلى واجهة الإدارة من الشبكات الخارجية.
  • التحكم بإعداد icp_port و htcp_port إن لم يكن هناك حاجة للتواصل بين عدة خوادم Squid.
  • التحكم الدقيق في acl لمنع جهات غير موثوقة من استخدام البروكسي كـ Relay.

بالإضافة إلى ذلك، في حال وجود خدمات أخرى على الخادم نفسه، يُفضّل عزل كل خدمة في بيئة افتراضية أو استخدام حاويات (Containers) مثل Docker لزيادة العزل والحماية.

تفعيل السجلات المتقدمة وتحليلها

يخزّن Squid عدة أنواع من السجلات (Logs) تزوِّد مدير النظام بمعلومات موسّعة حول استخدام الخادم وحالة الأداء والأخطاء. أشهر هذه السجلات:

  • access.log: يسجل جميع الطلبات الواردة والمستجيبة.
  • cache.log: يسجل الأحداث الهامة المتعلقة بآلية الكاش، بالإضافة إلى رسائل الخطأ والتحذيرات.
  • store.log: يسجل عمليات التخزين المؤقت التي يجريها Squid.

يمكن تحليل هذه السجلات باستخدام أدوات مختلفة مثل SARG وCalamaris أو حتى باستخدام أنظمة ELK Stack (Elasticsearch, Logstash, Kibana) للحصول على معلومات إحصائية وتحليلية أكثر تقدماً.

سياسة الأمان للاتصالات المشفّرة

عند السماح بمرور اتصالات HTTPS من خلال Squid، ينبغي تحديد الأسلوب الأمثل للتعامل معها. إذا كان الهدف مجرد تمرير الاتصالات (Tunneling)، فإن CONNECT method كافٍ. لكن في حال الرغبة في تحليل المحتوى أو تنفيذ سياسات حجب على HTTPS، فلا بد من تفعيل SSL Bump. هنا يُنصَح بالحذر، لأن فك تشفير حركة مرور HTTPS قد يتعارض مع الخصوصية والأمان للمستخدمين ما لم يكن ذلك مبرراً ومصرحاً به وفقاً للسياسات المؤسسية.


الفصل السابع: إدارة المحتوى والحجب (Content Filtering) باستخدام Squid

إعداد الحجب الأساسي باستخدام ACL

الحجب الأساسي للمواقع يُمكن تنفيذه بيسر عبر إنشاء ACL للمواقع المحجوبة ومن ثم استخدام تعليمة http_access deny. المثال التالي يوضح حجب النطاقات التي تحتوي على “.facebook.com” و”.youtube.com”:

acl blocked_sites dstdomain .facebook.com .youtube.com
http_access deny blocked_sites
http_access allow all

بهذه الخطوات سيمنع Squid أي عميل يحاول الوصول إلى فيسبوك أو يوتيوب.

استخدام قوائم الحجب الخارجية

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

acl large_blocked_sites dstdomain "/etc/squid/blocked_sites.txt"
http_access deny large_blocked_sites

سيقرأ Squid كل نطاق في الملف /etc/squid/blocked_sites.txt ويمنع الوصول إليه. يسهّل ذلك إدارة قوائم كبيرة من المواقع بدلاً من إضافتها يدوياً في ملف الإعداد الرئيسي.

الدمج مع أنظمة فلترة المحتوى المتقدمة

للحصول على وظائف فلترة أكثر تطوراً مثل تصنيف المواقع بحسب المحتوى أو فحص الملفات بالاعتماد على قواعد الأمان، يمكن دمج Squid مع أنظمة خارجية مثل SquidGuard أو DansGuardian. هذه الأنظمة تعمل كطبقة إضافية تعترض طلبات Squid وتطبّق سياسات حجب أو فلترة بحسب قواعدها الخاصة.

على سبيل المثال، DansGuardian يوفر آلية تحليل المحتوى النصي والصور بمستوى أعمق من مجرد الحجب بناءً على أسماء النطاقات. يتمتع بقدرة على رصد الكلمات المفتاحية غير الملائمة أو تصنيف فئات المحتوى (عنف، محتوى للبالغين، … إلخ).


الفصل الثامن: سيناريوهات متقدمة لتثبيت خادم Squid

تكامل Squid في بيئة مُجمع البروكسي (Proxy Chain)

قد ترغب بعض المؤسسات في الحصول على عدة مستويات من البروكسي، إما لأغراض الأمان أو الرقابة أو تجاوز قيود معينة. في هذه الحالة، يمكن جعل Squid يوجِّه الطلبات إلى بروكسي آخر. يتم ذلك عبر استخدام توجيهات مثل:

cache_peer parent.example.com parent 3128 0 no-query default

بهذا الشكل يتم توجيه الطلبات الواردة إلى الخادم parent.example.com في المنفذ 3128. يمكن أيضاً ضبط خيارات أخرى مثل وزن (weight) الخادم وتفضيله عن غيره إذا كان هناك عدة خوادم.

إعداد Squid كـ Transparent Proxy

غالباً ما تستخدم المؤسسات ما يُعرف بـ “الوكيل الشفاف” (Transparent Proxy) بحيث لا يحتاج المستخدم إلى ضبط إعدادات البروكسي يدوياً في المتصفح. في هذا السيناريو، يتم إعادة توجيه حركة المرور تلقائياً عبر خادم البروكسي باستخدام قواعد iptables أو إعدادات موجّه الشبكة (Router).

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j REDIRECT --to-port 3128

في ملف squid.conf يجب ضبط المنفذ على النحو التالي:

http_port 3128 intercept

مع هذا الضبط، سيستقبل Squid الطلبات القادمة للمنفذ 80 تلقائياً. لكن يتطلب هذا السيناريو إعداداً دقيقاً في بيئات HTTPS إذا رغبنا في التفتيش على محتوى HTTPS.

إعداد Squid كمخدم مرآة للمحتوى (Reverse Proxy)

يمكن أيضاً تشغيل Squid على أنه Reverse Proxy لتسريع وتسليم صفحات ويب تُستضاف على خادم داخلي. في هذه الحالة، يتلقى Squid الطلبات من الإنترنت ويمرّرها إلى خادم الويب الداخلي، بينما يقوم بتخزين المحتوى مؤقتاً. يُستخدم هذا الأسلوب غالباً لتسريع مواقع الويب عالية التحميل. تتضمن الخطوات:

  • إعداد http_port مع خيار accel.
  • إضافة cache_peer يشير إلى خادم الويب الداخلي.
  • ضبط سجلات محددة ومراقبة الأداء.

يُمكن مثلاً استخدام التوجيهات التالية:

http_port 80 accel defaultsite=www.myweb.com
cache_peer 192.168.1.10 parent 80 0 no-query originserver
acl our_sites dstdomain www.myweb.com
http_access allow our_sites

سيتمكّن Squid من العمل كواجهة لموقع الويب www.myweb.com من خلال تحويل الطلبات الواردة للمنفذ 80 إلى الخادم الداخلي على العنوان 192.168.1.10.


الفصل التاسع: استكشاف الأخطاء وإصلاحها (Troubleshooting)

مراقبة السجلات (Logs) وتتبع الأخطاء

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

  • access.log: للتأكد من استقبال الطلبات بالشكل المطلوب وتجاوبها.
  • cache.log: للتحقق من رسائل الأخطاء التحذيرية أو المشكلات في التخزين المؤقت.

على سبيل المثال:

tail -f /var/log/squid/access.log

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

التحقق من صلاحيات الملفات والمجلدات

قد تتسبب صلاحيات خاطئة في المجلد /var/spool/squid أو /var/log/squid في منع Squid من الوصول إليها والكتابة. من الضروري التأكد من أن المجلدات مملوكة للمستخدم squid (أو proxy) بحسب التوزيعة والإصدار. مثال:

sudo chown -R proxy:proxy /var/spool/squid
sudo chmod -R 755 /var/spool/squid

يُعَد هذا الإجراء مهماً قبل بدء الخدمة لأول مرة، خاصة إذا تم تغيير موقع أو اسم مجلد الكاش.

التأكد من عدم وجود تعارض في المنافذ

عند تشغيل عدة خدمات على الخادم نفسه، قد يحدث تعارض إذا كانت خدمات أخرى تستخدم المنفذ 3128 أو أي منفذ آخر تم تحديده لـ Squid. يمكن استخدام:

sudo lsof -i :3128

للتحقق من العمليات التي تستخدم المنفذ 3128. إذا ظهر تعارض، يجب تعديل http_port في ملف squid.conf أو نقل الخدمة الأخرى إلى منفذ آخر.


الفصل العاشر: مراقبة الأداء وأدوات التحليل

أدوات التحليل المختلفة

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

  • SARG (Squid Analysis Report Generator): يولّد تقارير إحصائية تتضمن الأكثر تصفحاً، المستخدمين النشطين، حجم البيانات، وغيرها من المقاييس.
  • SquidGuard Report: يدمج إمكانيات الحجب مع تحليل سجلات الاستخدام.
  • Calamaris: أداة بسيطة لإخراج تقارير نصية أو HTML توضح النشاط على خادم Squid.

مؤشرات الأداء الأساسية (KPIs)

عند مراقبة أداء Squid، يمكن الاهتمام بعدة مؤشرات أساسية تعطي صورة عامة عن كفاءة الخدمة:

  • نسبة التخزين المؤقت (Hit Ratio): النسبة المئوية للطلبات التي يتم خدمتها من الكاش.
  • زمن الاستجابة (Response Time): الوقت المستغرق للرد على طلب العميل.
  • معدل النقل (Throughput): إجمالي البيانات المنقولة عبر البروكسي خلال فترة زمنية محددة.
  • استخدام الموارد: نسبة استهلاك الذاكرة والمعالج والقرص.

استخدام أدوات المراقبة المتكاملة

لتحقيق رؤية شمولية، يمكن دمج سجلات Squid مع أنظمة المراقبة الأشمل مثل:

  • Grafana وPrometheus: لجمع المقاييس الزمنية (Time-Series Data) وعرضها على شكل لوحات بيانية (Dashboards).
  • ELK Stack: Elasticsearch, Logstash, Kibana لتحليل السجلات النصية وتوليد رسومات توضح أنماط الاستخدام والأخطاء.
  • Zabbix أو Nagios: أدوات مراقبة عامة للنظام يمكن استخدامها مع إضافات (Plugins) مخصصة لخادم Squid.

الفصل الحادي عشر: تطبيق ممارسات الـ High Availability والتوسّع (Scaling)

نشر خادم Squid في بيئة متوازنة الحِمل (Load Balancing)

في حال وجود عدد كبير من المستخدمين أو معدلات عالية من الطلبات، يمكن توزيع الحمل على عدة خوادم Squid. يتم ذلك عادة عبر آليات مثل:

  • Load Balancer: مثل HAProxy أو Nginx كموازن حمل (Load Balancer) أمام عدة عقد (Nodes) من Squid.
  • DNS Round Robin: توزيع طلبات DNS بحيث تشير إلى عناوين خوادم Squid متعددة.

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

تفعيل خيارات الـ Clustering بين خوادم Squid

يمكن ربط عدة خوادم Squid معاً عبر بروتوكولات مثل ICP أو HTCP للتنسيق في حفظ المحتوى وتبادله. هذه التقنيات تسمح للـ Proxy بالبحث في ذاكرة تخزين مؤقت لدى خادم آخر قبل طلب المحتوى من الشبكة الخارجية، مما يعزز نسبة التخزين المؤقت ويحسّن الأداء.

على سبيل المثال، يمكن إضافة الأسطر التالية في ملف الإعداد لتمكين ICP بين خادمين اثنين:

icp_port 3130
cache_peer 192.168.2.10 sibling 3128 3130 proxy-only

يجب تكرار الخطوات على الخادم الآخر لإعداد علاقة الاستدعاء المتبادل (Sibling Relationship).

النسخ الاحتياطي والاسترداد

ينبغي دائماً أخذ نسخ احتياطية دورية لملفات الإعداد والسجلات المهمة. فبالرغم من أنه يمكن إعادة تهيئة الكاش دون ضرر كبير، تظل ملفات الإعداد الحيوية مثل squid.conf وملفات قوائم الحجب وقواعد الـ ACL ذات قيمة.

يمكن استخدام أدوات النسخ الاحتياطي مثل rsync أو tar أو حتى أنظمة إدارة النسخ الاحتياطي المؤسسية (مثل BorgBackup أو BackupPC) للاحتفاظ بنسخ زمنية:

sudo tar czf /backup/squid_configs_$(date +%F).tar.gz /etc/squid

الفصل الثاني عشر: عرض جدولي لبعض أهم توجيهات ملف الإعداد

يحتوي الجدول الآتي على أبرز التوجيهات المستخدمة في squid.conf مع أمثلة توضح سياق استخدامها:

التوجيه الوصف مثال
http_port تحديد المنفذ الذي يستمع عليه Squid للطلبات http_port 3128
cache_dir موقع وحجم وأسلوب تخزين الملفات المؤقتة cache_dir aufs /var/spool/squid 2048 16 256
cache_mem تحديد حجم ذاكرة الوصول العشوائي المخصصة للكاش cache_mem 256 MB
acl إنشاء قوائم تحكم في الوصول لأنواع مختلفة من الشروط acl local_net src 192.168.1.0/24
http_access تحديد السماح أو المنع بناءً على الـ ACL http_access allow local_net
refresh_pattern قواعد تحديد مدة صلاحية التخزين المؤقت للمحتوى refresh_pattern -i \.jpg$ 1440 90% 43200
auth_param ضبط طريقة التوثيق كـ Basic أو Digest auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
cache_peer تعريف خوادم بروكسي أخرى للتواصل معها (Parent/Peer/Sibling) cache_peer 192.168.2.10 sibling 3128 3130 proxy-only

الفصل الثالث عشر: نصائح عملية للاستخدام اليومي لخادم Squid

الاحتفاظ بنسخة احتياطية من الإعدادات قبل أي تعديل

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

تحديث الخادم دورياً

قد تظهر ثغرات أمنية أو تصحيحات أخطاء في إصدارات Squid المختلفة. من الضروري إجراء تحديث دوري للخادم عبر:

sudo apt update
sudo apt upgrade
    

وفي حال التحديث إلى إصدار جديد من Squid، يجب مراجعة ملف الإعداد وملاحظات الإصدار (Release Notes) للتأكد من عدم تغيير التوجيهات أو إلغائها.

مراجعة السجلات بانتظام

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

ضبط سياسات الوصول الزمنية

في بعض المؤسسات، قد يكون هناك رغبة بتقييد استخدام الإنترنت في أوقات معينة. يمكن تحقيق ذلك عبر ACL زمنية. على سبيل المثال:

acl work_hours time MTWHF 08:00-16:00
http_access allow local_net work_hours
http_access deny local_net

هذه القواعد تسمح فقط للمستخدمين في نطاق local_net بالوصول للإنترنت خلال أيام العمل من الساعة 8 صباحاً إلى 4 عصراً.

 

المزيد من المعلومات

في عالم الشبكات وأمان المعلومات، يلعب خادم Squid دورًا بارزًا كوسيط (Proxy Server) يقوم بتوسيع قدرات الشبكة وتحسين أدائها. في هذا السياق، سأقدم لك شرحاً وافياً حول كيفية تثبيت وتكوين خادم Squid على نظام أوبنتو.

أولاً وقبل الشروع في عملية التثبيت، يجب التأكد من تحديث نظامك لضمان استخدام أحدث الحزم. يمكن القيام بذلك باستخدام الأمرين التاليين:

bash
sudo apt update
sudo apt upgrade

بعد ذلك، يمكننا البدء في تثبيت خادم Squid. يمكنك القيام بذلك باستخدام الأمر:

bash
sudo apt install squid

بعد اكتمال عملية التثبيت، يمكنك بدء خدمة Squid باستخدام الأمر:

bash
sudo systemctl start squid

للتأكد من أن الخدمة تعمل بشكل صحيح، يمكنك استخدام:

bash
sudo systemctl status squid

الآن، لضبط إعدادات Squid، يمكنك التحرك إلى الدليل /etc/squid/. هناك تجد ملف الإعداد الرئيسي squid.conf. يمكنك استخدام أي محرر نصوص تفضله لتعديل هذا الملف، مثل Nano أو Vim.

bash
sudo nano /etc/squid/squid.conf

هنا بعض الإعدادات الهامة التي يمكنك تعديلها:

  1. Port Configuration:
    يمكنك تغيير رقم المنفذ إذا كنت ترغب في ذلك، على سبيل المثال:

    yaml
    http_port 8080
  2. Access Control:
    يمكنك تحديد الأجهزة المسموح لها باستخدام الخادم:

    css
    acl localnet src 192.168.0.0/24
    http_access allow localnet
  3. Caching Configuration:
    تحديد كيفية التحكم في ذاكرة التخزين المؤقت:

    bash
    cache_dir ufs /var/spool/squid 100 16 256
  4. Logging:
    تحديد كيفية تسجيل الأحداث والأخطاء:

    c
    access_log /var/log/squid/access.log

بمجرد إجراء التعديلات المطلوبة، قم بحفظ الملف وأعد تشغيل خادم Squid لتطبيق التغييرات:

bash
sudo systemctl restart squid

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

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

دعونا نوسع على المزيد من المعلومات حول تكوين وتخصيص خادم Squid على نظام أوبنتو.

تكوين مراقبة الوصول:

لتحديد الطرق التي يمكن فيها للأجهزة الوصول إلى الإنترنت، يمكنك استخدام ACLs (Access Control Lists) في Squid. على سبيل المثال، للسماح بالوصول لبعض المواقع فقط، يمكنك استخدام:

plaintext
acl allowed_sites dstdomain .example.com
http_access allow allowed_sites
http_access deny all

تكوين التصفية والحجب:

يمكنك استخدام Squid لتنفيذ التصفية والحجب بطرق مختلفة. على سبيل المثال، لحجب محتوى غير مرغوب فيه، يمكنك استخدام:

plaintext
acl unwanted_content url_regex -i "/etc/squid/unwanted_content.txt"
http_access deny unwanted_content

يجب أن يحتوي ملف unwanted_content.txt على النمط الذي ترغب في حجبه.

ضغط المحتوى:

Squid يدعم ضغط المحتوى لتحسين سرعة التحميل. يمكنك تفعيل ذلك بإضافة السطر التالي:

plaintext
refresh_pattern -i \.(jpg|jpeg|png|gif|ico|bmp|tiff|css|js|html)$ 10080 90% 43200

تكوين مسح السجلات (Logging):

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

plaintext
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %

تكوين SSL Bumping:

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

plaintext
https_port 3129 ssl-bump \
cert=/etc/squid/ssl_cert/myCA.pem \
generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all

تحسين الأداء:

يمكنك تحسين أداء Squid باستخدام أدوات مثل “cache_peer” لإضافة خوادم إضافية، وتكوين ذاكرة التخزين المؤقت، وتحسين إعدادات التحكم في الحجم والسرعة. تحديث معلمات cache_dir و maximum_object_size يمكن أن يؤدي إلى تحسين الأداء.

تكوين توجيه الحركة المرورية:

يمكنك توجيه حركة المرور باستخدام “cache_peer” لتحقيق توازن الأحمال أو تحسين الاحتياطية. على سبيل المثال:

plaintext
cache_peer proxy1.example.com parent 3128 0 no-query weighted-round-robin
cache_peer proxy2.example.com parent 3128 0 no-query weighted-round-robin

هذا يسمح بتوجيه حركة المرور بين خوادم Squid على أجهزة مختلفة.

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

الخلاصة

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

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

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

في النهاية، يقدم Squid فرصة لتحقيق فعالية أمانية وتحسين أداء الشبكة، ومع فهم شامل للخصائص والإعدادات المختلفة، يمكن للمسؤولين تحقيق بيئة شبكية متقدمة ومحسّنة.

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

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

تساعد الخطوات التي تطرق إليها الدليل – من مراحل التثبيت والتخصيص وإدارة السياسات والحجب والتخزين المؤقت – في جعل تجربة الاعتماد على Squid فعالة ومتناغمة مع احتياجات المؤسسة. ومع مرور الوقت، يمكن تعديل الإعدادات تبعاً للنمو أو التغييرات الطارئة في بيئة العمل.


المراجع والمصادر

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

ينبغي دائماً أن يتذكّر مديرو النظم والشبكات أن ضبط إعدادات الخادم عملية تراكمية، لا تنتهي بمجرد الانتهاء من تنصيب الخدمة. ثمة حاجة دائمة إلى المراقبة المستمرة، وإجراء اختبارات أداء، وتطبيق تحديثات الأمان فور توفّرها، فضلاً عن مواكبة التطورات التقنية في عالم البروكسي وخدمات الشبكات. إن الأهمية الاستراتيجية لخادم Squid تنعكس في قدرة المؤسسة على تقديم خدمة مستقرة وسريعة وآمنة لمستخدميها، ما يعزز الكفاءة العامة ويحقق وفراً في استهلاك الإنترنت والطاقة والموارد.


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

زر الذهاب إلى الأعلى