当前位置: 首页 > news >正文

利用 fail2ban 保护 SSH 服务器

利用 fail2ban 保护 SSH 服务器

      • 一、关于 fail2ban
        • 1. 基本功能与特性
        • 2. 工作原理
      • 二、安装与配置
        • 1. Debian/Ubuntu系统:
        • 2. CentOS/RHEL系统:
      • 三、保护 SSH
      • 四、启动 fail2ban 服务
      • 五、测试和验证
      • 六、查看封禁的 IP 地址
      • 七、一些配置
      • 八、注意事项

作者:高玉涵
时间:2024.6.30 12:56
博客:blog.csdn.net/cg_i
环境:CentOS8

左右左右下下 按按 滴——抓娃娃机

一、关于 fail2ban

Fail2ban是一款实用的入侵防御软件,旨在保护服务器免受暴力攻击,特别是通过密码猜测和暴力破解的方式。以下是关于Fail2ban的详细介绍:

1. 基本功能与特性
  1. 日志监控与封禁:Fail2ban能够监视系统日志文件,如/var/log/auth.log/var/log/apache/access.log等,匹配日志中的错误信息(通过正则表达式匹配),并对符合特定规则的IP地址执行封禁操作。
  2. 支持多种服务和动作:Fail2ban支持大量的服务,如sshd、apache、qmail、proftpd等,并允许执行多种动作,如通过iptables或tcp-wrapper更新防火墙规则,发送邮件通知等。
  3. 灵活性高:用户可以根据自己的需求自定义监控规则、封禁时间和动作,Fail2ban的配置文件提供了丰富的选项来满足这些需求。
  4. 开箱即用:Fail2ban附带了许多服务的默认过滤器,用户无需从头开始配置即可快速部署。
2. 工作原理

Fail2ban通过扫描系统日志文件来检测失败的登录尝试或恶意行为。当检测到某个IP地址在指定时间内超过预设的失败尝试次数时,Fail2ban会根据配置执行相应的封禁动作,如通过iptables更新防火墙规则以拒绝该IP地址的访问。此外,Fail2ban还可以配置为在封禁IP地址时发送邮件通知给管理员。

二、安装与配置

Fail2ban的安装和配置相对简单,以下以基于Debian和CentOS的系统为例说明安装步骤:

1. Debian/Ubuntu系统:
  • 更新软件源:sudo apt-get update
  • 安装Fail2ban:sudo apt-get install -y fail2ban
2. CentOS/RHEL系统:
  • 更新软件源:sudo yum update
  • 安装EPEL仓库(如果尚未安装):sudo yum install -y epel-release
  • 安装Fail2ban:sudo yum install -y fail2ban

配置Fail2ban时,通常建议编辑/etc/fail2ban/jail.local文件(如果不存在,则从/etc/fail2ban/jail.conf复制一份并重命名)。在该文件中,可以启用和配置不同的监控服务,设置全局参数(如封禁时间、最大尝试次数等),以及为特定服务配置日志路径和动作。

三、保护 SSH

[root@centos8 ~]vi /etc/fail2ban/jail.local

添加以下内容并保存:

[sshd]
enabled = true
filter = sshd
port = 22
logpath = /var/log/secure
maxretry = 3
bantime = 600

下面是对每一行配置的解释:

  • enabled = true:启用对sshd服务的监控。
  • filter = sshd:使用sshd过滤器来匹配日志中的错误信息。
  • port = 22:指定sshd服务监听的端口号,默认是22。
  • logpath = /var/log/secure:指定sshd服务的日志文件路径。在大多数基于Red Hat的系统中,sshd的日志记录在/var/log/secure文件中。
  • maxretry = 3:设置最大尝试次数。如果某个IP地址在指定时间内尝试连接sshd服务并失败超过3次,则触发封禁动作。
  • bantime = 600:设置封禁时间,单位为秒。在这个例子中,被封禁的IP地址将在600秒内无法访问sshd服务。

