إدارة أنظمة لينكس

أساسيات تصليب الأمان

18 دقيقة الدرس 9 من 28

أساسيات تصليب الأمان

كل خادم Linux تنشره في الإنتاج يصبح هدفاً فور حصوله على عنوان IP عام. تكتشفه الماسحات الآلية خلال دقائق، وتقصف روبوتات حشو بيانات الاعتماد SSH على مدار الساعة. تصليب الأمان ليس إجراءً يُنفَّذ مرة واحدة — بل ممارسة منضبطة ومتعددة الطبقات تهدف إلى تقليص سطح الهجوم، وتحديد نطاق الضرر، واكتشاف الاختراقات مبكراً. يتناول هذا الدرس الأعمدة الأربعة التي يجب أن يمتلكها كل مهندس DevOps: تقليص السطح، وإدارة جدار الحماية عبر ufw/firewalld، والحماية من الهجمات العنيفة عبر fail2ban، والتحديثات الآلية وفق معايير CIS.

الركيزة الأولى — تقليص سطح الهجوم

أقل خدمات، وأقل حزم، وأقل منافذ مفتوحة — هذا هو الهدف. كل خدمة إضافية تعني ثغرة CVE إضافية تنتظر الإعلان عنها. على أي عقدة Ubuntu أو RHEL جديدة، ابدأ بتدقيق ما يعمل فوراً:

# سرد كل socket يستمع ومعرفة العملية المسؤولة عنه ss -tlnp # تعطيل وإخفاء الخدمات التي لن تحتاجها أبداً systemctl disable --now avahi-daemon cups bluetooth ModemManager systemctl mask avahi-daemon cups bluetooth ModemManager # إزالة الحزم غير الضرورية (مثال Ubuntu) apt-get purge -y telnet rsh-client rsh-redone-client nis talk apt-get autoremove -y # التحقق من عدم وجود مجلدات قابلة للكتابة عالمياً أو ملفات SUID find / -xdev -perm -0002 -type d 2>/dev/null | sort find / -xdev \( -perm -4000 -o -perm -2000 \) -type f 2>/dev/null | sort

الإخفاء (Masking) — لا التعطيل فحسب — يكتب رابطاً رمزياً إلى /dev/null بحيث لا يستطيع إنسان ولا نص برمجي تشغيل الخدمة عن طريق الخطأ. استخدمه للخدمات التي لا مبرر لوجودها على ذلك الخادم.

ممارسة احترافية: في AWS/GCP/Azure، اختر صور قاعدية مصغّرة (Amazon Linux 2023 minimal أو Ubuntu Minimal أو RHEL minimal) وأضف فقط ما يحتاجه عملك. كلما كانت الصورة أصغر، كان سطح CVE أضيق — وعمليات المسح الأمني في CI أسرع.

صلّب أيضاً معاملات النواة عبر sysctl. ضع التغييرات الدائمة في /etc/sysctl.d/99-hardening.conf:

# /etc/sysctl.d/99-hardening.conf # تعطيل توجيه المصدر IP net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 # تجاهل طلبات بث ICMP (تخفيف هجمات Smurf) net.ipv4.icmp_echo_ignore_broadcasts = 1 # تفعيل SYN cookies (حماية من فيضانات SYN) net.ipv4.tcp_syncookies = 1 # تعطيل توجيه الحزم إلا إذا كان هذا الخادم موجّهاً net.ipv4.ip_forward = 0 net.ipv6.conf.all.forwarding = 0 # تقييد تسريب مؤشرات النواة عبر /proc kernel.kptr_restrict = 2 kernel.dmesg_restrict = 1 # منع تفريغ النواة من البرامج التي تحمل setuid fs.suid_dumpable = 0

طبّق التغييرات فوراً بـ sysctl --system وتحقق: sysctl net.ipv4.tcp_syncookies.

الركيزة الثانية — جدار الحماية على مستوى المضيف مع ufw / firewalld

