shell 安全脚本的实现(shell脚本基本命令大全)万万没想到

随心笔谈9个月前更新 admin
201 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了一种使用Shell脚本和firewalld防火墙工具,通过分析远程访问日志,自动阻止因密码输入错误超过4次而被封锁的IP地址的方法。以下是文章的主要内容总结: ### 1. 目的通过编写和测试一个Shell脚本,实现以下功能:- 读取`var/log/secure`日志文件,提取因密码错误登录失败的IP地址。- 检查每个IP地址的远程登录行为,记录其是否被firewalld规则拒绝。- 添加新的firewalld Rich规则,阻止该IP地址的SSH登录。 ### 2. 工具和方法- **firewalld**:Linux系统默认的网络防火墙工具,支持添加 rich规则。- **systemctl**:用于启用和管理systemd服务。- **awk和sed**:用于处理`var/log/secure`日志文件,提取相关信息。- **Shell脚本**:用于自动化规则的添加和测试。 ### 3. 脚本流程1. **日志分析**: - 查看`var/log/secure`日志文件,查找“Failed password”提示,并提取所有涉及目标IP地址的记录。 - 使用`awk`工具提取目标IP地址,生成一个包含所有需要测试的IP地址的列表。 2. **规则添加**: - 使用`firewall-cmd`工具,遍历`var/log/secure`日志文件,找到所有因密码错误被拒绝的SSH登录服务。 - 通过`awk`工具提取目标IP地址、服务名(SSH)、以及被拒绝的 rich规则。 - 将提取到的 rich规则添加到firewalld中,阻止该IP地址的SSH登录。 3. **脚本测试**: - 编写一个Shell脚本`deny_ip.sh`,读取IP地址列表,并逐一测试每个IP地址的SSH连接。 - 如果某个IP地址因密码错误被封锁(即有记录显示其已被拒绝),则添加对应的 rich规则。 4. **脚本运行与测试**: - 在测试IP地址上运行`ss`命令,观察连接是否被拒绝。 - 检查`firewalld`服务状态,确认新增的 rich规则是否生效。 ### 4. 测试结果- 在测试过程中,作者发现由于输入密码错误次数不足4次,脚本未能添加新的 rich规则。- 最终,作者在本地IP地址`192.168.210.128`上进行了5次密码错误的尝试,观察到SSH连接被成功拒绝。 ### 5. 总结这篇文章通过结合Shell脚本和firewalld工具,提供了一种自动化的方法来监控和管理SSH登录行为。通过分析远程访问日志,脚本能够识别需要被封锁的IP地址,并自动添加rich规则。这种方法不仅提高了网络安全性,还减少了繁琐的手动操作。



目录题目:1.初始配置2.分析3.编写脚本4.测试

将密码输入错误超过4次的IP地址通过firewalld防火墙阻止访问

首先使用systemctl工具启用firewalld服务:

?[root@localhost ~]# systemctl enable firewalld

如果已经启用了,我们现在可以通过执行以下命令启动firewalld:

[root@localhost ~]# systemctl start firewalld

且可以通过运行以下命令验证firewalld的状态并且以下输出确认了firewalld启动了并且在运行:

[root@localhost ~]# systemctl status firewalld

在这里插入图片描述

1、需要知道ssh远程访问记录在哪个文件中/var/log/secure

2、模拟远程访问输错密码,查看日志文件:

cat /var/log/secure

在这里插入图片描述

3、了解firewalld添加富规则的知识:

[root@localhost ~]# firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.210.133/24″ service name=”ssh” reject’
success
[root@localhost ~]# firewall-cmd –reload
success
[root@localhost ~]# firewall-cmd –list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family=”ipv4″ source address=”192.168.210.133/24″ service name=”ssh” reject

4、回到192.168.210.133上进行测试:

[root@localhost ~]# ssh root@192.168.210.128
ssh: connect to host 192.168.210.128 port 22: Connection refused

5、测试后将添加的富规则删除:

[root@localhost ~]# firewall-cmd –permanent –remove-rich-rule=’rule family=”ipv4″ source address=”192.168.210.133/24″ service name=”ssh” reject’
success
[root@localhost ~]# firewall-cmd –reload
success
[root@localhost ~]# firewall-cmd –list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@localhost shell]# vim deny_ip.sh

#!/bin/bash
#*************************************************************
#Author:czc
#Date: 2023-01-09
#FileName: deny_ip.sh
#*************************************************************
serc_log=/avr/log/secure
ip_list=`awk ‘/Failed password/ {IP[$(NF-3)]++} END{for (k in IP){if (IP[k]>=4) {print k} }}’ /var/log/secure`
for ip in `echo $ip_list`
do
denyed_ip=`firewall-cmd –list-all | awk -F'[=]’ ‘/rule family/ && $NF=”reject” && $(NF-1)~/ssh/ {print $6}’ | awk -F'[“/]’ ‘{print $2}’`
echo $denyed_ip | grep -q $ip
[ $? -ne 0 ] && firewall-cmd –permanent –add-rich-rule=”rule family=”ipv4″ source address=”$ip” service name=”ssh” reject”
done

firewall-cmd –reload

[root@localhost shell]# chmod a+rx deny_ip.sh

由于此时192.168.210.133只输错密码3次,因此执行脚本后,并未添加富规则。

在这里插入图片描述

在这里插入图片描述

此时再到192.168.210.133上对本机进行访问,累计达到4次错误及以上:[root@localhost ~]# ssh

root@192.168.210.128
root@192.168.210.128’s password:
Permission denied, please try again.
root@192.168.210.128’s password:
Permission denied, please try again.
root@192.168.210.128’s password:

可以看到现在的输入密码错误次数累计达到5次:

在这里插入图片描述

#此时在192.168.210.128上执行脚本
[root@localhost shell]# https://www.jb51.net/article/deny_ip.sh
success
success
[root@localhost shell]# firewall-cmd –list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family=”ipv4″ source address=”192.168.210.133″ service name=”ssh” reject

#再回到192.168.210.133上进行测试

[root@localhost ~]# ssh root@192.168.210.128
ssh: connect to host 192.168.210.128 port 22: Connection refused

至此,脚本的编写和测试就完成了。更多相关shell 安全脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:确保Linux VPS及服务器更加安全之Xshell设置密钥登录Shell脚本实现检查服务器安全状态(用户、登录IP、防火墙检查)一个Linux系统安全设置的Shell脚本的分享(适用CentOS)linux服务器安全加固shell脚本代码win2003 WScript.shell与Shell组件安全篇

© 版权声明

相关文章