成功最有效的方法就是向有经验的人学习!

Nginx安全优化

对于web站点来说安全优化无非以下几点:

1、远程连接到服务器执行命令

2、网站页面被修改或被上传木马文件

临时存储目录,如 /tmp,/var/tmp和/dev/shm等,往往是恶意程序袭击的目标。黑客们在执行攻击的时候,往往将可执行程序放置于该目录之下。恶意用户一般也利用这些临时存储目录执行自己的恶意程序,从而发起对线上系统的破解和攻击。

由于/tmp目录时系统运行必备的目录,那么怎么增强该目录的安全性,尽可能减少系统潜在危险呢?

例如博客站点

1)站点目录权限设置

f644  d755  root root

对于上传目录可以设置为:

f644 d755 www www

2)使上传的文件无法运行

我们可以在挂载时添加参数:`nodev nosuid noexec`

1.挂载时为/tmp分区添加nodev/nosuid/noexec选项

编辑/etc/fstab文件

 

vi /etc/fstab

1 vi /etc/fstab

找到/tmp挂载目录的相关配置

例如chris hill当前系统的配置如下

UUID=9abc328b9-3d22-4224-acd6-c48d7b4d3aa4 /tmp   ext4    defaults      1 2

nodev,nosuid,noexec选项增加到第四列defaults参数的后面

UUID=9abc328b9-3d22-4224-acd6-c48d7b4d3aa4 /tmp   ext4   defaults,nodev,nosuid,noexec   1 2

2.挂载时为/dev/shm文件系统添加nodev/nosuid/noexec选项

与第1步的/tmp类似,编辑/etc/fstab

tmpfs  /dev/shm  tmpfs  defaults,nodev,nosuid,noexec 0 0

3.有关/var/tmp设置

有些系统需要使用到/var/tmp目录。

建议设置/var/tmp和/tmp目录同步。

编辑/etc/fatab文件

/tmp /var/tmp none rw,noexec,nosuid,nodev,bind 0 0

4.无需重启系统,使配置生效

设置 /var/tmp 映射到 /tmp 目

 

mount -o rw,noexec,nosuid,nodev,bind /tmp/ /var/tmp/

1 mount -o rw,noexec,nosuid,nodev,bind /tmp/ /var/tmp/

重新挂载/tmp目录

 

mount -o remount,noexec,nosuid,nodev /tmp

1 mount -o remount,noexec,nosuid,nodev /tmp

重新挂载/dev/shm设备

 

mount -o remount,noexec,nosuid,nodev /dev/shm

1 mount -o remount,noexec,nosuid,nodev /dev/shm

 

5.查看结果

 

mount

mount | egrep –color -w ‘^(tmpfs|/tmp)|/tmp’

1

2

mount

mount | egrep –color -w ‘^(tmpfs|/tmp)|/tmp’

 

Tips

你也可以创建一个类似于/tmpfile/tmpfile.bin的文件,通过挂载该文件作为应用程序运行的临时存储空间。

例如

/tmpfile/tmpfile.bin  /tmp ext4  rw,noexec,nosuid,nodev,bind  0 0

 

3)只让网站上传指定类型的文件

location  /uploads  {
	if ( $request_uri !~ \.(zip|jpg)$  ) {
	 return 403; 	
	}
}

以下是错误的写法,在nginx中且不可这样使用匹配语句

location !~* .(zip|jpg)$ {   #报错 不支持 
return 403 ;
}
4)检查出网站文件是否被修改
每次代码更新后创建一个md5验证文件
可以定时对比并发送结果。
find /code/wordpress/   -type f |grep -v '/wp-content/uploads' |xargs md5sum

5)使用rpm -aV检查所有的安装包一致性

rpm命令我们经常使用,但是这个”-V”参数我们却很少使用,今天碰巧遇到,这里坐下总结。rpm -V用来检查已安装rpm包的完整性。所谓“完整性”,这里就是指安装rpm包产生的所有文件和原始rpm包中的信息是否一致。如果完全一致,则不做任何输出,只有发现有不正确的文件时才会输出。rpm -V的输出格式如下:

