这篇文章主要总结一些Nginx的安全配置表现及影响。
Nginx 的基础配置都在一个配置文件里面
目录为 <Application $HOME> /nginx/nginx.conf
下面以我服务器上的配置文件做个说明。
🐶涉及的安全配置项:
1 日志记录配置
2 控制超时时间
3 目录访问ip限制
4 错误页面重定向
5 禁止目录浏览
6 是否隐藏版本信息
7 限制目录执行权限
1️⃣ 日志记录配置
此项配置主要用于记录nginx服务器的日志记录。
查看配置文件nginx.conf
其中最主要是的error_log(错误日志)和access_log(访问日志)这两个属性。
具体配置解释:
⭐️ error_log语法格式:
关键字 日志文件路径 错误日志等级
关键字 error_log 不能修改
日志文件路径可以自定义
错误日志级别:常见的错误日志级别有[debug | info | notice | warn | error | crit | alert | emerg],级别越高记录的信息越少。
生产场景一般是 warn | error | crit 这三个级别之一
⭐️ access_log语法格式:
关键字 路径 自定义日志格式名称
关键字 access_log 不能修改
路径:存放位置,日志名称可自定义
日志格式:可以自定义参数。上图第二方框上log_format main 表示记录日志的自定义格式,详细见下, main 表示格式名称。可直接调用。
参数 说明 实例
$time_local 访问的时间和时区 01/Aug/2017:12:01:32 +0800
$request URL请求和HTTP信息 GET /images/logo/new-logo2.ico HTTP/1.1
$status 请求的状态 200
$remote_user 客户端用户名称
$remote_addr 客户端地址 111.202.5.249
$http_user_agent 用户终端浏览器等信息 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
更多可参考:https://www.jianshu.com/p/331232683769
❗️ 此服务Nginx 中 error_log错误日志记录被注释,无法及时记录服务器错误日志信息和及时发现异常请求,建议将‘#’删除。
大多攻击者是惧怕日志记录,因为日志可以帮助我们发现攻击者来源,攻击手段等等信息。日记记录不只是这个两种,且可以存在其他模块下。
2️⃣ 控制超时时间
⭐️ 语法格式:
名称 时间(s)
常见的还有
client_body_timeout 10; #设置客户端请求主体读取超时时间
client_header_timeout 10; #设置客户端请求头读取超时时间
更多参考:https://blog.csdn.net/qq_29663071/article/details/80759098
⭐️ 此文件仅配置了连接活有效时间,但不够完善。
建议增设
client_body_timeout 10; #设置客户端请求主体读取超时时间
client_header_timeout 10; #设置客户端请求头读取超时时间
这样配置不仅可以有效防止DDOS攻击,还可以提高服务器性能,降低客户端的等待时间。同样可以存在多个模块下。
❗️ 这样配置不仅可以有效防止DDOS攻击,还可以提高服务器性能,降低客户端的等待时间。
3️⃣ 目录访问ip限制
❗️ 配置文件nginx.conf不存在相关配置,建议在 sever模块localtion进行配置。这样可以防止攻击者对敏感目录进行访问造成信息泄漏。
参考配置:某个目录下允许某部分C段访问,然后拒绝其他任何来源。
location / {
allow 10.1.1.0/16; #允许 IP
deny all; #拒绝其他所有来源
}
这样做可以有效避免目录被恶意ip访问,可以将大部分攻击者绝之门外!
4️⃣ 错误页面重定向
⭐️ 语法格式:
名称 状态吗 跳转的页面
当访问出现 500 502 503等状态码的时候,页面会跳转到 50x.html
配置 location 是为了找到自定义的错误页面。
❗️ 正确的配置错误页面重定向,可以有效避免服务器信息泄漏。
5️⃣ 禁止目录浏览
就是常说的目录遍历。
❗️ 配置文件nginx.conf不包含相关配置,系统服务可能存在任意目录浏览问题。建议修改文件NGINX_HOME/conf/nginx.conf 在 http 模块下添加或者修改为 autoindex off。这点有点类似php框架调试。
6️⃣ 是否隐藏版本信息
❗️ nginx.conf 配置文件不存在相关配置,建议在http模块下 增设server_tokens off; 这样可以防止版本号信息泄漏。主要表现在http传输过程中。
7️⃣ 限制目录执行权限
❗️ Nginx.conf未配置相关配置,攻击者可能在系统目录执行文件,获取系统权限。建议在server模块下增改
#示例:去掉单个目录的php执行权限
location ~/example/.*.(php|php5)?${
deny all;
}
#示例去掉多个目录的php执行权限
location ~/(example|upload)/.*\.(php|php5)?${
deny all;
}
这个常见于攻击者搭配低版本解析漏洞来攻击服务器。
当然上述问题不是绝对的,可能网站存在代码级waf 或者其他设备安全策略,仅供参考学习。
Nginx的配置安全问题还有很多,本身是比较安全的,漏洞多是程序员配置不当导致的。例如任意文件读取 CRLF SSRF等等。
可见参考:
https://www.leavesongs.com/PENETRATION/nginx-insecure-configuration.html
https://www.freebuf.com/articles/web/149761.html