CentOS服务器的高可用与安全运维,核心不是堆砌多少工具,而是先理清“故障转移”和“安全基线”这两条主线。高可用解决的是服务持续在线的问题,安全架构解决的是谁能访问、访问了什么、出事后能不能追溯的问题。很多团队把精力花在装监控、配防火墙,却忽略了最基础的SSH访问控制和文件完整性校验,导致服务器裸奔在公网上。下面直接拆解一套可落地的架构方案,从系统层、网络层、应用层到数据层逐级加固,同时保证在单点故障时业务能快速切换。
系统层加固:先关掉所有不必要的入口
CentOS安装完成后,第一件事不是装业务软件,而是最小化系统暴露面。检查当前监听的端口,只保留SSH和业务必须的端口,其余全部关闭。使用ss命令查看监听状态:
ss -tulnp | grep LISTEN
对于不需要的服务,比如postfix、chronyd之外的rpcbind、avahi-daemon,直接停止并禁用:
systemctl stop rpcbind.socket systemctl disable rpcbind.socket systemctl stop avahi-daemon systemctl disable avahi-daemon
SSH登录必须禁用root直接登录,改用普通用户加sudo提权。修改/etc/ssh/sshd_config:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2
密钥登录要强制使用ed25519或RSA 4096位以上密钥,禁止使用空密码。同时配置fail2ban来防止暴力破解,安装后新建/etc/fail2ban/jail.local,针对sshd设置封禁策略:
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600 findtime = 600
内核参数也需要调整,开启SYN cookie防护、禁止ICMP重定向、限制core dump。在/etc/sysctl.conf中追加:
net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 fs.suid_dumpable = 0 kernel.core_uses_pid = 1
执行sysctl -p使其生效。这些配置能显著降低系统被扫描和利用的风险。
网络层隔离与防火墙策略
高可用架构中,网络层要做两件事:一是用防火墙限制东西向流量,二是用虚拟IP实现故障漂移。CentOS 7/8默认使用firewalld,建议直接使用iptables或nftables做精细控制。对于生产环境,最好在云控制台的安全组和本机防火墙做双重限制,只放行业务端口和运维跳板机的IP。
如果业务需要多台服务器组成集群,可以使用Keepalived实现VIP漂移。安装Keepalived后,主节点配置/etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass yourpassword
}
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
}
备节点将state改为BACKUP,priority改为90。这样当主节点宕机时,VIP会自动漂移到备节点,业务无需修改连接地址。对于数据库等高可用场景,还可以配合MHA或Orchestrator做主从切换,但Keepalived解决的是入口层的高可用。
防火墙策略要明确默认拒绝,只放行必要端口。以iptables为例:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/8 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT service iptables save
注意SSH只允许内网或指定跳板机IP访问,不要对全网开放22端口。如果必须远程运维,先通过堡垒机或VPN进入内网,再连接服务器。
应用层高可用:负载均衡与服务健康检查
单台CentOS服务器即使配置再高,也有物理故障的风险。应用层高可用通常采用Nginx或HAProxy做反向代理和负载均衡,后端挂多台应用服务器。Nginx的upstream模块可以配置健康检查:
upstream backend {
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
}
}
健康检查依赖max_fails和fail_timeout参数,当后端连续3次请求失败,Nginx会将该节点摘除30秒。对于更精细的健康检查,可以使用nginx_upstream_check_module模块,或者用HAProxy的httpchk选项主动探测。
应用层安全还要关注Web应用的漏洞防护。如果运行的是PHP、Java等应用,务必在Nginx层配置请求大小限制、超时限制和过滤规则。例如限制请求体大小防止上传攻击:
client_max_body_size 10m; client_body_buffer_size 128k; client_header_buffer_size 4k; large_client_header_buffers 4 16k;
同时配置limit_req模块做请求频率限制,防止CC攻击:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend;
}
这些配置能有效缓解常见的应用层DDoS和暴力接口调用。
数据层高可用与备份策略
数据是服务器上最核心的资产,高可用架构必须包含数据冗余和可恢复能力。对于MySQL或MariaDB,建议至少配置主从复制,主库写入,从库读和备份。主库配置/etc/my.cnf:
[mysqld] server-id=1 log-bin=mysql-bin binlog_format=ROW expire_logs_days=7 sync_binlog=1 innodb_flush_log_at_trx_commit=1
从库配置server-id=2,并执行CHANGE MASTER TO指向主库。主从复制虽然不能自动故障切换,但配合MHA或Orchestrator可以实现自动提升从库为主库。对于关键业务,建议至少一主两从,其中一个从库专门用于备份,避免备份影响业务。
备份策略要遵循3-2-1原则:至少3份副本,2种不同介质,1份异地存放。使用Percona XtraBackup做物理热备,配合mysqldump做逻辑备份。每天凌晨执行全量备份,每小时执行增量备份。备份脚本示例:
#!/bin/bash BACKUP_DIR=/data/backup/mysql DATE=$(date +%Y%m%d_%H%M%S) xtrabackup --backup --target-dir=$BACKUP_DIR/full_$DATE --user=backup --password=yourpass --parallel=4 xtrabackup --prepare --target-dir=$BACKUP_DIR/full_$DATE tar -czf $BACKUP_DIR/full_$DATE.tar.gz -C $BACKUP_DIR full_$DATE # 上传到异地存储,如对象存储或另一台服务器 rsync -avz $BACKUP_DIR/full_$DATE.tar.gz backup@remote-server:/backup/mysql/
文件系统层面,对于静态文件和配置文件,使用rsync或lsyncd做实时同步,同时配合快照功能。如果是云服务器,定期创建磁盘快照,快照恢复速度远快于文件级备份。
日志审计与入侵检测
安全架构的最后一环是审计和检测。没有日志,出了问题无法追溯。CentOS上必须配置auditd审计系统,记录关键文件和系统调用。安装audit后,配置/etc/audit/rules.d/audit.rules:
-w /etc/passwd -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/ssh/sshd_config -p wa -k sshd_config -w /var/log/lastlog -p wa -k logins -w /etc/sudoers -p wa -k sudoers -w /usr/bin/passwd -p x -k passwd_modification -a always,exit -F arch=b64 -S execve -k command_exec
重启auditd服务使规则生效。同时安装AIDE做文件完整性校验,初始化数据库:
aide --init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
每天定时执行aide --check,比对文件哈希值,发现异常变动立即告警。对于实时入侵检测,可以部署OSSEC或Wazuh,监控日志中的异常登录、提权行为、可疑命令执行。Wazuh的安装相对简单,配置agent上报到管理端,规则库会自动分析SSH暴力破解、root登录、敏感文件修改等事件。
日志集中管理也很重要。使用rsyslog将多台服务器的日志发送到中央日志服务器,避免单机日志被篡改或删除。在客户端配置/etc/rsyslog.conf:
*.* @192.168.1.200:514
日志服务器上使用Logrotate做日志轮转,保留至少90天。对于关键安全事件,可以配置邮件或企业微信告警,确保第一时间响应。
自动化运维与配置管理
手动运维多台CentOS服务器效率低且容易出错。引入Ansible做配置管理和批量操作,将所有安全基线、软件安装、配置变更写成playbook,确保每台服务器配置一致。例如一个基础安全加固的playbook片段:
- name: Harden SSH configuration
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
with_items:
- { regexp: '^PermitRootLogin', line: 'PermitRootLogin no' }
- { regexp: '^PasswordAuthentication', line: 'PasswordAuthentication no' }
- { regexp: '^MaxAuthTries', line: 'MaxAuthTries 3' }
notify: restart sshd
通过Ansible Tower或AWX做任务调度和审计,所有变更都有记录。同时将服务器配置纳入Git版本控制,实现基础设施即代码。这样新服务器上线时,一条命令即可完成基础加固,避免人为遗漏。
高可用安全运维架构不是一次性搭建完就结束了,而是一个持续迭代的过程。定期做漏洞扫描、渗透测试、配置复查,根据业务变化调整防火墙策略和资源配额。CentOS 7已经停止维护,建议尽快迁移到Rocky Linux或AlmaLinux,它们与CentOS兼容,且继续提供安全更新。架构的核心是让每一层都有冗余和防护,同时保证运维操作可审计、可回滚,这样才能在故障和安全事件发生时从容应对。
