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;
}

验证:

相关推荐
用户962377954482 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机5 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机5 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954486 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star6 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544810 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
小时前端10 小时前
HTTPS 页面加载 HTTP 脚本被拦?同源代理来救场
前端·https
闲云一鹤1 天前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全