🙊
🙊
🙊
🙊
关于作者
搜索文档…
⌃K

Nginx 服务安全加固

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

一、 普通用户启动服务

名称:以非特权用户启动服务
实施目的:以特定用户运行服务,不要使用系统管理员帐号启动Nginx。
问题影响:越权使用造成非法攻击
系统当前状态:使用系统命令或使工具查看Nginx进程是否使用管理员或使特权用户启动的。
User nginx;
Worker_processes 8;
实施步骤:一般情况下,Nginx是由Root来安装和运行的。如果Nginx:worker进程具有Root用户特权,那么它将给系统的安全构成很大的威胁,应确保Nginx进程以最可能低的权限用户来运行。
通过修改nginx.conf 文件中的下列选项,以nginx用户运行worker达到相对安全的目的。
  1. 1.
    备份 nginx.conf文件
  2. 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 策略。