【待做】【Linux系列】使用fail2ban配置动态防火墙

news/2024/12/27 10:16:11/文章来源:https://www.cnblogs.com/o-O-oO/p/18400910
一、安装二、测试三、基本配置四、相关命令

原创 戒一双 LINUX开源玩家

前面说的防火墙基本是静态的情况,在实际运行中我们可能需要动态调整防火墙策略,此时可以考虑使用Fail2ban。
Fail2ban 可以通过创建规则,自动更改防火墙配置,在尝试登录失败达到一定次数后禁止特定 IP,从而大大减少暴力攻击。
这样既可以防止暴力破解和流量攻击,也可以避免误伤客户端IP地址。

一、安装

为了方便,这里使用一个基于PVE的Debian LXC容器为例,因为它自带了fail2ban。

启用和查看服务

$ sudo systemctl status fail2ban.service# systemctl status fail2ban.service* fail2ban.service - Fail2Ban ServiceLoaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)Active: active (running) since Wed 2024-05-15 12:25:36 UTC; 1 week 4 days agoDocs: man:fail2ban(1)Main PID: 201 (fail2ban-server)Tasks: 7 (limit: 617427)Memory: 29.2MCPU: 19min 8.397sCGroup: /system.slice/fail2ban.service`-201 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

二、测试

fail2ban默认启用了sshd的安全支持,添加了一条链规则f2b-SSH,接管了默认的sshd服务22端口

# iptables -S | grep f2b-N f2b-SSH
-A INPUT -p tcp -m tcp --dport 22 -j f2b-SSH
-A f2b-SSH -j RETURN

因为这个服务器的sshd端口已经修改为22222,所以需要修改下配置文件,默认配置文件是/etc/fail2ban/jail.conf
不过这个容器使用的是/etc/fail2ban/jail.local,把里面的sshd端口从22改为22222,重启fail2ban服务,看见端口已经修改了

# sudo systemctl restart fail2ban.service# iptables -S | grep f2b-N f2b-SSH
-A INPUT -p tcp -m tcp --dport 22222 -j f2b-SSH
-A f2b-SSH -j RETURN

客户端ssh登录,故意输入错误的用户名或者密码,总之让sshd认证错误就行。这台服务器配置了错误的安全加固规则,直接就错误了,正常情况下要多错几次(达到配置要求)才会引起fail2ban的反应的。

$ ssh -p22222 abc@192.168.10.80abc@192.168.10.80's password: 
Permission denied, please try again.
abc@192.168.10.80's password: 
Received disconnect from 192.168.10.80 port 22222:2: Too many authentication failures
Disconnected from 192.168.10.80 port 22222

然后客户端就被BAN了,暂时不能再登录该服务器,连接请求会被直接重置,包括已有的连接也会被断开。

$ ssh -p22222 abc@192.168.10.80kex_exchange_identification: read: Connection reset by peer
Connection reset by 192.168.10.80 port 22222

从终端登录服务器可以看到防火墙自动添加了配置

客户端的地址被fail2ban自动加入了拒绝规则:-j REJECT --reject-with icmp-port-unreachable

三、基本配置

jail2ban的配置文件在目录/etc/fail2ban下,最基础配置文件是jail.local,可以参考jail.conf编写。
其中有几个最简单的配置

在[DEFAULT]段落下

bantime 参数设置了客户端无法正确通过身份验证时被禁用的时间长度。默认单位是秒。

maxretry 变量设定了客户端在被禁用前,在 findtime 定义的时间窗口内尝试身份验证的次数。

下面的配置,fail2ban 服务将禁止在 10 分钟内尝试登录 3 次失败的客户端,在600秒内不能登录SSH服务。

# cat /etc/fail2ban/jail.local [DEFAULT]
ignoreip    = 127.0.0.1/8 ::1  
bantime     = 600
findtime    = 10
maxretry    = 3
backend     = systemd[sshd]
enabled     = true
port        = ssh,22222
action      = iptables[name=SSH, port=22222, protocol=tcp]

sshd只是基本的实例,利用fail2ban可以为很多网络服务配置动态防火墙。当然这需要对服务本身的状态、日志、以及正则表达式编写等有一定理解。

四、相关命令

测试规则

fail2ban-regex <logpath> <filterpath>

