隐藏版本号
由于某些人会根据网页服务的版本号了解这个版本的比较重要的漏洞,然后通过这些漏洞攻击服务器所以需要隐藏版本号。
隐藏版本号有两种方式:
1、在配置文件里把版本号开启变为关闭,然后重载服务
2、对源码文件进行修改,然后重新编译
没有隐藏版本号前可以看到使用的是什么web服务以及版本号
1、修改配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #新添加这一段,表示关闭版本号
systemctl restart nginx
访问网页,可以发现只显示用什么web服务不显示版本号
虽然隐藏了版本号,但是使用了什么web服务任然能看出来,而nginx常用的版本就那么几个所以还是容易受到攻击,所以需要对源码进行修改然后编译。
2、修改源码并编译
vim /opt/nginx-1.15.9/src/core/nginx.h
#define nginx_version 1015009
#define NGINX_VERSION "1.0.0" #显示版本号
#define NGINX_VER "看什么看/" NGINX_VERSION #显示是什么服务
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
systemctl restart nginx
可以发现变成乱码了,因为./configure没设置中文字符集
修改用户和组
如果./configure时没有指定用户指定组,那么这个服务默认使用nobody用户,虽然nobody用户的权限较低,但是仍然有一定的隐患,可以通过在配置文件中修改用户和组以提升安全性
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #配置文件第一行改一下属主属组
worker_processes 1;
chown nginx:nginx /usr/local/nginx
最后查看一下nginx服务的属主是否为nginx
设置缓存时间
设置缓存时间通常用于静态网页,为了减少服务器压力而设置。
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
}
location ~ \.(gif|jpg|jepg|bmp|ico)$ { #在文件中新添加这一段
root html;
expires 1d; #设置1天的缓存时间
}
vim /usr/local/nginx/html/index.html #在14、15行添加
<h1>Welcome to nginx!</h1>
<img src="xxx.jpg"/>
然后再/usr/local/nginx/html目录下添加xxx.jpg图片
systemctl restart nginx
最后再验证一下
日志分割
vim /opt/fenge.sh
#!/bin/bash
#Filename:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d") #对前一天的日志进行分割
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d
kill -HUP $(cat $pid_path) #-QUIT 结束进程 -HUP 平滑重启
find $logs_path -mtime +30 | xargs rm -rf
最后给文件可执行权限,然后执行,出现了这个日志文件
date -s 20210625 #修改系统时间
./rzfg.sh
再执行一次,发现多出一个日志文件
连接超时
vim /usr/local/nginx/conf/nginx.conf #进入配置文件,在31行添加
keepalive_timeout 100; #超时时间100s
client_header_timeout 100; #请求头的超时时间100s
client_body_timeout 100; #请求体的超时时间100s
systemctl restart nginx
之后当连接超过100s就会自动断开,再点开网页时会自动刷新一下
更改进程
增加进程数可以减少系统的消耗,提升了服务的速度
vim /usr/local/nginx/conf/nginx.conf #进入配置文件
worker_processes 4; #在开头添加
worker_cpu_affinity 0001 0010 0100 1000;
这里表示对4个cpu进行操作,每个cpu对应一个进程,1表示用这个cpu进行工作,0表示不启用这个cpu。
图片压缩
vim /usr/local/nginx/conf/nginx.conf #在37行写入
gzip on; #开启gzip压缩功能
gzip_min_length 1k; #超过1k就进行压缩
gzip_buffers 4 16k; #压缩的缓存大小为4个16k缓冲区大小
gzip_http_version 1.1; #压缩版本
gzip_comp_level 6; #压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快(建议5-6)
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; #支持前端缓存服务器存储压缩页面
重新访问网页,可以看到出现gzip压缩情况
盗链与防盗链
盗链
首先先设置盗链端,在另一个linux的ningx主页文件中设置
vim /usr/local/nginx/html/index.html
<h1>okey dokey!</h1>
<img src="http://192.168.214.215/xxx.jpg"/> #图片指向要盗取的ip地址
重启服务后
访问盗链端可以看到被盗端的图片
防盗链
[root@localhost conf]# vim nginx.conf #修改server端主机的nginx 配置文件
location ~*\.(jpg|gif|swf)$ { #对location (jpg那一端进行修改)
valid_referers none blocked www.shiki.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.shiki.com/error.png; #注意一点,error图片的格式必须不在上面的匹配格式中,否则图片会加载不出来
}
}
valid_referers:设置信任的网站,即能引用相应图片的网站(白名单)
none:浏览器中 Referer为空的情况,就是直接在浏览器访问图片
blocked:referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或者https://开头
后面的网址或者域名:referer中包含相关字符串的网址
if语句:如果链接的来源域名不在 valid_referers所列出的列表中, $invalid_referer为1,则执行后面的操作
重启服务,最后验证一下