Nginx的安全加固
(1)隐藏nginx版本信息,防止页面报错暴露nginx版本
在配置文件中加入
http {
server_tokens off;
}
(2)以专门的用户帐号和组运行nginx
根据需要为nginx创建用户、组
创建nginx组:groupadd nginx
创建nginx用户并加入nginx组:useradd nginx –g nginx
在配置文件中加入允许运行nginx服务器的用户和用户组

(3)严格控制nginx主目录的访问权限,非超级用户不能修改该目录中的内容
- 1一般为/etc/nginx目录,默认情况下属主为root:root,其它用户不能修改文件,默认一般符合要求

- 2严格设置配置文件和日志文件的权限,防止未授权访问。
chmod 600 /etc/nginx/nginx.conf”设置配置文件为属主可读写,其他用户无权限
未改之前:所有用户均可读

更改之后:

- 3使用命令”chmod 644 /var/log/nginx/*.log”设置日志文件为属主可读写,其他用户只读权限。
未更改之前:所有人可读

此情况是正常的,不能让除属主之外的人拥有更改权限
(4)设备应配置日志功能,对运行错误、用户访问等进行记录,记录内容包括时间,用户使用的 IP 地址等内容


(5)禁止访问外部文件
通过Nginx配置,禁止访问特定后缀的资源
location ~ .*.(rar|zip|gz|tar|7z|xz|bz2|bak)?$
{
return 403;
}
(6)错误信息重定向

(7)禁止目录列出:目录列出会导致明显信息泄露或下载
在配置文件中http{}中如果autoindex on那么当访问目录没有访问页面时,会将这个目录的内容列出

所以要将antoindex关闭autoindex off,就可以保护信息不被泄露

不过,默认配置文件是不会写autoindex的,也就是默认就禁止目录列出了
(8)拒绝服务防范:合理设置 session 时间,防止拒绝服务攻击
- 1在http{}中写入session保持时间

- 2设置客户端请求读取超时时间
http {
proxy_connect_timeout 10s;
proxy_read_timeout 30s;
}
proxy_connect_timeout设置为10秒, proxy_read_timeout设置为30秒。当客户端请求在这些时间段内没有得到响应时,将会超时。
- 3设置客户端连接保持活动的超时时间
http {
client_body_timeout 10s;
client_header_timeout 10s;
}
client_body_timeout:该参数设置客户端向Nginx发送请求正文的超时时间。如果在该时间内客户端没有发送数据,Nginx将关闭连接。
client_header_timeout:该参数设置客户端向Nginx发送请求头的超时时间。如果在该时间内客户端没有发送请求头,Nginx将关闭连接。
(9)限制HTTP请求方法
if ($request_method !~ ^(GET|POST)$ ) {
return 444;
}
$request_method能获取到请求时所使用的method,应该配置只使用GET/POST方法访问,其他的method返回444
(10)限制IP访问
location / {
deny 192.168.1.1; #拒绝IP
allow 192.168.1.0/24; #允许IP
allow 10.1.1.0/16; #允许IP
deny all; #拒绝其他所有IP
}
(11)删除缺省安装的无用文件
可根据实际情况删除,一般是 /var/www/html /var/www/cgi-bin 默认就是空的
(12)监听地址绑定
服务器有多个 IP 地址时,只监听提供服务的 IP 地址

默认设置是Listen 80监听所有地址,如果服务器只有一个IP地址可不做该项设置,如果有多个IP可以按照需要设
(13)关闭 TRACE功能
关闭TRACE,防止TRACE方法被访问者恶意利用
server {
…
location / {
...
# 禁用 TRACE 方法
if ($request_method = TRACE) {
return 444;
}
}
}