目录
[TOC]
最新更新:
不要搞这个了,直接关闭密码登录,完全用密钥登录就完事儿了。
脚本:
#!/bin/bash
if [ -f /etc/centos-release ]; then
LOG_FILE="/var/log/secure*"
elif [ -f /etc/lsb-release ]; then
LOG_FILE="/var/log/auth.log*"
else
echo "不支持的操作系统,程序退出。"
exit 1
fi
echo "正在使用日志文件: $LOG_FILE"
show_menu() {
echo "请选择要执行的操作:"
echo "1) 查看所有登录失败的 IP,统计累计次数"
echo "3) 查看 SSH 登录成功的日期、用户名和 IP"
echo "4) 统计每个 IP 登录成功的总次数"
echo "5) 检查除 root 之外的其他特权用户 (UID 为 0)"
echo "6) 统计 SSH 失败的总次数"
echo "8) 列出爆破攻击尝试的用户名字典及次数"
echo "9) 查看最近 5 次 SSH 登录记录"
echo "10) 列出 fail2ban 阻止的 IP 地址"
echo "11) 查看 SSH 配置中允许登录的用户"
echo "12) 退出"
echo "按 'q' 也可退出。"
}
read_choice() {
read -p "请输入你的选择 [1,3-12] 或 'q' 退出: " choice
case $choice in
1)
echo "1. 登录失败的 IP 地址及统计:"
grep "Failed password for invalid user" $LOG_FILE | awk '{print $13}' | sort | uniq -c | sort -nr
;;
3)
echo "3. SSH 登录成功的日期、用户名和 IP:"
grep "Accepted " $LOG_FILE | awk '{print $1,$2,$3,$9,$11}'
;;
4)
echo "4. 每个 IP 登录成功的次数统计:"
grep "Accepted " $LOG_FILE | awk '{print $11}' | sort | uniq -c | sort -nr
;;
5)
echo "5. 特权用户 (UID 0):"
awk -F: '$3==0{print $1}' /etc/passwd
;;
6)
echo "6. SSH 失败尝试的总次数:"
grep -o "Failed password" $LOG_FILE | uniq -c
;;
8)
echo "8. 登录爆破用户名字典及尝试次数:"
grep "Failed password" $LOG_FILE | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}' | sort | uniq -c | sort -nr
;;
9)
echo "9. 最近 5 次 SSH 登录记录:"
last -5
;;
10)
if command -v fail2ban-client > /dev/null; then
echo "10. 列出 fail2ban 阻止的 IP 地址:"
sudo fail2ban-client status sshd | grep 'IP'
else
echo "未安装 fail2ban 或 sshd jail 不存在。"
fi
;;
11)
echo "11. SSH 配置中允许登录的用户:"
ALLOW_USERS=$(grep "^AllowUsers" /etc/ssh/sshd_config)
if [ -z "$ALLOW_USERS" ]; then
echo "没有配置允许登录的用户。"
else
echo "$ALLOW_USERS"
fi
;;
12|q)
echo "程序退出。"
exit 0
;;
*)
echo "无效选择,请重新输入。"
;;
esac
}
while true; do
show_menu
read_choice
echo ""
done
Fail2ban:(防止ssh爆破)
结论:还是禁止密码登录,用密钥登录最安全
安装fail2ban
wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/fail2ban.sh && bash fail2ban.sh 2>&1 | tee fail2ban.log
卸载fail2ban
wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/uninstall.sh && bash uninstall.sh
查看fail2ban状态
fail2ban-client status ssh-iptables
fail2ban配置文件位置
/etc/fail2ban/jail.local
最后重启fail2ban服务
systemctl restart fail2ban.service