Web 安全加固与高可用实验手册

Web 安全加固与高可用实验手册 1 安全加固实践 1.1 环境梳理 1.1.1 常见端口清单 标准业务端口对照表(Web 服务全栈) 服务组件 默认端口 网络访问层级 访问可信源范围 安全风险等级 SSH 远程管理 22 管理内网 仅运维管理段 10.0.0.0/24 高危(公网暴露易暴力破解)

Web 安全加固与高可用实验手册

1 安全加固实践

1.1 环境梳理

1.1.1 常见端口清单

标准业务端口对照表(Web 服务全栈)

服务组件 默认端口 网络访问层级 访问可信源范围 安全风险等级
SSH 远程管理 22 管理内网 仅运维管理段 10.0.0.0/24 高危(公网暴露易暴力破解)
Nginx 反向代理 80/443 公网入口 全网 0.0.0.0/0 中危(暴露公网,存在 CC、注入攻击)
SpringBoot 后端业务 8080/9090 内网服务层 仅 Nginx 宿主机 IP 中危(禁止公网直接访问)
MySQL 数据库 3306 数据层内网 仅后端服务网段 高危(公网暴露会拖库、暴力破解)
Redis 缓存 6379 缓存内网 仅后端服务网段 高危(无认证 Redis 可被远程写入木马)
VXLAN 隧道(集群互通) UDP 4789 宿主机底层 仅集群宿主机网段 中危(防止外网伪造隧道报文渗透内网)

端口分层访问边界定义

  1. 公网可直接开放端口:仅 80、443(Nginx),其余所有端口禁止对公网放行。
  2. 内网服务端口:8080、3306、6379,仅允许业务内网段互访。
  3. 管理端口:22、4789,仅运维宿主机集群网段放行。
  4. 本地进程端口:仅监听 127.0.0.1,不对外网卡暴露。

1.1.2 最小开放端口安全原则

1 默认拒绝基线原则

所有链默认策略设置为 DROP,未显式放行的流量全部丢弃,杜绝隐式放行带来的安全漏洞,不使用 ACCEPT 作为默认策略。

2 按需最小放行原则

  • 只开放业务运行必须的端口,下线、废弃业务端口立即删除放行规则。
  • 对内网服务端口(MySQL/Redis/SpringBoot),限制源 IP 网段,不允许全网访问。
  • 管理端口 SSH 严格限制运维内网源,禁止 0.0.0.0/0 全网放行。

3 分层隔离访问原则

  • 公网层:仅放行 80/443,其余全部拦截。
  • 业务内网层:后端、数据库、缓存仅互相访问。
  • 管理层:SSH、VXLAN 隧道仅运维集群网段互通。

4 禁止全端口泛洪原则

不使用 --dport 0:65535、不开放所有 ICMP,仅保留业务必要流量;限制 ICMP 类型,屏蔽扫描类 ICMP 报文。

6 规则持久化原则

所有 iptables 规则写入持久化工具,服务器重启后策略不丢失,杜绝临时规则失效带来的安全缺口。

1.1.3 实验环境准备

部署 ruoyi_vue 环境脚本都在【scripts】目录里面。

安装 ruoyi_vue 环境:

/bin/bash onekey_install_ruoyi_ubuntu24.sh

开放 Actuator 功能:

/bin/bash update_actuator_ruoyi_ubuntu24.sh

1.2 安全加固配置 [了解]

1.2.1 防火墙规则配置

定制防火墙规则:

# 本地网段:SSH/MySQL/Redis/VXLAN 统一放行来源
LOCAL_NET="10.0.0.0/24"

# 清空现有 filter 表规则
iptables -F

# 放行 lo 和已建立的连接规则
# 老版本 iptables 用 -m state --state,现在推荐使用 -m conntrack --ctstate
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 放行 22 本地连接规则
iptables -A INPUT -p tcp --dport 22 -s ${LOCAL_NET} -j ACCEPT

# 放行 80 和 443 外部访问规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 数据库环境仅允许本地网段主机访问
iptables -A INPUT -p tcp --dport 3306 -s ${LOCAL_NET} -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -s ${LOCAL_NET} -j ACCEPT

# 允许 vxlan 主机环境访问
iptables -A INPUT -p udp --dport 4789 -s ${LOCAL_NET} -j ACCEPT

# 默认策略收紧
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

防火墙规则持久化:

[root@ubuntu24-19 ~ ]# DEBIAN_FRONTEND=noninteractive apt install -y iptables-persistent
[root@ubuntu24-19 ~ ]# iptables-save > /etc/iptables/rules.v4

1.2.2 备份应用配置

准备备份目录:

mkdir -p hardening_backup_$(date +%F)

备份文件【mysql 部分暂不关心】:

BK=/root/hardening_backup_$(date +%F)
cp -a /etc/nginx /etc/redis/redis.conf "$BK/"
cp -a /root/RuoYi-Vue/ruoyi-admin/src/main/resources/application*.yml "$BK/"
cp -a /etc/iptables/rules.v4 "$BK/"

确认效果:

ls "$BK/"

1.2.3 MySQL 安全加固

mysql 环境监听安全:

[root@ubuntu24-19 ~ ]# vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1,10.0.0.19
mysqlx-bind-address = 127.0.0.1,10.0.0.19

[root@ubuntu24-19 ~ ]# systemctl restart mysql.service

用户安全【如果出现 root@%,清理掉】:

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
...
| root             | localhost |
| ruoyi            | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
# root 用户登录安全
alter user root@localhost identified by 'Magedu@2026';

# ruoyi 用户使用安全
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'ruoyi'@'localhost';
GRANT SELECT,INSERT,UPDATE,DELETE ON ry_vue.* TO 'ruoyi'@'localhost';