مجموعات الأمان السحابية وقوائم تحكم VPC هي حدودك الخارجية. جدار الحماية على المضيف هو خط دفاعك الأخير — يحدّ الضرر حين يصل هجوم تحريك جانبي أو مجموعة أمان مُهيَّأة خطأً إلى النسخة. لا تعتمد على طبقة واحدة فقط.

Defense-in-depth layered firewall model Internet / Public Traffic Cloud Security Group / VPC ACL (perimeter) Host Firewall — ufw / firewalld (last line) Application Process (nginx, app server, database)
الدفاع المتعمق: الحدود السحابية + جدار الحماية على المضيف + التطبيق — كل طبقة تحجب التهديدات بشكل مستقل.

ufw (جدار الحماية غير المعقد) يغلّف iptables/nftables وهو القياسي في Ubuntu/Debian. firewalld هو القياسي في RHEL/CentOS/Fedora — كلاهما يحقق الهدف ذاته:

### --- ufw (Ubuntu/Debian) --- ufw default deny incoming ufw default allow outgoing # السماح فقط بما يحتاجه هذا الخادم فعلاً ufw allow 22/tcp # SSH — قيّده بعنوان IP محدد في الإنتاج ufw allow 80/tcp ufw allow 443/tcp # تقييد SSH بـ CIDR الإدارة المعروف بدلاً من كل العالم ufw delete allow 22/tcp ufw allow from 10.0.0.0/8 to any port 22 proto tcp ufw enable ufw status verbose ### --- firewalld (RHEL/Fedora) --- firewall-cmd --set-default-zone=drop # رفض كل شيء افتراضياً firewall-cmd --zone=drop --add-service=ssh --permanent firewall-cmd --zone=drop --add-service=http --permanent firewall-cmd --zone=drop --add-service=https --permanent firewall-cmd --reload firewall-cmd --zone=drop --list-all
فخ إنتاجي: تشغيل ufw enable عبر جلسة SSH موجودة سيقطع اتصالك إذا لم يكن المنفذ 22 مسموحاً به مسبقاً. أضف قاعدة SSH دائماً قبل تفعيل ufw. على الآلات الافتراضية السحابية، تحقق أيضاً من أن مجموعة الأمان تسمح لعنوان IP المصدر الخاص بك قبل تفعيل جدار الحماية على المضيف.

الركيزة الثالثة — الحماية من الهجمات العنيفة مع fail2ban

تراقب fail2ban ملفات السجل، وتطابق الأنماط عبر تعبيرات نمطية قابلة للتهيئة تسمى filters، وتحظر عناوين IP المخالفة مؤقتاً باستخدام قواعد iptables/nftables. تأتي مع فلاتر جاهزة لـ SSH وnginx وApache وPostfix وعشرات الخدمات الأخرى.

# التثبيت apt-get install -y fail2ban # Debian/Ubuntu dnf install -y fail2ban # RHEL/Fedora # لا تعدّل /etc/fail2ban/jail.conf أبداً — يُستبدل عند الترقية. # أنشئ /etc/fail2ban/jail.local للتخصيص: cat > /etc/fail2ban/jail.local <<'EOF' [DEFAULT] # حظر لمدة ساعة بعد 5 محاولات فاشلة خلال 10 دقائق bantime = 3600 findtime = 600 maxretry = 5 # استخدم nftables على الأنظمة الحديثة banaction = nftables-multiport banaction_allports = nftables-allports [sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s maxretry = 3 [nginx-http-auth] enabled = true [nginx-botsearch] enabled = true maxretry = 2 EOF systemctl enable --now fail2ban # فحص الحظر الحالي fail2ban-client status sshd fail2ban-client status sshd | grep 'Banned IP' # رفع الحظر يدوياً عن IP (مثلاً بعد حظر نفسك عن طريق الخطأ) fail2ban-client set sshd unbanip 198.51.100.42
ممارسة احترافية: في الأساطيل الكبيرة، تُكمل fail2ban جداراً WAF (AWS WAF أو Cloudflare) في المنبع وSIEM (Splunk أو Elastic) في المصب. تتعامل fail2ban مع الاستجابة التكتيكية لكل مضيف؛ يُترابط SIEM الأنماط عبر مئات المضيفين لاكتشاف الهجمات المنخفضة البطيئة الموزعة التي لا تُطلق حد أي عقدة منفردة.

