在Nginx中统计各个IP访问次数
awk '{print $1}' nginx_site_log.access.log | sort | uniq -c | sort -n
1.访问限制过滤
http {
# 过滤提取cookie关键字段
map $http_cookie $session_id{
~*session_adminer.+session_id%22%3Bs%3A32%3A%22(?<session>.+)%22%3Bs%3A10%3A%22ip_address $session;
}
# 连接限制
limit_conn_zone $binary_remote_addr zone=conn_addr:32m;
# 请求并发限制
limit_req_zone $binary_remote_addr zone=req1_addr:32m rate=1r/s;
server {
# 每IP同时只能连接一个客户
limit_conn conn_addr 1;
# 每IP每次同时处理一个请求
limit_req zone=req1_addr burst=5;
}
}
此时,limit_conn_zone和limit_req_zone的可选key为$
session_id,$
binary_remote_addr
2.访问文件过滤
location ~* ^/(views|upload|static)/.*.(php|php5)$ {
deny all;
}
3.访问屏蔽
# 简单屏蔽
deny 1.2.3.4;
deny 91.212.45.0/24;
deny 91.212.65.0/24;
# 只供在IP段192.168.1.0/24内除192.168.1.1的主机访问
location / {
# block one workstation
deny 192.168.1.1;
# allow anyone in 192.168.1.0/24
allow 192.168.1.0/24;
# drop rest of the world
deny all;
}
# 屏蔽单个ip访问
# deny IP;
# 允许单个ip访问
# allow IP;
# 屏蔽所有ip访问
# deny all;
# 允许所有ip访问
# allow all;
#屏蔽整个段即从192.0.0.1到192.255.255.254访问的命令
# deny 192.0.0.0/8
#屏蔽IP段即从192.168.0.1到192.168.255.254访问的命令
# deny 192.168.0.0/16
#屏蔽IP段即从192.168.6.1到192.168.6.254访问的命令
# deny 192.168.6.0/24
4.请求谓词
HTTP方法 | 评估结果 | 建议 | 说明 | 解决方案 |
---|---|---|---|---|
HEAD | 安全 | 无 | 除了服务器不能在响应中返回消息体,HEAD 方法与 GET 相同。HEAD 请求的响应中的 HTTP 头部中包含的元信息应该与 GET 请求发送的响应中的信息相同。该方法可用来获取请求暗示实体的元信息,而不需要传输实体本身。该方法常用来测试超文本链接的有效性、可用性和最近的修改。 | |
TRACE | 危险 | 建议关闭 | TRACE 方法用于引起远程的,该请求消息的应用层回射。请求的最终接收者应该反射200(OK)响应,并以该消息作为客户端回收消息的实体。 | 将应用服务器中的TRACE谓词拒绝 |
GET | 安全 | 无 | GET 方法即获取由 Request-URI 标识的任何信息(以实体的形式)。如果 Request-URI 引用某个数据处理过程,则应该以它产生的数据作为在响应中的实体,而不是该过程的源代码文本,除非该过程碰巧输出该文本。 | |
PUT | 危险 | 建议关闭 | PUT 方法请求将封装的实体存储在指定的 Request-URI 下。如果 Request-URI 引用已存在的资源,该封装实体应该被认作最初服务器存储的修改版本。如果 Request-URI 没有指向已存在的资源,且该 URI 可以被请求的用户代理定义为新的资源,则最初服务器可以用该URI创建资源。 | 将应用服务器中的PUT谓词拒绝 |
POST | 安全 | 无 | POST 方法用来请求最初服务器接受请求中封装的实体作为从属于请求行中的 Request-URI 标识的附属。 | |
OPTIONS | 安全(已关闭) | 无 | OPTIONS 方法表示在由 Request-URI 标识的请求/响应链上关于有效通讯选项信息的请求。该方法允许客户端判断与某个资源相关的选项和/或需求或者服务器的能力,而不需要采用资源行为或发起资源获取。 | |
DELETE | 危险 | 建议关闭 | DELETE 方法请求最初服务器删除 Request-URI 标识的资源。最初服务器可在人为干涉下(或其它意思)屏蔽该方法。客户端不能确保该操作已提交,即使最初服务器发出的状态码表明动作已成功完成也如此。然而,在给出响应的时候,服务器不应该表示成功,除非它试图删除该资源或将它移动到不可访问的位置。 | 将应用服务器中的DELETE谓词拒绝 |
limit_except GET POST PATCH {
deny all;
}