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日志文件等;