OffshoreVps
امنیت27 سپتامبر 20266 دقیقه مطالعهنوشته‌ی تیم OffshoreVps

مقاوم‌سازی وب‌سرور: UFW، fail2ban و تنظیمات Nginx

فایروال با پیش‌فرض مسدودسازی، jailهای fail2ban، هدرهای ایمن‌تر Nginx، محدودسازی نرخ و به‌روزرسانی خودکار برای VPS که یک وب‌سایت را اجرا می‌کند.

یک وب‌سرور تازه ظرف چند دقیقه پس از آنلاین شدن اسکن می‌شود. بیشتر آن ترافیک خودکار است و اگر اصول را انجام داده باشید بی‌ضرر است. این راهنما یک گام فراتر از سخت‌سازی ۱۵ دقیقه‌ای می‌رود و فایروال، محافظت در برابر brute-force با fail2ban و پیکربندی امن‌تر Nginx را پوشش می‌دهد.

پنجره‌ی ترمینال روی یک VPS که دستورهای مقاوم‌سازی وب‌سرور با UFW، fail2ban و Nginx را نشان می‌دهد، با «sudo ufw default deny incoming» شروع می‌شود
نوع دستورهایی که در این راهنما روی سرور خود اجرا می‌کنید.

گام 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 برای دامنه و همهٔ زیردامنه‌هایی که استفاده می‌کنید کار می‌کند.

گام‌های این راهنما به ترتیب: ۱. فایروال با پیش‌فرض مسدودسازی با UFW؛ ۲. fail2ban برای شکست‌های مکرر؛ ۳. پنهان کردن نسخه‌ی Nginx و افزودن هدرهای ایمن؛ ۴. محدود کردن درخواست‌های سوءاستفاده‌گرانه؛ ۵. به‌روز نگه داشتن؛ ۶. چه چیزی را زیر نظر بگیریم
گام‌های این راهنما به ترتیب.

گام 4: محدود کردن درخواست‌های سوءاستفاده‌گر

محدودسازی نرخ تلاش‌های brute-force روی صفحه‌های ورود را کند می‌کند:

# 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 واقعی کلاینت را می‌خواند، وگرنه ممکن است پروکسی خودتان را مسدود کنید.