Nginx基础安全前置准备

安装规范与最小化部署

  • 官方源安装:拒绝第三方编译包,优先Nginx官方YUM/APT源,避免内置恶意模块;生产环境禁用debug版本,减少信息泄露。

  • 最小化模块编译:仅启用业务必需模块(如http_ssl、http_gzip),禁用autoindex、status等非必要模块,降低攻击面。

  • 专用运行用户:禁止root启动Nginx,新建nginx专属用户(禁止登录、无家目录),配置文件、日志目录权限严格管控。

# 新建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
<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)
通过设置浏览器开头验证
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