SM5DLUGT c

其中每当发现一个不一致的文件就会有一行类似的输出,一下是每个字符的含义:

S:表示对应文件的大小(Size)不一致;

M:表示对于文件的mode不一致;

5:表示对应文件的MD5不一致;

D:表示文件的major和minor号不一致;

L:表示文件的符号连接内容不一致;

U:表示文件的owner不一致;

G:表示文件的group不一致;

T:表示文件的修改时间不一致;

c:只有文件是一个配置文件时才会有此标志,可以用这种方法快速定位rpm包的配置文件安装位置。(不是说只有文件不一致情况下才会显示吗?没错,但是配置文件通常会被修改,所以通常都会被检测出不一致)

file:检测出不一致的文件安装路径;

当然一般不可能一个文件的所有以上属性都不一致,所以检测通过的属性就会用一个“.”表示。

如:

如图可以看到/etc/sysconfig/authconfig这个文件已经和安装时不一致了,当然这个是一配置文件,是经过我们人为修改过的。

这里表达的意思是文件大小、修改时间和md5都发生了变化,同时这是一个配置文件也表明了,小写的c就表示是配置文件。

6)也可以使用一些杀毒软件,如clamav等

7)可以考虑使用waf应用防火墙

可以参考

 

Linux下的木马常常是恶意者通过Web的上传目录的方式来上传木马到Linux服务器的,可根据从恶意者访问网站开始–>Linux系统–>HTTP服务–>中间件服务–>程序代码–>DB–>存储,层层设卡防护。

从用户访问角度来说

  1. 开发程序代码对上传文件类型做限制,例如不能上传.php程序(JS及后端代码控制)。
  2. 对上传的内容(包括文本和文件)检测,检测方式可通过程序、Web服务层(中间件层)、数据库等层面控制。
  3. 控制上传目录的权限以及非站点目录的权限(Linux文件目录权限+Web服务层控制)。
  4.  传上木马文件后的访问和执行控制(Web服务层+文件系统存储层)。
  5. 对重要配置文件、命令和WEB配置等文件做md5指纹及备份。
  6. 安装杀毒软件clamav等,定期监测查杀木马。
  7.  配置服务器防火墙及入侵检测服务。
  8. 监控服务器文件变更、进程变化、端口变化、重要安全日志并及时报警。

从内部管理人员角度:防止被提权

  1. ***管理服务器或Web化管理服务器。
  2. ssh监听内网。
  3. 采用跳板机、操作审计。
  4. sudo集权管理、锁定关键文件。
  5. 站点目录、上传目录权限属组控制。
  6. 做系统及站点文件备份指纹监控报警。
  7. 动态口令认证。

web优化一览

隐藏 nginx 版本信息优化  修改 nginx 配置文件实现优化

server_tokens off; 

修改 nginx 版本信息优化  修改 nginx 源码配置文件

nginx-xxx/src/core/nginx.h

nginx-xxx/src/http/ngx_http_header_filter_module.c

nginx-xxx/src/http/ngx_http_special_response.c 

修改 nginx 软件 work_processes 进程用户信息  修改 nginx 默认用户,利用配置文件参数实现

修改 nginx 默认用户,采用编译参数方式实现

user www www; 

修改 nginx 软件 work_processes 进程数量  woker_processes 8

一般和 CPU 的核数设置一致;高并发可以和 CPU 核数 2 倍 

优化 nginx 服务进程均匀分配到不同 CPU 进行处理  利用 worker_cpu_affinity 进行优化(cpu 亲和力) 

4 颗 CPU 优化配置参数为 0001 0010 0100 1000

2 颗 CPU 优化配置参数为 0101 1010 

worker_cpu_affinity 0101 1010; 

worker_cpu_affinity auto; 

优化 nginx 事件处理模型  利用 use epoll 参数修改事件模型为 epoll 模型

事件模型指定配置参数放置在 event 区块中 

优化 nginx 单进程客户端连接数  利用 worker_connections 连接参数进行调整 

