یک وبسرور تازه ظرف چند دقیقه پس از آنلاین شدن اسکن میشود. بیشتر آن ترافیک خودکار است و اگر اصول را انجام داده باشید بیضرر است. این راهنما یک گام فراتر از سختسازی ۱۵ دقیقهای میرود و فایروال، محافظت در برابر brute-force با 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: محدود کردن درخواستهای سوءاستفادهگر
محدودسازی نرخ تلاشهای 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 واقعی کلاینت را میخواند، وگرنه ممکن است پروکسی خودتان را مسدود کنید.