Title:Linux-nginx安全配置
nginx 测试版本:nginx 1.x
0x00 Nginx简介
Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件代理服务器。其特点是占用内存少,并发能力强。
Nginx漏洞查询:http://nginx.org/en/security_advisories.html
0x01 Nginx 漏洞
1. 文件类型错误解析漏洞
成因:由配置导致的安全问题
漏洞危害:利用该漏洞,攻击者可将任意文件类型作为PHP文件解析,通常是利用该漏洞获取webshell。
漏洞利用方式:假设某服务器存在该漏洞,攻击者可通过上传包含PHP网马的图片来获取网站的webshell。
安全加固方案:
(1)方案一:修改php.ini文件,将cgi.fix_pathinfo 的值设置为0;(该方法简单粗暴,可能会造成系统不稳定,故此方案不可取)
(2)方案二:在nginx配置文件中添加以下代码:
if( $fastcgi_script_name ~ \..*\/.*php){
return 403;
}
注:新的 php-fpm 已经关闭了 cgi.fix_pathinfo参数
2. Nginx配置错误导致目录遍历漏洞
成因:由配置导致的安全问题
漏洞利用方式:
错误配置:
location /ceshi {
alias html/ceshi/;
autoindex on;
}
正确配置(相对):
location /ceshi {
alias html/ceshi;
autoindex on;
}
注:nginx默认是不允许列出整个目录的,最好的方法是禁用autoindex,即autoindex off或没有autoindex配置。
0x02. nginx 安全加固方案
1. 版本选择
生产环境中,优先选择最新的稳定版本;测试环境测试通过后再进行上线;
安装过程中,建议采用自定义安装路径,避免默认路径导致被黑客或自动化安全扫描工具猜解;
2. 修改/隐藏 Banner信息
以源码方式安装nginx时,可通过修改 src/core/nginx.h 中的信息达到修改或隐藏Banner信息的目的。
#define NGINX_VERSION "XXXX"
#define NGINX_VER "XXXX"
3. 关闭服务器标记
server_tokens off
4. 禁用autoindex
autoindex off
5. 禁用非必要方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 404; }
6.设置自定义缓存缓解缓冲区溢出攻击(数值根据实际情况设置)
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
7. 缓解DOS攻击
【timeout设低阀值】
keepalive_timeout 10;
client_header_timeout 3m;
client_body_timeout 10;
send_timeout 10;
【限制用户连接数】
limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;
【防火墙进行设置】
8. 日志
修改日志默认保存路径,规范日志格式,进行日志切割。可采用elk等进行大数据日志采集,进行日志采集,通常用于业务日志分析及安全事件溯源分析。
9. nginx权限设置
尽量以普通用户权限运行nginx服务,避免当服务被攻击沦陷后,黑客直接拿到root权限。
网站目录权限设置遵循的原则:rwx三者的权限要明确。上传目录可数据库目录一般需分配w权限,不用分配x权限;其他目录一般分配r权限即可。
10.配置nginx.conf禁止访问的文件夹,比如后台;配置nginx.conf禁止访问的文件类型,比如一些txt日志文件等;