SSH 服务安全加固
SSH 是服务器最核心的远程管理通道,也是攻击者首选的突破点。默认配置的 SSH 服务存在多处安全隐患,生产服务器上线前的第一件事就是加固 SSH 配置。
编辑 /etc/ssh/sshd_config,按以下参数调整:
# 禁止 root 直接登录
PermitRootLogin no
# 禁止空密码
PermitEmptyPasswords no
# 限制最大认证尝试次数
MaxAuthTries 3
# 禁用密码认证,仅允许密钥
PasswordAuthentication no
PubkeyAuthentication yes
# 设置登录超时(秒)
LoginGraceTime 30
# 限制可登录的用户组
AllowGroups ssh-users
# 修改默认端口(避开自动化扫描)
Port 2222
# 禁用不必要的认证方式
ChallengeResponseAuthentication no
KbdInteractiveAuthentication no
GSSAPIAuthentication no
UsePAM no
修改后执行 systemctl restart sshd 生效。改端口前确认防火墙已放行新端口,否则会把自己锁在外面。
密钥管理与分发
密钥认证的强度远超密码,但密钥管理同样需要规范:
# 生成 ED25519 密钥(优先于 RSA)
ssh-keygen -t ed25519 -C "admin@prod-01" -f ~/.ssh/id_ed25519
# 生成 4096 位 RSA 密钥(兼容旧系统)
ssh-keygen -t rsa -b 4096 -C "admin@prod-01" -f ~/.ssh/id_rsa
# 分发公钥到目标服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@server
# 配置 SSH Agent 避免反复输入密钥密码
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
密钥文件权限必须严格控制:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
authorized_keys 权限为 644 或 600 均可,但目录必须是 700。权限不对是 SSH 密钥登录失败最常见的坑。
Fail2Ban 自动封禁暴力破解
即便禁用了密码登录,SSH 端口的扫描和暴力尝试仍然会产生大量日志噪音,还可能触发 Denial of Service。Fail2Ban 通过解析日志自动封禁异常 IP:
# 安装
apt install fail2ban -y # Debian/Ubuntu
yum install fail2ban -y # CentOS
# 创建本地配置 /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = iptables-multiport
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200
启动服务并设置开机自启:
systemctl enable fail2ban
systemctl start fail2ban
# 查看封禁状态
fail2ban-client status sshd
# 手动解封 IP
fail2ban-client set sshd unbanip 1.2.3.4
内核参数安全调优
内核参数的合理调整能有效缓解 SYN Flood、IP 碎片攻击等网络层威胁。编辑 /etc/sysctl.conf:
# 禁用 ICMP 重定向(防止中间人攻击)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# SYN Flood 防护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
# 禁用 IP 转发(非路由器场景)
net.ipv4.ip_forward = 0
# 限制可以被 ping
net.ipv4.icmp_echo_ignore_all = 1
# TCP 连接保活优化
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
# 连接队列优化
net.core.somaxconn = 32768
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_tw_reuse = 1
# 文件描述符限制
fs.file-max = 1048576
fs.nr_open = 1048576
执行 sysctl -p 生效。每次修改内核参数后建议用 sysctl -a | grep 参数名 确认实际值。
防火墙策略配置
UFW 是 iptables 的人性化前端,配置简单且不易出错:
# 安装并启用
apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
# 放行 SSH(改过的端口)
ufw allow 2222/tcp
# 放行 HTTP/HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# 限制特定 IP 访问管理端口
ufw allow from 10.0.0.0/24 to any port 2222
# 启用防火墙
ufw enable
# 查看规则
ufw status verbose
生产环境中管理端口(SSH、数据库端口等)应限制来源 IP 段,不要对公网开放。如果必须远程管理,建议通过 VPN 或 WireGuard 组网后访问。
自动安全更新
安全补丁的及时性直接影响服务器被漏洞利用的风险。配置无人值守自动安全更新:
# Debian/Ubuntu
apt install unattended-upgrades apt-listchanges -y
dpkg-reconfigure -plow unattended-upgrades
# 配置 /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";
CentOS 系列使用 yum-cron:
yum install yum-cron -y
systemctl enable yum-cron
systemctl start yum-cron
# 编辑 /etc/yum/yum-cron.conf
update_cmd = security
apply_updates = yes
安全审计与日志
开启审计日志,记录关键系统调用,方便事后追溯:
# 安装 auditd
apt install auditd -y
systemctl enable auditd
# 监控关键文件变更
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config
auditctl -w /etc/sudoers -p wa -k sudoers_changes
# 查看审计日志
ausearch -k passwd_changes | aureport -f
# 日志轮转配置 /etc/logrotate.d/syslog
# 确保日志保留至少 90 天,满足等保要求
日志集中管理方面,建议将 auth.log、syslog、audit.log 通过 rsyslog 转发到日志服务器,避免攻击者删日志销毁痕迹。配置 /etc/rsyslog.d/remote.conf:
*.* @@log-server:514
安全加固不是一次性操作,需要定期审查:每月检查一次用户列表和 sudo 权限,每季度复查一次防火墙规则和内核参数,每年做一次全面渗透测试。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-cao-ssh-fang-hu-yu-nei-he/