Yeni bir web sunucusu çevrimiçi olduktan dakikalar içinde taranır. Bu trafiğin çoğu otomatiktir ve temelleri yaptıysanız zararsızdır. Bu rehber 15 dakikalık güvenlik sertleştirmenin bir adım ötesine geçer ve bir güvenlik duvarını, fail2ban ile kaba kuvvet korumasını ve daha güvenli bir Nginx kurulumunu kapsar.
Adım 1: UFW ile varsayılan olarak engelleyen bir güvenlik duvarı
Yalnızca ihtiyacınız olana izin verin, gerisini engelleyin. Kendinizi dışarıda bırakmamak için önce SSH'i ekleyin.
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
Standart olmayan bir SSH portu kullanıyorsanız OpenSSH yerine o porta izin verin.
Adım 2: tekrarlanan başarısızlıklar için fail2ban
fail2ban günlükleri izler ve giriş yapmakta sürekli başarısız olan IP adreslerini yasaklar.
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 anahtarları kullanın ve parola ile girişi de kapatın. Bkz. SSH anahtarları açıklaması.
Adım 3: Nginx sürümünü gizleyin ve güvenli başlıklar ekleyin
/etc/nginx/nginx.conf içinde, http bloğunun içine:
server_tokens off;
Sitenizin server bloğunda:
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 başlığını yalnızca alan adınız ve kullandığınız tüm alt alan adları için HTTPS çalıştığında ekleyin.
Adım 4: kötüye kullanan istekleri sınırlayın
Hız sınırlama, giriş sayfalarına yönelik kaba kuvvet denemelerini yavaşlatır:
# 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 ile test edin ve uygulayın.
Adım 5: güncel tutun
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Otomatik güvenlik güncellemeleri, siz hiçbir şey yapmadan bilinen açıkları kapatır.
Nelere dikkat etmeli
- Yasakları
sudo fail2ban-client status sshdile kontrol edin. /var/log/nginx/error.logdosyasını ara sıra gözden geçirin.- Bir proxy veya CDN arkasındaysanız fail2ban'ın gerçek istemci IP'sini okuduğundan emin olun, aksi halde kendi proxy'nizi yasaklayabilirsiniz.