用户最大并发连接数=worker 进程数*worker 连接数 

优化 nginx 服务进程打开文件数  利用 worker_rlimit_nofile 参数进行调整(65535) 
优化 nginx 服务数据高效传输模式  利用 sendfile on 开启高效传输模式 

tcp_nopush on 表示将数据积攒到一定的量再进行传输

tcp_nodelay on 表示将数据信息进行快速传输 

优化 nginx 服务超时信息  keepalive_timeout 优化客户端访问 nginx 服务端超时时间 

client_header_timeout 优化服务端读请求头超时时间 

client_body_timeout 优化两个请求主体发送间隔超时时间 

send_timeout 优化两个响应信息的间隔超时时间 

优化 nginx 服务上传文件限制  client_max_body_size 设置客户端请求报文主体最大尺寸 
优化 nginx 服务与 FastCGI 连接缓存与缓冲信息  优化利用 FastCGI 与 PHP 连接缓冲信息

优化利用 FastCGI 与 PHP 连接缓存信息 

配置 Nginx gzip 压缩实现性能 优化  利用 gzip 命令进行对数据信息压缩优化 从而节省网站带宽资源 
配置 Nginx expires 实现让客户 端缓存数据  利用 location 匹配相应要缓存的信息,利用 expires 参数结 合时间信息进行缓存。 
配置 Nginx 服务相关日志操作  进行日志文件轮询切割 

部分日志内容不进行记录,节省系统磁盘空间 

对日志文件进行授权

#logrotate 日志切割工具 + 系统定时任务 

Nginx 站点目录及文件 URL 访问控制  在动态解析配置前面,设置限制特定目录下扩展名文件解析 

限制指定目录 uri 信息访问,利用禁止策略和返回错误状态码

限制用户访问,利用白名单和黑名单方式 

禁止非法域名解析访问企业网站 

Nginx 图片及目录防盗链解决方案  根据 HTTP referer 实现防盗链 

根据 cookie 防盗链 

通过加密变换访问路径实现防盗链 

在产品设计上解决盗链方案 

Nginx 错误页面的优雅显示  对错误代码实行本地页面跳转 

优雅显示错误页面放到本地单独目录下,进行优雅显示 

改变状态码为新的状态码,并显示指定的文件内容 

错误状态码 URL 重定向 

将错误状态码重定向到一个 location 

Nginx 站点目录文件及目录权限优 化  只将用户上传数据的目录设置为 755,用户和组使用 nginx 其余目录和文件为 755/644,用户和组使用 root 
Nginx 防爬虫优化  利用 robots.txt 机器人协议防止爬虫

利用$http_user_agent 变量阻止爬虫代理访问(2 种方法) 

利用程序开发验证码信息,阻止进行爬虫 

利用 Nginx 限制请求访问  利用$request_method 限制请求方法 
Nginx 网站 CDN 加速优化 
Nginx 程序架构优化  利用程序或反向代理实现架构访问分离解耦优化 
使用普通用户启动 Nginx(nginx 监牢模式)  利用 nginx –c 参数启动 nginx 多实例,使 master 进程让普 

通用户管理普通用户无法使用 1-1024 端口 

控制 nginx 并发连接数  利用 limit_conn_zone 参数和$binary_remote_addr 变量限 制 nginx 单 IP 地址并发连接数

利用 limit_conn_zone 参数和$server_name r 变量限制 nginx 虚拟主机总连接数 

控制客户端请求 Nginx 的速率 

gzip 配置 

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

#gzip_http_version 1.0;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css application/xml text/javascript  application/x-httpd-php ; 

RESPONSES WITH THE “TEXT/HTML” TYPE ARE ALWAYS COMPRESSED. GZIP 默认压缩 TEXT/HTML 类型,不用指定,指定会报错。 

ginx: [warn] duplicate MIME type “text/html” in /app/nginx-1.14.0//conf/nginx.conf:13 

expires 设置 

location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {

        root /var/www/img/; 

          expires 30d; 

} 

赞(0) 打赏
未经允许不得转载:陈桂林博客 » Nginx安全优化
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册