SSH暴力破解防护体系搭建
Linux服务器暴露在公网后,SSH暴力破解是最常见的攻击方式。一台新上架的云服务器,如果在22端口运行默认SSH配置,通常24小时内就会收到数千次登录尝试。服务器安全加固的第一步就是构建SSH防爆破体系,这比装防火墙更加紧迫。
最基础的措施是修改SSH默认端口并禁止root登录。编辑/etc/ssh/sshd_config:
Port 2222
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
LoginGraceTime 30
禁用密码认证后,必须配置密钥登录。在本地机器生成ED25519密钥对(比RSA更安全且更短):
ssh-keygen -t ed25519 -C "admin@yunthe.com"
ssh-copy-id -p 2222 user@your-server
修改配置后重启SSH服务:systemctl restart sshd。操作前务必保持一个已连接的终端会话,避免配置错误导致锁死。
Fail2Ban自动封禁配置
修改端口只能减少扫描流量,无法阻止针对性攻击。Fail2Ban通过解析SSH日志自动封禁异常IP,是防爆破的核心工具。安装与配置:
# CentOS/RHEL
yum install -y fail2ban
# Ubuntu/Debian
apt install -y fail2ban
创建本地配置文件/etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 3
findtime = 600
bantime = 86400
action = iptables-multiport[name=sshd, port="2222", protocol=tcp]
参数说明:maxretry表示600秒内失败3次即触发封禁,bantime为封禁时长86400秒(24小时)。生产环境建议bantime设为604800(7天)甚至更长。启动服务并设置开机自启:
systemctl enable --now fail2ban
fail2ban-client status sshd
查看封禁状态可以确认规则是否生效。对于频繁扫描的网段,可以在/etc/fail2ban/jail.local中添加ignoreip参数放行可信IP,防止误封。
内核网络参数调优
Linux内核默认参数面向通用场景,服务器安全加固需要对网络栈进行针对性调优。修改/etc/sysctl.conf:
# SYN Flood防护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
# 连接追踪优化
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
# 禁止IP转发和源路由
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 禁止ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# SYN重试次数
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 5
执行sysctl -p使配置生效。SYN Cookie机制可以有效缓解SYN Flood攻击,将半连接占用的资源从内核内存转移到计算COOKIE值,牺牲少量CPU换取内存安全。tcp_max_syn_backlog调大到8192可以容纳更多并发连接请求,避免正常连接被拒绝。
文件系统与进程安全加固
内核参数之外,文件系统级别的安全同样关键。禁用不必要的SUID二进制文件,防止提权攻击:
# 查找所有SUID文件
find / -perm -4000 -type f 2>/dev/null
# 移除不必要的SUID权限
chmod u-s /usr/bin/chsh
chmod u-s /usr/bin/chfn
chmod u-s /usr/bin/mount
chmod u-s /usr/bin/umount
常见需要保留SUID权限的只有sudo、passwd、su等极少数命令,其余的都可以移除。限制/tmp分区权限也很重要:
# /etc/fstab中添加
/tmp /tmp tmpfs defaults,nosuid,nodev,noexec 0 0
设置noexec后,即使攻击者在/tmp下放置了恶意可执行文件也无法直接运行。nodev禁止设备文件,nosuid禁止SUID权限,三者组合有效限制了/tmp分区的攻击面。
日志审计与入侵检测
安全加固不是一次性工作,持续监控才能及时发现异常。安装auditd进行系统调用审计:
yum install -y audit
systemctl enable --now auditd
添加关键文件监控规则/etc/audit/rules.d/audit.rules:
# 监控passwd文件修改
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudo_changes
# 监控SSH配置变更
-w /etc/ssh/sshd_config -p wa -k sshd_config
# 监控内核模块加载
-a always,exit -F arch=b64 -S init_module -S finit_module -k module_load
通过aureport和ausearch命令可以快速检索审计日志。例如查看今天的登录事件:aureport -l -ts today。配合日志轮转策略(/etc/logrotate.d/)定期归档审计日志,既保证磁盘不被撑满,也保留足够的历史数据用于事后追溯。
服务器安全加固是一个持续迭代的过程。每轮加固后使用ss -tlnp检查监听端口、iptables -L -n检查防火墙规则、fail2ban-client status检查封禁列表,确认配置正确生效。定期使用Lynis等安全扫描工具做全面检查,将系统安全评分维持在85分以上,是生产环境的基本要求。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-zhan-ssh-fang-bao-po-yu/