Linux 服务器安全加固实操指南:SSH 防护与内核参数调优

服务器安全加固为什么从 SSH 和内核参数入手

服务器暴露在公网,遭受的第一波攻击几乎都是 SSH 暴力破解和端口扫描。根据互联网蜜罐数据,一台新上线公网 IP 的服务器,平均 4 分钟内就会收到首次 SSH 扫描。内核参数则决定了系统对 SYN Flood、连接耗尽等网络层攻击的防御能力。把这两层防护做扎实,服务器安全水位能提升 80% 以上。

SSH 服务安全配置详解

SSH 配置文件位于 /etc/ssh/sshd_config,以下配置项逐条加固:

1. 禁用密码登录,仅允许密钥认证

# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

密码登录是暴力破解的主要入口。密钥认证用 2048 位以上的 RSA 或 Ed25519 密钥对,破解成本在当前算力下不具备可行性。生成密钥对:

ssh-keygen -t ed25519 -C "admin@server-01" -f ~/.ssh/server01_key

将公钥上传到服务器:

ssh-copy-id -i ~/.ssh/server01_key.pub user@server-ip

2. 修改默认端口并限制监听地址

Port 2222
ListenAddress 0.0.0.0

改端口不能防住针对性攻击,但能过滤掉 99% 的自动化扫描脚本。如果服务器只允许内网访问,将 ListenAddress 绑定到内网 IP。

3. 禁用 root 远程登录

PermitRootLogin no

root 账户是攻击者的首选目标。日常操作通过普通用户登录后 sudo 提权,配合审计日志可追溯每一次提权操作。

4. 限制登录尝试和超时

MaxAuthTries 3
LoginGraceTime 30

三次尝试失败立即断开连接,30 秒内未完成认证也断开。防止暴力破解脚本长时间占用连接。

5. 配置 SSH 证书颁发机构(CA)

团队规模较大时,逐个管理 authorized_keys 效率很低。SSH CA 方案用 CA 密钥签发用户证书,服务器只需信任 CA 公钥:

# 生成 CA 密钥对
ssh-keygen -t ed25519 -f ~/.ssh/ca_key

# 签发用户证书(有效期 24 小时)
ssh-keygen -s ~/.ssh/ca_key -I "user-zhangsan" -V +24h ~/.ssh/user_key.pub

# 服务器端信任 CA
echo "TrustedUserCAKeys /etc/ssh/ca_pub.pem" >> /etc/ssh/sshd_config

员工离职只需撤销证书,不需要逐台服务器清理 authorized_keys。

Fail2ban 自动封禁暴力破解 IP

Fail2ban 监控 SSH 日志,自动封禁多次失败尝试的 IP:

# 安装
apt install fail2ban -y   # Debian/Ubuntu
yum install fail2ban -y    # CentOS/RHEL

# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 86400

配置含义:10 分钟内同一 IP 失败 3 次,封禁 24 小时。生产环境建议 bantime 设置为 604800(7 天)。

验证 Fail2ban 运行状态:

fail2ban-client status sshd

内核网络参数安全调优

内核参数通过 sysctl 配置,文件路径 /etc/sysctl.conf,修改后 sysctl -p 生效。

1. SYN Flood 防护

# 启用 SYN Cookie
net.ipv4.tcp_syncookies = 1

# SYN 队列最大长度
net.ipv4.tcp_max_syn_backlog = 8192

# SYN+ACK 重试次数(默认 5,降到 2)
net.ipv4.tcp_synack_retries = 2

SYN Flood 攻击通过发送大量 SYN 包耗尽服务器半连接队列。SYN Cookie 机制让服务器不在队列中保存半连接状态,而是将状态编码在 SYN+ACK 的序列号中,客户端回复 ACK 时再还原状态。

2. 连接保活与超时优化

# 减少已建立连接的超时时间
net.ipv4.tcp_fin_timeout = 15

# keepalive 探测间隔(秒)
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5

# 允许 TIME_WAIT 端口复用
net.ipv4.tcp_tw_reuse = 1

短连接密集场景下 TIME_WAIT 堆积会耗尽端口。启用 tcp_tw_reuse 允许新连接复用 TIME_WAIT 状态的端口,比 tcp_tw_recycle 安全(后者在 NAT 环境下会导致连接异常)。

3. 连接数限制

# 系统级最大文件描述符
fs.file-max = 1048576

# conntrack 表大小(防止 NAT 连接跟踪表溢出)
net.netfilter.nf_conntrack_max = 1048576

文件描述符限制在 /etc/security/limits.conf 中配置,conntrack 参数在 /etc/sysctl.conf 中设置。

iptables 防火墙规则配置

内核参数调优是被动防御,防火墙是主动防御。基础规则集:

# 默认拒绝所有入站
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许已建立连接的回包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 允许 SSH(改端口后的)
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 允许 HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 限制 ICMP(防止 ping 探测)
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# 保存规则
iptables-save > /etc/iptables/rules.v4

安全审计与入侵检测

配置完防护后,还需要持续监控:

登录审计:检查异常登录

# 查看最近失败的 SSH 登录
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10

# 查看成功登录的来源 IP
grep "Accepted" /var/log/auth.log | awk '{print $NF}' | sort | uniq -c | sort -rn

文件完整性监控:用 AIDE 检测关键文件篡改

apt install aide -y
aideinit
aide --update

cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 定期检查
crontab -e
0 3 * * * /usr/bin/aide --check | mail -s "AIDE Report" admin@company.com

内核参数调优效果验证

调整完参数后,用压测工具验证防御效果:

# SYN Flood 压测(仅用于自有服务器测试)
apt install hping3 -y
hping3 -S --flood -p 2222 target-ip

# 观察连接队列
ss -lnt | grep 2222
watch -n 1 'netstat -s | grep -i syn'

正常情况下,开启 SYN Cookie 后,即使 SYN 包速率达到万级,服务器的半连接队列也不会溢出,已建立连接不受影响。

服务器安全加固是一个持续过程,SSH 配置和内核参数是基础防线,搭配 Fail2ban 自动封禁、防火墙规则过滤、文件完整性监控,构成从网络层到应用层的纵深防御体系。建议每次加固后用自动化脚本记录配置变更,便于回滚和审计。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-cao-zhi-nan-ssh-fang-hu/

(0)
小编小编
上一篇 4小时前
下一篇 4小时前

相关推荐