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

相关文章

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时