Nginx基础安全前置准备
安装规范与最小化部署
-
官方源安装:拒绝第三方编译包,优先Nginx官方YUM/APT源,避免内置恶意模块;生产环境禁用debug版本,减少信息泄露。
-
最小化模块编译:仅启用业务必需模块(如http_ssl、http_gzip),禁用autoindex、status等非必要模块,降低攻击面。
-
专用运行用户:禁止root启动Nginx,新建nginx专属用户(禁止登录、无家目录),配置文件、日志目录权限严格管控。
bash
# 新建nginx专用用户
useradd -r -s /sbin/nologin -M nginx
# 目录权限规范
chown -R nginx:nginx /var/log/nginx /var/cache/nginx
chmod 700 /var/log/nginx # 仅属主可访问
隐藏版本号
curl -I 192.168.10.101

修改配置文件 --隐藏版本号
vim /usr/local/nginx/conf/nginx.conf
server_tokens off;

nginx -t
systemctl restart nginx
curl -I 192.168.10.101
限制危险请求方法
- Get:获取URL资源
- Post:提交数据,封装到报文中提交
- Put:申请一个存储,资源的存储
- Head:获取uri的应答信息的头部信息
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
if (request_method !\~ \^(GET\|HEAD\|POST) ) {
return 444;
}


验证测试请求
测试PUT/DELETE请求
curl -XPUT -I 192.168.10.101

查看access.log
在 /usr/local/nginx/conf目录下
cat ../logs/access.log

请求限制(CC攻击防御)
概念
- CC (c:挑战;c:崩溃)攻击是用大量请求耗尽服务器资源,让正常用户无法访问网站,可通过 Nginx 限制请求速率和并发连接数来防范
使用nginx的linit_req模块限制请求速度
编辑配置
vim /usr/local/nginx/conf/nginx.conf
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
在http{ }内 ,server{ }上

limit_req zone=req_limit burst=20 nodelay;


压力测试验证
dnf install httpd-tools -y
发起请求测试(一共发起300个请求,每次发起30个请求)
ab -n 300 -c 30 http://192.168.10.101/
查看access.log
在 /usr/local/nginx/conf目录下
cat ../logs/access.lo
tail -300 /usr/local/nginx/logs/access.log |grep -c 503
防盗链

再打开一个客户机 windowns10
- 在101
在/etc/hosts中设置域名解析关系(两台都修改)
192.168.10.101 www.aaa.com
192.168.10.102 www.bbb.com
在C盘windows➡system32➡drivers➡etc下的hosts文件中配置域名解析
把图片kgc.png放到源主机(www.aaa.com)的工作目录下
ls /usr/local/nginx/html
编辑原网站首页文件
vim /usr/local/nginx/html/index.html
:set paste
bash
<html>
<body>
<h1> www.aaa.com This is 101</h1>
<img src="kgc.png"/>
</body>
</html>

去windowns10中浏览器中测试(www.aaa.com)

- 编辑盗链网站首页文件--在102
dnf -y install httpd
cd /var/www/html
vim index.html
<html>
<body>
<h1> www.bbb.com This is 102</h1>
<img src="http://www.aaa.com/kgc.png"/>
</body>
</html>
关闭防火墙
systemctl stop firewalld
启动httpd
systemctl restart httpd
去window10测试访问盗链网站(盗链成功)www.bbb.com

F12➡网络

配置 nginx 防盗链
vim /usr/local/nginx/conf/nginx.conf

查看语法是否有错
nginx -t
重启
systemctl restart nginx
测试访问盗链网站(盗链失败403)

高级防护
动态黑名单
编辑黑名单配置文件
vim /usr/local/nginx/conf/blockips.conf
#0:允许访问 1:不允许访问
192.168.1.0/24 1;
192.168.10.10 1;

IP地址后的数字含义:

编辑主配置文件
vim /usr/local/nginx/conf/nginx.conf
在httpd{ }下,在server{ }上:

在server{ }内:


检查语法是否有错
nginx -t
重启nginx
systemctl restart nginx
去windows10浏览器上测试:www.aaa.com
(使用封禁ip测试:
curl 192.168.10.101

自动添加黑名单(自动封禁访问超过100次的IP)

uniq -c:统计连续出现次数,并在行首显示次数
sort -nr:按数值排序)
nginx https配置
概念:
HTTPS(HyperText Transfer Protocol over Secure Socket Layer),未来解决这三大风险诞生的
HTTP为什么不安全
- 明文传输
- 存在风险
- 窃听风险
- 篡改风险
- 冒充风险
安全通信的四的大原则
机密性
完整性
身份认证
不可否认
HTTPS通信原理简述
- 对称加密--给报文加密
- 通信双方需要使用同意把密钥

- 非对称加密
- 使用不同的密钥(一把公钥,一把私钥)
- 公钥加密的密文只有四幺可以解密,私钥签名的内容只有公钥可以验签
公钥传输通过--数字整数
nginx配置https证书
使用openssl生成证书和私钥生成证书和私钥
创建证书存储目录
mkdir -p /etc/nginx/ssl
生成自签名证书
openssl req -x509 -nodes -days 356 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt -subj "/C=CN/ST=henan/L=zhengzhou/0=kgc/CN=localhost"
nginx启用https
编辑nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
在server{ }内

其中证书文件和密钥文件
cd /etc/nginx/ssl/ (ls) 对应
查看语法是否有错
nginx -t
重启nginx
systemctl restart nginx
去浏览器中(https://192.168.10.101)
通过设置浏览器开头验证
