当前位置: 首页 > 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…...

12306高并发计算架构揭秘:Apache Geode 客户端接入与实践

目录 Apache Geode 客户端入门指南 一、安装 Apache Geode 二、启动 Geode 集群 三、Java 客户端接入 Geode Maven 示例依赖 Gradle 示例依赖 Java 示例代码 四、Spring Boot 客户端接入 Geode Maven 配置 Gradle 配置 运行应用 五、Apache Geode 原生客户端 .NET…...

Python Flask中启用AWS Secrets Manager+AWS Parameter Store配置中心

问题 最近需要改造一个Python的Flask项目。需要在这个项目中添加AWS Secrets Manager作为配置中心,主要是数据库相关配置。 前提 得预先在Amazon RDS里面新建好数据库用户和数据库,以AWS Aurora为例子,建库和建用户语句类似如下&#xff1…...

刷leetcode hot100返航必胜版--链表6/3

链表初始知识 链表种类:单链表,双链表,循环链表 链表初始化 struct ListNode{ int val; ListNode* next; ListNode(int x): val(x),next(nullptr) {} }; //初始化 ListNode* head new ListNode(5); 删除节点、添加…...

WordPress 6.5版本带来的新功能

WordPress 6.5正式上线了!WordPress团队再一次为我们带来了许多新的改进。在全球开发者的共同努力下,WordPress推出了许多新的功能,本文将对其进行详细总结。 Hostease的虚拟主机现已支持一键安装最新版本的WordPress。对于想要体验WordPres…...

Linux 软件安装方式全解(适用于 CentOS/RHEL 系统)

🐧 Linux 软件安装方式全解(适用于 CentOS/RHEL 系统) 在 Linux 系统中,软件安装方式丰富多样,常见于以下几种方式: 安装方式命令/工具说明软件包管理器(推荐)yum, dnf, apt, zypp…...

deepseek问答:torch.full() 函数详解

torch.full() 是 PyTorch 中用于创建指定形状、所有元素值都相同的新张量的核心函数。它在深度学习中有广泛应用,尤其是在初始化张量和创建特殊数据结构时。 函数签名 torch.full(size, fill_value, *, dtypeNone, layouttorch.strided, deviceNone, requires_gra…...

循环神经网络(RNN)全面教程:从原理到实践

循环神经网络(RNN)全面教程:从原理到实践 引言 循环神经网络(Recurrent Neural Network, RNN)是处理序列数据的经典神经网络架构,在自然语言处理、语音识别、时间序列预测等领域有着广泛应用。本文将系统介绍RNN的核心概念、常见变体、实现方法以及实际…...

聊聊Tomato Architecture

序 本文主要研究一下Tomato Architecture Clean/Onion/Hexagonal/Ports&Adapters Architectures Clean Architecture clean architecture定义了四层结构,最内层是entities(enterprise business rules),再往外是use cases(application business ru…...

Python 在金融中的应用- Part 1

早在2018年,我开始对资本市场产生兴趣。理解资本市场的基本理论对财富积累至关重要。我开始阅读所有经典著作,如《聪明的投资者》和《证券分析》。在这一系列文章中,我想与读者分享在Python编程语言背景下理解金融理论的旅程。在文章的第一大部分,我们将专注于金融模型的线…...

杭州白塔岭画室怎么样?和燕壹画室哪个好?

杭州作为全国美术艺考集训的核心区域,汇聚了众多实力强劲的画室,其中白塔岭画室和燕壹画室备受美术生关注。对于怀揣艺术梦想的考生而言,选择一所契合自身需求的画室,对未来的艺术之路影响深远。接下来,我们将从多个维…...