كل خادم 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 هي حدودك الخارجية. جدار الحماية على المضيف هو خط دفاعك الأخير — يحدّ الضرر حين يصل هجوم تحريك جانبي أو مجموعة أمان مُهيَّأة خطأً إلى النسخة. لا تعتمد على طبقة واحدة فقط.
الدفاع المتعمق: الحدود السحابية + جدار الحماية على المضيف + التطبيق — كل طبقة تحجب التهديدات بشكل مستقل.
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 يؤدي الدور ذاته.
خدمة التدقيق — ثبّت auditd وحمّل مجموعة قواعد مبنية على CIS أو STIG؛ يُنشئ سجلاً محمياً من التلاعب للعمليات ذات الامتيازات
AppArmor / SELinux — ابقِهما مفعّلَين في وضع التطبيق؛ لا تضبط أبداً SELINUX=disabled في الإنتاج
فكرة محورية: استخدم ماسحاً آلياً لقياس مدى امتثالك. lynis أداة مفتوحة المصدر تدقّق نظاماً حياً وفق ضوابط CIS وتُنتج درجة تصليب مع توصيات مُرتَّبة حسب الأولوية. شغّل lynis audit system بعد التصليب لقياس وضعك الأمني وتتبع التراجعات عبر الزمن.
في المؤسسات الكبيرة، تُقنَّن هذه الضوابط في البنية التحتية كرمز — أدوار Ansible للتصليب (مثل devsec.hardening)، أو وحدات Terraform، أو خطوط بناء صور Packer — بحيث تُولد كل نسخة جديدة مُصلَّبة من الأساس وليس بعد التنزيل. التصليب اليدوي نقطة بداية؛ الأتمتة هي الوجهة.
نستخدم ملفات تعريف الارتباط لتشغيل هذا الموقع وتحليل الزيارات وعرض إعلانات مخصّصة. يمكنك قبول كل ملفات تعريف الارتباط أو رفض غير الأساسية منها.
سياسة الخصوصية