首页 > 系统相关 >centos7禁止 SSH 登录失败超过30次的IP

centos7禁止 SSH 登录失败超过30次的IP

时间:2024-06-24 09:57:24浏览次数:30  
标签:脚本 IP 30 firewalld echo centos7 failed IP地址

使用 firewalld 禁止 SSH 登录失败超过30次的IP

概述

在CentOS 7中,一般默认安装了firewalld
动态添加失败登录超过30次的IP地址到防火墙规则中,禁止这些IP的访问。
编写和使用脚本,通过 firewalld 来实现;
注意iptables不适用,但大差不差。

步骤

1. 安装 firewalld

确保 firewalld 已经安装并运行:

sudo yum install firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld

2. 创建脚本 ban_failed_ssh_firewalld.sh

在合适的位置创建一个新的脚本文件 ban_failed_ssh_firewalld.sh

sudo vi /root/ban_failed_ssh_firewalld.sh

将以下内容复制到脚本文件中:

#!/bin/bash

LOG_FILE="/var/log/secure"

# 检查日志文件是否存在
if [ ! -f "$LOG_FILE" ]; then
    echo "日志文件 $LOG_FILE 不存在!"
    exit 1
fi

# 检查是否有读取日志文件的权限
if [ ! -r "$LOG_FILE" ]; then
    echo "没有读取日志文件 $LOG_FILE 的权限,请以root用户运行此脚本!"
    exit 1
fi

# 设置失败登录次数阈值
THRESHOLD=30

# 提取失败登录的IP并统计
echo "提取失败登录超过 $THRESHOLD 次的IP地址..."
FAILED_IPS=$(grep "Failed password" $LOG_FILE | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | awk -v threshold=$THRESHOLD '$1 > threshold {print $2}')

# 调试输出,检查提取的IP地址
echo "提取的IP地址:"
echo "$FAILED_IPS"

# 检查是否有符合条件的IP
if [ -z "$FAILED_IPS" ]; then
    echo "没有IP地址登录失败超过 $THRESHOLD 次。"
    exit 0
fi

# 禁止这些IP通过firewalld
echo "添加以下IP到firewalld黑名单:"
for IP in $FAILED_IPS; do
    echo $IP
    firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$IP' reject"
done

# 重新加载firewalld服务以应用更改
echo "重新加载firewalld服务..."
firewall-cmd --reload

echo "操作完成。"

3. 赋予脚本执行权限

赋予脚本执行权限:

chmod +x /root/ban_failed_ssh_firewalld.sh

4. 运行脚本

root 用户运行脚本:

sudo /root/ban_failed_ssh_firewalld.sh

自动化

执行此脚本,可选用 cron 定时任务。

1. 编辑 crontab 文件

编辑 crontab 文件:

crontab -e

2. 添加定时任务

例如,每小时运行一次脚本:

0 * * * * /root/ban_failed_ssh_firewalld.sh

/root/ban_failed_ssh_firewalld.sh 替换为your脚本路径。

调试步骤

出现问题可以尝试以下做法:

1. 手动检查日志文件

运行以下命令,确保日志文件存在并且可以读取:

ls -l /var/log/secure
cat /var/log/secure | head

2. 检查提取的IP地址

运行以下命令,手动提取失败的登录IP地址,并检查输出是否正确:

grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | awk '$1 > 30 {print $2}'

总结

使用 firewalld 自动阻止SSH登录失败超过30次的IP,免受暴力破解困扰。

标签:脚本,IP,30,firewalld,echo,centos7,failed,IP地址
From: https://www.cnblogs.com/yimouz-219/p/18264405

相关文章

  • C# WinForm给ToolStrip工具栏扩展一个CheckBox单选框类型按钮的方法
    [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip)]publicpartialclassToolStripCheckBox:ToolStripItem{privateboolIsChecked=false;publicboolHasChecked{get......
  • 从移动切换到电信IP:详细介绍两种方法
    在当前的互联网环境中,用户可能会因为各种原因需要切换网络服务提供商,比如从移动切换到电信。这种切换不仅涉及到网络服务的变更,还可能意味着IP地址的改变。那么,移动的怎么切换成电信的IP?下面一起来了解一下吧。方法一:物理更换网络服务如果您想要从移动的网络服务完全切换到......
  • 在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
    在Linux中统计IP访问情况并分析Nginx访问日志,以找出访问页面数量在前十位的IP地址,可以通过一系列命令行工具高效完成。这里以一个典型的工作流程为例,说明如何进行这一分析:1.确定日志文件位置首先,需要知道Nginx的访问日志文件位置。通常,这个文件位于/var/log/nginx/access.log,但......
  • 在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
    在Linux系统中,将本地80端口的请求转发到8080端口,可以通过使用iptables命令来实现。当前主机IP为10.0.0.104,具体命令如下:iptables-tnat-APREROUTING-d10.0.0.104-ptcp--dport80-jDNAT--to-destination10.0.0.104:8080解析:iptables:iptables命令用于配置Linux内核......
  • How to get all subarrays from an array by using JavaScript All In One
    HowtogetallsubarraysfromanarraybyusingJavaScriptAllInOneJavaScript动态生成其所有的子数组算法difficulty:Medium/难度:中等solutionsdemos//双指针???//functionnumberOfSubarrays(nums:number[],k:number):number{//letcount=0......
  • A Completed Python Scripter and File Handle with Matplotlib
    importosimportrequestsimportrequestsfrombs4importBeautifulSoupfromtypingimportDicttotal_div:Dict[str,BeautifulSoup]=dict()defthe_big_div(text:str):soup=BeautifulSoup(text,'lxml')count=soup.find_all('div......
  • [题解]CF1061C Multiplicity
    题意给定一个长度为\(n\)的序列\(\{a_1,a_2,\dots,a_n\}\)。现在要在\(a\)选出非空子序列\(\{b_1,b_2,\dots,b_m\}\),使得所有的\(i\in[1,m]\),都有\(b_i\bmodi=0\)。求能够选取\(b\)序列的方案数模\(10^9+7\)的值。思路定义\(dp_{i,j}\)表示在\(\{a_1,a......
  • centos7&国产uos&银河麒麟系统安装MYSQL
     1.解压  tar -zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.34-linux-glibc2.12-x86_64 mysql 2. 先检查是否有mysql用户组和mysql用户,没有就添加有就忽略:groupsmysql  添加用户组和用户groupaddmysql&&useradd-r-gmys......
  • Day 30 | 122.买卖股票的最佳时机II、55. 跳跃游戏 、45.跳跃游戏II、 1005.K次取反后
    122.买卖股票的最佳时机II本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜!https://programmercarl.com/0122.买卖股票的最佳时机II.html给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成......
  • JavaScript与Go后端服务连接方法
    1.概述本文档描述了如何使用JavaScript(在浏览器或Node.js环境中)与使用Go语言编写的后端服务进行通信。我们将通过HTTP请求来实现前后端的数据交互。2.前提条件后端服务已经部署并运行在指定的URL上。JavaScript环境已经配置好,如果是Node.js,需要安装axios或fetch库。3.Go......