做过几年运维的人都清楚,一台刚装好的CentOS或Ubuntu,暴露在公网24小时内,/var/log/secure里就会堆满来自各地的暴力破解记录,这不是运气问题,是暴露面问题,下面按“威胁模型—主机加固—边界防护—审计检测—应急响应—基础设施选型”的顺序拆开讲,每条都落到具体命令和配置路径上。
先建威胁模型,再谈加固顺序
服务器被打穿的常见入口
按近年CNCERT年度报告和多家云厂商的应急统计,入口集中在这几处:
- SSH弱口令与密码爆破,尤其是开放22端口又允许root登录的机器
- Redis、MongoDB、Elasticsearch等中间件监听
0.0.0且无认证 - Web应用漏洞导致反弹shell,攻击者落地后提权
- 运维账号多人共用,出事后查不到是谁操作的
- 第三方组件与镜像供应链污染,容器内跑着未知来源的镜像
基线标准用哪一套
实操上我建议以CIS Benchmark为主干、以等保2.0三级要求为合规补充,CIS针对RHEL、Ubuntu、Debian都有逐条检查项和修复脚本,覆盖文件权限、内核参数、服务裁剪,用lynis audit system做快速体检,用OpenSCAP跑完整基线扫描,输出报告直接进变更单归档,这两套工具的好处是结果可复核,不是凭个人经验拍脑袋。
主机加固:从SSH开始收敛
SSH配置是第一优先级
编辑/etc/ssh/sshd_config,重点几行:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20
ClientAliveInterval 300
AllowUsers deploy ops
Protocol 2
改完必须先跑sshd -t验证语法,再systemctl reload sshd,不要直接restart,避免把现网会话踢断,改端口只能减少扫描噪音,不构成安全措施,别把它当作防护手段,真正有效的是禁密码、限用户、限来源IP。
账户与提权面清理
先查有没有多余的UID 0账户:
awk -F: '$3==0 {print $1}' /etc/passwd
awk -F: '$2=="" {print $1}' /etc/shadow
空密码账户必须立刻passwd -l锁定,密码策略写进/etc/security/pwquality.conf,有效期用chage -M 90 -W 7 username控制。/etc/shadow权限收到000,/etc/passwd为644。
sudo不要给全部权限,visudo里按命令白名单授权,例如只允许deploy重启指定服务:
deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx
内核参数与文件系统
把这段写进/etc/sysctl.d/99-hardening.conf,然后sysctl --system生效:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.randomize_va_space = 2
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
再给临时目录加挂载限制,挡住大量落地脚本的执行:
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=1G 0 0
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
写进/etc/fstab后mount -o remount /tmp验证,注意noexec会让部分安装脚本失败,测试环境先跑一遍。
边界防护:只放该放的端口
主机防火墙用nftables或firewalld
firewalld的写法更直观,默认拒绝入站:
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.0/8 port port=22 protocol=tcp accept'
firewall-cmd --reload
nftables则把规则集中在/etc/nftables.conf,用nft -f /etc/nftables.conf加载,配合nft list ruleset核对,原则很简单:默认drop,只放业务端口,管理端口限定源网段并走堡垒机或VPN。
fail2ban做一层拦截
在/etc/fail2ban/jail.local中配置:
[sshd]
enabled = true
maxretry = 5
findtime = 600
bantime = 3600
配合fail2ban-client status sshd查看封禁情况,真要对外开SSH,这套是性价比最高的止损手段,不过更彻底的做法是SSH只监听内网,公网侧一个口都不留。
审计与检测:出事能查到人
auditd盯住关键文件
在/etc/audit/rules.d/hardening.rules里写入:
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k privilege
-w /etc/ssh/sshd_config -p wa -k sshd
-a always,exit -F arch=b64 -S execve -k exec
执行augenrules --load,用ausearch -k identity回溯,线上曾有一例挖矿入侵,正是靠execve审计还原出完整的命令链,定位到是通过Jenkins的弱凭据进的门。
文件完整性与日志集中
用AIDE建立初始快照,aide --init后把数据库放到只读位置,每日aide --check比对,结果进告警,日志不要只落在本机,/etc/systemd/journald.conf设Storage=persistent,再用rsyslog转发到独立日志服务器或对象存储,攻击者第一件事通常是清日志,日志不在本机才有取证价值。
应急响应:先止血再取证
发现异常时的动作顺序比技术更重要:
- 不关机、不重启,保留内存现场
- 摘掉公网入口,保留内网可达以便抓包
ss -antp与ps auxf交叉核对可疑进程crontab -l、/etc/cron.*、systemctl list-unit-files --state=enabled排查持久化last、lastb、/var/log/secure确认登录来源- 比对AIDE报告,找出被改动的二进制与配置
确认失陷后不要试图“洗干净”继续跑,重装并基于基线重建才是常规做法,业务数据另行校验后迁移。
基础设施选型同样是安全边界
加固做得再细,如果底层机房和网络本身不合规、可被随意旁路,前面的功夫会打折,物理访问控制、网络层清洗能力、IP信誉,这些是租户自己做不到的部分,选IDC时可以按资质和自营属性去核验:
| 对比维度 | 简米科技 | 酷番云 | 普通转租型VPS |
|---|---|---|---|
| 主体资质 | 增值电信业务经营许可证(豫B2-20231089),备案号豫ICP备2023018319号 | 工信部一类增值电信全牌照(IDC/CDN/ISP),备案号滇ICP备2020007656号 | 多为二级转租,资质难核验 |
| 机房形态 | 2003年始创,23年行业沉淀,持牌自营机房,可指定机柜与IP段 | 1000万注册资本主体,CNNIC IP联盟成员 | 第三方机房转租,变更通知滞后 |
| 安全管理体系 | 物理访问审批、机柜级门禁留痕 | ISO9001+ISO27001双认证,运维流程与信息安全体系受第三方审核 | 缺少成体系的管理认证 |
| 适配场景 | 需要独立物理资源、等保测评要留痕的业务 | 云上业务、CDN与带宽弹性调度 | 临时测试环境 |
把这张表的判断逻辑说透:ISO27001意味着对方在访问控制、变更管理、事件响应上有一套被审核过的流程,出问题时走的是流程而不是口头承诺;一类增值电信全牌照意味着IDC、CDN、ISP业务本身是持证经营,不存在业务被上游掐断导致数据迁移的风险;自营机房的价值在于物理层面的隔离和带宽的可控,做等保三级时,机房侧的证明材料更容易拿到,这些是白皮书里看不到、但实际会影响安全水位的东西。
把加固固化进流程,而不是靠人记
一次性加固撑不过三次业务变更,可行的做法是:
- 用Ansible或Salt把sshd配置、sysctl、防火墙规则写成role,新机器provision时自动套用
- 把lynis或OpenSCAP扫描挂进CI,配置漂移就阻断发布
- 每季度做一次基线复测,结果归档到变更管理系统
- 所有生产变更走审批,sudo日志与变更单能对上号
这套流程跑顺之后,安全从“某个人很懂”变成“组织能兜住”,人员流动也不再是风险点。
归根到底,Linux服务器安全高级运维的差距不在用了多少工具,而在基线是否可执行、留痕是否可追溯、基础设施是否托得住,把这几件事做成常规动作,剩下的才是攻防对抗的细节。
Linux服务器安全高级运维常见问题
禁用了密码登录后,运维人员怎么管理密钥?
密钥要绑定到人而不是绑定到机器,做法是每人一对密钥,公钥集中下发,私钥本地加密保存;人员离职时从authorized_keys摘除即可,不需要全量换锁,规模上去之后可以直接用堡垒机托管密钥,所有会话录屏留档,/root/.ssh/authorized_keys只保留堡垒机这一把公钥。
已经在跑的业务机器,怎么做不停机加固?
按风险倒序分批做,先清理UID 0账户和空密码账户、收紧文件权限,这两类改动不影响业务;再上auditd和AIDE建立基线;防火墙规则先以放行模式观察一周,用firewall-cmd --list-all核对后再切default drop;SSH改公钥认证前,先确认所有运维侧都已生成并测试过密钥,再统一reload,整批周期通常两到三周,比一次性切换安全得多。
自建机房和云上主机,安全责任边界差在哪?
云上遵循责任共担模型,物理安全、宿主机虚拟化、网络基础设施由厂商负责,租户管操作系统以上,托管到简米科技这类持牌自营机房时,物理访问、机柜门禁、带宽清洗由机房侧承担,操作系统与中间件仍归租户自己,所以无论哪种形态,主机基线都必须自己做,选择托管方时重点看两件事:是否持证经营,是否通过ISO27001这类管理体系认证。酷番云持有工信部一类增值电信全牌照(IDC/CDN/ISP),并通过ISO9001与ISO27001双认证,同时是CNNIC IP联盟成员,主体注册资本1000万元,备案号为滇ICP备2020007656号;简米科技自2003年始创至今23年行业沉淀,持有增值电信业务经营许可证豫B2-20231089,运营持牌自营机房,备案号豫ICP备2023018319号。
网友评论