您的位置: 新闻资讯 > 行业动态 > 正文

Nginx 蜘蛛白名单:安全防护的得力助手


来源:mozhe 2024-10-18
Nginx 蜘蛛白名单是一种安全措施,可限制特定 IP 地址或 IP 段访问网站,有效保护服务器防止未经授权的外部访问。
在当今互联网环境中,服务器面临着各种潜在的安全威胁。未经授权的访问可能导致数据泄露、服务器资源被滥用等问题。Nginx 蜘蛛白名单通过精确控制哪些 IP 地址可以访问服务器,为网站提供了一道坚实的安全防线。
例如,我们可以借助 Nginx 的配置文件来实现蜘蛛白名单功能。通过修改 nginx.conf 文件,在 server 中添加 allow 和 deny 的 IP 地址,就可以实现对特定 IP 的访问控制。如果需要对整个 IP 段设置不允许访问,可以使用特定的写法,如“192.168.1.0/24”这样的形式来表示一个 IP 段。
Nginx 蜘蛛白名单的作用不仅仅是防止未经授权的访问,还可以提高服务器的性能和稳定性。通过限制不必要的访问,可以减少服务器的负载,提高响应速度。同时,对于一些特定的 IP 地址,如搜索引擎的蜘蛛或者自己测试的 IP 地址,可以通过白名单设置,确保它们能够正常访问网站,而不受到其他限制的影响。
此外,Nginx 还可以通过 geo 指令实现对白名单 IP 的精确控制。例如,可以定义一个名为$limited 的变量,通过设置不同的 IP 地址和子网掩码,来确定哪些 IP 地址属于白名单。这样,只有白名单中的 IP 地址才能访问网站,其他 IP 地址将被拒绝访问。
总之,Nginx 蜘蛛白名单是一种非常有效的安全措施,可以帮助网站管理员保护服务器,提高服务器的性能和稳定性。

二、Nginx 蜘蛛白名单的设置方法

(一)登录服务器配置文件


要设置 Nginx 蜘蛛白名单,首先需要登录到服务器,打开 Nginx 配置文件,一般为 /etc/nginx/nginx.conf。在文件中添加以下代码:allow IP1;allow IP2;deny all;,其中 IP1 和 IP2 是你要允许访问的 IP 地址。可以使用通配符 * 来指定 IP 段,例如:allow 192.168.1.1;allow 192.168.1.*;deny all;。上面的代码将允许 IP 地址 192.168.1.1192.168.1.0/24 访问网站,而其他 IP 地址将被拒绝访问。添加完白名单后,重新加载 Nginx 配置:service nginx reload。

(二)使用 Geo 模块设置


Nginx 还可以使用 Geo 模块来设置白名单,从而更灵活地控制访问权限。例如,可以设置特定国家的访客访问权限:geo $allowed_country {default 0;CHN 1;USA 1;}server {if ($allowed_country = 0) {return 403;}}。这段代码将只允许中国和美国的访客访问您的网站,其他国家的访客将被拒绝访问。

(三)结合多种指令设置


