千家信息网

NGINX安全配置和限制访问

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,说起网络***,可能很多人只知道大名鼎鼎的DDOS***,这种***廉价且效果出众,直接通过第四层网络协议用他的带宽把你的带宽顶掉,造成网路阻塞,防不胜防,就连腾讯这种大鳄公司也被大流量DDOS搞过焦
千家信息网最后更新 2024年11月11日NGINX安全配置和限制访问

说起网络***,可能很多人只知道大名鼎鼎的DDOS***,这种***廉价且效果出众,直接通过第四层网络协议用他的带宽把你的带宽顶掉,造成网路阻塞,防不胜防,就连腾讯这种大鳄公司也被大流量DDOS搞过焦头烂额。暂时的解决方法只有三种,第一种就是你要够有钱,买强大的高级防火墙,或者使用的带宽足够大,无视这些网络流量。第二种是技术足够强,例如个别有技术的大牛公司(阿里),用类如DPDK的高效数据包处理驱动,开发出流量清洗服务,把垃圾网络包过滤掉,不过同时也会影响正常的网络包,增加延时。第三种就是钱不多的公司多数使用的方案,换ip(废话)。不过,现在有很多公司推出自己的流量清洗服务,细化到按小时收费,也是相当灵活了,按需购买。

不过还有一种网络***其实比起DDOS更频繁出现,就是CC(Challenge Collapsar)***,一般来说是利用网站代码漏洞,不停地发大量数据包请求,造成对方服务器回应这些请求导致资源耗尽,一直到宕机崩溃。这种***属于第七层的网络协议,一方面在服务器层面是正常的请求,所以这种情况想根本解决问题,只能从代码入手。但是另一方面,也就可以用其他来限制他访问,例如nginx的配置上也是能稍微防一下。


nginx基本安全配置

先说一些基本安全设置,由开始发展到现在,其实nginx的安全做得比以前已经好不少,不过有些还是要强调一下。

Nginx默认是不允许列出整个目录的,不过,我们为了安全,最好还是确认这个真的关闭了,不然代码被拉走了就悲剧了。

http {autoindex off;}

nginx默认是会在返回的数据包中显示版本号,原本这个并不是大问题,但是被别有用心的人专门***这个版本的话,那就不好了,所以,我们还是隐藏好一点。

http {server_tokens off;}

其他限制访问请求参数