fail2ban-regex /var/log/nginx/svn.error.log.1 /etc/fail2ban/filter.d/nginx_401.conf 
Running tests
=============Use   failregex filter file : nginx_401, basedir: /etc/fail2ban
Use         log file : /var/log/nginx/svn.error.log.1
Use         encoding : utf-8Results
=======Failregex: 4027 total
|-  #) [# of hits] regular expression
|   1) [4027] ^<HOST> .*"(OPTIONS|GET|POST|PUT).*" (401|403) .*$
`-Ignoreregex: 0 totalDate template hits:
|- [# of hits] date format
|  [4130] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-Lines: 4130 lines, 0 ignored, 4027 matched, 103 missed
[processed in 0.36 sec]

查看状态

fail2ban-client status 
fail2ban-client status sshd

取消限制

fail2ban-client set nginx-http-auth unbanip 192.168.85.162

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/793225.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

焦煤波浪 跌势快要结束了

如果走出这个形态 下周看止跌 开始震荡

洛谷 P5658 [CSP-S2019] 括号树

洛谷 P5658 [CSP-S2019] 括号树 题意 给定一棵树,每个点有一个括号 ( 或 )。 定义 \(s_i\) 表示 根节点到 \(i\) 每个点的括号组成的序列。 求每个 \(s_i\) 中合法括号子串的个数 \(f_i\)。 思路 定义 \(g_i\) 表示 \(s_i\) 中以 \(i\) 结尾的合法括号子串的个数。 有 \(f_i=f…

运输问题数学模型精解

运输问题(Transportation Problem)是运筹学中的经典问题之一,其历史可以追溯到19世纪中期。该问题最早由数学家和经济学家提出,目的是解决如何在需求和供给之间分配资源以最小化运输成本的问题。运输问题的数学模型最初由俄国数学家卡尔库尔肖夫(Karl Kulshov)在19世纪提…

基于视觉工具箱和背景差法的行人检测,行走轨迹跟踪,人员行走习惯统计matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印) 在三维图中,幅度越大,则表示人员更习惯的行走路线。2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)for j=1:length(inds)% 调整边界框格式[R_,C_] = find(lb == inds(j)); upLPo…

CF1534(模拟赛记录)

比赛页面ABCD 都打的可以,然而 E 的 +10 直接葬送了大概率过的 F1 …… 先猜了个 \(n-k+1\) 的结论,但是没有写搜索查正确性(事实上确实不正确),于是两次罚时,第一次是交互格式错了。 然后又猜了个 \(\min(n-k+1,(n-1)/(k-1))\) 的结论,过了几个小的搜索数据(\(n\le 6\…

简单比较 http https http2,我们要如何把http升级为https

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣http 超文本传输​​协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求…

作业二:个人项目

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 10Estimate 估计这个任务需要多少时间 300Development 开发 150Analysis 需求分析 (包括学习新技术) 50Design Spec 生成设计文档 10Design Review 设计复审 20Coding Standard 代码规…

冯.诺依曼 体系结构

冯.诺依曼 体系结构 alloverzyt 转载自:https://www.cnblogs.com/quan0311/p/15025116.html 1964年,第一台计算机ENIAC诞生,人类进入计算机时代,后来,美籍匈牙利数学家:冯.诺依曼提出了计算机“存储程序”的计算机设计理念,即将计算机指令进行编码后存储在计算机的存储器…

剑网 3 单机版安装教程 + 虚拟机一键端

今天给大家带来一款单机游戏的架设:剑网 3。本人为了学习和研究软件内含的设计思想和原理,带了单机架设教程,不适用于联网,仅供娱乐。 教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你们填上了。 如果你是小白也没问题,跟着教程走也是可以搭建成功的,但是…

Redis使用场景

Redis使用场景 目录缓存缓存穿透 缓存击穿 缓存雪崩 双写一致性 持久化 数据过期策略 数据淘汰策略分布式锁实现原理(setnx、redission)其他哨兵模式、集群脑裂 分片集群、数据读取规则 redis是单线程的却很快缓存 一、缓存穿透 定义:查询一个不存在的数据,Mysql查询不到数…

flutter 的一些概念三

介绍一些Fluter面试中可能会遇到的一些非项目相关的概率名词,像stream与future的关系,platformView是什么本文同步发布于公众号:stringwu的互联网杂谈:flutter 的一些概念三 1 Stream 与 Future的关系 Stream 和 Future 都是 Flutter 中常用的异步编程模型,Future 适用于一次…

使用css和html初步搭建页面

由于很多html标签在博客中会生效,所以我有时候会简写 1.html分为头部head和body.头部中定义标题title2.设置标题使用h1,共有六级为h1~h6.想要设置标题具体颜色要使用css,的style,有三种方式 (1)h1 color:(2)写一个外部css文件(3)使用设置.同时使用元素选择,ID选择,类选择可以单…