Nginx中间件部署规范与安全基线

1. 隐藏版本号

1  http {
2      server_tokens off;
3  }

2. 开启HTTPS

ssl on :开启https
ssl_certificate :配置nginx ssl证书的路径
ssl_certificate_key :配置nginx ssl证书key的路径

ssl_protocols :指定客户端建立连接时使用的ssl协议版本 ssl_ciphers :指定客户端连接时所使用的加密算法

server {
listen 443;
server_name <xxx>;

ssl on;
ssl_certificate <pem路径>;
ssl_certificate_key <key路径>;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH: !aNULL: !MD%

}

3. 限制请求方法

$request_method能获取到请求时所使用的method,应该配置只使用GET/POST方法访问,其他 的method返回405

1  if ($request_method !~ ^(GET|POST)$ ){
2      return 405; 
3  }

4. 拒绝某些User-Agent

禁止一些爬虫的扫描

1  if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl){
2      return 444; 
3  }

5. 利用referer图片防盗链

1  locations /images/ {
2      valid_referers none blocked <domain_name> <domain_name>;
3      if ($invalid_referer){
4          return 403; 
5      }
6  }
valid_referers :验证referer none :允许referer为空

blocked:允许不带协议的请求

6. 控制并发连接数

http {
limit_conn_zone $binary_remote_addr zone=ops:10m; limit_conn_zone $server_name zone=coffee:10m;

server {
listen 80
server_name <server_name>;
...
location / {
limit_conn opos 10; # 限制单一IP来源的连接数为10
limit_conn coffee 2000; # 限制单一虚拟服务器的总连接数为2000 limit_rate 500k; # 限制单个连接使用的带宽
			} 
		}
	}

limit_conn_zone :设定保存各个属性状态的共享内存空间的参数,limit_conn_zone <属性> zone=<空间名称>:<大小>
limit_conn :为已经设定zone的属性设置最大连接数

7. 设置缓冲区大小防止缓冲区溢出攻击

1  client_body_buffer_size 1K;
2  client_header_buffer_size 1K;
3  client_max_body_size 1K;
4  large_client_header_buffers 2 1K;

client_body_buffer_size :默认8k或16k,标识客户端请求body占用缓冲区的大小。如果连接 请求超过指定缓冲区大小的值,尼玛这些请求实体的整体或者部分将尝试写入一个临时文件
client_header_buffer_size :表示客户端请求头部的缓冲区大小。绝大多数情况下一个请求头 不会大于1K,如果大于1K, Nginx将分配给它一个更大的缓冲区,,这个值可以在large_client_header_buffers 中设置
client_max_body_size :标识客户端请求的最大可接受的body大小。如果请求头部的Content- Length字段的值大于该值,客户端将收到一个(413)状态码的错误。【会影响上传文件的功能】
large_client_header_buffers :表示一些比较大的请求头使用的缓冲区数量和大小,默认一个 缓冲区大小为操作系统中分页文件大小,通常是4k或8k。请求字段不能大于一个缓冲区的大小, 若大于,则nginx将返回400状态码的错误

设置超时时间

1  client_body_timeout 10
2  client_header_timeout 10;
3  keepalive_timeout 5 5;
4  send_timeout 10;

client_body_timeout: 表示读取请求body的超时时间,如果连接超过这个时间而客户端没有 任何响应, Nginx将返回“Request time out” (408)错误
client_header_timeout: 表示读取客户端请求头的超时时间,如果连接超过这个时间而客户 端没有任何响应, Nginx将返回“Request time out” (408)错误
keepalive_timeout: 参数的第一个值表示客户端与服务器长连接的超时时间,超过这个时
间,服务器将关闭连接,可选的第二个参数参数表示Response头中Keep-Alive: timeout=time的 time值,这个值可以使一些浏览器知道什么时候关闭连接,以便服务器不用重复关闭,如果不指 定这个参数, nginx不会在应Response头中发送Keep-Alive信息
send_timeout: 表示发送给客户端应答后的超时时间, Timeout是指没有进入完整
established状态,只完成了两次握手,如果超过这个时间客户端没有任何响应, nginx将关闭连 接

8. 添加Header头防止XSS攻击

1  add_header X-Frame-Options "SAMEORIGIN";
2  add_header X-XSS-Protection "1; mode=block";
3  add_header X-Content-Type-Options "nosniff";

X-Frame-Options :标识是否允许浏览器加载frame等属性。
DENY:禁止任何网页被嵌入
SAMEORIGIN:只允许本网站的嵌套
ALLOW-FROM:允许指定地址的嵌套
X-XSS-Protection :启用XSS过滤。 mode=block标识若检查到XSS攻击则停止渲染页面
X-Content-Type-Options :用来指定浏览器对未指定或错误指定Content-Type资源真正类型的猜 测行为

nosniff:标识不允许任何猜测
在通常的请求相应中,浏览器会根据Content-Type来分辨响应的类型,如果响应类型未指定或错误指定时,浏览器会启用MIME-sniffing来猜测资源的响应类型

9. 添加其他Header头

1  add_header Content-Security-Policy "default-src 'self'";
2  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

Content-Security-Policy :表示页面可以加载哪些资源
default-src:定义针对所有类型的资源的默认加载策略。 self表示允许来自想用来源的内 容
Strict-Transport-Security :表示告诉浏览器要用HTTPS协议代替HTTP来访问目标站点
当用户第一次访问目标站点后,会返回一个包含了 Strict-Transport-Security Header的 响应,这个header告诉浏览器,在接下来的 31536000 秒内,对当前网站的所有请求都要使 用 https来访问。
includeSubDomains : (可选),表示对所有子域名也采用相同的规则

10.SSL加密算法套件

在Nginx 中,ssl_ciphers 指令用于配置支持的 SSL 加密套件。它定义了客户端和服务器之间在 SSL/TLS 握手期间所使用的加密算法和密钥交换算法。以下是加密算法套件的一个示例

  server {
    # 监听端口 443 并启用 SSL/TLS
    listen       443 ssl;
    # 服务器名称匹配任何主机名
    server_name  _;
    # 设置服务器根目录
    root  /usr/share/nginx/html;
    # SSL 证书文件路径
    ssl_certificate /etc/nginx/ssl/server1.crt;
    # SSL 证书密钥文件路径
    ssl_certificate_key /etc/nginx/ssl/server1.key;
    # 设置 SSL 会话超时时间
    ssl_session_timeout 5m;
    # 允许的 SSL/TLS 版本
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # 允许的加密套件
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    # 优先使用服务器提供的加密套件
    ssl_prefer_server_ciphers on;

    # 其他配置...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭梨山大。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值