本帖最后由 花花 于 2024-6-14 15:08 编辑
Nginx作为一款明星级的Web服务器,不仅以其高效、稳定的性能受到青睐,更需借助一系列安全策略来抵御网络威胁,确保你的网站坚如磐石。 官方模块配置参数详解:https://blog.redis.com.cn/doc/index.html
第一步:基础防御工事 让黑客难以识别你的Nginx版本,减少被针对性攻击的风险。
隐藏服务器指纹,不让攻击者轻易了解后端详情。 - proxy_hide_header X-Powered-By;
复制代码- proxy_hide_header Server;
复制代码
通过IP黑白名单精细控制访问权限 参数说明:allow:允许访问;deny:禁止访问;address:具体的ip地址;all:所有ip地址。
白名单配置: 只允许192.168.2.112网的主机访问,拒绝其他所有 location /path/ { allow 192.168.2.112; deny all; }
黑名单配置: 只拒绝192.168.2.112网的主机访问,其他允许 location /path/ { deny 192.168.2.112; allow all; }
阻挡爬虫大军,保护网站免遭数据抓取。 if($http_user_agent ~(SemrushBot|python|MJ12bot|AhrefsBot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup)) { return 444; }
限制敏感目录执行脚本,防止恶意脚本趁虚而入。 例如:uploads|templets|data 这些目录禁止执行php脚本 location ~* ^/(uploads|templets|data)/.*.(php|php5)$ { return 444; }
禁止下载特定类型文件,保护数据安全。 location ~ \.(zip|rar|sql|bak|gz|7z)$ { return 444; }
浏览器会根据Content-Type来分辨响应的类型,但当响应类型未指定或错误指定时,浏览会尝试启用MIME-sniffing来猜测资源的响应类型。此时如果一个.jpg的图片文件被恶意嵌入了可执行的js代码,会导致网页显示非网站图片。 - add_header X-Frame-Options "SAMEORIGIN";
复制代码- add_header X-XSS-Protection "1; mode=block";
复制代码- add_header X-Content-Type-Options "nosniff";
复制代码
X-Frame-Options: 响应头表示是否允许浏览器加载frame等属性,有三个配置 DENY:禁止任何网页被嵌入; SAMEORIGIN: 只允许本网站的嵌套; ALLOW-FROM: 允许指定地址的嵌套;
X-XSS-Protection: 表示启用XSS过滤(禁用过滤为X-XSS-Protection: 0),mode=block表示若检查到XSS攻击则停止渲染页面
X-Content-Type-Options: 响应头用来指定浏览器对未指定或错误指定Content-Type资源真正类型的猜测行为,nosniff 表示不允许任何猜测;
限制加载来源,增强网页安全,其中default-src针对所有类型资源的默认加载策略,self允许来自同源的内容。 - add_header Content-Security-Policy "default-src 'self'";
复制代码- add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
复制代码
上边的配置表示当用户第一次访问后,会返回一个包含了Strict-Transport-Security响应头的字段,这个字段会告诉浏览器,在接下来的31536000秒内,当前网站的所有请求都使用https协议访问,参数includeSubDomains是可选的,表示所有子域名也将采用同样的规则
第二步:加固网络边界 调整缓冲区大小,防止缓冲区溢出攻击。 - client_body_buffer_size 1K;
复制代码- client_header_buffer_size 1k;
复制代码- large_client_header_buffers 2 1k;
复制代码
client_body_buffer_size: 默认8k或16k,表示客户端请求body占用缓冲区大小。 client_header_buffer_size: 表示客户端请求头部的缓冲区大小。 client_max_body_size: 表示客户端请求的最大可接受body大小。 large_client_header_buffers 表示一些比较大的请求头使用的缓冲区数量和大小。
设置合理的超时限制,避免资源耗尽。 - client_header_timeout 10;
复制代码
client_body_timeout: 表示读取请求body的超时时间。 client_header_timeout: 表示读取客户端请求头的超时时间。 keepalive_timeout: 参数的第一个值表示客户端与服务器长连接的超时时间。 send_timeout: 表示发送给客户端应答后的超时时间。
保护你的图片和资源不被非法引用。 location /images/ { if ($invalid_referer) { return 403; } } valid_referers: 验证referer;none:允许referer为空;blocked:允许不带协议的请求。 除了以上两类外仅允许referer为www.tea.cn或tea.cn时访问images下的图片资源,否则返回403
第三步:封堵漏洞,严防死守 只允许安全的HTTP方法,阻止潜在的TRACE攻击。 location / { limit_except GET POST { deny all; } }
关闭目录浏览,避免敏感信息泄露。 location / { autoindex off; }
启用基本认证,为重要区域加把锁。 server { location / { auth_basic "please input user&passwd"; auth_basic_user_file key/auth.key; } }
第四步:高级防御术 限制请求速率, 防止DDoS攻击。 http { limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s; server { location / { limit_req zone=req_limit burst=5 nodelay; } } } 设置限制的大小和速率(每秒最多允许1个请求)。
严格限制请求方法,只允许安全的请求方式。 if ($request_method !~ ^(GET|POST)$ ) { return 405; } $request_method能够获取到请求nginx的method
配置只允许GET\POST方法访问,其他的method返回405
拒绝可疑的User-Agent,阻拦自动化扫描工具。 if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl) { return 444; }
第五步:加密通道,安全升级 配置SSL证书,为数据传输加上安全的加密层,确保信息传递的私密性和完整性。 server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; location / { } }
通过上述步骤,你的Nginx服务器将穿上坚固的盔甲,无论是对抗恶意访问,还是防御数据泄露,都能游刃有余。记得定期检查和更新配置,保持安全策略的最佳状态。
欢迎各位技术大神参与爱星物联开源云项目体验,爱星物联IoT云平台致力于提供更加成熟、安全、全球化可用的物联网服务,降低投入成本,快速开发 IoT 产品,构建安全稳定且可定制化的 IoT 解决方案。
|