四、启动 fail2ban 服务

systemctl enable --now fail2ban

因我已启用了 fail2ban 为了让新配置生效,重启服务即可。

[root@centos8 ~]# systemctl restart fail2ban
[root@centos8 ~]# systemctl status fail2ban
● fail2ban.service - Fail2Ban ServiceLoaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)Active: active (running) since Sun 2024-06-30 13:22:15 CST; 5s agoDocs: man:fail2ban(1)Process: 3847005 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS)Process: 3847068 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)Main PID: 3847070 (fail2ban-server)Tasks: 15 (limit: 49300)Memory: 22.8MCGroup: /system.slice/fail2ban.service├─3847070 /usr/bin/python3.6 -s /usr/bin/fail2ban-server -xf start├─3847098 /bin/bash /usr/sbin/sendmail -f root@centos8. root@localhost├─3847116 /bin/bash /usr/sbin/sendmail -f root@centos8. root@localhost├─3847134 /bin/bash /usr/sbin/sendmail -f root@centos8. root@localhost├─3847137 /usr/bin/dotlockfile -p -l /root/.esmtp_queue/.deliver_lock├─3847138 /usr/bin/dotlockfile -p -l /root/.esmtp_queue/.deliver_lock└─3847492 /bin/bash /usr/sbin/sendmail -f root@centos8. root@localhostJun 30 13:22:15 centos8 systemd[1]: fail2ban.service: Succeeded.
Jun 30 13:22:15 centos8 systemd[1]: Stopped Fail2Ban Service.
Jun 30 13:22:15 centos8 systemd[1]: Starting Fail2Ban Service...
Jun 30 13:22:15 centos8 systemd[1]: Started Fail2Ban Service.
Jun 30 13:22:16 centos8 fail2ban-server[3847070]: Server ready

五、测试和验证

客户端:连续输错 3 次密码:

ssh root@10.10.10.138
root@10.10.10.138's password:(随便输入)
Permission denied,please try again.
root@10.10.10.138's password:(随便输入)
Permission denied,please try again.
root@10.10.10.138's password:(随便输入)
Permission denied(publickey,gssapi-keyex,gssapi-with-mic,password).

再次连接到服务器:

ssh root@10.10.10.138
ssh:connect to host 10.10.10.138 port 22: Connection refused(连接断开,没有给我们输入密码的机会)

六、查看封禁的 IP 地址

  • 查看封禁状态

通过防火墙策略查看当前封禁的 IP 地址:

[root@centos8 ~]firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0sources: services: cockpit dhcpv6-client sshports: protocols: forward: nomasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: rule family="ipv4" source address="10.10.10.128" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"(IP 被禁止访问 SSH 端口。)

通过 fail2ban-client status命令检查:

fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

可以看到此时有一条 Jail 生效为 sshd 的信息。要想进一步了解通过 fail2ban-client status sshd命令获得详细信息。

