Fail2ban自带了很多服务的过滤器(filter)和动作(action),它已经帮你做好了,所以一般情况下我们无需定义,直接引用即可。
这边只是一个示例。

系统版本:Ubuntu 16.04.5 LTS

软件版本:无

硬件要求:无

1、创建过滤器

可以先使用"fail2ban-regex"命令测试正则表达式是否可以匹配到日志行,"fail2ban-regex"会自动匹配到日志的时间部分,若能自动匹配到则无需在正则表达式中添加时间部分的匹配,若不能自动匹配到则需要自己手动匹配。

root@ubuntu:~# vim /etc/fail2ban/filter.d/sshd.conf
[INCLUDES] ###
# 定义过滤器
###
[Definition]
failregex = [a-zA-Z-_]+ sshd\[[0-9]+\]: Failed password for root from <HOST> port [0-9]+ ssh2
# 定义要禁止的IP,使用正则表达式匹配日志行,使用关键字"<HOST>"表示要禁止的IP。
ignoreregex =
# 定义要忽略禁止的IP,使用正则表达式匹配日志行,使用关键字"<HOST>"表示要忽略的IP。 ###
# 初始化过滤器
###
[Init]
maxlines = 10
# 设置过滤器每次读取日志的行数,每次读取10行做匹配。
# 过滤器每次从日志中缓冲多少行,进行匹配处理,如果一次读取大量的行,程序会崩溃,系统内存将会不够用
journalmatch =

2、创建动作

"<关键字>"表示在监禁引用动作要传入的参数。

""关键字等于过滤器中的""关键字。

root@ubuntu:~# vim /etc/fail2ban/action.d/iptables.conf
[INCLUDES] ###
# 定义动作
# 使用"<关键字>"声明变化的值
# "<ip>"关键字等于过滤器正则表达式中的"<HOST>"
###
[Definition]
actionstart = <iptables> -N f2b-<name>
<iptables> -A f2b-<name> -j <returntype>
<iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
actionstop = <iptables> -D <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
<iptables> -F f2b-<name>
<iptables> -X f2b-<name>
actioncheck = <iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]'
actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>
actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype> ###
# 初始化动作
# 声明在监禁中关联动作允许传入的参数等于上面的"<关键字>",若未传入则使用默认值
###
[Init]
chain = INPUT
name = default
port = ssh
protocol = tcp
blocktype = REJECT --reject-with icmp-port-unreachable
returntype = RETURN
lockingopt = -w
iptables = iptables <lockingopt>

3、创建监禁

root@ubuntu:~# vim /etc/fail2ban/jail.d/sshd.conf
###
# 创建名叫sshd的监禁(jail)
###
[sshd]
ignoreip = 127.0.0.1/8
# 要忽略的IP。
bantime = 600
# 设置IP被禁止的持续时间,单位为秒。
findtime = 600
# 设置匹配时间间隔,单位为秒,即从日志中匹配条目,若指定时间内匹配到"maxretry"项设置的条目数量时,将会
# 执行封禁IP动作。
maxretry = 3
# 设置从日志中匹配到IP的最大数量,即尝试次数。
# 我这边设置失败三次就被禁止600秒。
logpath = /var/log/auth.log
# 设置提供给过滤器所使用的日志文件路径。
enabled = true
# 启动该监禁项
filter = sshd
# 关联过滤器,等于"filter.d"目录下过滤器配置文件的名字。
action = iptables-multiport[name="sshd", bantime="%(bantime)s", port="0:65535", protocol="tcp", chain="INPUT"]
# 关联动作,"iptables"等于"action.d"目录下动作配置文件的名字,"[]"中表示要传入的参数。

4、重启fail2ban服务

该操作会自动加载读取配置创建监禁项。

root@ubuntu:~# systemctl restart fail2ban.service
root@ubuntu:~# systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-10-19 19:57:51 PDT; 18s ago
Docs: man:fail2ban(1)
Process: 80997 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS)
Process: 81005 ExecStart=/usr/bin/fail2ban-client -x start (code=exited, status=0/SUCCESS)
Main PID: 81013 (fail2ban-server)
CGroup: /system.slice/fail2ban.service

6、测试一下

输入密码错误三次!可以看到已经无法连接到服务器了!

等待过600秒又可以登录了!

