SSH访问控制硬化
生产服务器暴露在公网,SSH是攻击者最常探测的入口。默认配置下,root密码登录开启、端口22全暴露,暴力破解脚本24小时不停扫描。加固SSH是服务器安全的第一道防线。
修改/etc/ssh/sshd_config:
# 禁用root密码登录
PermitRootLogin prohibit-password
# 禁用密码认证,仅允许密钥
PasswordAuthentication no
KbdInteractiveAuthentication no
# 修改默认端口(增加扫描成本)
Port 2222
# 限制登录尝试
MaxAuthTries 3
# 空闲超时断开
ClientAliveInterval 300
ClientAliveCountMax 2
# 限制可登录用户
AllowUsers deploy admin
重启SSH前,先在另一个终端保持连接,确认新配置可正常登录再关闭旧连接。防止配置错误锁死自己。
密钥管理方面,ed25519比RSA更安全更短:
ssh-keygen -t ed25519 -C "deploy@prod-01" -f ~/.ssh/deploy_ed25519
将公钥部署到服务器~/.ssh/authorized_keys,权限设为600,目录700。
防火墙配置:ufw白名单策略
Ubuntu 24.04默认安装ufw。安全加固的核心原则——默认拒绝,仅放行必要端口:
# 重置规则
ufw --force reset
# 默认策略
ufw default deny incoming
ufw default allow outgoing
# 放行SSH(如果改了端口记得对应)
ufw allow 2222/tcp
# 放行Web服务
ufw allow 80/tcp
ufw allow 443/tcp
# 限制SSH连接频率(防暴力破解)
ufw limit 2222/tcp
# 启用
ufw --force enable
ufw limit规则会在30秒内超过6次连接时自动封禁来源IP,这是SSH暴力破解的克星。
对于需要内网互通的服务,按IP段放行:
# 仅允许内网访问数据库端口
ufw allow from 10.0.0.0/8 to any port 3306
ufw allow from 10.0.0.0/8 to any port 6379
fail2ban:自动封禁暴力破解IP
ufw limit只能做简单频率限制,fail2ban提供更智能的检测逻辑,能解析日志识别失败模式:
apt install -y fail2ban
cat > /etc/fail2ban/jail.local << 'FAIL2BANEOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200
FAIL2BANEOF
systemctl enable fail2ban
systemctl start fail2ban
查看封禁状态:
fail2ban-client status sshd
解封误封IP:
fail2ban-client set sshd unbanip 1.2.3.4
内核参数加固
/etc/sysctl.conf中添加安全相关内核参数:
# 禁止IP转发(非路由器场景)
net.ipv4.ip_forward = 0
# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 启用反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁止ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# SYN flood防护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
# 禁止SACK(减少TCP侧信道风险)
net.ipv4.tcp_sack = 0
执行sysctl -p生效。
自动安全更新与日志审计
安装unattended-upgrades自动打安全补丁:
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
配置/etc/apt/apt.conf.d/50unattended-upgrades,确认仅自动安装安全更新:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
日志审计方面,安装auditd监控系统关键调用:
apt install -y auditd
# 监控/etc/passwd修改
auditctl -w /etc/passwd -p wa -k passwd_changes
# 监控sudo使用
auditctl -w /usr/bin/sudo -p x -k sudo_usage
# 监控SSH配置修改
auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config
查看审计日志:
ausearch -k passwd_changes | ausearch -i
用户权限最小化
生产环境禁止多人共享root。为每个运维人员创建独立账号,按需赋予sudo权限:
# 创建用户
useradd -m -s /bin/bash deploy
# 配置sudo权限(仅允许特定命令)
visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl restart php*-fpm
定期清理无用账号和过期密钥。检查当前系统中的空密码账号:
awk -F: '($2 == "" || $2 == "!") {print $1}' /etc/shadow
入侵检测:rkhunter与ClamAV
# 安装rootkit检测
apt install -y rkhunter
rkhunter --update
rkhunter --check --skip-keypress
# 安装杀毒
apt install -y clamav
freshclam
clamscan -r --bell -i /home
将扫描加入cron,每周执行一次:
0 3 * * 0 rkhunter --check --skip-keypress --report-warnings-only >> /var/log/rkhunter.log
0 4 * * 0 clamscan -r -i /home >> /var/log/clamav.log
服务器安全加固没有终点,每个新暴露的端口、每新增一个用户账号、每次apt upgrade都是检查窗口。上述操作清单执行完毕后,建议用Lynis做一次全面审计:
apt install -y lynis
lynis audit system
Lynis会输出一份评分报告和具体修复建议,比逐条对照CIS Benchmark高效得多。服务器运维的日常就是反复检查、持续收敛攻击面。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/ubuntu2404-sheng-chan-fu-wu-qi-an-quan-jia-gu-cao-zuo-shou/