首页 > 系统相关 >【待做】【Linux系列】使用fail2ban配置动态防火墙

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

时间:2024-09-06 20:03:03浏览次数:9  
标签:f2b sshd 防火墙 192.168 22222 SSH Linux fail2ban

一、安装

二、测试

三、基本配置


四、相关命令

原创 戒一双 LINUX开源玩家

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

一、安装

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

启用和查看服务

$ sudo systemctl status fail2ban.service

# systemctl status fail2ban.service

* fail2ban.service - Fail2Ban Service
     Loaded: 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 ago
       Docs: man:fail2ban(1)
   Main PID: 201 (fail2ban-server)
      Tasks: 7 (limit: 617427)
     Memory: 29.2M
        CPU: 19min 8.397s
     CGroup: /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 [email protected]

[email protected]'s password: 
Permission denied, please try again.
[email protected]'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 [email protected]

kex_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-8


Results
=======

Failregex: 4027 total
|-  #) [# of hits] regular expression
|   1) [4027] ^<HOST> .*"(OPTIONS|GET|POST|PUT).*" (401|403) .*$
`-

Ignoreregex: 0 total

Date 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

标签:f2b,sshd,防火墙,192.168,22222,SSH,Linux,fail2ban
From: https://www.cnblogs.com/o-O-oO/p/18400910

相关文章

  • 【Linux】CentOS 7 网卡突然启动不了的解决办法
    最近在了解Hadoop,但是在虚拟机关机之后,重新启动,网卡就不见了。 具体情况是这样的:1.用ifconfig查看,发现网卡不见了。2.用ifconfig-a查看,发现ens33网卡是在的,只是状态是down的。3.临时的解决方法:使用ifconfig命令,直接启动ens33网卡[root@centos7~]#ifconfigens33up然后,临时配置......
  • Linux救援模式
    故障背景:误删除或修改/etc/passwd导致无法远程登录.禁止root远程登录,没有添加普通用户,无法远程登录.root密码忘记,无法远程登录.linux无法启动1.解决方案root密码,恢复有备份的系统文件,都要重启系统,才能进入救援模式解决方案应用场景系统自带的救援模式......
  • electron 客户端 windows linux(麒麟V10)多系统离线打包 最新版 <一>
    electron客户端下载、构建、打包在国内网络情况下,绝对不是什么易事。更不要说离线干活,更是难上加难。这一篇主要讲下windows离线环境下,如何完成electron的下载打包。咱废话不多说,直接上干货。注意,我的大前提是完全没有网络。第一,需要下载什么windows环境下需要下载electron......
  • Linux iftop命令基本使用
    目录一.iftop是什么二.界面说明三.语法四.常用参数五.进入界面后的操作一般参数主机参数端口显示参数输出排序参数六.使用示例七.实战——找出最费流量的IP和端口号1.进入界面2.按下L显示流量刻度3.按下T显示总量4.按下3,根据最近40s统计排序5.按下t,发送和接收合成一行6.多按几次B,......
  • linux如何查看内存条是ddr几代
    在Linux系统中,可以通过以下几种方法查看内存条的类型和代数(如DDR3、DDR4等):1.使用dmidecode命令dmidecode是一个工具,它可以从系统的DMI表(也称为SMBIOS表)中提取硬件信息,包括内存的信息。查看内存信息sudodmidecode--typememory这个命令会输出关于系统内......
  • 保姆级宝塔Linux面板的安装
    一、 宝塔Linux面板的功能宝塔面板是一款服务器管理软件,可以帮助用户建立网站,一键配置服务器环境,使得用户通过web界面就可以轻松的管理安装所用的服务器软件。二、宝塔Linux面板的安装宝塔官网地址:宝塔面板-简单好用的Linux/Windows服务器运维管理面板1.访问宝塔官网,点......
  • Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究
     技术背景随着国产化操作系统的推进,市场对国产化操作系统下的生态构建,需求越来越迫切,特别是音视频这块,今天我们讨论的是如何在linux平台实现屏幕|摄像头采集,并推送至RTMP服务。我们知道,Linux平台,如果需要采集摄像头,可使用V4L2相关接口,屏幕采集用X相关接口实现,如果是Wayland协议,......
  • 每天十分钟手把手教你学Linux-00
    Linux教学视频地址:[每天十分钟手把手教你学Linux-00](https://www.bilibili.com/video/BV1U3HSeNEzV/)哈喽大家好,我是智慧小新不会秃头。现在又到了大一新生报到的季节,我打算推出一门基础的Linux课程,帮助工科或者理科的新生,以及其他爱好者掌握这一重要技能。大学里的......
  • Shell编程撰写Linux工具箱
    创建一个Linux工具箱脚本可以帮助您快速执行常见的系统管理任务。以下是一个示例脚本,包含了一些常见的功能,如系统信息查看、磁盘使用情况检查、网络信息查看、进程管理等。前言在开发者的世界里,我们不断探索,不断创新。今天,我们携手赞助商浪浪云,向您致敬,同时以敬业的精神......
  • ELK在Linux上部署教程
    DockerCompose搭建ELKElasticsearch默认使用mmapfs目录来存储索引。操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存sysctl-wvm.max_map_count=262144创建Elasticsearch数据挂载路径mkdir-p/echola/elasticsearch/data对该路径......