保护 Debian 上 Nginx 的安全,通常可以从系统层、Nginx 配置层、应用与运维层三个维度来做。下面是一套比较实用、可落地的清单。
sudo apt update
sudo apt upgrade -y
并启用自动安全更新:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
sudo nano /etc/ssh/sshd_config
# PermitRootLogin no
sudo systemctl restart ssh
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
server_tokens off;
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
limit_req zone=req_limit burst=20 nodelay;
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
return 405;
}
}
location ~ /\. {
deny all;
}
location ~* \.(env|ini|log|sh)$ {
deny all;
}
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer";
add_header Content-Security-Policy "default-src 'self'";
user www-data;
并确保网站目录不可写:
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
autoindexautoindex off;
client_max_body_size 10m;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
goaccesssudo apt install fail2ban
保护 SSH 与 Nginx 异常访问。
server {
listen 443 ssl;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
location / {
try_files $uri $uri/ =404;
}
location ~ /\. {
deny all;
}
}
如果你愿意,我可以:
你可以直接把配置文件贴出来。