目录
一:核心安全配置
1:编译安装nginx
(1)安装编译
(2)创建运行用户,组和日志目录
(3)安装编译
(4)软链接
(5)添加nginx系统服务
(6)启动服务
2:隐藏版本号
3:限制危险请求方法
4:请求限制(CC攻击防御)
(1)编辑配置文件
(2)压力测试验证
5:防盗链
二:高级防护
1:动态黑名单
(1)编辑黑名单配置文件
(2)编辑主配置文件
(3)使用封禁IP测试访问
2:nginx https配置
(1)https概念
(2)HTTP为什么不安全
(3)安全通信的四大原则
(4)HTTPS通信原理简述
3:nginx 配置https证书
(1)使用openssl生成证书和私钥生成证书和私钥
(2)nginx启用https
(3)通过浏览器验证
yum -y install gcc* pcre-devel zlib-devel openssl-devel
useradd -M -s /sbin/nologin nginx
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx
tar zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
——回车——
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
vim nginx.service
[Unit]
Description=my nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/sbin/nginx
ExecStop=/usr/local/sbin/nginx -s stop
ExecrReload=/usr/local/sbin/nginx -s reload
[Install]
WantedBy=multi-user.target
端口被占用的情况下:sudo pkill nginx
或
sudo systemctl stop nginx
重启服务:systemctl restart nginx
vim /usr/local/nginx/conf/nginx.conf
http{
server_tokens off;
}
nginx -t
nginx -s reload
curl -I 192.168.10.202
概念:
在Web应用中,应严格限制或禁用可能对系统安全造成威胁的HTTP请求方法(如PUT
、DELETE
、TRACE
、CONNECT
等),仅开放必要的安全方法(如GET
、POST
)。
修改配置文件:
vim /usr/local/nginx/conf/nginx.conf
server{
if ($request_method !~ ^(GET|HEAD|POST)$)
return 444;
}
$request_method
:这是 Nginx 的一个内置变量,表示客户端发起的 HTTP 请求方法(如 GET、POST 等)。
!~
:这是 Nginx 中的"不匹配"运算符,表示后面的正则表达式不匹配时条件成立。
^(GET|HEAD|POST)$
:这是一个正则表达式,表示只匹配以下三种 HTTP 方法:
GET
HEAD
POST
return 444;
:这是 Nginx 特有的响应代码,表示直接关闭连接而不返回任何响应。
验证测试请求:
curl -XPUT-I192.168.10.202
概念:
通过限制客户端(如IP、用户、设备)的请求频率或并发连接数,防止恶意用户通过高频请求耗尽服务器资源(如CC攻击、DDoS攻击、暴力破解等),保障服务的可用性。
http {
limit_req_zone $binary_remote_addr zone=req__limit:10m rate=10r/s;
server{
location / {
limit_req_zone=req__limit brust=20 nodelay;
}
}
}
#limit_req_zone 指令(定义限流区域)
#$binary_remote_addr 基于客户端 IP 地址进行限制(二进制格式存储,更节省空间)
#zone=req_limit:10m req_limit:区域名称 10m:分配 10MB 内存空间(大约可存储 16 万个 IP 的状态)
#rate=10r/s 限制请求速率:
#10r/s:每秒 10 个请求(也支持 r/m 分钟单位,如 30r/m)
#limit_req 指令(应用限流)
#zone=req_limit 指定使用哪个预定义的限流区域
#burst=20 允许突发请求量: 当请求超过 rate 限制时,最多允许 20 个请求排队等待
#nodelay 处理方式:不加此参数:排队中的请求会延迟处理 加此参数:立即处理突发请求,但超过 (rate + burst) 的请求会被拒绝
安装ab测试工具
dnf -y install httpd_tools
发起测试请求
ab -n 300 -c 30 http://192.168.10.202/
查看access.log发现大量请求日志状态码503
tail -300 /usr/local/nginx/logs/access.log | grep -c 503
概念:
防盗链是一种技术手段,用于防止其他网站直接盗用自己服务器上的资源(如图片、视频、文件等),从而节省带宽、保护版权或维护内容独特性。
资源清单:
操作系统 | 域名 | IP | 服务 |
OpenEuler | www.aaa.com | 192.168.10.202 | 源主机 |
OpenEuler | www.bbb.com | 192.168.10.201 | 盗链主机 |
编辑原网站首页文件:
location ~* \.(jpg|png|gif)$ {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
return 403;
# 或重写为警告图片:rewrite ^ /anti-hotlink.jpg;
}
}
概念:
动态黑名单是一种实时更新的禁止访问列表,用于识别并拦截恶意或不合规的实体(如IP地址、用户账号、设备等)。与静态黑名单不同,动态黑名单会根据实时行为分析、威胁情报或预设规则自动调整内容,以应对不断变化的威胁环境。
# 封禁IP段
192.168.1.0/24 1;
# 封禁单个IP
192.168.10.201 1;
#IP地址后的数字含义:
#0 “”; 允许
#1 403; 完全封禁
#2 444; 静默断开
#3 503; 服务不可用
http {
geo $block_ip {
default 0;
include /usr/local/nginx/conf/blockips.conf;
}
server {
if ($block_ip) {
return 403;
}
}
}
nginx -t
nginx -s reload
curl 192.168.10.202
HTTPS(超文本传输安全协议)是一种通过计算机网络进行安全通信的传输协议。它在 HTTP 的基础上,通过传输加密和身份认证来确保网络数据传输的安全性。HTTPS 利用 SSL/TLS协议,对数据进行加密处理,防止数据在传输过程中被窃取、篡改,同时使用数字证书验证网站服务器的身份,避免用户访问到恶意伪造的网站,从而保障了用户与服务器之间通信的机密性、完整性和可靠性。
HTTP由于是明文传输,主要存在三大风险:窃听风险,篡改风险,冒充风险。
#创建证书存储目录
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=MyOrg/CN=localhost"
编辑nginx配置文件
server {
listen 443 ssl;
server_name example.com; # 替换为你的域名
ssl_certificate /path/to/server.crt; # 证书文件路径
ssl_certificate_key /path/to/server.key; # 私钥文件路径
ssl_protocols TLSv1.2 TLSv1.3; # 设置支持的 TLS 协议版本
ssl_ciphers HIGH:!aNULL:!MD5; # 设置加密套件
location / {
root /var/www/html; # 网站根目录
index index.html index.htm;
}
}
在浏览器地址栏中输入 https://example.com
(替换为实际配置的域名),如果配置正确,浏览器会显示连接安全的提示,地址栏中会出现锁形图标。同时,浏览器可能会对自签名证书显示警告(因为不是由受信任的 CA 颁发),如果是正式的证书则不会有此类警告。可以点击锁形图标查看证书的详细信息,确认证书的有效性和相关信息是否正确。