1. Linux系统优化
1.1 基础必备优化
关闭SElinux
Firewalld (CentOS7)
Iptables (CentOS6)
安全组 (阿里云)
添加普通用户,配置sudo,预防root密码忘记
1
tuboshu ALL=(ALL) NOPASSWD:ALL 或 tuboshu ALL=(ALL) NOPASSWD:/bin/su
hosts文件解析当前的主机名
锁定关键文件 chattr lsattr
- 基于文件系统的权限(系统隐藏权限)
- 给配置文件 +a 只能追加
- 给命令 +i 不能修改
系统字符集:
- 默认都是UTF-8
- 语言 en_US(推荐)
- 中文环境 zh_CN.UTF-8
调整用户登录提示信息 /etc/motd
清空 /etc/issue /etc/issue.net
1.2 基础服务优化
ssh 优化
1
2
3
4
5
6
7
8cat /etc/ssh/sshd_config
UseDNS no # 禁止IP解析为对应的域名
GSSAPIAuthentication no
Port 52113 # 自定义端口
PermitRootLogin no #是否准许root远程登录
PasswordAuthentication yes #是否开启密码登录
ListenAddress 10.0.0.7:52113 #ListenAddress 准许用户从哪个网卡连接 还可以同时指定端口
ListenAddress 172.16.1.7:22yum源:修改系统默认的yum源,增加epel源
时间同步:定时任务+ntpdate/chrony
调整文件描述符
每个进程可以打开的最大文件数量
1
2
3
4
5
6
7
8
9# 1. 临时
ulimit -n65535
# 2. 永久 /etc/security/limits.conf #重启生效
echo '* - nofile 65535 ' >>/etc/security/limits.conf
# 3. 或者写为两行:
soft nofile 65535
hard nofile 65535故障案例: 如果 ulimit 文件描述符设置过小 系统提示
1
2
3too many open files
-bash: start_pipeline: pgrp pipe: Too many open files
vim: error while loading shared libraries: libm.so.6: cannot open shared object file: Error 24
修改历史命令环境变量
命令 描述 TMOUT 超时时间 HISTSIZE 控制history记录条数 HISTFILESIZE 文件记录条数 HISTCONTROL 控制history是否记录用过的命令 PROMPT_COMMAND 下1个命令之前会运行环境变量里面的命令,常用语用户审计 time out 不进行任何操作 300秒自动退出用户
1
export TMOUT=300
HIST history
1
2export HISTFILE=1000 # history命令最多记录条数
export HISTFILESIZE=1000 # history 历史记录的文件里面最多记录条数清空命令历史记录
1
history -c
把当前的shell历史命令内存缓冲区的内容写入命令历史文件
1
history -w
控制history命令如何记录历史命令
1
exprot HISTCONTROL=ignorespace # 只要以空格开头的命令 history不记录
1.3 内核优化
优化文件 /etc/sysctl.conf
参数生效命令
1
sysctl -p
内核参数存放文件 /proc/sys
内核参数及含义 | 含义 | 默认 |
---|---|---|
net.ipv4.ip_forward=1 | 是否开启内核转发 | 0 |
net.ipv4.icmp_echo_ignore_all=1 | 是否准许被ping | 0 |
net.ipv4.tcp_tw_recycle=1 | 开启tcp回收功能 | 0 |
net.ipv4.tcp_tw_reuse=1 | 开启tcp复用(重复利用) | 0 |
vm.swapiness=0 | 设置系统是否优先使用物理内存,数值越小越优先使用物理内存 | 30(C7) |
2. 服务优化之nginx
2.1 编译安装nginx
- 正式安装前的准备
1 | # 卸载之前yum安装的nginx |
修改源码文件,伪造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
修改方法:
1
2
3
4
5
6
7
8
9
10
11
12
13# src/core/nginx.h 13 14 22行
[root@web03 ~]# sed -n '13,14p;22p' src/core/nginx.h
#define NGINX_VERSION "8.5.50"
#define NGINX_VER "Tomcat/" NGINX_VERSION
#define NGINX_VAR "Tomcat"
# /src/http/ngx_http_header_filter_module.c 49行
[root@web03 ~]# grep -n Tomcat src/http/ngx_http_header_filter_module.c
49:static u_char ngx_http_server_string[] = "Server: Tomcat" CRLF;
# src/http/ngx_http_special_response.c 36行
[root@web03 ~]# grep -n Tomcat src/http/ngx_http_special_response.c
36:"<hr><center>Tomcat</center>" CRLF
开始编译安装nginx
编译安装三部曲
- ./configure #进行配置 configure脚本,生成makefile,配置完成后生成一个文件
- make #进行编辑(源代码(c语言)–>可以执行命令)
- make install # 创建目录,复制文件
具体操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36# 进行编译前的配置
./configure --prefix=/app/nginx-1.16.1 --user=nginx -- group=nginx --with-http_stub_status_module --with- http_ssl_module
# 进行编译
make
......
make[1]: Leaving directory '/app/tools/nginx-1.16.1' #出现此内容表示make成功
# 安装
make install
# 创建软链接
ln -s /app/nginx-1.16.1 /app/nginx
# 检查是否安装成功
[root@web03 ~]# /app/nginx/sbin/nginx -V
nginx version: Tomcat/8.5.50
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/app/nginx-1.16.1 --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
# 创建/sbin软链接
ln -s /app/nginx/sbin/nginx /sbin
# 启动nginx
nginx
# 检查语法
nginx -t
# 重新读取配置文件,要求nginx在运行
nginx -s reload
# 关闭nginx
nginx -s stop
2.2 nginx安全优化
2.2.1 隐藏nginx版本信息优化
1 | # 增加server_tokens off |
2.2.2 修改nginx版本信息优化(上边编译安装前已经修改)
1 | # src/core/nginx.h 13 14 22行 |
2.2.3 修改nginx软件work_processes进程用户信息
1 | # 将nginx进程运行用户改为www |
2.2.4 优化nginx服务上传文件限制
1 | # 默认是1m,改为100m |
2.2.5 nginx图片及目录防盗链
1 | # 方法1:给所有图片、文档、视频加上水印 |
2.2.6 nginx站点目录及文件权限优化
1 | # 整体用户权限 root root file 644 dir 755 |
2.2.7 nginx防爬虫优化
- 爬虫: wget/curl 访问网站页面,下载或收集页面存放在磁盘或数据库中。
- 爬虫应用:
- 搜索引擎:定时搜索各种网站的火爆的页面及文章,缓存到搜索引擎数据库中,加速用户搜索速度体验。
- 数据收集分析:通过wget/curl下载静态资源,利用python书写爬虫下载动态资源。
- 灰色产业:批量创建用户来刷人气等。
- 爬虫利弊
- 我们希望搜索引擎爬虫爬取网站数据,让网站更加靠前,容易被用户搜索到
- 我们不希望恶意爬取
- 常见预防方式:
- 君子协议:robots.txt robot协议
- 利用http_user_agent屏蔽,访问我网站的时候不能是bot|spider
- 利用程序开发验证码,阻止进行爬虫
2.2.8 利用nginx限制请求访问
限制http请求方法
GET 下载
POST 上传
HEAD 只查看响应头部
1
2
3
4
5
6location /xxxx {
if ( $method ~ "POST")
{
return 403;
}
}
2.2.9 nginx监牢模式
- nginx通过普通用户运行时,nginx不能使用默认的80端口
- 1-1024端口是特权端口,只能root使用
2.2.10 控制nginx并发连接数
- limit_conn_zone # conn connection 连接数
2.2.11 控制客户端请求nginx的速率
- limit_req_zone # req request 请求速率
2.2.12 nginx错误页面的优雅显示
由开发人员制作普通用户能够看懂的错误页面,运维人员进行指向设置
1
2error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
2.3 nginx性能优化
2.3.1 tsar 安装部署及测试
tsar属于sar增强版本,由taobao二次开发
tsar可以查看各种信息及服务
安装部署:
1
2
3
4
5
6
7# 解压后的目录里有makefile,所以不用再制作
# make
# make install
[root@web03 ~]# which tsar
/usr/bin/tsar常用参数:
参数 描述 -i , –interval 时间 更新间隔 -l , –live 持续监控 –cpu cpu –mem 内存 –load 负载 –spec/-s 选择要显示的字段(列) 使用示例
1 | # 检测cpu |
2.3.2 tsar监控nginx
准备工作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35# 需要在nginx开启监控功能
[root@web03 ~]# vim /app/nginx/conf/nginx.conf
......
http {
......
server {
......
location /nginx_status {
stub_status;
access_log off; # 暂时关掉,不然tsar监控时会产生大量日志
allow 172.16.1.0/24;
allow 127.0.0.1;
deny all;
......
}
.....
}
......
}
# 上述配置也可直接在/etc/profile中添加
export NGX_TSAR_HOST=172.16.1.xxx
export NGX_TSAR_PORT=8080
export NGX_TSAR_URI=/nginx_status
# 检测
[root@web03 ~]# curl 172.16.1.9/nginx_status
Active connections: 1
server accepts handled requests
139 139 139
Reading: 0 Writing: 1 Waiting: 0
# 开启对nginx监控的配置
[root@web03 ~]# grep mod_nginx /etc/tsar/tsar.conf
mod_nginx on监控nginx
1
2
3
4
5# 全部参数监控
[root@web03 ~]# tsar --nginx --live -i 1
# 选择部分参数监控
[root@web03 ~]# tsar --nginx --live -i 1 -s time,qps,active压力测试命令
1
[root@web03 ~]# ab -n 9999999 -c 2 http://172.16.1.9/ # -c 后接cpu核心数量
2.3.3 修改nginx软件work_processes进程数量
1 | # 修改配置文件 |
2.3.4 调整cpu亲和力
- 优化nginx服务进程均匀分配到不同CPU进行处理,让所cpu核心都有事情做,添加到main区域
1 | # 2个核心 |
2.3.5 调整事务模型
- 使用epoll模型,异步模型
2.3.6 优化nginx单进程客户端连接数
1 | # /app/nginx/conf/nginx.conf |
2.3.7 优化nginx服务进程打开文件数
1 | [root@web03 ~]# head /app/nginx/conf/nginx.conf |
2.3.8 使用高效传输模式
1 | # /app/nginx/conf/nginx.conf |
2.3.9 gzip压缩,放在http{ }中
1 | gzip on; |
2.3.10 expires缓存,放在server中
1 | location ~* \.(html|js|css|jpg|jpeg)$ { |
2.3.11 以上优化之后nginx.conf文件展现
1 | [root@oldboyedu ~]# egrep -v '#|^$' /app/nginx/conf/nginx.conf |
3. 服务优化之php优化
3.1 安全相关 php.ini
1 | safe_mode = off |
3.2 性能相关 php.ini
1 | #可修改参数 |
4. Linux安全优化
4.1 站点目录权限 /app/blog
1 | #网站站点目录 整体配置 |
4.2 上传之后无法运行
1 | #nfs挂载参数 存储挂载 |
4.3 只让网站上传指定类型的文件
1 | # 网站代码中进行控制的, 图片格式错误,请使用jpg/jpeg/png/gif文件 |
4.4 检查出网站文件被修改
- md5sum 定时检查;
- 定期给站点目录制作指纹(代码上线),然后定时检查 不一致报警;
- 做指纹的时候 排除临时文件 和 缓存文件;
- fifind /app/blog -type f |egrep -v ‘cache|tmp’ |xargs md5sum >/root/md5 #以weordpress为例
- 检查对比 我们每个人的文件/软件 是否一致
- 检查文件内容是否变化
- 修改时间 (touch)
4.5 rpm -aV 检查yum、rpm软件安装是否有差异
1 | #适用于 yum或rpm安装的软件 |
4.6 clamav 安全软件
1 | #clamav 软件 clamav-data 病毒库 |