档案管理系统网络安全加固全流程实操指南
一、操作系统基础层加固
本方案基于CentOS 7/8环境编写,涵盖SSH、防火墙及内核参数的硬配置。请使用root账号执行以下命令。
1. SSH服务安全配置
编辑SSH配置文件,修改默认端口并禁用密码登录,强制使用密钥认证,防止暴力破解。
执行命令:vi /etc/ssh/sshd_config
修改或添加以下内容:
```bash 禁用root远程登录 PermitRootLogin no 修改SSH端口(建议改为高位端口,如22222) Port 22222 禁用密码认证,仅允许密钥登录 PasswordAuthentication no 禁用空密码 PermitEmptyPasswords no 仅允许SSHv2协议 Protocol 2 限制登录验证时间(单位:秒) LoginGraceTime 60 最大重试次数 MaxAuthTries 3 禁用反向DNS解析,加快连接速度 UseDNS no ```配置完成后重启SSH服务:systemctl restart sshd
2. 防火墙策略配置
启用firewalld并仅开放必要端口。假设Web服务端口为80/443,新SSH端口为22222。
```bash 启动防火墙 systemctl start firewalld systemctl enable firewalld 移除默认SSH端口(如果之前是22) firewall-cmd --permanent --remove-service=ssh 添加新的SSH端口 firewall-cmd --permanent --add-port=22222/tcp 开放HTTP和HTTPS firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https 重载配置 firewall-cmd --reload 查看当前生效规则 firewall-cmd --list-all ```3. 内核参数优化
编辑系统内核参数文件,增强网络抗攻击能力。
执行命令:vi /etc/sysctl.conf
在文件末尾添加以下内容:
```bash 禁用IP源路由,防止IP欺骗 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 开启SYN Cookies保护,防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 开启反向路径过滤 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 忽略ICMP ping请求(可选,视业务需求) net.ipv4.icmp_echo_ignore_all = 1 处理源路由包 net.ipv4.conf.all.accept_source_route = 0 记录下伪装的IP包 net.ipv4.conf.all.log_martians = 1 调整TCP连接超时时间,防止资源耗尽 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 10 net.ipv4.tcp_keepalive_probes = 5 ```执行命令使配置立即生效:sysctl -p
二、Web服务器Nginx安全配置
档案管理系统通常部署在Nginx之上,需隐藏版本信息并配置安全响应头。
1. 隐藏版本号与安全头部
编辑Nginx主配置文件:vi /etc/nginx/nginx.conf
在http块中添加或修改以下指令:
```nginx http { 隐藏Nginx版本号 server_tokens off; 定义安全头部 add_header X-Frame-Options "SAMEORIGIN"; 防止点击劫持 add_header X-Content-Type-Options "nosniff"; 防止MIME类型嗅探 add_header X-XSS-Protection "1; mode=block"; 启用XSS保护 add_header Referrer-Policy "no-referrer-when-downgrade"; 客户端请求体大小限制(档案系统可能涉及文件上传,根据需求调整,此处设为100M) client_max_body_size 100M; 超时设置 client_body_timeout 12; client_header_timeout 12; send_timeout 10; keepalive_timeout 15; } ```2. 配置SSL/TLS强制加密
使用Let's Encrypt免费证书配置HTTPS。首先安装Certbot工具。
```bash 安装EPEL源(CentOS 7) yum install -y epel-release 安装certbot和nginx插件 yum install -y certbot python2-certbot-nginx ```
执行证书签发命令(需确保域名已解析至服务器IP):
```bash 将yourdomain.com替换为档案系统的实际域名 certbot --nginx -d yourdomain.com -d www.yourdomain.com ```配置自动续期:
```bash 添加定时任务 echo "0 0,12 root python -c 'import random; import time; time.sleep(random.random() 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null ```编辑站点配置文件/etc/nginx/conf.d/yourdomain.conf,强制HTTP跳转HTTPS:
```nginx server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name yourdomain.com www.yourdomain.com; SSL证书路径(Certbot会自动生成) ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; SSL安全配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; 网站根目录 root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } 禁止访问隐藏文件 location ~ /\. { deny all; } } ```重载Nginx:nginx -s reload
三、数据库MySQL安全加固
数据库是档案管理的核心,需严格限制文件访问和账号权限。
1. 配置文件安全参数
编辑MySQL配置文件:vi /etc/my.cnf
在[mysqld]部分添加以下配置:
```ini [mysqld] 禁止本地文件读取,防止SQL注入读取系统文件 local-infile=0 禁用符号链接,防止安全风险 symbolic-links=0 默认字符集 character-set-server=utf8mb4 关闭不需要的功能 skip-show-database 错误日志 log-error= /var/log/mysqld.log 慢查询日志(用于审计) slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2 ```重启MySQL服务:systemctl restart mysqld
2. 账号权限最小化
登录MySQL:mysql -u root -p
执行以下SQL语句进行权限清理:
```sql -- 删除匿名账号 DELETE FROM mysql.user WHERE User=''; -- 删除远程Root账号 DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); -- 删除测试数据库 DROP DATABASE IF EXISTS test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; -- 刷新权限 FLUSH PRIVILEGES; -- 为档案系统创建专用账号,限制仅能访问特定数据库 -- 创建数据库 CREATE DATABASE archives_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建用户并设置强密码 CREATE USER 'archive_user'@'localhost' IDENTIFIED BY 'ComplexPassword@123!'; -- 授权(仅授予必要权限) GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX ON archives_db. TO 'archive_user'@'localhost'; -- 刷新权限 FLUSH PRIVILEGES; ```四、入侵防御与日志审计
1. 安装配置Fail2ban
Fail2ban可以自动封禁暴力破解IP。
```bash 安装 yum install -y fail2ban 启动并开机自启 systemctl start fail2ban systemctl enable fail2ban ```创建本地配置文件:vi /etc/fail2ban/jail.local
```ini [DEFAULT] 封禁时间(秒) bantime = 3600 在时间窗口内发现多少次失败后封禁 findtime = 600 maxretry = 5 [sshd] enabled = true port = 22222 logpath = /var/log/secure maxretry = 3 [nginx-http-auth] enabled = true port = http,https logpath = /var/log/nginx/error.log maxretry = 5 ```重启Fail2ban:systemctl restart fail2ban
2. 自动化备份脚本
创建备份脚本/usr/local/bin/backup.sh:
```bash !/bin/bash 定义变量 BACKUP_DIR="/data/backup" MYSQL_USER="root" MYSQL_PASS="YourRootPassword" DB_NAME="archives_db" DATE=$(date +%Y%m%d_%H%M%S) 创建备份目录 mkdir -p $BACKUP_DIR 备份数据库 mysqldump -u$MYSQL_USER -p$MYSQL_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz 备份网站文件 tar -czf $BACKUP_DIR/web_$DATE.tar.gz /var/www/html 删除7天前的备份 find $BACKUP_DIR -type f -mtime +7 -exec rm -f {} \; echo "Backup completed at $DATE" ```赋予执行权限并添加定时任务:
```bash chmod +x /usr/local/bin/backup.sh 每天凌晨2点执行 echo "0 2 /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" | crontab - ```