الركيزة الرابعة — إدارة التصحيحات والتصليب وفق CIS

الحزم غير المُحدَّثة هي أكثر نقاط الدخول الأولية شيوعاً. أتمت تحديثات الأمان — لا تعتمد على البشر لتذكر تشغيل apt upgrade. في Ubuntu، تتولى unattended-upgrades هذه المهمة. في RHEL، dnf-automatic يؤدي الدور ذاته.

# Ubuntu — تفعيل التحديثات الأمنية الآلية apt-get install -y unattended-upgrades dpkg-reconfigure --priority=low unattended-upgrades # التحقق من الإعداد (صحيح عادةً بعد إعادة الضبط) # /etc/apt/apt.conf.d/50unattended-upgrades: # Unattended-Upgrade::Allowed-Origins { # "${distro_id}:${distro_codename}-security"; # }; # Unattended-Upgrade::Automatic-Reboot "false"; # أعد التشغيل في نافذة صيانة # Unattended-Upgrade::Mail "ops@example.com"; # RHEL/Fedora — dnf-automatic dnf install -y dnf-automatic # /etc/dnf/automatic.conf: upgrade_type = security, apply_updates = yes systemctl enable --now dnf-automatic-install.timer # تدقيق الحزم التي تحتاج تحديثات أمنية الآن (Ubuntu) apt-get -s upgrade 2>/dev/null | grep -i security

بعيداً عن التصحيح، تُعدّ معايير CIS (مركز أمان الإنترنت) الأدلة الصناعية القياسية لتصليب كل توزيعة Linux رئيسية. أهم ضوابط CIS التي يجب تطبيقها فوراً:

  • تصليب SSHPermitRootLogin no، PasswordAuthentication no، MaxAuthTries 3، AllowUsers deploy، Protocol 2 في /etc/ssh/sshd_config.d/99-hardening.conf (ملف إضافي، لا تعديل الملف الرئيسي)
  • سياسة كلمة المرورpam_pwquality أو pam_cracklib للتعقيد؛ PASS_MAX_DAYS 90 في /etc/login.defs
  • صلاحيات الملفاتchmod 600 /etc/ssh/sshd_config، chmod 644 /etc/passwd، chmod 640 /etc/shadow
  • خدمة التدقيق — ثبّت auditd وحمّل مجموعة قواعد مبنية على CIS أو STIG؛ يُنشئ سجلاً محمياً من التلاعب للعمليات ذات الامتيازات
  • AppArmor / SELinux — ابقِهما مفعّلَين في وضع التطبيق؛ لا تضبط أبداً SELINUX=disabled في الإنتاج
فكرة محورية: استخدم ماسحاً آلياً لقياس مدى امتثالك. lynis أداة مفتوحة المصدر تدقّق نظاماً حياً وفق ضوابط CIS وتُنتج درجة تصليب مع توصيات مُرتَّبة حسب الأولوية. شغّل lynis audit system بعد التصليب لقياس وضعك الأمني وتتبع التراجعات عبر الزمن.

في المؤسسات الكبيرة، تُقنَّن هذه الضوابط في البنية التحتية كرمز — أدوار Ansible للتصليب (مثل devsec.hardening)، أو وحدات Terraform، أو خطوط بناء صور Packer — بحيث تُولد كل نسخة جديدة مُصلَّبة من الأساس وليس بعد التنزيل. التصليب اليدوي نقطة بداية؛ الأتمتة هي الوجهة.