[root@centos8 ~]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	2
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions|- Currently banned:	1|- Total banned:	2`- Banned IP list:	10.10.10.128

我们主要关注ActionsCurrently banned当前封禁 IP 数量、Total banned总封禁次数、Banned IP list封禁的 IP 地址。

七、一些配置

[nginx-http-auth]
# HTTP 验证防暴力破解
enabled = true
filter = nginx-http-auth
port = 80
logpath = /var/log/nginx/error.log[nginx-badbots]
# 屏蔽爬虫
enabled = true
port = 80
filter = nginx-badbots
logpath = /var/log/nginx/access.log
maxretry = 2[nginx-nohome]
# 避免恶意请求网站目录结构
enable = true
port = 80
filter = nginx-nohome
logpath = /var/log/nginx/access.log
maxretry = 2[nginx-noproxy]
# 避免被人利用反向代理
enable = true
port = 80
filter = nginx-noproxy
logpath = /var/log/nginx/access.log
maxretry = 2

八、注意事项

  • 在配置Fail2ban时,应谨慎设置封禁时间和最大尝试次数等参数,以避免误封合法用户。
  • Fail2ban虽然能够降低恶意登录尝试的发生率,但并不能完全消除弱身份验证带来的安全风险。因此,建议结合其他安全措施(如多因子认证)来提高系统的整体安全性。
  • 定期检查和更新Fail2ban的配置文件和规则集,以确保其能够有效地应对新的安全威胁。

相关文章:

利用 fail2ban 保护 SSH 服务器

利用 fail2ban 保护 SSH 服务器 一、关于 fail2ban1. 基本功能与特性2. 工作原理 二、安装与配置1. Debian/Ubuntu系统:2. CentOS/RHEL系统: 三、保护 SSH四、启动 fail2ban 服务五、测试和验证六、查看封禁的 IP 地址七、一些配置八、注意事项 作者&…...

在TkinterGUI界面显示WIFI网络摄像头(ESP32s3)视频画面

本实验结合了之前写过的两篇文章Python调用摄像头,实时显示视频在Tkinter界面以及ESP32 S3搭载OV2640摄像头释放热点(AP)工作模式–Arduino程序,当然如果手头有其他可以获得网络摄像头的URL即用于访问摄像头视频流的网络地址&…...

Yolov8训练时遇到报错SyntaxError: ‘image_weights‘ is not a valid YOLO argument.等问题解决方案

报错说明 line 308, in check_dict_alignmentraise SyntaxError(string CLI_HELP_MSG) from e SyntaxError: image_weights is not a valid YOLO argument. v5loader is not a valid YOLO argument. fl_gamma is not a valid YOLO argument. 解决方法 将训练文件中model.tr…...

javaweb(四)——过滤器与监听器

文章目录 过滤器Filter基本概念滤波器的分类: 时域和频域表示滤波器类型1. 低通滤波器(Low-Pass Filter)2. 高通滤波器(High-Pass Filter)3. 带通滤波器(Band-Pass Filter)4. 带阻滤波器(Band-Stop Filter) 滤波器参数1. 通带频率(Passband Frequency)2. 截止频率(Cutoff Frequ…...

冗余电源的应用,哪些工作站支持冗余电源

冗余电源是一种通过多组电源模块进行备份的技术手段,采用热备插拔式设计,使备用电源在主要电源失效时自动启动,从而确保电源供应不间断。 冗余电源通常应用于对电力要求极高的关键设备和系统,如医疗设备、核电站、数据中心等。在…...

[信号与系统]IIR滤波器与FIR滤波器相位延迟定量的推导。

IIR滤波器与FIR滤波器最大的不同:相位延迟 IIR滤波器相位延迟分析 相位响应和延迟 这里讨论一下理想延迟系统的相位延迟。 对于一个给定的系统频率响应 H ( e j w ) H(e^{jw}) H(ejw)可以表示为 H ( e j w ) ∣ H ( e j w ) ∣ e Φ ( w ) H(e^{jw}) |H(e^{jw…...

Python海量数据处理脚本大集合:pyWhat

pyWhat:精简海联数据,直达数据弱点要害- 精选真开源,释放新价值。 概览 pyWhat是Github社区上一款比较实用的开源Python脚本工具。它能够快速提取信息中的 IP 地址、邮箱、信用卡、数字货币钱包地址、YouTube 视频等内容。当你遇到了一串莫名…...

postgresql搭建

搭建postgresql-11.3,和客户端工具 1,准备对应的包,右键直接下一步安装完即可, 将postgresql设置为本地服务,方便启动, 2,用对应客户端软件连接,新建一个数据库controlDB 新建用户…...

Web 品质标准

Web 品质标准 引言 随着互联网的快速发展,Web应用已经渗透到我们生活的方方面面。为了确保Web应用的质量,提高用户体验,Web品质标准应运而生。这些标准涵盖了多个方面,包括性能、安全性、可访问性、用户体验等。本文将详细介绍这些标准,并探讨它们在实际开发中的应用。 …...

深入理解PyTorch:原理与使用指南

文章目录 引言一、PyTorch的原理1. 动态计算图2. 自动微分3. 张量计算4. 高效的并行计算 二、PyTorch的使用1. 环境配置2. 加载数据3. 构建模型4. 训练模型5. 验证和测试模型 三、PyTorch的安装与配置四、PyTorch的使用示例总结 引言 在深度学习和机器学习的广阔领域中&#x…...

【MySQL事务】深刻理解事务隔离以及MVCC

文章目录 什么叫事务事务的提交方式常见的事务操作方式事务的开始与回滚总结 事务的隔离设置隔离级别解释脏读解释幻读解释不可重复读为什么可重复读不能解决幻读问题?总结 数据库并发的场景MVCC隐藏列字段undo日志Read view RR和RC的本质区别总结 什么叫事务 在My…...

关于Mac mini 10G网口的问题

问题: 购入一个10G网口的Mac mini M2,将其和自己的2.5G交换机连接,使用共享屏幕进行远程操作的过程中出现了频率极高的卡顿,几乎是几秒钟卡一下,使用ping进行测试发现卡的时候就ping不通了。测试使用Mac mini的无线网和雷电转2.5G…...

计算机网络-第4章 网络层

4.1网络层的几个重要概念 4.1.1网络层提供的两种服务 电信网面向连接通信方式,虚电路VC。 互联网设计思路:网络层要设计得尽量简单,向其上层只提供简单灵活的,尽最大努力交付的数据报服务。 网络层不提供服务质量的承诺&#…...

pytorch跑手写体实验

目录 1、环境条件 2、代码实现 3、总结 1、环境条件 pycharm编译器pytorch依赖matplotlib依赖numpy依赖等等 2、代码实现 import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms import matpl…...

利用Java的`java.util.concurrent`包优化多线程性能

利用Java的java.util.concurrent包优化多线程性能 一、引言 在Java的多线程编程中,性能优化是一个永恒的话题。随着多核CPU的普及和计算任务的日益复杂,多线程编程已经成为提高应用程序性能的重要手段。然而,多线程编程也带来了一系列的问题…...

软件著作权申请:开发者的重要保障与助力

一、引言 随着信息技术的飞速发展,软件产业已成为推动经济增长的重要动力。然而,在软件开发过程中,保护创作者的权益、防止抄袭和侵权行为显得尤为重要。软件著作权作为保护软件开发者权益的重要法律工具,其申请和登记流程对于软…...

WLAN Hostapd配置参数详解 - CN

想必大家平台在调试Hostapd时,针对某些特殊的参数,很难一下子理清楚其用法,这里对hostapd使用的配置参数进行一个归纳,以供大家参考( 其英文参考为:WLAN Hostapd配置参数详解 - EN-CSDN博客)&am…...

Excel 宏录制与VBA编程 ——VBA编程技巧篇一 (Union方法、Resize方法、Cells方法、UseSelect方法、With用法)

Uniom方法 使用Union方法可以将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作。 Resize方法 使用Range对象的Resize属性调整指定区域的大小,并返回调整大小后的单元格区域。 Cells方法 Cells属性返回一个Range对象。 Us…...

基于路径长度的样条插补算法(自动驾驶和路径跟踪控制适用)

以前在做车辆跟踪控制的时候发现在针对有多个X和多个Y对应的路径插补时候,总是报错,因为MATLAB里面的interp1插补函数它要求x要唯一对应一个y,当路径以单独的x或者y来求插补时候的时候就报错。由于在使用Matlab的interp1函数进行插值时&#…...

net Framework OAuth2.0

grant_type client_credentials 客户端凭证password 密码模式 用于资源所有者密码凭据token 隐藏式 、 简化式 简化模式又称为隐式授权码模式,它是授权码模式的一个简化版本authorization_code 授权码 A. 第三方程序向资源拥有者(用户)发送授权请求&#xf…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...