在设置 Nginx 蜘蛛白名单时,可以结合 allow、deny 等指令以及各种模块来实现更复杂的访问控制。例如,在 http、server、location 等不同配置段下,可以使用以下方法设置白名单:
  • 在 http 配置段中,可以使用 white_black_list_conf 关键字来定义白名单或黑名单文件及存储空间。例如:white_black_list_conf conf/white.list zone=white:4m;。
  • 在 server 配置段中,可以使用 white_list 和 black_list 关键字来开启或关闭白名单和黑名单功能。例如:white_list white1 on; #白名单 white1 在整个 server{} 中都开启。
  • 在 location 配置段中,可以针对特定的请求路径设置白名单。例如:location /do {white_list white3 on; #白名单 white3 在 location /do{} 中开启}。
此外,还可以结合 ngx_http_geo_module 和 ngx_http_map_module 模块来实现更精细的白名单设置。例如,定义白名单 ip 列表变量:geo $whiteiplist {default 1 ;127.0.0.1/32 0;10.0.0.0/8 0;64.223.160.0/19 0;}map $whiteiplist $limit{1 $binary_remote_addr ;0 "";},然后配置请求限制内容:limit_conn_zone $limit zone=conn:10m;limit_req_zone $limit zone=allips:10m rate=20r/s;。
通过结合多种指令和模块,可以根据实际需求灵活地设置 Nginx 蜘蛛白名单,提高服务器的安全性和性能。

三、白名单配置的技术要点


(一)限流配置与白名单结合


Nginx 自身有的请求限制模块 ngx_http_limit_req_module、流量限制模块 ngx_stream_limit_conn_module 基于令牌桶算法,可以方便地控制令牌速率,自定义调节限流。例如,limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;表示每个 IP 的请求频率每秒不能超过 10 次且最大容量为 10M。在这种限流配置下,我们可以结合白名单来实现对特定 IP 不做限制。
技术要点如下:首先,使用 geo 指令定义一个白名单变量,如geo $whiteiplist { default 1; 127.0.0.1 0; 10.0.0.0/8 0;},默认值为 1,表示所有都受限制,如果客户端 IP 与白名单列出的 IP 相匹配,则值为 0,也就是不受限制。然后,使用 map 指令将白名单值为 1 的 IP 映射为客户端 IP,将白名单值为 0 的 IP 映射为空的字符串。最后,limit_conn_zone和limit_req_zone指令对于键为空值的将会被忽略,从而实现对于列出来的 IP 不做限制。

(二)目录限制白名单


对指定请求路径不设置限制可以通过以下方法实现。例如,对请求路径为api目录下的请求不做限制,可以这样写:server{location /app {proxy_pass http://192.168.1.111:8095/app;limit_conn conn 20;limit_rate 500k;limit_req zone=foo burst=5 nodelay;}location /app/api {proxy_pass http://192.168.1.111:8095/app/api}}。因为 Nginx 会优先进行精准匹配,所以以上写法即解除了对api目录下属路径的限制。

(三)IP 限制白名单


结合geo和map指令可以实现 IP 限制白名单。首先,geo指令可以用来创建变量,变量值依赖于客户端 IP 地址,如geo $whiteiplist {default 1 ;127.0.0.1/32 0;64.223.160.0/19 0;}。然后,map指令基于其他变量及变量值进行变量创建,允许分类,或者映射多个变量到不同值并存储在一个变量中,如map $whiteiplist $limit{1 $binary_remote_addr ;0 "";}。接着,配置请求限制内容,如limit_conn_zone $limit zone=conn:10m;limit_req_zone $limit zone=allips:10m rate=20r/s;。
对于特殊情况,比如仅限制指定的请求,如只限制post请求,可以这样处理:首先,map $request_method $limit {default "";post $binary_remote_addr;}进行请求地址 map 映射。然后,limit_req_zone $limit zone=reqlimit:20m rate=10r/s;进行限制定义。如果想进行指定方法的白名单限制处理,可以这样做:先定义白名单列表,如map $whiteiplist $limitips{1 $binary_remote_addr;0 "";}。接着,基于白名单列表,定义指定方法请求限制,如map $request_method $limit {default "";post $limitips;}。最后,对请求进行引用,如limit_req_zone $limit zone=reqlimit:20m rate=10r/s;,并在server中进行引用。

四、Nginx 蜘蛛白名单的作用场景

(一)生产测试与后台控制


很多时候项目上线,需要进行一次生产测试,但是又不想用户访问最新的接口服务,看到最新的内容。于是需要有一个叫白名单的家伙来控制流量。具体实现方式有很多种,在介绍 nginx 实现之前,先说说大致的方案。其中后台控制是一种有效的方式,后台写白名单配置文件,如果是那种配置中心的服务架构,那么这种情况不需要重启服务干预,它会自动获取白名单用户,那么也唯有白名单用户才能访问最新的服务,其他用户则无感知。反过来如果没有配置中心,那么会出现情况:每增删白名单一次,就需要重启服务一次才能生效,很显然这种办法不是很灵活。
例如,在一些大型项目中,为了确保新功能的稳定性和可靠性,在生产测试阶段可以通过 Nginx 蜘蛛白名单,只允许特定的测试人员或者特定的 IP 地址访问新服务。这样可以有效地控制流量,避免新功能在不稳定的情况下被大量用户访问,从而减少可能出现的问题和风险。

(二)IP 策略分流


通过 ip 策略来限制分流,也就是说只有指定的 ip 才能访问,但是这个做法需要第三个节点来控制。假如原来是双节点 A、B,那么如何通过 ip 控制访问新发布的服务呢?
首先是第一个问题,ip 来自哪里?一方面,可以从数据库中获取,如果我们会记录用户常用的 ip 地址,那么就可以筛选一批出来,当然目前而言可能很多情况 ip 都是动态发生改变的。另一方面,限制内网就可以,也就是说上线后,只允许公司网络访问新服务,而要访问旧服务就需要自己切换自己的流量。
接着是第二个问题,验证完之后呢?一种情况是 C 节点需要释放,或者放开 ip 限制;总归是需要操作 nginx 两次。另一种情况是可以不用释放,在做服务器容灾的时候,当其他节点服务器崩溃,可以迅速启用备用服务器,保证用户能正常访问。
例如,在一个电商平台的新服务发布中,可以通过 Nginx 蜘蛛白名单,只允许特定的 IP 地址访问新服务,如公司内部的测试人员、合作伙伴或者特定的用户群体。这样可以有效地控制流量,确保新服务在稳定的情况下逐步向更多用户开放。同时,在验证完 IP 地址后,可以根据实际情况选择是否释放 C 节点的 ip 限制,以实现更好的服务器容灾处理。

五、Nginx 蜘蛛白名单的综合优势


Nginx 蜘蛛白名单在多个方面发挥着重要作用,是保障系统稳定的关键手段。
在安全防护方面,它能够精确控制访问服务器的 IP 地址,有效防止未经授权的外部访问,降低数据泄露和服务器资源被滥用的风险。例如,通过设置特定的 IP 地址或 IP 段为白名单,可以阻止恶意 IP 的访问,保护服务器的安全。据统计,使用 Nginx 蜘蛛白名单后,服务器遭受未经授权访问的概率降低了[具体数据]%。
在流量控制方面,白名单与限流配置相结合,可以实现对特定 IP 不做限制,同时对其他 IP 进行合理的流量控制。例如,通过设置每个 IP 的请求频率每秒不能超过一定次数,以及最大容量限制,可以有效地管理服务器的负载。同时,对于白名单中的 IP,可以根据实际需求给予更高的访问权限,确保重要用户或服务的正常运行。
在服务器容灾方面,Nginx 蜘蛛白名单也发挥着重要作用。当服务器出现故障或需要进行容灾处理时,白名单可以帮助快速确定哪些 IP 地址是关键用户或服务的访问源,从而优先保障这些用户的访问。例如,在服务器崩溃时,可以迅速启用备用服务器,并通过白名单控制流量,保证关键用户的正常访问。同时,在 IP 策略分流中,白名单可以帮助实现更好的服务器容灾处理,当其他节点服务器崩溃时,可以迅速切换到备用服务器,保证用户能正常访问。
综上所述,Nginx 蜘蛛白名单在安全防护、流量控制、服务器容灾等方面具有显著的综合优势,是保障系统稳定的重要手段。它不仅能够提高服务器的安全性和性能,还能够为用户提供更好的服务体验。
 

墨者安全 防护盾

墨者安全作为专业级别安全防护专家,在应对 Webshell 风险隐患方面展现出了卓越的能力。其拥有全面的检测机制,能够精准识别 Webshell 的各种类型和变体,无论是复杂的大马,还是隐蔽的内存马,都难逃其敏锐的监测。
墨者安全防护盾具备强大的实时监控功能,对服务器的各项活动进行 7*24 小时不间断的监视。一旦发现任何可疑的 Webshell 活动迹象,立即发出警报,并迅速采取隔离和清除措施,将风险扼杀在萌芽状态。
在防护策略上,墨者安全防护盾采用了多层次的防御体系。不仅能够在网络层面阻挡外部的恶意访问和攻击,还能深入系统内部,对服务器的文件系统、进程等进行深度检查和保护,确保 Webshell 无法植入和运行。
同时,墨者安全防护盾拥有快速的应急响应能力。当 Webshell 攻击事件发生时,专业的安全团队能够迅速介入,进行深入的分析和处理,最大程度减少攻击带来的损失,并帮助用户快速恢复服务器的正常运行。
墨者安全防护盾还注重用户教育和培训,为用户提供关于 Webshell 防范的专业知识和最佳实践,帮助用户提升自身的安全意识和防范能力,共同构建坚实的网络安全防线。

热门文章

X

7x24 小时

免费技术支持

15625276999


-->