限制SFTP登录次数可以通过多种方式实现,具体取决于你使用的操作系统和SSH服务器软件。以下是一些常见的方法:
Fail2Ban是一个用于防止暴力破解攻击的工具,它可以监控日志文件并根据配置的规则封禁IP地址。
安装Fail2Ban:
sudo apt-get install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # CentOS/RHEL
配置Fail2Ban:
编辑Fail2Ban的配置文件 /etc/fail2ban/jail.local 或创建一个新的配置文件。
[DEFAULT]
bantime = 600 # 封禁时间(秒)
findtime = 600 # 检测时间窗口(秒)
maxretry = 5 # 最大失败尝试次数
[ssh]
enabled = true
port = sshd
filter = sshd
logpath = /var/log/auth.log # 根据你的系统日志路径调整
banaction = iptables-multiport
重启Fail2Ban服务:
sudo systemctl restart fail2ban
PAM可以用来在认证过程中进行额外的检查和控制。
编辑PAM配置文件:
编辑 /etc/pam.d/sshd 文件,添加以下行:
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600
这里的 deny=5 表示允许5次失败尝试,unlock_time=600 表示封禁时间为600秒。
重启SSH服务:
sudo systemctl restart sshd
你可以编写一个自定义脚本来监控登录尝试次数,并在达到阈值时采取行动。
创建脚本:
创建一个脚本 /usr/local/bin/sftp_login_limiter.sh:
#!/bin/bash
LOGFILE="/var/log/sftp_login_attempts.log"
MAX_ATTEMPTS=5
BAN_TIME=600
IP=$(grep $PAM_USER $LOGFILE | awk '{print $1}')
ATTEMPTS=$(grep $IP $LOGFILE | wc -l)
if [ $ATTEMPTS -ge $MAX_ATTEMPTS ]; then
echo "Banning IP $IP for $BAN_TIME seconds"
sudo iptables -A INPUT -s $IP -p tcp --dport 22 -m state --state NEW -j DROP
sleep $BAN_TIME
sudo iptables -D INPUT -s $IP -p tcp --dport 22 -m state --state NEW -j DROP
fi
echo "$IP $((ATTEMPTS+1))" >> $LOGFILE
设置脚本权限:
sudo chmod +x /usr/local/bin/sftp_login_limiter.sh
修改PAM配置:
编辑 /etc/pam.d/sshd 文件,添加以下行:
auth required pam_exec.so /usr/local/bin/sftp_login_limiter.sh
重启SSH服务:
sudo systemctl restart sshd
通过以上方法,你可以有效地限制SFTP登录次数,提高系统的安全性。