cat /root/.ssh/authorized_keys
非root 查看信任key
find /home -name authorized_keys -type f -exec ls -l {} \;

实用的 Nginx Web 服务器安全加固方案。内容涵盖通过日志分析识别恶意 IP 并实施访问控制(Deny),利用正则表达式屏蔽敏感文件后缀以防止信息泄露,拦截异常爬虫及非标准 User-Agent 请求,以及使用 limit_conn_zone模块进行连接限流以抵御 CC 攻击。旨在帮助运维人员构建更健壮的 Nginx 安全防护体系

1. 查看日志 访问IP
# 查看前20名
 awk '{print $1}' www.forasp.cn.log|sort | uniq -c |sort -n -k 1 -r |head -n 20

如果有恶意ip
直接在 http 中 deny. 或者直接建立一个denyip.conf

看服务器被攻击,查nginx日志统计访问的前N名,然后判断是否deny
那怎么统计前几名的nginx日志IP呢,命令如下:
 
cat logname.log | awk '{print $1}' | sort | uniq -c | sort -nrk1 | awk '{print $2" "$1}'>ipcount.log
 
对上面逐个解释一下
cat logname.log # 读取 日志内容
awk '{print $1}' # 获取每行的 IP, 默认按照空格分隔,nginx日志默认是空格
sort # 按照IP排序
uniq -c # uniq前,必须sourt, 求每个IP 唯一值并计算数量, 行前加上重复次数,即第一列为重复次数 k1表示的是次数
sort -nrk1 # 排序,-n 用数值定向,否则会按字符排序出现10比1小的情况-r 倒序, -k1 设定排序的组序列,即按照单个ip统计数量排序
awk '{print $2" "$1}' #按照空格分隔,输出第二列IP+空格+第一列数量
 
这样就计算了全部的IP量 如果计算前N名的
 
cat logname.log | awk '{print $1}' | sort | uniq -c | sort -nrk1 | awk '{print $2" "$1}'| head -N>ipcount_N.log

如果有恶意ip
直接在 http 中 deny. 或者直接建立一个denyip.conf

# 单ip
deny x.x.x.x;
# ip 段
deny x.x.x.0/24;

2. 异常URI 判断
 
if ($document_uri ~* \.(php|asp|aspx|jsp|swp|git|env|yaml|yml|sql|db|bak|ini|docx|doc|rar|tar|gz|zip|log)$) {
    return 404;
}
 
3. 屏蔽恶意爬虫或者指定客户端
 
# 指定客户端
if ($http_user_agent ~* (Scrapy|HttpClient|Postman|ApacheBench|Java|python|node-fetch)) {
return 403;
}
# 指定agent
if ($http_user_agent ~ "Nimbostratus|MJ12bot|YisouSpider|^$" ) {
return 403;             
}
 
4 通过 limit_conn_zone 限流

Nginx 限流

5. 查看是否有其他root 权限账号

awk -F: '$3 == 0 {print $1 ":" $3 ":" $6 ":" $7}' /etc/passwd

查看 root 查看ssh 信任key

cat /root/.ssh/authorized_keys
非root 查看信任key
find /home -name authorized_keys -type f -exec ls -l {} \;