يُفحص خادم الويب الجديد خلال دقائق من اتصاله بالإنترنت. معظم هذه الحركة آلية وغير ضارة إذا كنت قد أنجزت الأساسيات. يتجاوز هذا الدليل التحصين خلال 15 دقيقة بخطوة، ويغطي جدار الحماية والحماية من القوة الغاشمة عبر fail2ban وإعداد Nginx أكثر أمانًا.
الخطوة 1: جدار حماية يرفض كل شيء افتراضيًا باستخدام UFW
اسمح فقط بما تحتاجه واحجب الباقي. أضف SSH أولًا حتى لا تحظر نفسك.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
إذا كنت تستخدم منفذ SSH غير قياسي، فاسمح بذلك المنفذ بدلًا من OpenSSH.
الخطوة 2: fail2ban للإخفاقات المتكررة
يراقب fail2ban السجلات ويحظر عناوين IP التي تفشل مرارًا في تسجيل الدخول.
sudo apt install -y fail2ban
sudo tee /etc/fail2ban/jail.local > /dev/null <<'CONF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
[nginx-botsearch]
enabled = true
CONF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
استخدم مفاتيح SSH وأوقف الدخول بكلمة المرور أيضًا. راجع شرح مفاتيح SSH.
الخطوة 3: أخفِ إصدار Nginx وأضف ترويسات آمنة
في /etc/nginx/nginx.conf، داخل كتلة http:
server_tokens off;
في كتلة server الخاصة بموقعك:
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
أضف ترويسة HSTS فقط بعد أن يعمل HTTPS لنطاقك ولجميع النطاقات الفرعية التي تستخدمها.
الخطوة 4: حدّ من الطلبات المسيئة
يبطئ تحديد المعدل (rate limiting) محاولات القوة الغاشمة على صفحات تسجيل الدخول:
# in the http block
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
# in your server block
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
# ...your usual PHP handling
}
اختبر وطبّق باستخدام sudo nginx -t && sudo systemctl reload nginx.
الخطوة 5: أبقِه محدّثًا
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
تسد التحديثات الأمنية التلقائية الثغرات المعروفة دون أن تفعل شيئًا.
ما الذي تراقبه
- تحقق من الحظر باستخدام
sudo fail2ban-client status sshd. - راجع
/var/log/nginx/error.logمن حين لآخر. - إذا كنت خلف وكيل أو شبكة CDN، فتأكد من أن fail2ban يقرأ عنوان IP الحقيقي للعميل، وإلا فقد تحظر وكيلك أنت.