redisTemplate;
public boolean isAllowed(String key, int limit, Duration window) {
String redisKey = "rate_limit:" + key;
String current = redisTemplate.opsForValue().get(redisKey);
if (current == null) {
redisTemplate.opsForValue().set(redisKey, "1", window);
return true;
}
int count = Integer.parseInt(current);
if (count < limit) {
redisTemplate.opsForValue().increment(redisKey);
return true;
}
return false;
}
}
```
## 五、网络安全设计
### 5.1 网络拓扑安全
```mermaid
graph TB
subgraph "外网区域"
INTERNET[互联网]
CDN[CDN加速]
DNS[DNS服务]
end
subgraph "边界防护"
WAF[Web应用防火墙
国产WAF产品]
FW_BORDER[边界防火墙
安全审计]
IPS[入侵防护系统
威胁检测]
DPI[深度包检测
流量分析]
end
subgraph "DMZ区域"
LB[负载均衡器
SSL卸载]
WEB1[Web服务器1]
WEB2[Web服务器2]
PROXY[反向代理]
end
subgraph "内网安全"
FW_INTERNAL[内部防火墙]
VLAN_APP[应用VLAN]
VLAN_DB[数据库VLAN]
VLAN_MGT[管理VLAN]
end
subgraph "应用层"
APP1[应用服务器1]
APP2[应用服务器2]
APP3[应用服务器3]
end
subgraph "数据层"
DB_MASTER[OpenGauss主库]
DB_SLAVE[OpenGauss从库]
REDIS[Redis集群]
end
subgraph "管理层"
JUMP[跳板机]
MONITOR[监控服务器]
LOG[日志服务器]
end
INTERNET --> CDN
CDN --> DNS
DNS --> WAF
WAF --> FW_BORDER
FW_BORDER --> IPS
IPS --> DPI
DPI --> LB
LB --> WEB1
LB --> WEB2
WEB1 --> PROXY
WEB2 --> PROXY
PROXY --> FW_INTERNAL
FW_INTERNAL --> VLAN_APP
FW_INTERNAL --> VLAN_DB
FW_INTERNAL --> VLAN_MGT
VLAN_APP --> APP1
VLAN_APP --> APP2
VLAN_APP --> APP3
VLAN_DB --> DB_MASTER
VLAN_DB --> DB_SLAVE
VLAN_DB --> REDIS
VLAN_MGT --> JUMP
VLAN_MGT --> MONITOR
VLAN_MGT --> LOG
```
### 5.2 防火墙策略配置
#### 5.2.1 边界防火墙策略
```bash
# 允许HTTPS访问
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许HTTP重定向到HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 禁止直接数据库访问
iptables -A INPUT -p tcp --dport 5432 -s ! 192.168.1.0/24 -j DROP
# 允许内网SSH管理
iptables -A INPUT -p tcp --dport 22 -s 192.168.100.0/24 -j ACCEPT
# 拒绝其他所有入站连接
iptables -A INPUT -j DROP
```
#### 5.2.2 应用层防火墙策略
```bash
# 只允许来自DMZ区的连接
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# 允许访问数据库
iptables -A OUTPUT -d 192.168.2.0/24 -p tcp --dport 5432 -j ACCEPT
# 允许访问Redis
iptables -A OUTPUT -d 192.168.2.0/24 -p tcp --dport 6379 -j ACCEPT
# 允许DNS查询
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# 拒绝其他出站连接
iptables -A OUTPUT -j DROP
```
### 5.3 入侵检测与防护
#### 5.3.1 IDS/IPS规则配置
```bash
# Suricata规则示例
alert tcp any any -> $HOME_NET 443 (msg:"Suspicious HTTPS traffic"; \
content:"POST"; http_method; content:"/api/admin"; http_uri; \
threshold:type limit, track by_src, count 10, seconds 60; \
sid:10001; rev:1;)
alert tcp any any -> $HOME_NET 5432 (msg:"Direct database access attempt"; \
content:"SELECT"; content:"FROM"; distance:0; \
sid:10002; rev:1;)
alert tcp any any -> $HOME_NET any (msg:"Brute force attack detected"; \
flags:S; threshold:type threshold, track by_src, count 100, seconds 60; \
sid:10003; rev:1;)
```
## 六、数据安全设计
### 6.1 数据分类分级
#### 6.1.1 数据分类标准
```mermaid
graph TB
subgraph "数据分类"
TOP_SECRET[绝密级
核心商业机密]
SECRET[机密级
重要业务数据]
INTERNAL[内部级
一般业务数据]
PUBLIC[公开级
公开业务数据]
end
subgraph "水务业务数据"
CUSTOMER[客户身份信息
机密级]
METER[水表计量数据
内部级]
BILLING[收费账务数据
机密级]
REPORT[统计报表数据
内部级]
CONFIG[系统配置数据
内部级]
LOG[日志审计数据
内部级]
end
subgraph "保护措施"
ENC_HIGH[强加密
SM4+数字签名]
ENC_MID[加密存储
SM4算法]
ENC_LOW[访问控制
权限管理]
ENC_NONE[公开访问
无特殊保护]
end
TOP_SECRET --> ENC_HIGH
SECRET --> ENC_MID
INTERNAL --> ENC_LOW
PUBLIC --> ENC_NONE
CUSTOMER --> SECRET
BILLING --> SECRET
METER --> INTERNAL
REPORT --> INTERNAL
CONFIG --> INTERNAL
LOG --> INTERNAL
```
#### 6.1.2 数据保护策略
```sql
-- 客户敏感信息表(机密级)
CREATE TABLE water_customer_sensitive (
id SERIAL PRIMARY KEY,
customer_id BIGINT NOT NULL,
-- 身份证号:强加密存储
id_card_encrypted VARCHAR(200) ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = customer_sensitive_key,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'SM4-CTR'
),
-- 银行卡号:强加密存储
bank_account_encrypted VARCHAR(200) ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = customer_sensitive_key,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'SM4-CTR'
),
-- 手机号:确定性加密,支持查询
phone_encrypted VARCHAR(200) ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = customer_sensitive_key,
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'SM4-CTR'
),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 创建行级安全策略
CREATE POLICY customer_sensitive_policy ON water_customer_sensitive
FOR ALL TO water_customer_service_role
USING (
customer_id IN (
SELECT customer_id FROM water_customer
WHERE tenant_id = current_setting('app.current_tenant_id')::bigint
)
);
```
### 6.2 数据备份与恢复安全
#### 6.2.1 备份加密策略
```bash
#!/bin/bash
# OpenGauss安全备份脚本
# 设置备份参数
BACKUP_DIR="/backup/opengauss"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="water_biz_backup_${DATE}.tar.gz"
ENCRYPT_KEY="/etc/opengauss/backup_key.key"
# 创建加密备份
gs_backup -D $GAUSSDATA -U gaussdb \
--encrypt --encrypt-key-file=$ENCRYPT_KEY \
--backup-format=tar \
--backup-path=$BACKUP_DIR/$BACKUP_FILE
# 验证备份完整性
openssl dgst -sm3 $BACKUP_DIR/$BACKUP_FILE > $BACKUP_DIR/$BACKUP_FILE.sm3
# 安全传输到异地备份中心
rsync -avz --delete $BACKUP_DIR/ backup-server:/backup/remote/
```
#### 6.2.2 数据恢复流程
```sql
-- 恢复前验证备份完整性
-- 1. 验证SM3摘要
-- 2. 解密备份文件
-- 3. 验证数据库结构
-- 4. 执行恢复操作
-- 创建恢复测试环境
CREATE DATABASE water_biz_recovery_test;
-- 恢复数据到测试环境
\c water_biz_recovery_test;
-- 执行恢复SQL脚本
\i /backup/water_biz_recovery.sql;
-- 验证数据完整性
SELECT COUNT(*) FROM water_customer;
SELECT COUNT(*) FROM water_meter_reading;
SELECT COUNT(*) FROM water_billing;
-- 验证加密数据
SELECT id,
pgp_sym_decrypt(id_card_encrypted, 'encryption_key') as id_card
FROM water_customer_sensitive LIMIT 1;
```
### 6.3 数据销毁与清理
#### 6.3.1 安全数据销毁
```sql
-- 创建安全数据销毁函数
CREATE OR REPLACE FUNCTION secure_data_destroy(table_name TEXT, where_clause TEXT)
RETURNS BOOLEAN AS $$
DECLARE
sql_cmd TEXT;
affected_rows INTEGER;
BEGIN
-- 构建删除SQL
sql_cmd := 'DELETE FROM ' || table_name || ' WHERE ' || where_clause;
-- 执行删除
EXECUTE sql_cmd;
GET DIAGNOSTICS affected_rows = ROW_COUNT;
-- 记录审计日志
INSERT INTO data_destroy_audit (
table_name, where_clause, affected_rows,
operator, operation_time
) VALUES (
table_name, where_clause, affected_rows,
current_user, current_timestamp
);
-- 执行VACUUM清理物理空间
EXECUTE 'VACUUM FULL ' || table_name;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RAISE EXCEPTION '数据销毁失败: %', SQLERRM;
RETURN FALSE;
END;
$$ LANGUAGE plpgsql;
-- 示例:销毁3年前的历史数据
SELECT secure_data_destroy(
'water_meter_reading_history',
'reading_date < CURRENT_DATE - INTERVAL ''3 years'''
);
```
## 七、运维安全设计
### 7.1 安全监控体系
#### 7.1.1 安全监控架构
```mermaid
graph TB
subgraph "数据采集层"
AGENT1[系统日志采集]
AGENT2[应用日志采集]
AGENT3[数据库日志采集]
AGENT4[网络流量采集]
end
subgraph "数据处理层"
KAFKA[消息队列
Kafka集群]
STREAM[流处理
Flink/Storm]
ETL[数据清洗
Logstash]
end
subgraph "存储分析层"
ES[Elasticsearch
日志存储]
SIEM[安全信息事件管理
SIEM平台]
AI[智能分析
机器学习]
end
subgraph "可视化层"
DASHBOARD[监控仪表盘
Grafana]
ALERT[告警系统
AlertManager]
REPORT[安全报告
自动生成]
end
AGENT1 --> KAFKA
AGENT2 --> KAFKA
AGENT3 --> KAFKA
AGENT4 --> KAFKA
KAFKA --> STREAM
STREAM --> ETL
ETL --> ES
ES --> SIEM
SIEM --> AI
AI --> DASHBOARD
DASHBOARD --> ALERT
ALERT --> REPORT
```
#### 7.1.2 安全事件检测规则
```yaml
# 安全事件检测规则配置
security_rules:
- name: "暴力破解检测"
type: "authentication"
condition: "failed_login_count > 5 in 5 minutes"
severity: "high"
action: ["block_ip", "send_alert"]
- name: "异常数据访问"
type: "data_access"
condition: "query_count > 1000 in 1 minute"
severity: "medium"
action: ["rate_limit", "send_alert"]
- name: "权限提升检测"
type: "privilege_escalation"
condition: "role_change to admin"
severity: "critical"
action: ["block_user", "send_alert", "create_incident"]
- name: "异常时间访问"
type: "abnormal_access"
condition: "access_time between 22:00 and 06:00"
severity: "medium"
action: ["log_event", "send_alert"]
```
### 7.2 漏洞管理
#### 7.2.1 漏洞扫描策略
```bash
#!/bin/bash
# 系统漏洞扫描脚本
# 扫描操作系统漏洞
nmap -sV --script vulners localhost
# 扫描Web应用漏洞
nikto -h https://water.example.com -ssl
# 扫描数据库漏洞
nmap -p 5432 --script pgsql-brute,pgsql-databases localhost
# 生成漏洞报告
cat > vulnerability_report.html << EOF
安全漏洞扫描报告
福建水务营收系统漏洞扫描报告
扫描时间:$(date)
高危漏洞
$(grep -i "high\|critical" scan_results.txt)
中危漏洞
$(grep -i "medium" scan_results.txt)
EOF
```
#### 7.2.2 补丁管理流程
```mermaid
graph LR
DISCOVER[漏洞发现] --> ASSESS[风险评估]
ASSESS --> PLAN[补丁计划]
PLAN --> TEST[测试验证]
TEST --> DEPLOY[生产部署]
DEPLOY --> VERIFY[部署验证]
VERIFY --> DOCUMENT[文档记录]
subgraph "评估标准"
HIGH[高危
24小时内]
MEDIUM[中危
7天内]
LOW[低危
30天内]
end
ASSESS --> HIGH
ASSESS --> MEDIUM
ASSESS --> LOW
```
### 7.3 应急响应预案
#### 7.3.1 安全事件分级
| 级别 | 描述 | 响应时间 | 处理措施 |
|------|------|----------|----------|
| P0 | 系统完全不可用,数据泄露 | 15分钟 | 立即启动应急预案,通知管理层 |
| P1 | 核心功能受影响,安全风险高 | 30分钟 | 启动应急预案,组建应急小组 |
| P2 | 部分功能受影响,安全风险中等 | 2小时 | 安排专人处理,定期汇报 |
| P3 | 轻微影响,安全风险较低 | 8小时 | 正常工作时间处理 |
#### 7.3.2 应急响应流程
```mermaid
graph TB
INCIDENT[安全事件发生] --> DETECT[事件检测]
DETECT --> REPORT[事件上报]
REPORT --> ASSESS[影响评估]
ASSESS --> RESPONSE[应急响应]
subgraph "应急响应措施"
ISOLATE[系统隔离]
PRESERVE[证据保全]
RECOVER[系统恢复]
INVESTIGATE[调查分析]
end
subgraph "后续处理"
LESSON[经验总结]
IMPROVE[流程改进]
TRAIN[培训加强]
DOC[文档更新]
end
RESPONSE --> ISOLATE
RESPONSE --> PRESERVE
RESPONSE --> RECOVER
RESPONSE --> INVESTIGATE
INVESTIGATE --> LESSON
LESSON --> IMPROVE
IMPROVE --> TRAIN
TRAIN --> DOC
```
## 八、安全管理制度
### 8.1 安全组织架构
#### 8.1.1 安全管理组织
```mermaid
graph TB
CEO[总经理
安全最高责任人]
CISO[信息安全负责人
CISO]
subgraph "安全管理委员会"
IT_DIR[IT总监]
SECURITY_DIR[安全总监]
COMPLIANCE[合规负责人]
LEGAL[法务负责人]
end
subgraph "安全执行团队"
SEC_ADMIN[安全管理员]
SYS_ADMIN[系统管理员]
DBA[数据库管理员]
NET_ADMIN[网络管理员]
end
subgraph "业务安全责任人"
BUS_OWNER[业务负责人]
DATA_OWNER[数据负责人]
USER_ADMIN[用户管理员]
end
CEO --> CISO
CISO --> IT_DIR
CISO --> SECURITY_DIR
CISO --> COMPLIANCE
CISO --> LEGAL
IT_DIR --> SEC_ADMIN
IT_DIR --> SYS_ADMIN
IT_DIR --> DBA
IT_DIR --> NET_ADMIN
SECURITY_DIR --> BUS_OWNER
SECURITY_DIR --> DATA_OWNER
SECURITY_DIR --> USER_ADMIN
```
### 8.2 安全管理制度
#### 8.2.1 人员安全管理
- **入职安全审查**:对关键岗位人员进行背景调查
- **安全培训**:定期进行信息安全意识培训
- **权限管理**:建立权限申请、审批、回收流程
- **离职管理**:离职人员权限及时回收,签署保密协议
#### 8.2.2 系统建设安全管理
- **安全需求分析**:项目立项阶段进行安全需求分析
- **安全设计评审**:设计阶段进行安全架构评审
- **安全测试**:上线前进行安全渗透测试
- **安全验收**:系统上线前进行安全验收
#### 8.2.3 系统运维安全管理
- **变更管理**:所有系统变更都需要安全评估
- **备份管理**:定期备份,异地存储,加密保护
- **监控管理**:7×24小时安全监控
- **应急管理**:建立应急响应机制
### 8.3 合规管理
#### 8.3.1 法律法规合规
- 《中华人民共和国网络安全法》
- 《中华人民共和国数据安全法》
- 《中华人民共和国个人信息保护法》
- 《关键信息基础设施安全保护条例》
#### 8.3.2 行业标准合规
- GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》
- GB/T 25070-2019《信息安全技术 网络安全等级保护安全设计技术要求》
- GB/T 32918《信息安全技术 SM2椭圆曲线公钥密码算法》
- GB/T 32905《信息安全技术 SM3密码杂凑算法》
#### 8.3.3 合规检查清单
- [ ] 等级保护三级备案完成
- [ ] 年度安全评估报告
- [ ] 安全管理制度建立
- [ ] 安全技术措施落实
- [ ] 安全培训记录完整
- [ ] 应急预案演练记录
- [ ] 安全事件处置记录
- [ ] 第三方安全服务合同
---
## 总结
福建水务营收系统安全设计严格按照等级保护三级要求,结合OpenGauss数据库的安全特性,建立了全方位、多层次的安全防护体系。通过技术防护、管理制度、人员培训等多重措施,确保系统安全稳定运行,满足水务行业的安全合规要求。
本安全设计方案的核心特点:
1. **国产化安全**:采用OpenGauss数据库和国密算法
2. **纵深防御**:网络、应用、数据多层安全防护
3. **合规导向**:严格按照等保三级标准设计
4. **持续改进**:建立安全监控和应急响应机制
5. **管理规范**:完善的安全管理制度和流程