shell实现将登录失败次数超过5次ip拉入黑名单,以防暴力破解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

公网环境非常恶劣,经常会遇见暴力破解的攻击手段,为了预防暴力破解,我们将写一个脚本,将登录失败五次以上的ip地址拉入黑名单,禁止其访问服务器,并发邮件通知管理员。

提示:以下是本篇文章正文内容,下面案例可供参考

一、服务器环境配置准备

centos7系统
禁用firewalld防火墙
开启iptables防火墙
配置邮箱

二、环境配置

1.禁用firewalld

代码如下(示例):

systemctl stop firewalld
systemctl disable firewalld

2.关闭selinux

代码如下(示例):

[root@web_hk ~]# setenforce 0 //临时关闭selinux
[root@web_hk ~]# getenforce
Disabled
[root@web_hk ~]# cat /etc/selinux/config //检查此文件,确认selinux永久关闭

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

3、安装、启用iptables服务

[root@web_hk ~]# yum install iptables-services
[root@web_hk ~]# systemctl start iptables
[root@web_hk ~]# systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

4、配置邮箱mail

[root@WEB ~]# vi /etc/mail.rc
set bsdcompat
set from=123456@qq.com  //邮箱地址,
set smtp=smtp.exmail.qq.com
set smtp-auth-user=123456@qq.com //邮箱 账户
set smtp-auth-password=123 //邮箱密码
set smtp-auth=login

邮箱测试:
echo “内容” | mail -s 主题 接收的邮箱地址

[root@web_hk ~]# echo "888888" | mail -s test 987654@qq.com

三、for循环脚本

[root@web_hk ~]# touch unlogin.sh 
[root@web_hk ~]# chmod 755 unlogin.sh //赋予执行权限
[root@web_hk ~]# ll
total 0
-rwxr-xr-x 1 root root 0 Apr 15 20:05 unlogin.sh
[root@web_hk ~]# vi unlogin.sh

记录登录失败的主机ip地址,并记录到/tmp/host文件,记住是覆盖 >

lastb | awk '{print $3}' | grep ^[0-9] | uniq -c | awk '{print $1"="$2}' > /tmp/host

将登录失败的主机信息赋予变量list

list=`cat /tmp/host`

for循环取值

for i in $list;do
	ip=`echo $i | awk -F= '{print $2}'`//取出登录失败的ip地址
	num=`echo $i | awk -F= '{print $1}'`//取出登录的失败次数,用于if判断
if [[ $num -gt 5 ]];then //失败次数大于5次,就执行以下的脚本
		echo "$(date +%F) $(date +%T)" >> /$HOME/error_login,log//记录时间
		echo $ip >> /$HOME/error_login,log//记录被拉黑的IP地址
		echo $ip >> /tmp/host_deny//记录将要被拉黑的临时文件
		deny_ip=`cat /tmp/host_deny`//把拉黑的ip地址赋予变量deny_ip

继续嵌套否循环输出

for i in $deny_ip;do //读取黑名单的ip地址
			/usr/sbin/iptables -I INPUT -s $i -j DROP //iptables禁止ip访问
			echo "$i 企图恶意登录,已封禁" | mail -s “疑似暴力破解” 123456@qq.com//发邮件通知管理员
			lastb >> /root/btmp //备份登录失败的ip记录
			cat /dev/null > /var/log/btmp //清空登录失败的ip地址记录,如果不清空,将会陷入死循环
			rm -rf /tmp/host_deny //删除临时文件
		done
	fi
done

最终脚本内容:

#!/bin/bash
lastb | awk '{print $3}' | grep ^[0-9] | uniq -c | awk '{print $1"="$2}' > /tmp/host
list=`cat /tmp/host`
for i in $list;do
	ip=`echo $i | awk -F= '{print $2}'`
	num=`echo $i | awk -F= '{print $1}'`
	if [[ $num -gt 5 ]];then
		echo "$(date +%F) $(date +%T)" >> /$HOME/error_login,log
		echo $ip >> /$HOME/error_login,log
		echo $ip >> /tmp/host_deny
		deny_ip=`cat /tmp/host_deny`
		for i in $deny_ip;do
			/usr/sbin/iptables -I INPUT -s $i -j DROP
			echo "$i 企图恶意登录,已封禁" | mail -s “疑似暴力破解” 123456@qq.com
			lastb >> /root/btmp
			cat /dev/null > /var/log/btmp
			rm -rf /tmp/host_deny
		done
	fi
done

定时任务开启

[root@WEB ~]# crontab -e
*/1 * * * * ./etc/profile;/bin/bash /root/unlogin.sh

总结

1、我的脚本是在/root目录下编写的,记住自己编写脚本的路径,灵活应对。
2、我手动执行脚本是正常的,但是加入定时任务之后,出现防火墙的命令没有执行的情况,最终查询是环境变量问题,因此写脚本时候,防火墙使用的命令是绝对路径,在加入cron任务时候也加入环境声明./etc/profile;/bin/bash,最终才得以执行。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.txt 中记录该ip地址。 首先,我们需要创建一个脚本,用于检测日志中的IP地址访问次数,并在需要时将其添加到黑名单文件中。以下是一个可能的实现: ``` #!/bin/bash # 设置阈值 THRESHOLD=200 # 日志文件路径 LOG_FILE=/var/log/access.log # 黑名单文件路径 BLACKLIST_FILE=/tmp/blacklist.txt # 获取当前时间 now=$(date +"%Y-%m-%d %T") # 统计访问次数大于阈值的IP地址 ip_list=$(awk '{print $1}' ${LOG_FILE} | sort | uniq -c | awk -v threshold=$THRESHOLD '$1 > threshold {print $2}') # 遍历IP地址列表 for ip in ${ip_list}; do # 在黑名单文件中查找IP地址 if grep -q "${ip}" "${BLACKLIST_FILE}"; then echo "${now}: ${ip} is already blacklisted." else # 将IP地址添加到黑名单文件中 echo "${ip}" >> "${BLACKLIST_FILE}" echo "${now}: ${ip} is added to blacklist." fi done ``` 上述脚本会读取指定的访问日志文件中的IP地址,并统计每个IP地址出现的次数。然后,它会检查访问次数是否超过了给定的阈值,并将访问次数超过阈值的IP地址加到指定的黑名单文件中。 脚本中的阈值、日志文件路径和黑名单文件路径都可以根据实际需要进行修改。 要让这个脚本每分钟自动执行,我们需要使用 cron 工具。可以使用以下命令编辑 cron 表: ``` crontab -e ``` 然后,在文件末尾添加以下行: ``` * * * * * /path/to/script.sh ``` 这会让 cron 每分钟执行一次脚本。请将 `/path/to/script.sh` 替换为实际脚本文件的路径。 需要注意的是,如果您是在 Windows 环境下编写脚本,则需要将脚本保存为 UNIX 格式,并确保脚本文件的权限为可执行。这可以通过以下命令完成: ``` dos2unix /path/to/script.sh chmod +x /path/to/script.sh ``` 现在,每当脚本检测到访问次数超过200的IP地址,它会将其添加到黑名单文件中,并在 /tmp/blacklist.txt 中记录该ip地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值