防止CentOS 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
Fail2Ban 是一个开源工具,可以分析SSH登录日志,对多次失败的登录尝试进行封禁。
sudo yum install fail2ban
编辑 /etc/fail2ban/jail.local
文件,设置以下内容:
[DEFAULT]
bantime = 3600 # 封禁时间,单位秒
maxretry = 5 # 最大尝试次数
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 5
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
端口敲门是一种安全措施,要求客户端按特定顺序敲击多个端口,防火墙才会开放SSH端口。
sudo yum install 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
sudo systemctl enable knockd
sudo systemctl start knockd
编写脚本定期分析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
确保脚本有执行权限并定期运行。
配置防火墙规则,限制特定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
保持系统和软件的最新状态,及时修补已知的安全漏洞。
sudo yum update
通过上述措施,可以显著提高CentOS系统的安全性,有效防御SSH暴力破解攻击。