更多请点击:
https://codechina.net
第一章:VMware安装CentOS 7必做的5项加固操作,从最小化安装到SSH密钥登录,安全基线一步到位,错过再等半年!
在VMware Workstation或vSphere中完成CentOS 7最小化安装后,系统默认配置存在多项安全风险:root远程直连、弱密码策略、未启用防火墙、明文传输凭证、以及未审计关键服务。以下五项操作构成生产环境最低安全基线,建议在首次启动后立即执行。
禁用root远程SSH登录并创建专用管理用户
# 创建无sudo权限的运维用户(后续按需授权)
useradd -m -c "Ops Admin" ops
passwd ops
# 禁用root SSH登录(编辑/etc/ssh/sshd_config)
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd
该操作强制使用普通用户登录,避免暴力破解root账户。
配置SSH密钥认证替代密码登录
- 客户端生成密钥对:
ssh-keygen -t ed25519 -C "ops@centos7" - 将公钥复制至服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub ops@your-server-ip - 禁用密码认证:
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config && systemctl restart sshd
启用并配置firewalld基础规则
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --remove-service=dhcpv6-client # 移除非必要服务
firewall-cmd --reload
强化系统日志与审计策略
| 配置项 | 作用 | 执行命令 |
|---|
| 持久化journal日志 | 防止重启后日志丢失 | mkdir -p /var/log/journal && systemd-tmpfiles --create --prefix /var/log/journal |
| 启用auditd审计 | 监控关键系统调用 | systemctl enable auditd && systemctl start auditd |
更新内核与基础软件包并禁用不必要服务
yum update -y
systemctl disable postfix tuned bluetoothd avahi-daemon
第二章:CentOS 7最小化安装与VMware环境适配
2.1 VMware Tools安装与内核模块加载实践
安装流程与依赖检查
在 CentOS 7/8 或 Ubuntu 20.04+ 系统中,需先挂载 VMware Tools ISO 并解压:
# 挂载光驱并复制工具包
mount /dev/cdrom /mnt
tar -xzf /mnt/VMwareTools-*.tar.gz -C /tmp
该命令将 VMware Tools 源码释放至
/tmp/vmware-tools-distrib,为后续编译提供基础。
内核模块编译关键参数
执行安装脚本时,核心参数决定模块兼容性:
--no-kernel-modules:跳过内核模块编译(仅适用已预编译的发行版包)--kernel-version=5.10.0-28-amd64:显式指定内核版本,避免自动探测失败
模块加载状态验证
| 模块名 | 用途 | 是否加载 |
|---|
| vmw_vsock_vmci_transport | 虚拟套接字通信 | ✅ |
| vmwgfx | 3D 图形加速 | ❌(需启用 3D 支持) |
2.2 网络配置优化:静态IP、DNS与主机名策略
静态IP配置实践
为保障服务稳定性,建议在关键服务器上禁用DHCP,采用静态IP配置。以Ubuntu 22.04为例:
# /etc/netplan/01-network-manager-all.yaml
network:
version: 2
renderer: networkd
ethernets:
ens3:
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
dhcp4: false
该配置禁用DHCP并显式声明网关与DNS,避免运行时网络抖动导致服务中断。
DNS与主机名协同策略
- 主机名应遵循RFC 1178规范,使用小写字母、数字和连字符
- /etc/hosts中需映射本地解析,避免依赖外部DNS单点故障
| 配置项 | 推荐值 | 风险提示 |
|---|
| hostname | web-prod-01 | 避免使用下划线或大写 |
| search domain | internal.example.com | 确保与Kubernetes或Ansible inventory一致 |
2.3 时间同步服务(chronyd)部署与NTP源加固
基础部署与配置验证
# 安装并启用 chronyd
sudo dnf install -y chrony
sudo systemctl enable --now chronyd
sudo chronyc tracking # 验证同步状态
该命令链完成服务安装、开机自启及运行时激活;
chronyc tracking 输出中
System clock synchronized 字段为
yes 表明已成功锁定上游时间源。
NTP源加固策略
- 禁用公共池(pool.ntp.org),改用组织内可信授时服务器
- 启用 NTS(Network Time Security)加密认证,防范中间人篡改
推荐配置对比表
| 配置项 | 加固前 | 加固后 |
|---|
| server 指令 | server pool.ntp.org iburst | server ntp.internal.corp iburst nts |
| 访问控制 | 默认开放 | deny all + allow 10.0.0.0/8 |
2.4 SELinux策略调优: enforcing模式下的最小权限实践
核心原则:从permissive过渡到enforcing
在生产环境启用enforcing前,需基于audit.log生成精准策略。使用
ausearch和
sealert定位真实拒绝事件,避免宽泛的allow规则。
策略裁剪示例
# 仅允许nginx读取特定证书路径
allow httpd_t cert_t:file { read getattr open };
# 拒绝写入日志目录(除非明确授权)
deny httpd_t var_log_t:dir write;
该规则集禁止httpd_t域对日志目录的写操作,强制其仅通过logrotate等受信域完成日志轮转,体现最小权限思想。
关键策略组件对比
| 组件 | 作用 | 最小化建议 |
|---|
| type enforcement | 定义主体-客体访问控制 | 按服务粒度拆分domain,禁用unconfined_t |
| role-based access | 限制角色可进入的domain | 移除system_r对admin_r的继承 |
2.5 内核参数加固:禁用IPv6、关闭ICMP重定向与TCP SYN Cookie启用
核心加固目标
通过调整 Linux 内核运行时参数,降低攻击面并增强 TCP 连接抗压能力,适用于面向公网的服务器场景。
关键参数配置
# 禁用IPv6(若业务无需IPv6)
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.d/99-security.conf
echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.d/99-security.conf
# 关闭ICMP重定向(防止路由劫持)
echo 'net.ipv4.conf.all.accept_redirects = 0' >> /etc/sysctl.d/99-security.conf
echo 'net.ipv4.conf.default.accept_redirects = 0' >> /etc/sysctl.d/99-security.conf
# 启用TCP SYN Cookie(抵御SYN Flood)
echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.d/99-security.conf
`tcp_syncookies=1` 在连接队列满时启用 SYN Cookie 机制,不依赖内存存储半连接状态;`accept_redirects=0` 阻止恶意网关伪造 ICMP 重定向报文篡改路由;禁用 IPv6 可减少潜在攻击向量及内核模块攻击面。
生效验证
- 执行
sysctl --system 加载新配置 - 用
sysctl net.ipv4.tcp_syncookies 确认返回值为 1
第三章:系统账户与基础服务安全管控
3.1 root账户锁定与sudo权限精细化授权实践
禁用root登录的标准化操作
# 禁用root密码认证,强制使用密钥或sudo
sudo passwd -l root
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
该命令序列先锁定root密码,再关闭SSH直连,确保所有管理操作必须经由普通用户+sudo路径,提升审计可追溯性。
基于角色的sudo最小权限配置
/etc/sudoers.d/webadmin:仅授权重启nginx、查看日志/etc/sudoers.d/dba:允许执行pg_ctl和备份脚本,禁止shell访问
权限策略对比表
| 策略类型 | 适用场景 | 风险等级 |
|---|
| ALL=(ALL) ALL | 开发测试环境 | 高 |
| ALL=(root) /bin/systemctl restart nginx | 生产Web运维 | 低 |
3.2 无用系统服务禁用清单与systemd单元管理
常见可禁用服务清单
avahi-daemon.service:局域网零配置发现,内网无设备发现需求时可禁用bluetooth.service:无蓝牙外设场景下建议屏蔽ModemManager.service:非移动宽带环境无需运行
安全禁用操作流程
# 查看服务状态并禁用(不立即停止)
sudo systemctl disable --now avahi-daemon bluetooth ModemManager
# 屏蔽服务(防止被其他单元自动启动)
sudo systemctl mask avahi-daemon.socket
该命令组合确保服务既不随系统启动,也无法被依赖单元激活;
--now 同时停止当前运行实例,
mask 创建指向
/dev/null 的符号链接实现强约束。
服务依赖影响速查表
| 服务名 | 典型依赖项 | 禁用风险等级 |
|---|
| rpcbind.service | nfs-server, rpc-statd | 高 |
| rsyslog.service | systemd-journald(替代日志方案) | 中 |
3.3 日志审计强化:rsyslog远程转发与logrotate策略定制
rsyslog远程转发配置
# /etc/rsyslog.d/50-remote.conf
*.* @@log-server.example.com:514;RSYSLOG_SyslogProtocol23Format
该配置启用TCP协议(双@符号)向中心日志服务器可靠传输所有日志;
RSYSLOG_SyslogProtocol23Format确保RFC 5424格式兼容,支持结构化字段与时间戳精度。
logrotate策略定制
- 按日轮转,保留30天历史日志
- 启用压缩与日志校验(sha256sum)
- 轮转后触发rsyslog重载以刷新句柄
关键参数对照表
| 参数 | 作用 | 推荐值 |
|---|
| maxsize | 单文件大小上限 | 100M |
| dateformat | 归档文件时间戳格式 | -%Y%m%d |
第四章:SSH服务深度加固与密钥认证体系构建
4.1 SSH配置文件(sshd_config)关键参数解析与实战修改
核心安全参数详解
# /etc/ssh/sshd_config 关键片段
Port 2222 # 避免默认端口扫描
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 强制密钥认证
AllowUsers deploy@192.168.1.* # 白名单访问控制
上述配置显著提升SSH服务抗爆破能力,其中
AllowUsers支持用户+IP组合粒度控制。
常见参数对比表
| 参数 | 推荐值 | 作用 |
|---|
| MaxAuthTries | 3 | 限制单次连接的认证尝试次数 |
| LoginGraceTime | 60 | 登录超时秒数,防止暴力会话驻留 |
生效流程
- 编辑
/etc/ssh/sshd_config后保存 - 执行
sudo sshd -t验证语法正确性 - 重启服务:
sudo systemctl reload sshd
4.2 基于ED25519算法的SSH密钥对生成与免密登录验证
密钥生成与安全性优势
ED25519 是基于椭圆曲线的现代签名算法,相比 RSA 具有更短密钥(256 位)、更高性能和更强抗量子计算潜力。OpenSSH 7.8+ 默认支持该算法。
生成密钥对
# 生成 ED25519 密钥对,指定注释便于识别
ssh-keygen -t ed25519 -C "admin@prod-server" -f ~/.ssh/id_ed25519
此命令生成私钥
id_ed25519 和公钥
id_ed25519.pub;
-C 参数添加邮箱或标识注释,用于密钥管理;
-f 指定输出路径,避免覆盖默认密钥。
公钥部署与验证流程
- 将公钥内容追加至目标主机的
~/.ssh/authorized_keys - 确保远程
sshd_config 启用 PubkeyAuthentication yes - 使用
ssh -i ~/.ssh/id_ed25519 user@host 测试连接
算法对比简表
| 特性 | ED25519 | RSA-2048 |
|---|
| 密钥长度 | 256 位 | 2048 位 |
| 签名速度 | ≈3× 更快 | 基准 |
| 抗侧信道攻击 | 恒定时间实现 | 部分实现依赖补丁 |
4.3 SSH登录限制:Fail2ban集成与IP白名单机制部署
Fail2ban基础配置
[sshd]
enabled = true
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
ignoreip = 192.168.1.0/24 10.0.0.5
该配置启用SSH防护规则,`maxretry=3` 表示3次失败即封禁,`bantime=3600` 封禁1小时;`ignoreip` 支持CIDR和单IP,实现初始白名单。
动态白名单策略
- 通过`fail2ban-client set sshd addignoreip 203.0.113.25`运行时添加可信IP
- 结合iptables规则优先匹配白名单链,避免Fail2ban误判
防护效果对比
| 指标 | 未启用 | 启用Fail2ban+白名单 |
|---|
| 暴力破解成功率 | ≈78% | <2% |
| 合法用户误封率 | — | 0.3% |
4.4 SSH会话安全增强:空闲超时、强制命令与PAM双因素验证
空闲连接自动断开
通过配置客户端和服务端超时参数,防止未授权的长期会话驻留:
# /etc/ssh/sshd_config
ClientAliveInterval 300
ClientAliveCountMax 2
每5分钟发送一次心跳包,连续2次无响应即终止连接,有效降低会话劫持风险。
PAM双因素验证集成
启用Google Authenticator后,在
/etc/pam.d/sshd中添加:
auth [success=done new_authtok_reqd=done default=ignore] pam_google_authenticator.so nullok
该行确保在系统密码校验通过后,强制执行TOTP令牌验证,实现“所知+所持”双因子认证。
受限命令执行控制
对特定密钥绑定强制命令,限制其仅能执行预设操作:
| 字段 | 说明 |
|---|
command="rsync --server" | 仅允许rsync协议通信 |
no-port-forwarding | 禁用端口转发能力 |
第五章:安全基线验收与持续运维建议
基线验收的关键检查项
验收阶段需验证所有控制项是否符合等保2.0三级或ISO/IEC 27001:2022附录A要求。重点包括SSH强制密钥登录、日志留存≥180天、特权账户双因素认证启用率100%。
自动化验收脚本示例
# 检查SSH配置是否禁用密码认证
grep -E "^PasswordAuthentication\s+no$" /etc/ssh/sshd_config && echo "✅ 密码认证已禁用" || echo "❌ 需修复"
# 验证syslog日志轮转策略
ls -la /var/log/*.log* | grep -c "\-202[4-9]"
持续运维核心机制
- 每日执行CVE扫描(基于OpenVAS+自定义规则集)
- 每周生成安全健康度报告(含未修复高危漏洞TOP5)
- 每月执行一次红蓝对抗演练,覆盖API网关、容器运行时、云存储桶权限
典型问题响应流程
| 问题类型 | SLA响应时限 | 闭环动作 |
|---|
| 远程代码执行(RCE) | 15分钟 | 自动隔离+进程快照+内存dump分析 |
| 凭证泄露(S3公开桶) | 30分钟 | ACL重置+访问日志溯源+IAM策略审计 |
基线漂移监控实践
在Kubernetes集群中部署Falco DaemonSet,监听异常exec事件并触发Webhook通知至Slack与Jira;同时将基线配置哈希值写入Prometheus指标
security_baseline_hash{cluster="prod",component="etcd"},实现配置变更实时告警。