使用 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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有