Linux服务器安全基线配置清单,从零加固你的云主机
买好一台Linux云服务器,第一件事不是装面板或跑业务,而是先做一遍安全基线配置。
很多新手直接开着默认设置上线,结果被扫描、被爆破、被提权,最后连系统都进不去。
下面这份清单,按顺序执行一遍,能挡住绝大多数常见的攻击手法。
从SSH加固开始:禁用root登录与密码认证
SSH是服务器最暴露的端口。
默认情况下root可以直接用密码登录,这是最大的安全隐患。
先把它关掉。
- 用root或sudo权限编辑SSH配置文件:
vim /etc/ssh/sshd_config - 找到下面几行,修改或添加:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no禁止root直接登录,日常用普通用户sudo。PasswordAuthentication no关闭密码登录,只允许密钥认证。PubkeyAuthentication yes确保公钥认证开启。
- 保存退出,重启SSH服务:
systemctl restart sshd
注意:修改前先确认自己已经配置好SSH密钥,并且能用密钥登录。
否则你会把自己关在外面。
建议先开一个新终端窗口保持登录,再重启服务测试。
防火墙:只开放必要端口
大多数云厂商都自带防火墙,但系统内部的iptables或firewalld也需要配置。
这里用iptables举例(CentOS系列默认带,Ubuntu需安装iptables-persistent)。
# 清空现有规则(生产环境慎用,先备份)
# iptables-save > /root/iptables.backup
# 设置默认规则:拒绝所有入站,允许出站
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 放行SSH端口(默认22,建议改成高位端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 放行Web端口(如果跑网站)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
保存规则:service iptables save(或Ubuntu用netfilter-persistent save)。
用户权限:限制sudo与分离服务账号
永远不要用root跑日常应用。
创建普通用户并加入wheel组(CentOS)或sudo组(Ubuntu)。
useradd -m -G wheel opsuser
passwd opsuser
然后配置sudo权限,只允许特定命令:visudo,添加一行:
opsuser ALL=(ALL) /usr/bin/systemctl, /usr/bin/journalctl
这样opsuser只能执行systemctl和journalctl,无法任意提权。
日志与审计:安装并启用auditd
系统日志是事后排查的关键。
安装auditd并配置关键文件的监控:
yum install audit -y # Ubuntu: apt install auditd
systemctl enable auditd --now
# 监控/etc/passwd和/etc/shadow的写操作
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes
查看日志:ausearch -k passwd_changes。
常见问题与避坑
Q:修改sshd_config后重启服务,新终端连接不上怎么办?
A:如果还能用原终端,马上把配置改回去再重启。如果所有终端都断了,只能通过云厂商的VNC控制台登录恢复。所以一定要先测试新终端能正常登录再关闭旧会话。
Q:iptables规则顺序写反了,导致ssh被拒?
A:iptables按顺序匹配。如果先写了DROP所有入站,再写允许SSH,那么SSH会被拒绝。正确顺序:先写允许SSH,再写默认DROP。
Q:auditd日志太占磁盘怎么办?
A:调整日志大小限制:编辑/etc/audit/auditd.conf,设置max_log_file = 50(单位MB),num_logs = 5。
效果验证:跑一遍检查清单
- SSH加固验证:尝试用密码登录,应该被拒绝;用密钥登录成功,且不能直接ssh root@ip。
- 防火墙验证:
iptables -L -n -v查看规则是否生效;用nmap从外部扫描nmap -sS your_server_ip,除了放行的端口外全部过滤。 - 用户权限验证:用opsuser执行
sudo rm -rf /,应该被拒绝。 - 日志审计验证:
ausearch -k passwd_changes应该能查到历史变更记录。
如果你正在处理Linux服务器安全基线配置清单,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
做完这一步,你的服务器才算真正具备基本的防御能力。