需求

由于业务需要将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(实测)相关推荐

  1. linux开通本地ip连接,SSH 连接本地虚拟机 Linux

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 软件安装SSH 虚拟机 LinuxCentos 连接 网络连接模式 设置虚拟机的网络连接模式: 虚拟机设置->硬件 ...

  2. 使用Denyhost来阻止恶意连接SSH的IP

    DenyHosts是用Python2.3写的一个程序,它会分析/var/log/secure(redhat,Fedora Core,Centos)等日志文件,当发现同一IP在进行多次SSH密 码尝试时 ...

  3. 阿里云 centos7静默安装oracle12c,使用navicat 连接oracle数据库

    阿里云 centos7静默安装oracle12c,使用navicat 连接oracle数据库 需要切换到阿里云镜像的,仅供参考 使用yum -y update更新软件 1. 关闭防火墙 systemc ...

  4. 华为云云服务器 - 设置 python 定时脚本 || 设置后台运行程序

    云服务器 - 设置 python 定时脚本 1.连接云服务器 2.上传文件 可视化操作: 命令行操作: 3.设置定时运行 *设置程序后台运行 1.先查看下python版本: 2.设置程序后台运行: 3 ...

  5. java 修改ip_如何用脚本快速修改IP地址(Netsh)

    评论 # re: 如何用脚本快速修改IP地址(Netsh) 2006-03-30 15:36 david.turing (2006-03-30 15:12:48) 胡子鱼-SD(18684412) 另 ...

  6. linux查看局域网ip的脚本,检测网段IP使用情况的shell脚本

    #!/bin/bash #main--- network=192.168.1 ping_count=3 IP=1 :>IP_use :>IP_idle :>ping_action e ...

  7. CentOS7 开机自启动脚本 chkconfig方式

    Linux设置自启动 sysv-rc-conf - Linux设置开机自动启动 CentOS7 开机自启动脚本 chkconfig方式 chkconfig 设置开机自启动 注意点 自启动脚本放置路径: ...

  8. android连接此设备时打开,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...

    QtScrcpy QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备,并进行显示和控制.不需要root权限. 单个应用程序最多支持16个安卓设备同时连接. 同时支持GNU/Li ...

  9. qt android 设备权限,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...

    QtScrcpy QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备,并进行显示和控制.不需要root权限. 单个应用程序最多支持16个安卓设备同时连接. 同时支持GNU/Li ...

最新文章

  1. linux 生成dll文件,Linux和Windows平台 动态库.so和.dll文件的生成
  2. 论文笔记:PPFNet
  3. SpringCloud(第一部分)
  4. [initandlisten] connection refused because too many open connections: 819 of 819
  5. Boost:返回报告错误report errors
  6. Python3.6全栈开发实例[005]
  7. 微信开发基础 获取用户OpenID 列表
  8. 量子纠缠背后的故事(三):维格纳的朋友 精选
  9. sed for windows 双引号内部内容的替换
  10. NodeJs——(8)http.ServerRequest的过程
  11. springMVC中获取request 对象
  12. 一分钟先生: 程序员面试真经
  13. json字段名不一致的问题
  14. Unix平台下的常用命令技巧之五 资源与性能
  15. 视频横竖屏模式切换,如何将多个视频任意转换
  16. Node.JS的魔力与神话
  17. 本机微信开发环境搭建
  18. scikit-learn决策树算法(鸢尾花数据集、餐饮饭店销量)
  19. 交换机综合实验(华为)
  20. Python程序设计快速入门01

热门文章

  1. 用html页面制作开关,利用前端基础制作html开关图标
  2. java的 交换排序 快速排序算法_数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法...
  3. python 内置浏览器robobrowser_Python RoboBrowser – 如何从此页面获取内容
  4. loss函数之TripletMarginLoss与TripletMarginWithDistanceLoss
  5. js变量显示在html中_PythonDjango+JS+Ajax实现网页采集并动态显示PLC变量
  6. android的looper,handler消息小结
  7. 查看数据库中的字段所在的表中或某值所在的表和字段
  8. win7 vmware虚拟机 中 mac系统无法上网
  9. TeeChart Pro VCL/FMX教程(六):使用系列(二)
  10. LeetCode28.实现strStr() JavaScript