使用 fail2ban 防 linux ssh 被暴力破解

2024-02-23 20:48

本文主要是介绍使用 fail2ban 防 linux ssh 被暴力破解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:https://www.cpweb.top/1379

一、介绍

  云服务器经常被人尝试暴力破解SSH,即无限尝试登录SSH,烦人的很。为此,我们可以通过使用 fail2ban 来防范这种行为。fail2ban 是使用python 开发的,它通过监控扫描系统日志文件,并从中分析找出多次尝试登录失败的IP地址,然后调用iptables将其屏蔽掉。当然它不仅仅只限于SSH,还可以防护ftp、pop等密码保护的网络服务。
  当然对于sshd服务,更有效的方法是直接禁止root用户登录、更改sshd监听端口、禁止用密码方式登录而使用密钥登录来防范暴力破解。
  官方文档:https://www.fail2ban.org/wiki/index.php/MANUAL_0_8。

二、安装配置

[root@web01 ~]# yum install -y fail2ban
[root@web01 ~]# vim /etc/fail2ban/jail.conf   # 修改以下参数
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1    # 忽略IP列表。
bantime  = 1m                 # 屏蔽的时间,不加单位默认为秒,负数为永久屏蔽。这里配置为1分钟便于下面测试
findtime = 1m                 # 如果主机在 findtime 秒内登录失败 maxretry 次,则该主机将被禁止。
maxretry = 3                  # 最大失败次数。[ssh-iptables]
enabled  = true                # 启动ssh防护
filter   = sshd                # 使用过滤器的名称,位于filter.d目录下的sshd.conf。
action   = iptables[name=SSH, port=1:65535, protocol=tcp]   # 防火墙动作。注意这里作用端口为所有,所以记得配置规则放行服务端口。
logpath  = /var/log/secure     # 日志文件路径,用于提供给过滤器进行分析。
maxretry = 3                   # 最大失败次数。[root@web01 ~]# systemctl start fail2ban
[root@web01 ~]# iptables -I INPUT -m multiport -p tcp --dports 80,443 -j ACCEPT    # 例如服务器是提供web服务则放行80、443

  至此就简单配置好了,我们来测试一下,使用test服务器(10.0.0.120)进行登录,3次错误后,直接被中断连接了,再次尝试直接被拒绝。

[root@test ~]# ssh 10.0.0.7
root@10.0.0.7's password: 
Permission denied, please try again.
root@10.0.0.7's password: 
Permission denied, please try again.
root@10.0.0.7's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@test ~]# ssh 10.0.0.7
ssh: connect to host 10.0.0.7 port 22: Connection refused

验证:

[root@web01 ~]# iptables -nL    # 查看iptables规则,可以看到10.0.0.120被拒绝
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
f2b-SSH    tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpts:1:65535Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain f2b-SSH (1 references)
target     prot opt source               destination         
REJECT     all  --  10.0.0.120           0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0 [root@web01 ~]# tail -n5 /var/log/fail2ban.log      # 查看日志,一分钟后自动解禁。
2020-12-28 09:01:49,174 fail2ban.filter         [12586]: INFO    [ssh-iptables] Found 10.0.0.120 - 2020-12-28 09:01:49
2020-12-28 09:01:51,781 fail2ban.filter         [12586]: INFO    [ssh-iptables] Found 10.0.0.120 - 2020-12-28 09:01:51
2020-12-28 09:01:54,190 fail2ban.filter         [12586]: INFO    [ssh-iptables] Found 10.0.0.120 - 2020-12-28 09:01:54
2020-12-28 09:01:54,785 fail2ban.actions        [12586]: NOTICE  [ssh-iptables] Ban 10.0.0.120
2020-12-28 09:02:54,927 fail2ban.actions        [12586]: NOTICE  [ssh-iptables] Unban 10.0.0.120

除了查看日志,我们还可以使用命令去查看。

[root@web01 ~]# fail2ban-client status  # 获取服务器的当前状态
Status
|- Number of jail:	1
`- Jail list:	ssh-iptables
[root@web01 ~]# fail2ban-client status ssh-iptables  # 获取 ssh-iptables 的当前状态
Status for the jail: ssh-iptables
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	3
|  `- File list:	/var/log/secure
`- Actions|- Currently banned:	1|- Total banned:	1`- Banned IP list:	10.0.0.120# 我们也可以手动解除对ip限制,Usage:
# fail2ban-client unban --all : 取消禁止所有的ip
# fail2ban-client unban <IP> ... <IP> : 取消禁止指定的ip
# fail2ban-client set <JAIL> unbanip <IP> ... <IP> : 取消禁止指定 JAIL 的指定的ip[root@web01 ~]# fail2ban-client set ssh-iptables unbanip 10.0.0.120
1

这篇关于使用 fail2ban 防 linux ssh 被暴力破解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739887

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(