对于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中且不可这样使用匹配语句
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–>存储,层层设卡防护。
从用户访问角度来说
- 开发程序代码对上传文件类型做限制,例如不能上传.php程序(JS及后端代码控制)。
- 对上传的内容(包括文本和文件)检测,检测方式可通过程序、Web服务层(中间件层)、数据库等层面控制。
- 控制上传目录的权限以及非站点目录的权限(Linux文件目录权限+Web服务层控制)。
- 传上木马文件后的访问和执行控制(Web服务层+文件系统存储层)。
- 对重要配置文件、命令和WEB配置等文件做md5指纹及备份。
- 安装杀毒软件clamav等,定期监测查杀木马。
- 配置服务器防火墙及入侵检测服务。
- 监控服务器文件变更、进程变化、端口变化、重要安全日志并及时报警。
从内部管理人员角度:防止被提权
- ***管理服务器或Web化管理服务器。
- ssh监听内网。
- 采用跳板机、操作审计。
- sudo集权管理、锁定关键文件。
- 站点目录、上传目录权限属组控制。
- 做系统及站点文件备份指纹监控报警。
- 动态口令认证。
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;
}