http {#设置客户端请求头读取超时时间,超过这个时间还没有发送任何数据,Nginx将返回"Request time out(408)"错误client_header_timeout 15;#设置客户端请求主体读取超时时间,超过这个时间还没有发送任何数据,Nginx将返回"Request time out(408)"错误client_body_timeout 15;   #上传文件大小限制client_max_body_size 100m;#指定响应客户端的超时时间。这个超过仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。send_timeout    600;#设置客户端连接保持会话的超时时间,超过这个时间,服务器会关闭该连接。keepalive_timeout 60;}

毫无疑问,nginx是可以做访问限制的,allow就是允许访问的ip和ip段,deny就是禁止访问的ip和ip段,不过这个需要看你网站的需求,现在满天飞的家用宽带IP,谁敢说IP一直是那一个。

#设置网站根目录的访问权限location / {    allow 192.168.1.1/24;    allow 120.76.147.159;    deny 119.23.19.240;    deny 192.168.3.1/24;    deny all;}

所以,我们再细化一点,限制访问个别目录或文件后缀名。

#在访问uploads、p_w_picpaths目录时,访问php|php5|jsp后缀的文件会返回403代码,也就是不给执行代码了location ~ ^/(uploads|p_w_picpaths)/.*\.(php|php5|jsp)$ {    allow 192.168.1.1/24;    return 403;}#禁止访问所有目录下的sql|log|txt|jar|war|sh|py后缀的文件,这些是什么文件就不详细说了。location ~.*\.(sql|log|txt|jar|war|sh|py) {    deny all;}#有时候,有些访问记录不想保存到日志里面,例如静态图片location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF|png)$ {    access_log off;}#如果想用户体验好一点,可以建立一个报错页面,然后让这个页面跳转到其他页面error_page 403 http://www.example.com/errorfile/404.html;

再高级一点,判断特定条件,然后拒绝服务

#判断当http_user_agent返回的结果中包含UNAVAILABLE关键字,则返回403错误。location / {    if ($http_user_agent ~ UNAVAILABLE) {    return 403;    }}

再次强调,这些要跟网站实际情况相结合,要不然影响范围被扩大,造成一些莫名其妙的事,那可不是好事,不过一般403都是自己控制,比较好判断,所以最好别直接deny all。


nginx高级安全配置

访问权限控制:

想更精准控制访问权限,其实还有auth_basic指令,用户必须输入有效的用户名和密码才能访问站点。而用户名和密码应该列在 auth_basic_user_file指令设置的文件中。

server {    ...    auth_basic "closed website";    auth_basic_user_file conf/htpasswd;}

auth_basic的off参数可以取消验证,比如对于一些公共资源,则可以取消验证。

server {    ...    auth_basic "closed website";    auth_basic_user_file conf/htpasswd;    location /public/ {        auth_basic off;    }}

我们还需使用satisfy指令来组合来使用IP访问和Http验证。 其默认设置为all,即IP访问和HTTP验证同时通过时才允许用户访问,若设置为any,即IP访问和HTTP验证其一通过就允许用户访问

location / {    satisfy any;    allow 192.168.1.0/24;    deny  all;    auth_basic           "closed site";    auth_basic_user_file conf/htpasswd;}

这样弄好像变得有点复杂,所以还是得看需求。

---------------------------------------------------------------------------------

连接权限控制:

实际上nginx的最大连接数是worker_processes乘以worker_connections的总数。

也就是说,下面的这个配置,就是4X65535,一般来说,我们会强调worker_processes设置成和核数相等,worker_connections并没有要求。但是同时这个设置其实给了***者空间,***者是可以同时发起这么多个连接,把你服务器搞跨。所以,我们应该更合理的配置这两个参数。

user  www;worker_processes  4;error_log  /data/logs/nginx_error.log  crit;pid        /usr/local/nginx/nginx.pid;events {        use epoll;        worker_connections 65535;}

不过,也不是完全没有办法限制,在nginx0.7开始,出了两个新的模块:

HttpLimitReqModul: 限制单个 IP 每秒请求数

HttpLimitZoneModule: 限制单个 IP 的连接数

这两个模块,要先在http层定义,然后在 location, server, http上下文中作限制,他们用的是限制单ip访问的漏桶算法,也就是说超过定义的限制会报503错误,这样爆发的cc***就全部被限制住了。当然,有些时候可能是某个公司同一个ip有几十人一起访问网站,这是有可能被误伤的,做好503报错回调是很有必要的。

先看HttpLimitReqModul:

http {    limit_req_zone $binary_remote_addr zone=test_req:10m rate=20r/s;     …     server {         …         location /download/ {            limit_req zone=test_req burst=5 nodelay;         }     }}

上面http层的就是定义,这是一个名为test_req的limit_req_zone空间,用来存储session数据,大小是10M内存,1M大约可以存16000个ip回话,看你访问量有多少就设多少。以$binary_remote_addr 为key,这个定义是客户端IP,可以改成$server_name等其他,限制平均每秒的请求为20个,写成20r/m就是每分钟了,也是看你访问量。

下面location层就是应用这个限制了,对应上面的定义,对访问download文件夹的请求,限制每个ip每秒不超过20个请求,漏桶数burst为5,brust的意思就是,如果第1,2,3,4秒请求为19个,第5秒的请求为25个是被允许的。但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。nodelay,如果不设置该选项,第1秒25个请求时,5个请求放到第2秒执行,设置nodelay,25个请求将在第1秒执行。

就这个限制定义而言,把每个IP限制了请求数,对于海量的cc请求***,效果明显,例如限制到1r/s每秒一次请求,那就更明显了,不过也正如开头所说,对于大公司多人统一IP同时访问,难免出现误伤,所以还是得多考虑。

然后再看HttpLimitZoneModule:

http {  limit_conn_zone test_zone $binary_remote_addr 10m;   server {    location /download/ {      limit_conn test_zone 10;      limit_rate 500k;    }  }}

和上面的类似,上面http层就是总定义,这是一个名为test_zone的limit_conn_zone空间,大小也是10M,key还是客户端IP地址,不过这个没有限制次数,改下面定义去了。

下面location层就是真正定义了,因为key定义是客户端ip,所以limit_conn就是一个IP限制了10个连接,如果是$server_name,那就是一个域名10个连接。然后下面limit_rate就是限制一个连接的带宽,如果一个ip两个连接,就是500x2k,这里是10,那就是最多可以有5000K速度给到这个ip了。

-----------------------------------------------------------------------

嫌弃503用户体验不好,也可以加个返回页面:
error_page 503 /errpage/503.html;
503页面的源代码:

页面即将载入….

页面即将载入

你刷新页面的速度过快。请少安毋躁,页面即将载入…

[立即重新载入]

-----------------------------------------------------------------------

上述的配置,是全网通用得,有时候难免有误伤,那怎么办呢,可以设置白名单制度。

#geo指令定义了一个白名单$whiteiplist变量,默认值为1,#如果客户端ip在上面的范围内,$whiteiplist的值为0。geo $whiteiplist  {    default 1;    10.11.15.161 0;    127.0.0.1/32 0;    }#使用map指令映射上面geo匹配的客户端的ip为空串,如果不是就显示本身真实的ip,#这样匹配的ip就不能存到limit_req_zone内存session中,所以不会被限制访问    map $whiteiplist  $limit {    1 $binary_remote_addr;    0 "";    }#然后再制定这个$limit变量来设置规则,白名单制度就建立起来了limit_req_zone $limit zone=one:10m rate=10r/s;limit_conn_zone $limit zone=addr:10m;


限制 就是 客户 时间 页面 客户端 文件 用户 网络 服务 配置 公司 数据 还是 安全 两个 代码 同时 指令 网站 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏网络技术供应商家 linux数据库版本查看 服务器里面怎么添加系统 上半年网络安全事件 服务器连接后怎么安装 数据库更改后台登录密码 安徽网络安全审计硬件生产厂家 安徽服务器机柜专卖店 浙江物流软件开发工具 浙江c语言软件开发定制 致信服务器连接失败怎么办 馆陶企业网络推广需要服务器吗 csgo官方匹配服务器 数据库课程自学视频教程 基岩版服务器怎么上传地图 灵牛网络技术有限公司 宝山区创新软件开发价格表格 上门杀毒手机电脑网络安全 为诈骗提供软件开发和技术支持 网络安全工作主要是 阿里云数据库工作环境 新斗罗大陆魂师对决官网服务器 数据库技术基础第三单元答案 济南市信息网络安全与维护 南瑞网络安全故障处理 大学生网络安全对策研究 简述多媒体软件开发过程 互联网科技产品排行榜 服务器不停服 软件开发项目经理在哪里找
0