CentOS7通过定时脚本阻断异常IP连接SSH(实测)
需求
由于业务需要将Linux服务器映射到公网访问,SSH 端口已经修改,但还是发现有很多IP进行暴力破解,尝试将异常IP阻止非法访问,实现方式①SSH黑名单 ②Firewalld防火墙添加drop规则;
原理:
通过定时脚本检查系统登录失败日志/var/log/secure,统计每个IP失败登录次数,当统计到失败次数大于阀值时,将IP加入系统屏蔽名单/etc/hosts.deny中。
1、编辑脚本文件secure_ssh.sh
#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /home/black.txt
for i in `cat /home/black.txt`
doIP=`echo $i |awk -F= '{print $1}'`NUM=`echo $i|awk -F= '{print $2}'`if [ $NUM -gt 3 ];thengrep $IP /etc/hosts.deny > /dev/nullif [ $? -gt 0 ];thenecho "sshd:$IP:deny" >> /etc/hosts.denyfifi
done
2、创建/etc/hosts.deny
touch /etc/hosts.deny
3、修改文件secure_ssh.sh可执行属性,并创建black.txt文件
chmod +x secure_ssh.sh
touch /home/black.txt
4、通过crontab -e添加系统定时执行任务,这里设置每30分钟执行一次。
*/30 * * * * sh /root/secure_ssh.sh
5、重启crond守护进程。
systemctl restart crond
6、查看black.txt和hosts.deny
[root@localhost shell]# cat /etc/hosts.deny
sshd:192.168.1.169:deny
sshd:192.168.1.160:deny
[root@localhost shell]# cat /home/black.txt
192.168.1.160=13
192.168.1.169=4
直接被禁止登陆了,
注释掉就能登陆
SSH 黑名单实现思路
①通过lastb获取一小时区间非法登录系统的IP并通过AWK 统计>10次的IP;
②FOR 循环 实现SSH 黑名单添加;
③将SHELL 脚本添加到系统计划任务中。
客户端IP发起登录,Linux的检查策略是先看/etc/hosts.allow中是否允许,如果允许直接放行;如果没有,则再看/etc/hosts.deny中是否禁止。
#!/bin/bash
DATE=$(date +"%a %b %e %H")
DROP_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in a)if(a[i]>10)print i}')
for IP in $DROP_IP; doif [ $(cat /etc/hosts.deny |grep -c "$IP") -eq 0 ]; thenecho "sshd:$IP:deny" >> /etc/hosts.deny
fi
done
Firewalld实现思路
①通过lastb获取一小时区间非法登录系统的IP并通过AWK 统计>10次的IP;
②FOR 循环 实现fFirewalld防火墙添加drop规则并重新加载防火墙配置;
③将SHELL 脚本添加到系统计划任务中。
#!/bin/bash
DATE=$(date +"%a %b %e %H")
DROP_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in a)if(a[i]>10)print i}')
for ip in $DROP_IP; doif [ $(firewall-cmd --list-all |grep drop |grep -c "$ip") -eq 0 ]; thenfirewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="$ip" drop" >> /dev/nullfirewall-cmd --reload >>/dev/nullfi
done
计划任务
[root@ecs-01 opt]# crontab -e
#每5分钟执行一次
*/5 * * * * /usr/bin/bash /opt/fwdrop.sh
*/5 * * * * /usr/bin/bash /opt/sshdrop.sh
Firewall 配置
rich-rule
查看 rich-rule
firewall-cmd --list-rich-rules --zone=public
允许 rich-rule ip
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.8" accept'
禁止 rich-rule ip
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.8" drop'
删除 rich-rule ip
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.10.8" drop'
允许 rich-rule ip + port
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.8" port protocol="tcp" port="22" accept'
禁止 rich-rule ip + port
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.8" port protocol="tcp" port="22" drop'
删除 rich-rule ip + port
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.10.8" port protocol="tcp" port="22" drop'
禁止 rich-rule icmp
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
删除rich-rule icmp
firewall-cmd --permanent --remove-rich-rule='rule protocol value=icmp drop'
参考链接 :
CentOS7通过定时脚本禁止某IP连接SSH :https://e2c.net/2019/05/22/134.html
ssh访问控制,阻断异常IP,防止暴力破解
https://mp.weixin.qq.com/s/oktVy09zJAAH_MMKdXjtIA
CentOS7通过定时脚本阻断异常IP连接SSH(实测)相关推荐
- linux开通本地ip连接,SSH 连接本地虚拟机 Linux
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 软件安装SSH 虚拟机 LinuxCentos 连接 网络连接模式 设置虚拟机的网络连接模式: 虚拟机设置->硬件 ...
- 使用Denyhost来阻止恶意连接SSH的IP
DenyHosts是用Python2.3写的一个程序,它会分析/var/log/secure(redhat,Fedora Core,Centos)等日志文件,当发现同一IP在进行多次SSH密 码尝试时 ...
- 阿里云 centos7静默安装oracle12c,使用navicat 连接oracle数据库
阿里云 centos7静默安装oracle12c,使用navicat 连接oracle数据库 需要切换到阿里云镜像的,仅供参考 使用yum -y update更新软件 1. 关闭防火墙 systemc ...
- 华为云云服务器 - 设置 python 定时脚本 || 设置后台运行程序
云服务器 - 设置 python 定时脚本 1.连接云服务器 2.上传文件 可视化操作: 命令行操作: 3.设置定时运行 *设置程序后台运行 1.先查看下python版本: 2.设置程序后台运行: 3 ...
- java 修改ip_如何用脚本快速修改IP地址(Netsh)
评论 # re: 如何用脚本快速修改IP地址(Netsh) 2006-03-30 15:36 david.turing (2006-03-30 15:12:48) 胡子鱼-SD(18684412) 另 ...
- linux查看局域网ip的脚本,检测网段IP使用情况的shell脚本
#!/bin/bash #main--- network=192.168.1 ping_count=3 IP=1 :>IP_use :>IP_idle :>ping_action e ...
- CentOS7 开机自启动脚本 chkconfig方式
Linux设置自启动 sysv-rc-conf - Linux设置开机自动启动 CentOS7 开机自启动脚本 chkconfig方式 chkconfig 设置开机自启动 注意点 自启动脚本放置路径: ...
- android连接此设备时打开,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...
QtScrcpy QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备,并进行显示和控制.不需要root权限. 单个应用程序最多支持16个安卓设备同时连接. 同时支持GNU/Li ...
- qt android 设备权限,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...
QtScrcpy QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备,并进行显示和控制.不需要root权限. 单个应用程序最多支持16个安卓设备同时连接. 同时支持GNU/Li ...
最新文章
- linux 生成dll文件,Linux和Windows平台 动态库.so和.dll文件的生成
- 论文笔记:PPFNet
- SpringCloud(第一部分)
- [initandlisten] connection refused because too many open connections: 819 of 819
- Boost:返回报告错误report errors
- Python3.6全栈开发实例[005]
- 微信开发基础 获取用户OpenID 列表
- 量子纠缠背后的故事(三):维格纳的朋友 精选
- sed for windows 双引号内部内容的替换
- NodeJs——(8)http.ServerRequest的过程
- springMVC中获取request 对象
- 一分钟先生: 程序员面试真经
- json字段名不一致的问题
- Unix平台下的常用命令技巧之五 资源与性能
- 视频横竖屏模式切换,如何将多个视频任意转换
- Node.JS的魔力与神话
- 本机微信开发环境搭建
- scikit-learn决策树算法(鸢尾花数据集、餐饮饭店销量)
- 交换机综合实验(华为)
- Python程序设计快速入门01
热门文章
- 用html页面制作开关,利用前端基础制作html开关图标
- java的 交换排序 快速排序算法_数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法...
- python 内置浏览器robobrowser_Python RoboBrowser – 如何从此页面获取内容
- loss函数之TripletMarginLoss与TripletMarginWithDistanceLoss
- js变量显示在html中_PythonDjango+JS+Ajax实现网页采集并动态显示PLC变量
- android的looper,handler消息小结
- 查看数据库中的字段所在的表中或某值所在的表和字段
- win7 vmware虚拟机 中 mac系统无法上网
- TeeChart Pro VCL/FMX教程(六):使用系列(二)
- LeetCode28.实现strStr() JavaScript