Web 服务器(Nginx、Apache)

Web 服务器

Web 服务器是部署在服务器端、基于 HTTP/HTTPS 协议的应用层软件 ,核心作用是接收客户端(浏览器/爬虫/程序)的 HTTP 请求,解析并返回对应的静态资源(HTML/CSS/JS/图片/文件) ,同时可作为反向代理、负载均衡器对接后端应用服务器,是互联网服务的前端核心入口

一、Web 服务器基础概念)

1. 核心定义与作用

Web 服务器工作在 TCP/IP 模型的应用层 ,基于 HTTP/1.0/1.1/2/3 协议与客户端通信,核心能力:

  1. 接收请求:监听指定 TCP 端口(默认 80/HTTP、443/HTTPS),接收客户端的 HTTP 请求;
  2. 解析请求:解析请求头(Method/Host/UA/Referer)、请求路径、请求参数;
  3. 返回资源 :根据请求路径查找服务器本地的静态资源(HTML/CSS/JS/图片/视频),封装为 HTTP 响应返回给客户端;
  4. 扩展能力 :支持反向代理、负载均衡、动静分离、防盗链、访问控制(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 各有适配:

  1. 多进程模式:主进程+子进程,每个子进程处理一个请求,优点稳定,缺点内存占用高、并发低(Apache 传统模式);
  2. 多线程模式:主进程+多线程,每个线程处理一个请求,内存占用低,并发比多进程高(Apache 优化模式);
  3. 事件驱动模式:单进程/多进程+事件驱动,一个进程处理上千个请求,内存占用极低、并发极高(Nginx 核心模式,也是现代Web服务器的主流)。

二、Web 服务器工作原理

用户浏览器访问 Nginx 部署的静态网站(http://your-domain.com/index.html) 为例,从网络层到应用层的完整流程,理解 Web 服务器的核心工作逻辑,同时衔接 Linux 内核/防火墙的处理环节:

复制代码
客户端浏览器 → 本地DNS解析 → 运营商网络 → 服务器防火墙(iptables/ufw)→ Web服务器监听端口 → 解析请求 → 查找资源 → 返回响应 → 客户端浏览器渲染

详细步骤

  1. 客户端发起请求 :用户在浏览器输入网址,浏览器封装为 HTTP GET 请求,基于 TCP 协议发起连接请求;
  2. DNS 域名解析:将域名(your-domain.com)解析为服务器公网 IP,获取目标服务器地址;
  3. 防火墙层过滤 :请求到达服务器,先经过 Linux 内核防火墙(iptables/ufw),匹配规则后放行80端口的TCP连接;
  4. TCP 三次握手:Web 服务器(Nginx)监听80端口,与客户端完成 TCP 三次握手,建立可靠连接;
  5. HTTP 请求解析 :Nginx 接收客户端的 HTTP 请求,解析请求头 (Method:GET、Host:your-domain.com、User-Agent:浏览器标识、Referer:来源地址)和请求路径(/index.html);
  6. 静态资源查找 :Nginx 根据配置的网站根目录(如/usr/share/nginx/html),查找对应路径的静态资源(index.html);
  7. HTTP 响应封装 :Nginx 将找到的静态资源封装为 HTTP 响应(包含响应头:Status:200 OK、Content-Type:text/html,响应体:index.html 内容),通过已建立的 TCP 连接返回给客户端;
  8. 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核心数(性能最优);
  • 核心优势
    1. 高并发 :单台普通服务器可支撑10万+并发连接,远高于Apache;
    2. 低内存:万级并发下,内存占用仅几十到几百MB;
    3. 性能稳定:无内存泄漏,7*24小时运行无需重启;
    4. 功能丰富:原生支持反向代理、负载均衡、防盗链、访问控制、HTTPS、HTTP/2/3;
    5. 跨平台:支持Linux/Windows/Mac,Linux下性能最优;
    6. 模块化设计:通过模块扩展功能(如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;
  • 核心特点
    1. 兼容性极佳:支持所有Web标准,适配各种老项目/插件(如PHP的mod_php模块);
    2. 模块丰富:拥有上千个官方/第三方模块,可扩展任意功能;
    3. 配置简单:语法直观,适合新手入门;
    4. 稳定可靠:经过20+年的考验,无重大BUG,适合对稳定性要求极高的传统项目;
    5. 缺点:高并发下内存占用高、性能下降明显,不适合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. 核心安全防护措施

  1. 默认放行80/443,封禁所有无用端口:通过iptables/ufw只放行80/443(Web)、22(SSH),其余端口全部封禁;
  2. 封禁矿池IP/恶意IP:将挖矿矿池IP(如31.56.209.53)、暴力破解IP加入iptables/Nginx的封禁列表,批量IP用ipset;
  3. 限制访问频率:iptables做分钟级限流,Nginx做秒级限流,双重防止CC攻击;
  4. 封禁挖矿程序/恶意UA:在Nginx中封禁包含xmrig/miner/curl/wget的UA,只允许合法浏览器访问;
  5. 限制请求方法:只允许GET/POST/HEAD,禁止PUT/DELETE/OPTIONS等危险方法;
  6. 隐藏服务器版本信息:Nginx关闭server_tokens,Apache设置ServerTokens Prod,防止攻击者利用版本漏洞;
  7. 禁止访问敏感文件/目录:封禁.git/.env/conf/log等敏感文件,防止配置/数据泄露;
  8. 开启HTTPS并强制跳转:使用TLS1.2/1.3,禁用弱加密算法,防止数据被窃听/篡改;
  9. 配置文件权限加固:Nginx/Apache配置文件设为644,网站根目录设为755,禁止其他用户修改;
  10. 自动化封禁恶意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
相关推荐
天若有情6732 小时前
前端进阶必看:吃透这些高阶知识,告别CRUD,迈向高级前端工程师
前端·状态模式
暴力求解2 小时前
Linux---进程池
linux·运维·服务器
coderYYY2 小时前
git push报错Authentication failed for ‘xxx’也不会弹要求输入用户名密码的最终解决方法
前端·git·gitee·github
IMPYLH2 小时前
Linux 的 du 命令
linux·运维·服务器
l1t3 小时前
QWen 3.5plus总结的总结基准测试结果的正确方法
前端·数据库
kyriewen113 小时前
为什么我的代码在测试环境跑得好好的,一到用户电脑就崩?原来凶手躲在地址栏旁边
开发语言·前端·javascript·chrome·ecmascript·html5
!chen3 小时前
[Linux][虚拟串口]0x03一个特殊的字节
linux·运维·服务器
小北方城市网3 小时前
JavaScript 实战 —— 实现一个简易的 TodoList(适合前端入门 / 进阶)
开发语言·前端·javascript
是上好佳佳佳呀3 小时前
【前端(二)】CSS 知识梳理:从编写位置到选择器优先级
前端·css