Fail2ban 使用Fail2ban监禁SSH服务的恶意IP的更多相关文章

  1. iptables+ipset自动封闭和解封频繁访问web服务的恶意IP

    转载于互联网     iptables直接针对ip进行封禁,在ip数量不大的时候是没什么问题的,但当有大量ip的时候性能会严重下降,iptables是O(N)的性能.而ipset就像一个集合,把需要封 ...

  2. linux开启ssh服务

    本文概略:1)ubuntu发行版开启ssh.2)centos发行版开启ssh 1.ubuntu发行版安装/开启ssh服务 1.1 安装ssh服务端 sudo apt-get install opens ...

  3. SSH服务连接

    SSH基本概述 SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输.确保了数据传输安全. SSH服务 ssh: secure shell, protocol, 22/ ...

  4. 服务器如何防ssh服务暴力破解??

     如图: 当我们遭到暴力破解ssh服务该怎么办 内行看门道 外行看热闹  下面教大家几招办法: 1 密码足够的复杂,密码的长度要大于8位最好大于20位.密码的复杂度是密码要尽可能有数字.大小写字母和特 ...

  5. Ubuntu 开启SSH服务以及有关设置:安装,指定端口号、免密登录、远程拷贝

    本文所用系统为 Ubuntu 18.04   什么是SSH?     简单说,SSH是一种网络协议,用于计算机之间的加密登录.全名为:安全外壳协议.为Secure Shell的缩写.SSH为建立在应用 ...

  6. SSH服务端配置、优化加速、安全防护

    CentOS7自带的SSH服务是OpenSSH中的一个独立守护进程SSHD.由于使用telnet在网络中是明文传输所以用其管理服务器是非常不安全的不安全,SSH协议族可以用来对服务器的管理以及在计算机 ...

  7. Fail2ban 安装Fail2ban到Ubuntu

    系统版本:Ubuntu 16.04.5 LTS 软件版本:fail2ban-0.9.3 硬件要求:无 1.安装Fail2ban root@local:~# apt-get update root@lo ...

  8. 2016-11-05实战-定义ssh服务的日志

    1.编辑/etc/rsyslog.conf 输入 local 0 .*     /var/log/sshd.log   #日志的保存路径 2.定义ssh服务的日志级别 编辑sshd服务的主配置文件:/ ...

  9. Ubuntu ssh服务安装

    在使用xshell连接ubuntu虚拟机时,提示 Could not connect to '192.168.0.106' (port 22): Connection failed. 在主机使用pin ...

随机推荐

  1. 你可能不知道的 css 内容块

    position 我们都知道元素都拥有 position 这个css属性,先来看看他的基本定义和可用值. 定义 position 决定了元素位置是如何被渲染的 可用值 值 描述 static 默认值, ...

  2. Spark项目应用-电子商务大数据分析总结

    一. 数据采集(要求至少爬取三千条记录,时间跨度超过一星期)数据采集到本地文件内容   爬取详见:python爬取京东评论   爬取了将近20000条数据,156个商品种类,用时2个多小时,期间中断数 ...

  3. Hadoop 3.1.2报错:xception in thread "main" org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "hdfs"

    报错内容如下: Exception in thread "main" org.apache.hadoop.fs.UnsupportedFileSystemException: No ...

  4. Node的重要性

    一. 为什么要学Node 1. 是自己更全面, 有大局观 2. 提升话语权 3. 升职加薪的筹码 二. Node的作用和应用 1. 脱离浏览器运行 js 2. 后台API编写 3. webpack, ...

  5. Mysql_事务_存储过程_触发器

    一.什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言( ...

  6. MySQL 8 数据源配置

    参考文档 官方文档 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-overview.html 官方文档(PDF版)下载地址:http ...

  7. CURDATE()与NOW()的区别

    两者都是mysql中的函数,都是得到当前时间,区别是: CURDATE()查询出的是当前天的开始时间点,比如今天是 2015.02.03号,那不管我在今天什么时间点查询,结果都是今天的凌晨,即今天的开 ...

  8. c++中的类和对象_概念

    类:事物所具有的共性(行为.属性)抽象出来封装在一起 对象:由类型实例化出对象 c++与c struct的区别:c中不能存放函数,只能存放属性,方法和属性分离,c++中则可存放函数. c中表示事物的方 ...

  9. Python 国家地震台网中心地震数据集完整分析、pyecharts、plotly,分析强震次数、震级分布、震级震源关系、发生位置、发生时段、最大震级、平均震级

    注意,本篇内容根据我老师布置的数据分析作业展开.请勿抄袭,后果自负! 前情提要 编写这篇文章是为了记录自己是如何分析地震数据集,使用模块,克服一系列 \(bug\) 的过程.如果你是 \(python ...

  10. 解决zabbix5字体中文口口乱码

    环境信息 系统:Ubuntu20.04 zabbix版本:5.4 解决方法一 此方法比较偷懒,就是不改变zabbix相关配置,直接用原名替换字体文件. 原字体字体名称为DejaVuSans.将方法二的 ...