Web 服务器
Web 服务器是部署在服务器端、基于 HTTP/HTTPS 协议的应用层软件 ,核心作用是接收客户端(浏览器/爬虫/程序)的 HTTP 请求,解析并返回对应的静态资源(HTML/CSS/JS/图片/文件) ,同时可作为反向代理、负载均衡器对接后端应用服务器,是互联网服务的前端核心入口。
一、Web 服务器基础概念)
1. 核心定义与作用
Web 服务器工作在 TCP/IP 模型的应用层 ,基于 HTTP/1.0/1.1/2/3 协议与客户端通信,核心能力:
- 接收请求:监听指定 TCP 端口(默认 80/HTTP、443/HTTPS),接收客户端的 HTTP 请求;
- 解析请求:解析请求头(Method/Host/UA/Referer)、请求路径、请求参数;
- 返回资源 :根据请求路径查找服务器本地的静态资源(HTML/CSS/JS/图片/视频),封装为 HTTP 响应返回给客户端;
- 扩展能力 :支持反向代理、负载均衡、动静分离、防盗链、访问控制(IP/UA)、HTTPS 加密等,是服务端架构的前端枢纽。
2. 混淆概念区分
Web 服务器、应用服务器、反向代理、负载均衡器,这四个概念高度关联但定位不同,核心区别如下:
| 概念 | 核心产品 | 工作协议 | 处理资源 | 核心定位 |
|---|---|---|---|---|
| Web 服务器 | Nginx、Apache、Lighttpd | HTTP/HTTPS | 静态资源 | 前端入口,解析HTTP、返回静态资源 |
| 应用服务器 | Tomcat、Jetty、JBoss | HTTP/JavaEE | 动态资源 | 运行后端程序(Java/PHP),处理动态请求 |
| 反向代理 | Nginx、HAProxy | HTTP/TCP | 转发请求 | 隐藏后端服务器,转发请求到Web/应用服务器 |
| 负载均衡器 | Nginx、HAProxy、LVS | HTTP/TCP/IP | 分发请求 | 将请求分发到多台后端服务器,实现负载分担 |
- Nginx/Apache 是原生 Web 服务器 ,同时具备反向代理/负载均衡能力(最常用场景);
- 纯静态网站(仅HTML/CSS/JS/图片)可直接用 Nginx/Apache 部署,无需应用服务器;
- 动态网站(PHP/Java/Python)需Web 服务器 + 应用服务器配合(如 Nginx 反向代理 Tomcat/PHP-FPM)。
3. Web 服务器核心协议与端口
- 核心协议:HTTP(明文,默认80端口)、HTTPS(加密,默认443端口,基于TLS/SSL);
- 协议版本:HTTP/1.1(主流,无连接复用)、HTTP/2(多路复用,性能提升)、HTTP/3(基于QUIC,无TCP握手,极致性能);
- 核心端口 :80(HTTP)、443(HTTPS),Linux 下非root用户无法监听1-1023端口,需通过
setcap授权。
4. 核心工作模式
Web 服务器的并发处理模式决定了其性能上限,主流有3种,Nginx/Apache 各有适配:
- 多进程模式:主进程+子进程,每个子进程处理一个请求,优点稳定,缺点内存占用高、并发低(Apache 传统模式);
- 多线程模式:主进程+多线程,每个线程处理一个请求,内存占用低,并发比多进程高(Apache 优化模式);
- 事件驱动模式:单进程/多进程+事件驱动,一个进程处理上千个请求,内存占用极低、并发极高(Nginx 核心模式,也是现代Web服务器的主流)。
二、Web 服务器工作原理
以用户浏览器访问 Nginx 部署的静态网站(http://your-domain.com/index.html) 为例,从网络层到应用层的完整流程,理解 Web 服务器的核心工作逻辑,同时衔接 Linux 内核/防火墙的处理环节:
客户端浏览器 → 本地DNS解析 → 运营商网络 → 服务器防火墙(iptables/ufw)→ Web服务器监听端口 → 解析请求 → 查找资源 → 返回响应 → 客户端浏览器渲染
详细步骤
- 客户端发起请求 :用户在浏览器输入网址,浏览器封装为 HTTP GET 请求,基于 TCP 协议发起连接请求;
- DNS 域名解析:将域名(your-domain.com)解析为服务器公网 IP,获取目标服务器地址;
- 防火墙层过滤 :请求到达服务器,先经过 Linux 内核防火墙(iptables/ufw),匹配规则后放行80端口的TCP连接;
- TCP 三次握手:Web 服务器(Nginx)监听80端口,与客户端完成 TCP 三次握手,建立可靠连接;
- HTTP 请求解析 :Nginx 接收客户端的 HTTP 请求,解析请求头 (Method:GET、Host:your-domain.com、User-Agent:浏览器标识、Referer:来源地址)和请求路径(/index.html);
- 静态资源查找 :Nginx 根据配置的网站根目录(如/usr/share/nginx/html),查找对应路径的静态资源(index.html);
- HTTP 响应封装 :Nginx 将找到的静态资源封装为 HTTP 响应(包含响应头:Status:200 OK、Content-Type:text/html,响应体:index.html 内容),通过已建立的 TCP 连接返回给客户端;
- TCP 四次挥手 :请求响应完成后,根据 HTTP 协议的连接复用策略(Keep-Alive),决定是否断开 TCP 连接,若断开则完成四次挥手。
核心关键点 :Web 服务器的所有操作都建立在TCP 可靠连接之上,且受 Linux 防火墙的端口/IP 过滤规则限制
三、Web 服务器详解:Nginx & Apache
(一)Nginx
高性能、轻量级,现代Web服务器首选
Nginx(发音:engine x)是俄罗斯开发者开发的开源Web服务器,核心优势是事件驱动模式、高并发、低内存占用、功能丰富 ,同时支持反向代理、负载均衡、动静分离、HTTPS、HTTP/2/3,是目前全球使用最广泛的Web服务器(百度、阿里、腾讯、京东等均使用)。
1. Nginx 核心架构与优势
- 核心架构 :主进程(Master Process)+ 工作进程(Worker Process) ,主进程负责管理配置和子进程,工作进程基于事件驱动模型处理请求,默认工作进程数等于服务器CPU核心数(性能最优);
- 核心优势 :
- 高并发 :单台普通服务器可支撑10万+并发连接,远高于Apache;
- 低内存:万级并发下,内存占用仅几十到几百MB;
- 性能稳定:无内存泄漏,7*24小时运行无需重启;
- 功能丰富:原生支持反向代理、负载均衡、防盗链、访问控制、HTTPS、HTTP/2/3;
- 跨平台:支持Linux/Windows/Mac,Linux下性能最优;
- 模块化设计:通过模块扩展功能(如ngx_http_ssl_module、ngx_http_limit_req_module)。
- 适用场景:高并发静态网站、反向代理/负载均衡、动静分离、HTTPS 服务、CDN 节点。
2. Nginx 基础操作
(1)安装
bash
# Ubuntu/Debian 安装
apt update && apt install -y nginx
# CentOS/RHEL 安装
yum install -y epel-release && yum install -y nginx
(2)核心运维命令(启动/重启/停止/状态/配置检查)
bash
# 启动Nginx
systemctl start nginx
# 开机自启
systemctl enable nginx
# 查看状态
systemctl status nginx
# 重新加载配置(不中断服务,推荐)
systemctl reload nginx
# 重启(中断服务,不推荐)
systemctl restart nginx
# 停止
systemctl stop nginx
# 配置语法检查(必做,修改配置后先检查再加载)
nginx -t
(3)核心目录结构
| 目录/文件路径 | 核心作用 |
|---|---|
| /etc/nginx/ | 主配置目录,所有配置文件存放处 |
| /etc/nginx/nginx.conf | 全局核心配置文件 |
| /etc/nginx/conf.d/ | 站点独立配置目录(推荐) |
| /etc/nginx/sites-available/ | Ubuntu 原生站点配置目录 |
| /usr/share/nginx/html/ | 默认网站根目录(静态资源存放) |
| /var/log/nginx/ | 日志目录(access.log/error.log) |
| /var/run/nginx.pid | Nginx 进程PID文件 |
(二)Apache
Apache(全称:Apache HTTP Server)是美国Apache基金会开发的老牌开源Web服务器,诞生于1995年,核心优势是兼容性好、模块丰富、配置简单、稳定可靠,支持几乎所有的Web开发技术和插件,是传统Web项目的首选。
1. Apache 核心架构与特点
- 核心架构 :支持多进程、多线程、混合模式 ,默认采用多进程预派生模式(MPM_Prefork),每个子进程处理一个请求,稳定性极高,但并发和内存占用不如Nginx;
- 核心特点 :
- 兼容性极佳:支持所有Web标准,适配各种老项目/插件(如PHP的mod_php模块);
- 模块丰富:拥有上千个官方/第三方模块,可扩展任意功能;
- 配置简单:语法直观,适合新手入门;
- 稳定可靠:经过20+年的考验,无重大BUG,适合对稳定性要求极高的传统项目;
- 缺点:高并发下内存占用高、性能下降明显,不适合10万+并发场景。
- 适用场景:传统静态/动态网站、低并发场景、对兼容性要求高的老项目。
2. Apache 基础操作
(1)安装
bash
# Ubuntu/Debian 安装
apt update && apt install -y apache2
# CentOS/RHEL 安装
yum install -y httpd
(2)核心运维命令
bash
# Ubuntu/Debian
systemctl start apache2 && systemctl enable apache2
systemctl status apache2
systemctl reload apache2
apache2ctl configtest # 配置语法检查
# CentOS/RHEL
systemctl start httpd && systemctl enable httpd
systemctl status httpd
systemctl reload httpd
httpd -t # 配置语法检查
(3)核心目录结构
| 目录/文件路径 | 核心作用 |
|---|---|
| /etc/apache2/(Ubuntu)/etc/httpd/(CentOS) | 主配置目录 |
| /etc/apache2/apache2.conf(Ubuntu)/etc/httpd/conf/httpd.conf(CentOS) | 全局配置文件 |
| /etc/apache2/sites-available/(Ubuntu)/etc/httpd/conf.d/(CentOS) | 站点独立配置目录 |
| /var/www/html/ | 默认网站根目录 |
| /var/log/apache2/(Ubuntu)/var/log/httpd/(CentOS) | 日志目录(access_log/error_log) |
(三)Nginx vs Apache 核心对比
| 特性 | Nginx | Apache |
|---|---|---|
| 并发处理模式 | 事件驱动(epoll/kqueue) | 多进程/多线程(MPM) |
| 高并发能力 | 极强(10万+并发) | 弱(万级并发) |
| 内存占用 | 极低(万级并发≈几百MB) | 高(万级并发≈几GB) |
| 配置语法 | 简洁,模块化 | 直观,更易上手 |
| 反向代理/负载均衡 | 原生支持,性能极高 | 需模块,性能一般 |
| HTTPS/HTTP/2 | 原生支持,配置简单 | 需模块,配置复杂 |
| 兼容性 | 一般,对老插件支持差 | 极佳,支持所有插件/技术 |
| 资源消耗 | 低 | 高 |
| 适用场景 | 高并发、反向代理、负载均衡、CDN | 传统项目、低并发、高兼容性要求 |
| 市场占比 | ≈75% | ≈20% |
四、Web 服务器配置
Nginx 为主,Apache 为辅
配置的核心原则:全局配置做通用设置,站点独立配置做个性化设置 (避免修改全局配置导致所有站点出问题),以下配置均为实战安全优化版 ,结合你的防挖矿、防恶意访问、防CC攻击需求,同时适配静态网站部署。
(一)Nginx 配置
1. 核心配置文件结构
Nginx 配置采用层级化语法 ,核心分为3层,指令以分号结尾,块配置用{}包裹 ,注释用#:
nginx
# 第1层:全局块(全局配置,对所有站点生效)
user www-data; # 运行用户
worker_processes auto; # 工作进程数,auto=CPU核心数(性能最优)
error_log /var/log/nginx/error.log; # 错误日志路径
pid /var/run/nginx.pid; # PID文件路径
# 第2层:事件块(网络事件配置,影响并发)
events {
worker_connections 10240; # 每个工作进程的最大并发连接数
use epoll; # 事件驱动模型,Linux下用epoll(性能最优)
multi_accept on; # 一次性接收所有新连接
}
# 第3层:HTTP块(HTTP协议全局配置,对所有HTTP/HTTPS站点生效)
http {
include /etc/nginx/mime.types; # 媒体类型配置
default_type application/octet-stream; # 默认媒体类型
sendfile on; # 开启零拷贝,提升文件传输性能
tcp_nopush on; # 配合sendfile,提升TCP传输效率
keepalive_timeout 65; # 长连接超时时间,65秒
gzip on; # 开启Gzip压缩,减小资源体积
# 包含站点独立配置文件(推荐,所有站点配置放在conf.d/下)
include /etc/nginx/conf.d/*.conf;
}
2. 基础静态站点配置
站点独立配置,conf.d/xxx.conf
创建/etc/nginx/conf.d/your-domain.conf,部署静态网站 (http://your-domain.com),配置后执行nginx -t检查语法,再systemctl reload nginx生效:
nginx
server {
listen 80; # 监听80端口(HTTP)
server_name your-domain.com 192.168.1.100; # 域名+服务器IP
root /usr/share/nginx/html/your-domain; # 网站根目录(需提前创建)
index index.html index.htm; # 默认首页
# 访问日志配置,按域名区分
access_log /var/log/nginx/your-domain_access.log main;
error_log /var/log/nginx/your-domain_error.log warn;
# 核心安全配置:禁止访问隐藏文件(如.git/.env)
location ~ /\. {
deny all;
return 403;
}
# 核心安全配置:禁止访问敏感文件
location ~ \.(sql|conf|log|sh|py)$ {
deny all;
return 403;
}
}
注意:需提前创建网站根目录并授权:
bash
mkdir -p /usr/share/nginx/html/your-domain
chown -R www-data:www-data /usr/share/nginx/html/your-domain
echo "Hello Nginx" > /usr/share/nginx/html/your-domain/index.html
3. 核心安全防护配置
结合防挖矿/防CC/防恶意访问,重点
在server块 中添加以下配置,可与iptables防火墙形成双层防护,拦截挖矿程序、恶意IP/UA、CC攻击,所有规则可组合使用:
nginx
server {
listen 80;
server_name your-domain.com;
root /usr/share/nginx/html/your-domain;
index index.html;
# 规则1:封禁恶意IP(矿池IP/暴力破解IP,如31.56.209.53)
deny 31.56.209.53;
deny 192.168.1.226;
# 允许内网IP访问
allow 192.168.1.0/24;
# 规则2:限制单IP访问频率(防CC攻击,秒级限流,比iptables更精细)
limit_req_zone $binary_remote_addr zone=cc_limit:10m rate=10r/s;
limit_req zone=cc_limit burst=20 nodelay;
# 规则3:封禁挖矿程序/恶意爬虫UA(如xmrig/miner/curl/wget)
if ($http_user_agent ~* (xmrig|miner|sys-mon|curl|wget|Python-urllib|Scrapy)) {
return 403;
}
# 规则4:限制请求方法(只允许GET/POST/HEAD,禁止PUT/DELETE等危险方法)
if ($request_method !~ ^(GET|POST|HEAD)$) {
return 403;
}
# 规则5:防盗链(禁止他人盗用静态资源,节省带宽)
location ~* \.(jpg|png|gif|mp4|css|js)$ {
valid_referers none server_names your-domain.com 192.168.1.0/24;
if ($invalid_referer) {
return 403;
}
}
# 规则6:隐藏Nginx版本信息(防止攻击者利用版本漏洞)
server_tokens off;
# 规则7:禁止访问隐藏文件和敏感文件
location ~ /\. { deny all; return 403; }
location ~ \.(sql|conf|log)$ { deny all; return 403; }
}
4. HTTPS 配置
(强制加密)
HTTPS 是基于 TLS/SSL 的加密HTTP协议,可防止数据被窃听/篡改,需先申请SSL证书 (免费:Let's Encrypt、阿里云/腾讯云免费证书;付费:Symantec/GeoTrust),以下以Let's Encrypt 免费证书为例,配置Nginx HTTPS并强制跳转HTTP→HTTPS:
(1)安装Certbot并申请证书
bash
# Ubuntu/Debian
apt install -y certbot python3-certbot-nginx
# CentOS/RHEL
yum install -y certbot python3-certbot-nginx
# 申请证书(自动验证并配置Nginx)
certbot --nginx -d your-domain.com
(2)手动HTTPS配置
了解原理,证书路径:/etc/letsencrypt/live/your-domain.com/
nginx
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri; # 强制HTTP跳转到HTTPS
}
server {
listen 443 ssl http2; # 监听443端口,开启SSL和HTTP/2
server_name your-domain.com;
root /usr/share/nginx/html/your-domain;
index index.html;
# SSL证书配置
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL优化配置(开启TLS1.2/1.3,禁用弱加密算法)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 其他安全配置(同上,CC防护/UA封禁/防盗链等)
limit_req_zone $binary_remote_addr zone=cc_limit:10m rate=10r/s;
limit_req zone=cc_limit burst=20 nodelay;
server_tokens off;
}
(3)证书自动续期
Let's Encrypt 证书有效期3个月
bash
# 测试续期
certbot renew --dry-run
# 添加定时任务,自动续期
echo "0 0 1 * * certbot renew --quiet" >> /etc/crontab
5. 反向代理配置
对接后端应用服务器,如Tomcat/PHP-FPM
Nginx 最常用的场景之一是反向代理 ,将客户端请求转发到后端应用服务器(如Tomcat处理Java、PHP-FPM处理PHP),实现动静分离(Nginx处理静态资源,应用服务器处理动态资源),提升整体性能:
nginx
server {
listen 80;
server_name your-domain.com;
# 静态资源由Nginx直接处理(js/css/img)
location ~* \.(js|css|png|jpg|gif)$ {
root /usr/share/nginx/html;
expires 7d; # 静态资源缓存7天
}
# 动态请求(/api/*)反向代理到后端Tomcat(127.0.0.1:8080)
location /api/ {
proxy_pass http://127.0.0.1:8080/; # 后端服务器地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
(二)Apache 基础配置
Apache 配置语法与Nginx类似,以下为基础静态站点+核心安全配置 ,配置在/etc/apache2/sites-available/your-domain.conf(Ubuntu)或/etc/httpd/conf.d/your-domain.conf(CentOS):
apache
<VirtualHost *:80>
ServerName your-domain.com
ServerAlias 192.168.1.100
DocumentRoot /var/www/html/your-domain
ErrorLog /var/log/apache2/your-domain_error.log
CustomLog /var/log/apache2/your-domain_access.log combined
# 核心安全配置:封禁恶意IP
Deny from 31.56.209.53
Allow from 192.168.1.0/24
Order deny,allow
# 核心安全配置:禁止访问隐藏文件
<FilesMatch "^\.">
Deny from all
</FilesMatch>
# 核心安全配置:禁止访问敏感文件
<FilesMatch "\.(sql|conf|log|sh)$">
Deny from all
</FilesMatch>
# 核心安全配置:限制请求方法
<LimitExcept GET POST HEAD>
Deny from all
</LimitExcept>
# 隐藏Apache版本信息
ServerTokens Prod
ServerSignature Off
</VirtualHost>
启用站点(Ubuntu):
bash
a2ensite your-domain.conf
systemctl reload apache2
五、Web 服务器核心运维:日志、监控、故障排查
Web 服务器的日常运维核心是日志分析、性能监控、故障排查 ,这也是发现挖矿程序访问、恶意IP攻击、CC攻击的关键手段,结合你之前的安全需求,重点讲解Nginx(Apache操作类似)。
1. 日志分析(核心,发现恶意行为)
Nginx 有两个核心日志,日志格式可自定义:
- 访问日志(access.log):记录所有客户端的访问请求(IP/UA/请求路径/状态码/响应时间);
- 错误日志(error.log):记录Nginx的运行错误(配置错误/资源不存在/后端连接失败)。
(1)常用日志筛选命令(排查恶意行为)
bash
# 实时查看访问日志
tail -f /var/log/nginx/your-domain_access.log
# 筛选403被封禁的请求(看恶意IP/UA)
grep "403" /var/log/nginx/your-domain_access.log
# 筛选异常IP的访问记录(如192.168.1.226)
grep "192.168.1.226" /var/log/nginx/your-domain_access.log
# 筛选挖矿程序UA的访问记录(如xmrig)
grep -i "xmrig" /var/log/nginx/your-domain_access.log
# 统计访问量最高的前10个IP(发现CC攻击源)
awk '{print $1}' /var/log/nginx/your-domain_access.log | sort | uniq -c | sort -nr | head -10
(2)日志切割(避免日志过大)
默认日志会持续写入一个文件,时间久了会占满磁盘,需配置日志切割 ,Linux 下用logrotate(Nginx/Apache 默认已配置,路径:/etc/logrotate.d/nginx):
bash
# 查看Nginx日志切割配置
cat /etc/logrotate.d/nginx
# 手动执行日志切割
logrotate -f /etc/logrotate.d/nginx
2. 性能监控(掌握服务器运行状态)
(1)内置状态监控(Nginx 需开启status模块)
编辑Nginx全局配置/etc/nginx/nginx.conf,开启status模块,查看Nginx的并发连接、请求数、工作进程状态:
nginx
http {
# 开启status监控
server {
listen 127.0.0.1:8888;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
}
配置后重启Nginx,执行以下命令查看状态:
bash
curl http://127.0.0.1:8888/nginx_status
状态解读:
Active connections: 100 # 当前活跃连接数
server accepts handled requests
10000 10000 50000 # 总接受连接数/总处理连接数/总请求数
Reading: 0 Writing: 5 Waiting: 95 # 读取请求数/写入响应数/等待连接数
(2)系统级监控(结合Linux命令)
bash
# 查看Nginx进程状态
ps aux | grep nginx
# 查看Nginx监听端口
netstat -antlp | grep nginx
# 查看服务器CPU/内存/磁盘占用
top -o %CPU
free -h
df -h
# 查看网络流量(发现大流量攻击)
iftop
3. 常见故障排查(快速定位问题)
Web 服务器的故障多为配置错误、端口被占用、权限不足、防火墙拦截,以下为最常见的故障及解决方法:
| 故障现象 | 常见原因 | 解决方法 |
|---|---|---|
| 访问网站显示「无法连接」 | 1. Nginx未启动 2. 防火墙封禁80/443 3. 端口被占用 | 1. systemctl start nginx 2. iptables/ufw放行80/443 3. lsof -i:80 杀掉占用进程 |
| 显示「403 Forbidden」 | 1. 目录/文件权限不足 2. 被IP/UA封禁 3. 配置禁止访问 | 1. chown -R www-data:www-data 目录 2. 检查Nginx封禁规则 3. 调整配置 |
| 显示「404 Not Found」 | 1. 资源不存在 2. 根目录/请求路径配置错误 | 1. 检查文件是否存在 2. 核对Nginx的root和location配置 |
| 显示「502 Bad Gateway」 | 反向代理的后端服务器未启动/不可达 | 启动后端服务器(Tomcat/PHP-FPM),核对proxy_pass地址 |
| 配置修改后不生效 | 1. 语法错误 2. 未重新加载Nginx | 1. nginx -t 检查语法 2. systemctl reload nginx |
六、Web 服务器安全防护
Web 服务器的安全防护核心是**「网络层防火墙(iptables/ufw)+ 应用层Web服务器」双层防护**,再配合系统级加固、日志监控、自动化封禁,形成全方位的安全体系。
1. 双层防护
- 网络层(iptables/ufw) :做粗粒度防护 ,封禁恶意IP段/矿池IP、放行80/443端口、限制分钟级访问频率,拦截大部分恶意网络包(如端口扫描、大规模CC攻击、挖矿程序外联);
- 应用层(Nginx/Apache) :做精细化防护 ,封禁单个恶意IP/挖矿UA、限制秒级访问频率、禁止危险请求方法、防盗链、隐藏版本信息,拦截漏网的应用层攻击(如细粒度CC攻击、恶意爬虫、资源盗用)。
2. 核心安全防护措施
- 默认放行80/443,封禁所有无用端口:通过iptables/ufw只放行80/443(Web)、22(SSH),其余端口全部封禁;
- 封禁矿池IP/恶意IP:将挖矿矿池IP(如31.56.209.53)、暴力破解IP加入iptables/Nginx的封禁列表,批量IP用ipset;
- 限制访问频率:iptables做分钟级限流,Nginx做秒级限流,双重防止CC攻击;
- 封禁挖矿程序/恶意UA:在Nginx中封禁包含xmrig/miner/curl/wget的UA,只允许合法浏览器访问;
- 限制请求方法:只允许GET/POST/HEAD,禁止PUT/DELETE/OPTIONS等危险方法;
- 隐藏服务器版本信息:Nginx关闭server_tokens,Apache设置ServerTokens Prod,防止攻击者利用版本漏洞;
- 禁止访问敏感文件/目录:封禁.git/.env/conf/log等敏感文件,防止配置/数据泄露;
- 开启HTTPS并强制跳转:使用TLS1.2/1.3,禁用弱加密算法,防止数据被窃听/篡改;
- 配置文件权限加固:Nginx/Apache配置文件设为644,网站根目录设为755,禁止其他用户修改;
- 自动化封禁恶意IP:安装fail2ban,监控Web服务器日志,自动封禁频繁发起403/500请求的IP,底层调用iptables。
3. 自动化封禁:fail2ban 搭配 Nginx
fail2ban 是一款日志监控工具,可自动监控Nginx/Apache/SSH日志,当检测到某个IP频繁发起恶意请求时,自动调用iptables封禁该IP,无需手动操作,是防CC攻击、防恶意访问的必备工具:
bash
# 安装fail2ban
apt install -y fail2ban || yum install -y fail2ban
# 配置Nginx防护(编辑/etc/fail2ban/jail.local)
cat > /etc/fail2ban/jail.local << EOF
[DEFAULT]
bantime = 3600 # 封禁1小时
findtime = 600 # 10分钟内触发
maxretry = 5 # 5次失败请求即封禁
banaction = iptables-multiport
[nginx-403]
enabled = true
filter = nginx-403
logpath = /var/log/nginx/*_access.log
maxretry = 3
bantime = 86400 # 封禁403的IP24小时
[sshd]
enabled = true
logpath = /var/log/auth.log
maxretry = 3
EOF
# 创建Nginx 403过滤规则(/etc/fail2ban/filter.d/nginx-403.conf)
cat > /etc/fail2ban/filter.d/nginx-403.conf << EOF
[Definition]
failregex = ^<HOST> - .* ".*" 403 .*$
ignoreregex =
EOF
# 重启fail2ban并开机自启
systemctl restart fail2ban && systemctl enable fail2ban
# 查看被封禁的IP
fail2ban-client status nginx-403
# 解封某个IP
fail2ban-client set nginx-403 unbanip 31.56.209.53