Nginx 服务安全加固

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

一、 普通用户启动服务

名称:以非特权用户启动服务

实施目的:以特定用户运行服务,不要使用系统管理员帐号启动Nginx。

问题影响:越权使用造成非法攻击

系统当前状态:使用系统命令或使工具查看Nginx进程是否使用管理员或使特权用户启动的。

User nginx;
Worker_processes 8;

实施步骤:一般情况下,Nginx是由Root来安装和运行的。如果Nginx:worker进程具有Root用户特权,那么它将给系统的安全构成很大的威胁,应确保Nginx进程以最可能低的权限用户来运行。

通过修改nginx.conf 文件中的下列选项,以nginx用户运行worker达到相对安全的目的。

  1. 备份 nginx.conf文件

  2. 取消nginx 用户对所有目录的的读取权限,然后添加对网站目录的读取权限

chmod o-r –R /
chmod o+r –R html/

3. 取消 nginx 对于/bin/sh 的执行权限

chmod 776 /bin/sh

4. 重启nginx

二、限定非法主机访问

名称:控制哪些主机能够访问服务器

实施目的:防止恶意攻击

问题影响:非法访问

系统当前状态:通过查看nginx.conf配置文件确定系统当前状态

实施步骤:在nginx配置文件中强制限定允许某个网段或者某个IP接入服务器。

location /
{
deny 192.168.1.1;
 allow 192.168.1.0/24;
 allow 10.1.1.0/16;
 deny all;
}

三、限定非法文件访问

名称:限定非法文件访问

实施目的:禁止nginx访问某类型的文件。

问题影响:非法访问,恶意攻击。

实施步骤:编辑nginx.conf配置文件

如,Nginx下禁止访问*.txt文件

location ~* \.(txt|doc)${
root /var/InfiNET/web /test;
deny all;
}
禁止下载以点开头的文件
location ~ /\..+ {
deny all;
}

四、限定非法目录访问

名称:限定非法目录访问

实施目的:禁止nginx访问Web目录之外的任何文件。的IP地址等内容。

问题影响:非法访问,恶意攻击。

实施步骤:

location ~ ^/(WEB-INF)/
{deny all;
}

备注:

1、判定条件

无法访问Web目录之外的文件。

2、检测操作

访问服务器上不属于Web目录的一个文件,结果应无法显示。

五、修改默认服务端口

名称:更改默认端口

实施目的:更改nginx服务器默认端口,防止非法访问。

问题影响:恶意攻击。

实施步骤:

(1)修改nginx.conf配置文件,更改默认端口到6666。

server{
listen 6666 ;
server_namelocalhost;

(2)重启Nginx服务

备注:

1、判定条件

使用 6666 端口页面成功

2、检测操作

登陆http://ip:6666

六、隐藏服务器版本号

名称:隐藏服务器版本号

实施目的:隐藏服务器版本号,防备Nginx的版本漏洞被扫描到并利用

问题影响:恶意攻击。

实施步骤:

(1)修改 nginx.conf 配置文件,增加

server_tokens off http {
server_tokens off;

(2)重启 Nginx 服务

备注:访问一个不存在的页面,错误页面404 NotFound 中不显示nginx版本号

八、控制缓冲区溢出攻击

名称:控制缓冲区溢出攻击

实施目的:控制缓冲区大小,防备溢出攻击

问题影响:恶意攻击。

实施步骤:

1、参考配置操作

(1)修改 nginx.conf 配置文件,修改缓冲区大小

## Start: Size Limits & Buffer Overflows ## client_body_buffer_size1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;

## END: Size Limits & Buffer Overflows ##

(2)重启 Nginx 服务

九、控制并发连接数

名称:控制并发连接数

实施目的:控制并发连接数,防备Ddos攻击

问题影响:恶意攻击。

实施步骤:

(1)修改 nginx.conf 配置文件,修改单个 IP 的并发连接数大小

### 1m can handle 32000 sessions limit_zone slimits $binary_remote_addr 5m; limit_conn slimits 64;

上面表示限制每个远程 IP地址的客户端同时打开连接不能超过64个。

(2)重启 Nginx 服务

十、限制可用的请求方法

名称:限制可用的请求方法

实施目的:限制可用的请求方法,防备利用应用漏洞攻击

问题影响:恶意攻击。

实施步骤:

(1)下面的指令将过滤只允许 GET,HEAD 和 POST 方法:

## Only allow these request methods ##
if($request_method !~ ^(GET|HEAD|POST)$ ) {
return444;
}

(2)重启 Nginx 服务

十一、漏洞补丁

名称:补丁修复

实施目的:升级Nginx修复漏洞

问题影响:容易引起恶意攻击。

系统当前状态:使用nginx -V查看版本。

实施步骤:Nginx 官网 查看公开的Nginx安全漏洞。

备注:升级补丁的风险极高,如当前版本没有漏洞不建议升级

十一、操作系统配置

名称:操作系统配置

实施目的:配置操作系统保护Web服务器

问题影响:控制攻击危害

系统当前状态:查看防火墙、用户权限以及Selinux配置

实施步骤:

1、Nginx以用户nginx运 行 , 但是根目录(/nginx或者/usr/local/ nginx/html)不应该设置属于用户 nginx或对用户nginx可写。

2、配置操作系统防火墙限制,下面的例子中只允许 user 用户在外面使用80连接,如果某个IP在60秒尝试连接到80端口的次数超过了15, iptables将会丢掉来自它的入站连接。

iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED-j ACCEPT
iptables -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –seconds 60  –hitcount 15 -j DROP service iptables save

3、配置SELinux策略加固Nginx ,从项目主页下载 SELinux策略包并安装,用于强化 Linux 服务器上的 nginx 网络服务器的针对性 SELinux 策略。

最后更新于