nginx 关于防护,安全,限流,动态黑名单的一些配置

1.关于动态黑名单

主要是定时查询访问日志,查询出访问频率较高的ip,加入黑名单
详情见我的上一篇文章nginx动态黑名单功能

2.避免网页被盗链

在http模块配置add_header X-Frame-Options SAMEORIGIN; 只允许相同域名iframe引入网页

X-Frame-Options 有三个值:
DENY
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN
表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri
表示该页面可以在指定来源的 frame 中展示。

3.referer设置

通过配置实现通过Http请求包头中的Referer实现防盗链。在http请求的跳转过程中,Http包头中会加入Referer参数,指明跳转的来源。通过这个可以实现简单的防盗链功能。

location / {
            valid_referers none blocked domain.com *.domain.com ;
            if ($invalid_referer) {
               return 403;
            }
            proxy_pass https://192.168.1.1/;
        }

4.限流配置

首先,在nginx.conf文件中的http模块下配置

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req_zone $uri zone=one:10m rate=1r/s;

说明:区域名称为one(自定义),占用空间大小为10m,平均处理的请求频率不能超过每秒一次。如果是1分钟一次则为1r/m
$binary_remote_addr 如果来源IP不固定,则无法达到限流目的,建议使用$uri对请求url进行限流

第二,在http模块的子模块server下面配置

location ~* .htm$ {
	limit_req zone=one burst=5  nodelay;
	proxy_pass http://192.168.1.1;
}

我这里是对uri后缀为htm的请求限流,注意limit_req zone=one burst=5 nodelay;

其中zone=one和前面的定义对应。

burst这个网上都说峰值之类的,通过亲自试验发现这么说并不准确,应该叫缓冲队列的长度比较合适。

nodelay字面的意思是不延迟,具体说是对用户发起的请求不做延迟处理,而是立即处理。比如我上面定义的rate=1r/s,即每秒钟只处理1个请求。如果同一时刻有两个后缀为htm的请求过来了,若设置了nodelay,则会立刻处理这两个请求。若没设置nodelay,则会严格执行rate=1r/s的配置,即只处理一个请求,然后下一秒钟再处理另外一个请求。直观的看就是页面数据卡了,过了一秒后才加载出来。

此部分来源博客地址Nginx使用limit_req_zone对同一IP访问进行限流

5.配置http_user_agent

通过nginx日志分析各种爬虫,ddos和正常请求的差异,阻止爬虫和ddos
比如观察某爬虫请求客户端代理为

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36

可以在location模块添加

if ($http_user_agent ~* "Mozilla/5.0\ \(X11;\ Linux\ x86_64\)") { return 403; }

6.CSP相关

Content Security Policy,网页安全政策 ,简称CSP,实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。

add_header Content-Security-Policy "default-src 'self' www.abc.com(可以通配* 多个域名空格隔开) 'unsafe-inline' 'unsafe-eval' blob: data: ;";
add_header X-Xss-Protection "1;mode=block";
add_header X-Content-Type-Options nosniff;

表示只有www.abc.com域名下的资源能被加载和执行

7.其他配置

只允许GET,POST请求

if ($request_method !~ ^(GET|POST)$) {
  return 403;
}

屏蔽所有xml请求

location ~ .*\.(xml)$ { return 403;}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
动态配置黑名单,你可以使用 Nginx 的模块 ngx_http_geo_module。这个模块提供了一种有效的方式来基于 IP 地址或其他地理位置信息进行访问控制。 以下是一个简单的示例,展示如何在 Nginx动态配置黑名单: 1. 创建一个名为 blacklist.conf 的文件,用于存储黑名单 IP 地址列表。该文件的格式如下: ``` # blacklist.conf deny 192.168.0.1; deny 10.0.0.0/24; ``` 2. 在 Nginx配置文件中引入 blacklist.conf 文件。找到你的 server 配置块,添加以下指令: ``` include /path/to/blacklist.conf; ``` 确保将 "/path/to/blacklist.conf" 替换为实际的 blacklist.conf 文件的路径。 3. 在 server 配置块中使用 `geo` 指令,定义一个名为 `$blacklist` 的变量,并将其与 blacklist.conf 文件中的黑名单地址相关联。例如: ``` geo $blacklist { default 0; include /path/to/blacklist.conf; } ``` 4. 在 server 配置块中使用 `map` 指令,将 `$blacklist` 变量映射到一个新的变量 `$is_blacklisted`。例如: ``` map $blacklist $is_blacklisted { 0 0; 1 1; } ``` 5. 在 server 配置块中使用 `if` 指令,根据 `$is_blacklisted` 变量的值来拒绝访问。例如: ``` server { ... if ($is_blacklisted) { return 403; } ... } ``` 这样,当请求的 IP 地址在黑名单中时,Nginx 将返回 HTTP 状态码 403 Forbidden。 请注意,这只是一个简单的示例。你可以根据自己的需求扩展和调整这个配置。确保在更新 blacklist.conf 文件后重新加载 Nginx 配置,以使更改生效。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值