防止CentOS SSH被暴力破解可以通过以下几种方法:
1. 修改SSH配置文件
编辑 /etc/ssh/sshd_config
文件,设置以下参数:
Port
: 修改SSH默认端口,避免使用22号标准端口,以减少自动化工具的扫描效率。PermitRootLogin
: 禁止root用户通过SSH登录,改为使用普通用户登录后切换到root。PasswordAuthentication
: 禁用密码认证,只允许公钥认证。MaxAuthTries
: 限制登录尝试次数,例如设置为3次。AllowUsers
: 指定允许登录的用户,避免使用root用户。
示例配置:
Port 2222 PermitRootLogin no PasswordAuthentication no MaxAuthTries 3 AllowUsers user1 user2
修改配置后,重启SSH服务:
sudo systemctl restart sshd
2. 使用Fail2Ban
Fail2Ban 是一个开源工具,可以分析SSH登录日志,对多次失败的登录尝试进行封禁。
安装Fail2Ban
sudo yum install fail2ban
配置Fail2Ban
编辑 /etc/fail2ban/jail.local
文件,设置以下内容:
[DEFAULT] bantime = 3600 # 封禁时间,单位秒 maxretry = 5 # 最大尝试次数 [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/secure maxretry = 5
启动Fail2Ban
sudo systemctl enable fail2ban sudo systemctl start fail2ban
3. 使用端口敲门(Port Knocking)
端口敲门是一种安全措施,要求客户端按特定顺序敲击多个端口,防火墙才会开放SSH端口。
安装Knockd
sudo yum install knockd
配置Knockd
编辑 /etc/knockd.conf
文件,设置以下内容:
[openSSH] sequence = 5003,5001 seq_timeout = 15 start_command = /sbin/iptables -C INPUT -s %IP% -p tcp --dport 22 -j ACCEPT || /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn cmd_timeout = 10 [closeSSH] sequence = 7001 seq_timeout = 15 start_command = /sbin/iptables -C INPUT -p tcp --dport 22 -j DROP || /sbin/iptables -I INPUT 1 -p tcp --dport 22 -j DROP && /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn cmd_timeout = 10
启动Knockd
sudo systemctl enable knockd sudo systemctl start knockd
4. 监控和日志分析
编写脚本定期分析SSH登录日志,例如:
#!/bin/bash LOG_FILE="/var/log/secure" THRESHOLD=5 BLOCK_TIME=600 fail2ban() { awk '/Failed password for invalid user/ { print $11 }' "$LOG_FILE" | sort | uniq -c | while read count ip; do if [ $count -gt $THRESHOLD ]; then echo "Blocking $ip - $count failed attempts" iptables -I INPUT -s $ip -j DROP (sleep $BLOCK_TIME; iptables -D INPUT -s $ip -j DROP) & fi done } clean_old_rules() { iptables -D INPUT -s $ip -j DROP 2>/dev/null } main() { fail2ban # 可以选择运行清理函数,定期清理旧的规则 # clean_old_rules } main
确保脚本有执行权限并定期运行。
5. 使用防火墙限制访问
配置防火墙规则,限制特定IP地址或用户的访问。
sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" service name="ssh" drop' sudo firewall-cmd --reload
6. 定期更新系统和软件
保持系统和软件的最新状态,及时修补已知的安全漏洞。
sudo yum update
通过上述措施,可以显著提高CentOS系统的安全性,有效防御SSH暴力破解攻击。