将SSH多次登录失败的IP加入黑名单

最近刚公司搞网络安全攻防演练,正好整理用到的一些命令。

这次记录的是将SSH多次登录失败的IP加入黑名单的过程。

# 统计暴力破解次数
awk '/Failed/{fa[$(NF-3)]++}END{for(pol in fa)print pol,fa[pol]}' /var/log/secure|column -t

虽然将ssh的端口更改了,但还是免不了被人发现,并且尝试暴力破解

 天天搞啥,离谱的一个IP爆破了12W次......  全是老外搞事。。。

列出登入失败的用户记录
lastb

网友们的解决方案,发现可以使用定时任务来检查登录失败主机列表,并将达到登录失败次数的主机IP地址加入到黑名单。

感觉很不错,为了服务器的安全,我决定在服务器也弄一个,降低 sshd 服务的压力。

脚本如下:

#!/usr/bin/bash

# 通过lastb获取登录失败的IP及登录失败的次数
lastb | awk '{print $3}' | grep ^[0-9] | sort | uniq -c | awk '{print $1"\t"$2}' > /tmp/host_list
list=`cat /tmp/host_list`
line=`wc -l /tmp/host_list | awk '{print $1}'`
count=1

# 如果/tmp/host_list中有数据,循环至少需要执行一次
while [[ "$line" -ge "$count" ]]; do
        ip_add=`echo $list | awk '{FS="\t"} {print $2}'`
        num=`echo $list | awk  '{FS="\t"} {print $1}'`
        #   登录失败达到5次就将该IP写入文件
        if [[ "$num" -ge 5 ]]; then
                grep "$ip_add" /etc/hosts.deny &> /dev/null
                if [[ "$?" -gt 0 ]]; then
                        # --------> 此处添加当前系统时间,请根据实际情况定义日期格式
                        echo "# $(date +%F' '%H:%M:%S)" >> /etc/hosts.deny
                        echo "sshd:$ip_add" >> /etc/hosts.deny
                fi
        fi
        let count+=1
        #   删除已经写入文件的IP
        sed -i '1d' /tmp/host_list
        #   修改$list变量
        list=`cat /tmp/host_list`
done

# 清空临时文件
echo '' > /tmp/host_list
exit 0

弄好脚本将其加到 crontab 定时任务执行就完成了~

可以通过配置 `/etc/hosts.deny` 和 SSH 服务配置文件 `/etc/ssh/sshd_config` 来实现对 SSH 访问的黑名单限制。以下是具体的操作步骤: ### 1. 使用 `hosts.deny` 配置黑名单 编辑 `/etc/hosts.deny` 文件,添加以下内容以阻止特定 IP 地址或所有连接。 - **阻止单个 IP 地址**: ```bash sshd:192.168.2.2 ``` - **阻止多个 IP 地址**: ```bash sshd:192.168.2.2 sshd:192.168.2.3 ``` - **阻止所有 IP 地址(慎用)**: ```bash sshd:ALL ``` 该方法通过 TCP Wrappers 实现访问控制,适用于大多数基于 Linux 的系统 [^1]。 --- ### 2. 在 `sshd_config` 中启用黑名单功能 确保 `/etc/ssh/sshd_config` 中启用了黑名单支持,并结合其他安全措施进一步强化安全性。 - 编辑配置文件: ```bash sudo vi /etc/ssh/sshd_config ``` - 确保以下配置项已设置: ```bash DenyUsers root user1 user2 # 拒绝特定用户登录 DenyGroups group1 group2 # 拒绝特定组登录 AllowUsers user3 user4 # 白名单:仅允许特定用户登录 ``` 这些参数可以与 `/etc/hosts.deny` 协同工作,实现更精细的访问控制 [^3]。 --- ### 3. 自动化脚本添加失败尝试过多的 IP黑名单 如果需要自动化地将频繁失败尝试的 IP 加入黑名单,可以使用如下脚本: ```bash iplist=$(lastb | awk '{print $3}' | sort | uniq -c | awk '{if ($1>1500) print $2}' | grep -v "^10.0.0.") for ip in ${iplist}; do echo "sshd:${ip}:deny" >> /etc/hosts.deny done echo > /var/log/btmp ``` 此脚本会分析 `lastb` 日志中的失败登录记录,并自动将尝试次数超过阈值的 IP 添加到黑名单中 [^4]。 --- ### 4. 验证和重启 SSH 服务 完成配置后,需重新加载 SSH 配置以使更改生效: ```bash sudo systemctl reload sshd ``` 确保测试连接以验证黑名单是否正常工作。例如,从被禁止的 IP 尝试登录时应被拒绝。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值