目录

[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
Last modification:September 17, 2024
V50%看看实力