您的位置:首页 > 运维架构 > Nginx

浅谈中间件安全———Nginx

2019-06-25 09:51 274 查看

这篇文章主要总结一些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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: