Linux服务器一旦接入公网,就会持续面临端口扫描、弱口令暴破、提权漏洞利用等威胁。解决安全漏洞和攻击问题不能只靠事后杀进程,必须从系统基线、网络边界、访问控制与持续监控几个层面同时入手,形成可重复的防护流程。

一、账户与权限基线加固
多数入侵事件起点是闲置账户或弱密码。应先禁用不需要的系统账户,并强制使用密钥登录替代密码。可以通过修改/etc/passwd与/etc/shadow相关字段,或直接用命令锁定账户。
下面这段脚本用于列出可登录的shell账户并锁定其中非管理员账户,实际运维中可加入定时任务重复执行:
#!/bin/bash
# 列出当前拥有bash或sh登录权限的账户
for user in $(grep -E '/bin/(bash|sh)$' /etc/passwd | cut -d: -f1); do
if [ "$user" != "root" ] && [ "$user" != "deploy" ]; then
passwd -l "$user" # 锁定账户密码
echo "已锁定账户: $user"
fi
done
除了锁账户,还应收回不必要的sudo权限。很多人把运维方便放在第一位,直接写ALL=(ALL) NOPASSWD:ALL,这等于给木马留了提权后门。正确做法是按命令白名单授权,并开启/etc/sudoers的日志。
二、SSH服务防暴破实践
SSH默认22端口每天会被扫描数千次。单纯改端口只是降低噪音,真正有效的是结合密钥与失败封锁。fail2ban通过监控/var/log/auth.log自动封禁可疑IP,比手动写iptables规则更省心。
以下是fail2ban针对SSH的最小配置示例,设置5分钟内失败3次就封禁一小时:
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 300
如果服务器数量少,也可以直接用iptables做手动限制。但手动规则在重启后易丢失,需要保存为规则文件。相比之下,fail2ban在动态对抗暴破时运维成本更低,也方便集中收集被封IP做威胁情报。
三、用iptables构建网络边界
防火墙不是装了就完事,规则顺序与默认策略决定了实际防护强度。推荐默认DROP,再按需开放业务端口。这样即使出现未预料的监听服务,也不会直接暴露到公网。
下面是一段基础边界脚本,仅允许HTTP、HTTPS与SSH,并开启状态检测:
#!/bin/bash iptables -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
对于暴露在内网的服务器,还可以用ipset配合iptables屏蔽大段恶意IP。当遭遇CC攻击时,这种组合能在大并发下保持较低CPU开销,比逐条写规则高效很多。
四、进程级审计与入侵检测
漏洞修补后仍需假设系统已被渗透,因此要用auditd记录敏感文件与命令调用。例如监控/etc/passwd和sudo执行,能在攻击者改动账户时留下轨迹。
添加审计规则的命令如下,重启auditd后生效:
# 监控密码文件写入 auditctl -w /etc/passwd -p wa -k passwd_change # 监控sudo命令执行 auditctl -a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec
日常排查可结合aureport与ausearch提取异常。若发现非维护时段的passwd_change记录,基本能判定账户被篡改。再配合chkrootkit或rkhunter扫描顽固后门,就能形成发现、定位、清理的闭环。
五、建立持续性漏洞修补机制
攻击利用的多是已知漏洞,因此自动更新与安全扫描必须常态化。用unattended-upgrades装关键补丁,同时每周跑一次lynis做基线评分,比出事再救火更稳妥。
简单启用自动安全更新的配置片段:
# 安装并开启自动升级 apt install -y unattended-upgrades dpkg-reconfigure --priority=low unattended-upgrades # 检查lynis报告 lynis audit system --quick
把上述检查输出接入日志平台,当评分低于设定阈值就告警。这样团队能清楚知道每台机器的安全状态,而不是等流量异常才意识到服务器早已失陷。
解决Linux服务器安全漏洞与攻击问题,核心是把单点补救变成工程化流程:锁账户、防暴破、控边界、做审计、常更新。任何一环缺失都会成为短板,而持续运转这套机制才能把风险压到可接受范围。