CREATE USER IF NOT EXISTS 'ruoyi_dev'@'10.0.0.%' IDENTIFIED BY 'Ruoyi@123';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,INDEX ON ry_vue.* TO 'ruoyi_dev'@'10.0.0.%';

FLUSH PRIVILEGES;

1.2.4 Redis 安全加固

redis 环境监听安全:

[root@ubuntu24-19 ~ ]# vim /etc/redis/redis.conf
# 监听内部和专用的地址
bind 127.0.0.1 10.0.0.19

# 开启保护模式
protected-mode yes
requirepass "Redis@2026"

# 禁用敏感命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command DEBUG ""

# 危险键操作,线上可按需改名
rename-command KEYS "KEYS_123456"
rename-command CONFIG "CONFIG_123456"

重启服务:

[root@ubuntu24-19 ~ ]# systemctl restart redis

1.2.5 Nginx 安全加固

Nginx 默认开启版本号回显、开启目录浏览功能。攻击者可通过响应头获取 Nginx 具体版本,针对性搜索版本漏洞。

cat > /etc/nginx/conf.d/security.conf <<'EOF'
server_tokens off;
autoindex off;
EOF

目录浏览会泄露网站目录结构、源码、配置文件,造成信息泄露。

chown -R www-data:www-data /data/ruoyi/web
find /data/ruoyi/web -type d -exec chmod 755 {} \;
find /data/ruoyi/web -type f -exec chmod 644 {} \;

重启 nginx 配置:

nginx -t && systemctl reload nginx

1.2.6 Actuator 安全加固

生产环境仅保留健康检查端点用于监控告警,关闭所有敏感信息端点。

[root@ubuntu24-19 ~ ]# cd RuoYi-Vue/
[root@ubuntu24-19 RuoYi-Vue ]# vim ruoyi-admin/src/main/resources/application.yml
...
# ========= Actuator 监控配置(独立端口 8091,仅本机访问) =========
management:
  endpoints:
    web:
      base-path: /actuator       # 默认 Actuator 端点的访问路径前缀
      exposure:
        include: 'health,metrics' # 暴露所有端点,推荐改为 health,metrics
  endpoint:
    health:
      show-details: never        # 健康检查显示详情
  server:
    port: 8091                   # actuator 单独端口,不能和 ruoyi 的 server.port 重复
    address: 127.0.0.1           # 只允许本机访问

打包项目确认效果:

# 版本打包
[root@ubuntu24-19 RuoYi-Vue ]# mvn clean package -DskipTests

# 运行项目
[root@ubuntu24-19 RuoYi-Vue ]# cp ruoyi-admin/target/ruoyi-admin.jar /data/ruoyi/server/
[root@ubuntu24-19 RuoYi-Vue ]# systemctl restart ruoyi-admin.service

2 keepalived 实践

2.1 环境部署

2.1.1 keepalived 部署

定制环境部署脚本 keepalived_install.sh【在 scripts 目录下】。

master 节点部署

[root@ubuntu24-13 ~ ]# /bin/bash keepalived_install.sh
当前节点的角色(MASTER|BACKUP): MASTER    # 输入 MASTER
[2026-07-19 19:50:49] 开始基本环境定制
...

# 最好重启一下主机
[root@ubuntu24-13 ~ ]# systemctl restart keepalived

backup 节点部署

[root@ubuntu24-16 ~ ]# /bin/bash keepalived_install.sh
当前节点的角色(MASTER|BACKUP): BACKUP
...

# 最好重启一下主机
[root@ubuntu24-16 ~ ]# systemctl restart keepalived

2.1.2 RS 主机部署

定制一键部署 Ruoyi-vue 环境脚本 install_ruoyi_ubuntu24.sh【文件在 scripts 目录下】。

定制专属脚本 lvs_dr_backend_server.sh【文件在 scripts 目录下】。

RS1 部署 ruoyi-vue 应用

[root@ubuntu24-19 ~ ]# /bin/bash install_ruoyi_ubuntu24.sh

# 定制额外的 nginx 测试页面
[root@ubuntu24-19 ~ ]# echo '10.0.0.19 nginx-RS1' > /data/ruoyi/web/dist/test.html

# lvs dr 模式的环境配置
[root@ubuntu24-19 ~ ]# /bin/bash lvs_dr_backend_server.sh start
The RS Server is Ready!

RS2 部署 ruoyi-vue 应用

[root@ubuntu24-22 ~ ]# /bin/bash install_ruoyi_ubuntu24.sh

# 定制额外的 nginx 测试页面
[root@ubuntu24-22 ~ ]# echo '10.0.0.22 nginx-RS2' > /data/ruoyi/web/dist/test.html

# lvs dr 模式的环境配置
[root@ubuntu24-22 ~ ]# scp lvs_dr_backend_server.sh root@10.0.0.22:

2.1.3 keepalived 配置

master 节点配置 [只显示主要的配置]

vrrp_instance VI_1 {
    state MASTER
    interface ens37
    virtual_router_id 50
    priority 100
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.100 dev ens33 label ens33:1
    }
}

virtual_server 10.0.0.100 80 {
    delay_loop 2
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 10.0.0.19 80 {
    }
    real_server 10.0.0.22 80 {
    }
}
[root@ubuntu24-13 ~ ]# systemctl restart keepalived

backup 节点配置 [只显示主要的配置]

vrrp_instance VI_1 {
    state BACKUP
    interface ens37
    virtual_router_id 50
    priority 99
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.100 dev ens33 label ens33:1
    }
}

virtual_server 10.0.0.100 80 {
    delay_loop 2
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 10.0.0.19 80 {
    }
    real_server 10.0.0.22 80 {
    }
}
[root@ubuntu24-16 ~ ]# systemctl restart keepalived

评论