nginx安全策略
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 限流
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 {} \;