Nginx安全防护与HTTPS部署

目录

[Nginx 隐藏版本号](#Nginx 隐藏版本号)

限制危险请求方法

请求限制(CC攻击防御)

压力测试

防盗链

防止防盗链

动态黑名单

自动添加黑名单

HTTPS配置

[HTTPS 概念](#HTTPS 概念)

安全通信的四大原则

HTTPS的几种加密方式

[nginx https的作用](#nginx https的作用)


Nginx 隐藏版本号

!!!注意 每个配置过的文件都要重启nginx 注意!!!!

!!!配置文件 要及时覆盖掉 或者删除掉 要不然会有冲突 !!!!

在生产环境中,需要隐藏Nginx的版本号,以避免泄漏 nginx的版本,使攻击者不能针对特定的版本进行攻击;在隐藏版本号之前可以使用Fiddler 工具抓取数据包,查看nginx版本,也可以在OpenEuler 中使用命令curl -I 查看

修改配置文件(vim /etc/nginx/conf/nginx.conf)

配置前 是可以看到版本号的

验证:

限制危险请求方法

验证:

请求限制(CC攻击防御)

验证:

bash 复制代码
vim /usr/local/nginx/html/index.html        #内容随便写
111111111

for i in $(seq 100);do curl 192.168.10.101;done     #访问多次就访问失败了
curl 192。168.10.101            #单个访问就可以访问到

压力测试

在另外一台电脑上下载 httpd-tools

验证: 也可以通过访问nginx的日志信息访问的次数

防盗链

先修改win10的hosts文件

同时;也要修改Linux系统中的hosts文件

bash 复制代码
vim /uar/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.aaa.com;



cd /usr/local/nginx/html/(将所需要的图片放到该目录下)
vim  index.html(里面内容全删掉)
<h1>nihao zhshi wo de touxiang </h1>		#这个是网站的首行,可以随便写 记得区分两个网站
<img src="111.jpg"/>		#"111.jpg"是我当前目录下的照片

​​​​​​​ ​​​​​​​ ​​​​​​​

102下载httpd

bash 复制代码
dnf -y install httpd


vim /var/www/html/index.html    
<h1>zh shi fangdao lian </h1>		    #这个是网站的首行,可以随便写 记得区分两个网站
<img src="http://www.aaa.com/111.jpg"/>	    #指向的是101的网站图片


systemctl stop firewalld
systemctl start httpd

验证:

win10 访问 www.aaa.com www.bbb.com #是可以访问到的

防止防盗链

bash 复制代码
vim /usr/local/nginx/conf/nginx.conf

     location ~* \.(png|jpg|pif|jpeg|bmp|)$ {
                root html;
                valid_referers aaa.com *.aaa.com;

                if ($invalid_referer) {
                return 403;
                }
        }



win10 访问 www.aaa.com 		#可以访问到图片内容
	      www.bbb.com		#不能访问到图片内容

验证:

动态黑名单

编辑黑名单配置文件

动态黑名单是 Nginx中一种实时拦截恶意请求的安全机制,它允许在不重启服务的情况下,动态更新需要封禁的 IP地址或网段。相比静态配置的 allow/deny指令,动态黑名单更灵活高效,适用于高并发、多变的攻击防护场景。

bash 复制代码
vim /usr/local/nginx/conf/blockips.conf
192.168.1.0  #禁止整个网段
192.168.10.102 1;    #禁止这个IP

IP地址后的数字含义:

0    "";    #允许
1    403;    #完全封禁
2    444;    #静默断开
3    503;    #服务不可用


vim /usr/local/nginx/conf/nginx.conf

http下:
geo $block_ip {
default 0;        #默认允许访问
include /usr/local/nginx/conf/blockips.conf;        #包含黑名单
}

server下:
    if ($block_ip) {            #判断标记值
                return 403;        #封禁动作
        }

验证:使用102 访问101

自动添加黑名单

bash 复制代码
vim aaa.sh
#!/bin/bsah
awk '{print $1}' /usr/local/nginx/logs/access.log | sort | uniq -c |sort -nr | awk '{if($1>100) print $2 " 1;"}' > /usr/local/nginx/conf/blockips.conf 


102:
dnf -y install httpd-tools
ab -n 300 -c 30 http://192.168.10.101/


101:
cat /usr/local/nginx/logs/access.log    		#会自动记录超过100次访问的ip

102验证:

101查看访问日志

HTTPS配置

HTTPS 概念

HTTPS,全称HyperText Transfer Protocol over Secure Socket Layer,设计初衷是为了保证数据传输安全。http(超文本传输协议)是客户端浏览器与web 服务器之间的通信协议,而 https 协议可以认为是 HTTP + SSL/TLS,在 http 之下 tcp 之上加了ss1一层,用于对应用层数据的加解密。

HTTP不安全

HTTP 由于是明文传输,主要存在三大风险:窃听风险、篡改风险、冒充风险。​​​​​​​

  • 窃听风险:中间人可以获取到通信内容,由于内容是明文,所以获取明文后有安全风险
  • 篡改风险:中间人可以篡改报文内容后再发送给对方,风险极大。
  • 冒充风险:比如你以为是在和某宝通信,但实际上是在和一个钓鱼网站通信。

全通信的四大原则

  • 机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文;
  • 完整性:指数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从来判定接收报文不合法:
  • 身份认证:确认对方的真实身份,即证明"你妈是你妈"的问题,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题:
  • 不可否认:即不可否认已发生的行为,比如小明向小红借了1000元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。

HTTPS的几种加密方式

HTTP 是明文传输的,那我们给报文加密,既然要加密,我们肯定需要通信双方协商好密钥吧。一种是通信双方使用同一把密钥,即对称加密的方式来给报文进行加解密。

非对称加密:使用一对密钥,即公钥和私钥。公钥可以公开,任何人都可以使用公钥对数据进行加密;私钥由所有者保密,只有使用对应的私钥才能对加密数据进行解密。

数字证书:数字证书是一种由证书颁发机构(CA)签发的电子文件,它将用户的身份信息(如姓名、组织、域名等)与公钥进行绑定。其主要作用是验证公钥的真实性和持有者的身份,防止中间人攻击,确保通信双方能够安全地交换信息。

nginx https的作用

加密传输数据:HTTPS 使用 SSL/TLS 协议对数据进行加密,确保数据在客户端(如浏览器)和服务器(如 Nginx 服务器)之间传输时不被窃取或篡改。例如,用户在电商网站上输入的用户名、密码、信用卡信息等敏感数据,通过 HTTPS 加密后,即使数据在传输过程中被拦截,攻击者也无法获取其真实内容。

验证服务器身份:HTTPS 通过数字证书来验证服务器的身份,确保客户端连接到的是真实可靠的服务器,而不是假冒的服务器。用户访问银行网站时,浏览器会验证银行服务器的数字证书,如果证书有效且与银行域名匹配,用户就可以确认自己连接到了正确的银行服务器,防止遭受钓鱼攻击。

数据完整性保护:HTTPS 使用消息认证码(MAC)等技术来确保数据在传输过程中的完整性,防止数据被意外或恶意篡改。如果数据在传输过程中被篡改,接收方可以通过验证 MAC 发现数据的变化,从而拒绝接受被篡改的数据

bash 复制代码
mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=benet/CN=localhost"

vim /usr/local/nginx/conf/nginx.conf
server {
listen       443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
server_name  localhost;

server {
listen       80;
# listen       somename:8080;
#    server_name  somename  alias  another.alias;
return 301 https://$host$request_uri;
}

验证:

相关推荐
后院那片海1 小时前
Nginx安全防护与HTTPS部署实战
安全
小马爱打代码2 小时前
Nginx+Lua+Redis实现灰度发布
redis·nginx·lua
秉承初心2 小时前
Nginx核心原理以及案例分析(AI)
运维·nginx
真智AI2 小时前
构建安全的机器学习推理API:基于FastAPI的用户认证与管理实战
安全·机器学习·fastapi
胡耀超3 小时前
内网渗透技术全面指南——安全业务视角(基于《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》)
linux·windows·安全·web安全·网络安全·内网渗透·安全治理
群联云防护小杜5 小时前
如何有效防御服务器DDoS攻击
运维·服务器·前端·tcp/ip·安全·ddos
FreeBuf_5 小时前
CVE体系若消亡将如何影响网络安全防御格局
大数据·安全·web安全
2501_916013745 小时前
日常开发中,iOS 性能调优我们怎么做?
websocket·网络协议·tcp/ip·http·网络安全·https·udp
LB_bei9 小时前
openssl 生成自签名证书实现接口支持https
网络协议·http·https
凪z9 小时前
【渗透测试】任意文件上传下载漏洞原理、复现方式、防范措施
安全·web安全