暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nginx系列,加强安全的最佳实践

本文通过一些最佳实践,让 Nginx 服务器运行的更安全。

1:使用HTTPS

HTTPS可以保护数据安全,对通信进行加密,防止窃听。

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

ssl_certificate 和 ssl_certificate_key 分别放置证书文件和私钥;ssl_protocols 表示启用的SSL协议版本;ssl_ciphers 表示优先启用的加密套件。

2:安全头部

安全的HTTP头部可以保护服务器免受XSS等攻击。

add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "DENY";
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

X-Content-Type-Options 表示防止 MIME 类型嗅探,让浏览器按照头部按照 Content-Type 头确认文件类型,避免错误地解释为可执行脚本。

X-Frame-Options 防止点击劫持,避免攻击者在网页中放入一个 iframe,在用户不知情的情况下点击。

X-XSS-Protection 防止 XSS 攻击,避免在网页中执行恶意脚本。

Strict-Transport-Security 强制启用HTTPS。

3:防范 DDoS 和暴力攻击

速率限制通过控制客户端的请求数来防止滥用。

limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

location /api/ {
    limit_req zone=api_limit burst=20;
}

api_limit 限制一个IP每秒最高请求数,burst 允许在速率限制生效前可以增加到 20 个请求。

还可以限制IP黑名单:

/etc/nginx/blacklist.conf
 增加指令 deny 192.168.1.1;

然后在 /etc/nginx/nginx.conf
 下加载:

http {
    include /etc/nginx/blacklist.conf;
}

4:使用 Fail2Ban 提高安全性

Fail2Ban 可监控日志文件并封禁显示恶意行为(如反复尝试登录失败)的 IP

编辑 /etc/fail2ban/jail.local
 文件:

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600

然后重启服务:

$ apt install fail2ban
$ systemctl restart fail2ban

然后查看哪些ip有问题。

$ fail2ban-client status nginx-http-auth

5:定期安全维护

定期升级:

$ apt update && sudo apt upgrade nginx

移除一些没有用到的模块。

监控日志:

$ tail -f /var/log/nginx/access.log
$ tail -f /var/log/nginx/error.log

过往相关文章:

文章转载自虞大胆的叽叽喳喳,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论