الأمان والأداء
تقوية الخادم
فهم تقوية الخادم
تقوية الخادم هي عملية تأمين الخادم عن طريق تقليل سطح الهجوم. يتضمن ذلك إزالة البرامج غير الضرورية وإغلاق المنافذ غير المستخدمة وتكوين جدران الحماية وتنفيذ أفضل ممارسات الأمان.
سطح الهجوم: مجموع جميع نقاط الدخول المحتملة التي يمكن للمهاجم استخدامها للوصول غير المصرح به إلى نظامك. سطح هجوم أصغر = نظام أكثر أماناً.
أساسيات أمان نظام التشغيل
ابدأ بتثبيت نظام تشغيل بسيط وآمن:
# تحديث حزم النظام (Ubuntu/Debian)
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
# تفعيل التحديثات الأمنية التلقائية
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
# تكوين التحديثات التلقائية
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# قم بإلغاء التعليق:
# "${distro_id}:${distro_codename}-security";
# التحقق من التحديثات المعلقة
/usr/lib/update-notifier/apt-check --human-readable
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
# تفعيل التحديثات الأمنية التلقائية
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
# تكوين التحديثات التلقائية
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# قم بإلغاء التعليق:
# "${distro_id}:${distro_codename}-security";
# التحقق من التحديثات المعلقة
/usr/lib/update-notifier/apt-check --human-readable
أفضل ممارسة: ابدأ دائماً بتثبيت نظام تشغيل بسيط. لا تثبت مكونات واجهة المستخدم الرسومية على خوادم الإنتاج. برامج أقل = ثغرات أقل.
تكوين جدار الحماية (UFW)
يوفر جدار الحماية غير المعقد (UFW) واجهة سهلة الاستخدام لـ iptables:
# تثبيت وتفعيل UFW
sudo apt install ufw
sudo ufw status
# السياسات الافتراضية: رفض الوارد، السماح بالصادر
sudo ufw default deny incoming
sudo ufw default allow outgoing
# السماح بخدمات محددة
sudo ufw allow ssh # المنفذ 22
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow from 192.168.1.0/24 to any port 3306 # MySQL من شبكة خاصة
# السماح بعناوين IP محددة
sudo ufw allow from 203.0.113.4
sudo ufw allow from 203.0.113.0/24
# رفض منافذ محددة
sudo ufw deny 23 # Telnet
# تفعيل جدار الحماية
sudo ufw enable
# عرض القواعد مع الأرقام
sudo ufw status numbered
# حذف قاعدة بالرقم
sudo ufw delete 3
# إعادة تعيين جدار الحماية
sudo ufw reset
sudo apt install ufw
sudo ufw status
# السياسات الافتراضية: رفض الوارد، السماح بالصادر
sudo ufw default deny incoming
sudo ufw default allow outgoing
# السماح بخدمات محددة
sudo ufw allow ssh # المنفذ 22
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow from 192.168.1.0/24 to any port 3306 # MySQL من شبكة خاصة
# السماح بعناوين IP محددة
sudo ufw allow from 203.0.113.4
sudo ufw allow from 203.0.113.0/24
# رفض منافذ محددة
sudo ufw deny 23 # Telnet
# تفعيل جدار الحماية
sudo ufw enable
# عرض القواعد مع الأرقام
sudo ufw status numbered
# حذف قاعدة بالرقم
sudo ufw delete 3
# إعادة تعيين جدار الحماية
sudo ufw reset
تقوية SSH
SSH هو ناقل هجوم شائع. التكوين الصحيح أمر بالغ الأهمية:
# تحرير تكوين SSH
sudo nano /etc/ssh/sshd_config
# الإعدادات الموصى بها:
Port 2222 # تغيير المنفذ الافتراضي
PermitRootLogin no # تعطيل تسجيل الدخول كجذر
PasswordAuthentication no # استخدام المفاتيح فقط
PubkeyAuthentication yes # تفعيل مصادقة المفتاح
PermitEmptyPasswords no # لا كلمات مرور فارغة
X11Forwarding no # تعطيل X11
MaxAuthTries 3 # الحد من محاولات تسجيل الدخول
ClientAliveInterval 300 # انتهاء مهلة الجلسات الخاملة
ClientAliveCountMax 2
AllowUsers developer deployer # قائمة بيضاء للمستخدمين
Protocol 2 # بروتوكول SSH 2 فقط
HostbasedAuthentication no
IgnoreRhosts yes
# إعادة تشغيل خدمة SSH
sudo systemctl restart sshd
# إنشاء زوج مفاتيح SSH (على العميل)
ssh-keygen -t ed25519 -C "your_email@example.com"
# نسخ المفتاح العام إلى الخادم
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
# تعيين الأذونات الصحيحة
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo nano /etc/ssh/sshd_config
# الإعدادات الموصى بها:
Port 2222 # تغيير المنفذ الافتراضي
PermitRootLogin no # تعطيل تسجيل الدخول كجذر
PasswordAuthentication no # استخدام المفاتيح فقط
PubkeyAuthentication yes # تفعيل مصادقة المفتاح
PermitEmptyPasswords no # لا كلمات مرور فارغة
X11Forwarding no # تعطيل X11
MaxAuthTries 3 # الحد من محاولات تسجيل الدخول
ClientAliveInterval 300 # انتهاء مهلة الجلسات الخاملة
ClientAliveCountMax 2
AllowUsers developer deployer # قائمة بيضاء للمستخدمين
Protocol 2 # بروتوكول SSH 2 فقط
HostbasedAuthentication no
IgnoreRhosts yes
# إعادة تشغيل خدمة SSH
sudo systemctl restart sshd
# إنشاء زوج مفاتيح SSH (على العميل)
ssh-keygen -t ed25519 -C "your_email@example.com"
# نسخ المفتاح العام إلى الخادم
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
# تعيين الأذونات الصحيحة
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
تحذير: قبل تعطيل مصادقة كلمة المرور، تأكد من أنه يمكنك تسجيل الدخول باستخدام مفاتيح SSH. احتفظ دائماً بجلسة SSH نشطة مفتوحة عند اختبار تغييرات تكوين SSH.
Fail2Ban - منع التطفل
يراقب Fail2Ban السجلات ويحظر عناوين IP التي تظهر سلوكاً ضاراً:
# تثبيت Fail2Ban
sudo apt install fail2ban
# إنشاء تكوين محلي
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# التكوين الأساسي:
[DEFAULT]
bantime = 3600 # الحظر لمدة ساعة واحدة
findtime = 600 # نافذة 10 دقائق
maxretry = 5 # 5 محاولات فاشلة
destemail = admin@example.com
sendername = Fail2Ban
action = %(action_mwl)s # الحظر والبريد الإلكتروني مع السجلات
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 3
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
# بدء Fail2Ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# التحقق من الحالة
sudo fail2ban-client status
sudo fail2ban-client status sshd
# إلغاء حظر IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
sudo apt install fail2ban
# إنشاء تكوين محلي
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# التكوين الأساسي:
[DEFAULT]
bantime = 3600 # الحظر لمدة ساعة واحدة
findtime = 600 # نافذة 10 دقائق
maxretry = 5 # 5 محاولات فاشلة
destemail = admin@example.com
sendername = Fail2Ban
action = %(action_mwl)s # الحظر والبريد الإلكتروني مع السجلات
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 3
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
# بدء Fail2Ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# التحقق من الحالة
sudo fail2ban-client status
sudo fail2ban-client status sshd
# إلغاء حظر IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
التثبيت الأدنى للخدمة
إزالة الخدمات غير الضرورية لتقليل سطح الهجوم:
# سرد جميع الخدمات قيد التشغيل
sudo systemctl list-units --type=service --state=running
# تعطيل الخدمات غير الضرورية
sudo systemctl stop cups # خدمة الطباعة
sudo systemctl disable cups
sudo systemctl stop avahi-daemon # اكتشاف الخدمة
sudo systemctl disable avahi-daemon
# إزالة الحزم غير الضرورية
sudo apt remove --purge package_name
sudo apt autoremove
# التحقق من المنافذ المستمعة
sudo netstat -tulpn
# أو
sudo ss -tulpn
# تحديد العملية على منفذ محدد
sudo lsof -i :80
sudo systemctl list-units --type=service --state=running
# تعطيل الخدمات غير الضرورية
sudo systemctl stop cups # خدمة الطباعة
sudo systemctl disable cups
sudo systemctl stop avahi-daemon # اكتشاف الخدمة
sudo systemctl disable avahi-daemon
# إزالة الحزم غير الضرورية
sudo apt remove --purge package_name
sudo apt autoremove
# التحقق من المنافذ المستمعة
sudo netstat -tulpn
# أو
sudo ss -tulpn
# تحديد العملية على منفذ محدد
sudo lsof -i :80
مبدأ أقل امتياز: قم فقط بتثبيت وتشغيل الخدمات الضرورية للغاية لتطبيقك. كل خدمة إضافية هي ثغرة محتملة.
إدارة المستخدمين والأذونات
# إنشاء مستخدم خدمة بدون تسجيل الدخول
sudo useradd -r -s /bin/false nginx_user
# إضافة مستخدم إلى مجموعة محددة
sudo usermod -aG www-data deploy_user
# تعيين سياسات كلمة المرور
sudo nano /etc/login.defs
# تعيين:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_MIN_LEN 12
PASS_WARN_AGE 7
# تثبيت فحص جودة كلمة المرور
sudo apt install libpam-pwquality
sudo nano /etc/security/pwquality.conf
# تعيين:
minlen = 12
dcredit = -1 # رقم واحد على الأقل
ucredit = -1 # حرف كبير واحد على الأقل
lcredit = -1 # حرف صغير واحد على الأقل
ocredit = -1 # حرف خاص واحد على الأقل
# تدقيق حسابات المستخدمين
sudo lastlog
sudo last
sudo who
sudo w
sudo useradd -r -s /bin/false nginx_user
# إضافة مستخدم إلى مجموعة محددة
sudo usermod -aG www-data deploy_user
# تعيين سياسات كلمة المرور
sudo nano /etc/login.defs
# تعيين:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_MIN_LEN 12
PASS_WARN_AGE 7
# تثبيت فحص جودة كلمة المرور
sudo apt install libpam-pwquality
sudo nano /etc/security/pwquality.conf
# تعيين:
minlen = 12
dcredit = -1 # رقم واحد على الأقل
ucredit = -1 # حرف كبير واحد على الأقل
lcredit = -1 # حرف صغير واحد على الأقل
ocredit = -1 # حرف خاص واحد على الأقل
# تدقيق حسابات المستخدمين
sudo lastlog
sudo last
sudo who
sudo w
أمان نظام الملفات
# تعيين أذونات ملف آمنة
sudo chmod 644 /var/www/html/*.html
sudo chmod 755 /var/www/html
sudo chown -R www-data:www-data /var/www/html
# العثور على ملفات بـ SUID bit (مخاطر أمنية محتملة)
sudo find / -perm -4000 -type f 2>/dev/null
# العثور على ملفات قابلة للكتابة عالمياً
sudo find / -xdev -type f -perm -0002 -ls 2>/dev/null
# العثور على ملفات بدون مالك
sudo find / -xdev -nouser -o -nogroup 2>/dev/null
# تحميل أنظمة الملفات مع خيارات الأمان
sudo nano /etc/fstab
# إضافة خيارات:
/dev/sda1 /var noexec,nosuid 0 2
/tmp /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
sudo chmod 644 /var/www/html/*.html
sudo chmod 755 /var/www/html
sudo chown -R www-data:www-data /var/www/html
# العثور على ملفات بـ SUID bit (مخاطر أمنية محتملة)
sudo find / -perm -4000 -type f 2>/dev/null
# العثور على ملفات قابلة للكتابة عالمياً
sudo find / -xdev -type f -perm -0002 -ls 2>/dev/null
# العثور على ملفات بدون مالك
sudo find / -xdev -nouser -o -nogroup 2>/dev/null
# تحميل أنظمة الملفات مع خيارات الأمان
sudo nano /etc/fstab
# إضافة خيارات:
/dev/sda1 /var noexec,nosuid 0 2
/tmp /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
المراقبة الأمنية والتدقيق
# تثبيت برنامج التدقيق
sudo apt install auditd audispd-plugins
# تفعيل قواعد التدقيق للملفات الحساسة
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config_changes
# جعل القواعد دائمة
sudo nano /etc/audit/rules.d/audit.rules
# إضافة:
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /var/log/lastlog -p wa -k logins
# البحث في سجلات التدقيق
sudo ausearch -k passwd_changes
sudo ausearch -ui 1000 # البحث حسب معرف المستخدم
# إنشاء تقرير تدقيق
sudo aureport --summary
sudo apt install auditd audispd-plugins
# تفعيل قواعد التدقيق للملفات الحساسة
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config_changes
# جعل القواعد دائمة
sudo nano /etc/audit/rules.d/audit.rules
# إضافة:
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /var/log/lastlog -p wa -k logins
# البحث في سجلات التدقيق
sudo ausearch -k passwd_changes
sudo ausearch -ui 1000 # البحث حسب معرف المستخدم
# إنشاء تقرير تدقيق
sudo aureport --summary
طبقات الأمان: الدفاع في العمق - تنفيذ طبقات متعددة من الأمان. إذا فشلت طبقة واحدة، توفر الطبقات الأخرى الحماية. اجمع بين جدار الحماية واكتشاف التطفل والتدقيق والمراقبة.
الفحص الأمني الآلي
# تثبيت أداة تدقيق الأمان Lynis
sudo apt install lynis
# تشغيل تدقيق الأمان
sudo lynis audit system
# مراجعة الاقتراحات
sudo cat /var/log/lynis.log
# تثبيت RKHunter (كشف rootkit)
sudo apt install rkhunter
sudo rkhunter --update
sudo rkhunter --check
# جدولة الفحوصات اليومية
sudo crontab -e
# إضافة:
0 3 * * * /usr/bin/rkhunter --cronjob --update --quiet
sudo apt install lynis
# تشغيل تدقيق الأمان
sudo lynis audit system
# مراجعة الاقتراحات
sudo cat /var/log/lynis.log
# تثبيت RKHunter (كشف rootkit)
sudo apt install rkhunter
sudo rkhunter --update
sudo rkhunter --check
# جدولة الفحوصات اليومية
sudo crontab -e
# إضافة:
0 3 * * * /usr/bin/rkhunter --cronjob --update --quiet
تمرين: قم بتقوية خادم اختبار:
- قم بتثبيت Ubuntu Server الأدنى
- قم بتكوين UFW مع المنافذ الضرورية فقط
- قم بتقوية تكوين SSH وتعطيل مصادقة كلمة المرور
- قم بتثبيت وتكوين Fail2Ban
- قم بتعطيل جميع الخدمات غير الضرورية
- قم بإعداد التحديثات الأمنية التلقائية
- قم بتشغيل تدقيق Lynis ومعالجة النتائج ذات الأولوية العالية