西河刘卡车医 发表于 2025-2-18 16:01:37

Nginx与安全有关的几个设置

1.隐藏版本号

http {
server_tokens off;
} 经常会有针对某个版本的nginx安全漏洞出现,隐藏nginx版本号就成了主要的安全优化手段之一,当然最紧张的是及时升级修复漏洞
2.开启HTTPS

server {
listen 443;
server_name ops-coffee.cn;

sslon;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;
} ssl on: 开启https
ssl_certificate: 设置nginx ssl证书的路径
ssl_certificate_key: 设置nginx ssl证书key的路径
ssl_protocols: 指定客户端创建连接时使用的ssl协议版本,假如不须要兼容TSLv1,直接去掉即可
ssl_ciphers: 指定客户端连接时所使用的加密算法,你可以再这里设置更高安全的算法
3.添加好坏名单

白名单设置
location /admin/ {
allow 192.168.1.0/24;
deny    all;
} 上边体现只允许192.168.1.0/24网段的主机访问,拒绝其他全部
也可以写成黑名单的方式禁止某些地址访问,允许其他全部,比方
location /ops-coffee/ {
deny 192.168.1.0/24;
allow    all;
} 更多的时候客户端请求会颠末层层代理,我们须要通过$http_x_forwarded_for来举行限制,可以如许写
set$allowfalse;
if ($http_x_forwarded_for = "211.144.204.2") { set$allowtrue; }
if ($http_x_forwarded_for ~ "108.2.66.") { set$allowtrue; }
if ($allow = false) { return 404; } 4.添加账号认证

server {
location / {
auth_basic"please input user&passwd";
auth_basic_user_file key/auth.key;
    }
} 关于账号认证《Nginx的几个常用设置和技巧》文章中已有具体介绍,这里不赘述
5.限制请求方法

if ($request_method !~ ^(GET|POST)$ ) {
return 405;
} $request_method能够获取到请求nginx的method
设置只允许GET\POST方法访问,其他的method返回405
6.拒绝User-Agent

if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl) {
    return 444;
} 可能有一些非法者会使用wget/curl等工具扫描我们的网站,我们可以通过禁止相应的user-agent来简单的防范
Nginx的444状态比较特别,假如返回444那么客户端将不会收到服务端返回的信息,就像是网站无法连接一样
7.图片防盗链

location /images/ {
valid_referersnoneblocked www.ops-coffee.cn ops-coffee.cn;
if ($invalid_referer) {
return403;
    }
} valid_referers: 验证referer,其中none允许referer为空,blocked允许不带协议的请求,除了以上两类外仅允许referer为www.ops-coffee.cn或ops-coffee.cn时访问images下的图片资源,否则返回403
当然你也可以给不符合referer规则的请求重定向到一个默认的图片,好比下边如许
location /images/ {
valid_referersblocked www.ops-coffee.cn ops-coffee.cn
    if ($invalid_referer) {
rewrite ^/images/.*\.(gif|jpg|jpeg|png)$ /static/qrcode.jpg last;
    }
} 8.控制并发连接数

可以通过ngx_http_limit_conn_module模块限制一个IP的并发连接数
http {
limit_conn_zone$binary_remote_addr zone=ops:10m;

server {
listen80;
server_nameops-coffee.cn;

root /home/project/webapp;
index index.html;

location / {
limit_conn ops 10;
      }

access_log/tmp/nginx_access.logmain;
    }
} limit_conn_zone: 设定生存各个键(比方$binary_remote_addr)状态的共享内存空间的参数,zone=空间名字:大小
大小的计算与变量有关,比方$binary_remote_addr变量的大小对于记载IPV4地址是固定的4 bytes,而记载IPV6地址时固定的16 bytes,存储状态在32位平台中占用32大概64 bytes,在64位平台中占用64 bytes。1m的共享内存空间可以生存大约3.2万个32位的状态,1.6万个64位的状态
limit_conn: 指定一块已经设定的共享内存空间(比方name为ops的空间),以及每个给定键值的最大连接数
上边的例子体现同一IP同一时间只允许10个连接
当有多个limit_conn指令被设置时,全部的连接数限制都会生效
http {
limit_conn_zone$binary_remote_addr zone=ops:10m;
limit_conn_zone$server_name zone=coffee:10m;

server {
listen80;
server_nameops-coffee.cn;

root /home/project/webapp;
index index.html;

location / {
limit_conn ops 10;
limit_conn coffee 2000;
      }
    }
} 上边的设置不仅会限制单一IP泉源的连接数为10,同时也会限制单一虚拟服务器的总连接数为2000
9.缓冲区溢出攻击

缓冲区溢出攻击 是通过将数据写入缓冲区并超出缓冲区界限和重写内存片断来实现的,限制缓冲区大小可有效防止
client_body_buffer_size1K;
client_header_buffer_size1k;
client_max_body_size1k;
large_client_header_buffers21k; client_body_buffer_size: 默认8k或16k,体现客户端请求body占用缓冲区大小。假如连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个暂时文件。
client_header_buffer_size: 体现客户端请求头部的缓冲区大小。绝大多数环境下一个请求头不会大于1k,不过假如有来自于wap客户端的较大的cookie它可能会大于 1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置
client_max_body_size: 体现客户端请求的最大可接受body大小,它出如今请求头部的Content-Length字段, 假如请求大于指定的值,客户端将收到一个"Request Entity Too Large" (413)错误,通常在上传文件到服务器时会受到限制
large_client_header_buffers 体现一些比较大的请求头使用的缓冲区数量和大小,默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,请求字段不能大于一个缓冲区大小,假如客户端发送一个比较大的头,nginx将返回"Request URI too large" (414),请求的头部最长字段不能大于一个缓冲区,否则服务器将返回"Bad request" (400)
同时须要修改几个超时时间的设置
client_body_timeout10;
client_header_timeout10;
keepalive_timeout55;
send_timeout10; 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将关闭连接
10.Header头设置

通过以下设置可有效防止XSS攻击
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 体现不允许任何推测
在通常的请求响应中,欣赏器会根据Content-Type来分辨响应的范例,但当响应范例未指定或错误指定时,欣赏会尝试启用MIME-sniffing来推测资源的响应范例,这是非常危险的
比方一个.jpg的图片文件被恶意嵌入了可实行的js代码,在开启资源范例推测的环境下,欣赏器将实行嵌入的js代码,可能会有意想不到的后果
别的另有几个关于请求头的安全设置须要注意
Content-Security-Policy: 界说页面可以加载哪些资源,
add_header Content-Security-Policy "default-src 'self'"; 上边的设置会限制全部的外部资源,都只能从当前域名加载,其中default-src界说针对全部范例资源的默认加载策略,self允许来自雷同泉源的内容
Strict-Transport-Security: 会告诉欣赏器用HTTPS协议取代HTTP来访问目的站点
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; 上边的设置体现当用户第一次访问后,会返回一个包含了Strict-Transport-Security响应头的字段,这个字段会告诉欣赏器,在接下来的31536000秒内,当前网站的全部请求都使用https协议访问,参数includeSubDomains是可选的,体现全部子域名也将接纳同样的规则

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Nginx与安全有关的几个设置