拒绝ssh远程暴力破解-以centos7及centos8为例

article/2025/9/30 15:06:08

一、centos8

参考:

如何在CentOS 8上安装和配置Fail2ban - A5互联 - 博客园 (cnblogs.com)https://www.cnblogs.com/a5idc/p/13650056.html上面这一个讲的比较详细:要点摘录如下

默认的Fail2ban安装中带有两个配置文件,/etc/fail2ban/jail.conf和/etc/fail2ban/jail.d/00-firewalld.conf。这些文件不应该被修改,因为它们可能会在更新软件包时被覆盖。

Fail2ban会按照以下顺序读取配置文件:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
每个.local文件都会覆盖文件中的设置.conf。

配置Fail2ban最简单的方法是从 jail.conf复制到jail.local,然后修改.local文件。高级用户可以从头开始建立一个.local配置文件。.local文件不必包含相应的.conf文件中的所有设置,只需要覆盖那些您想要覆盖的设置。

(1)将IP地址列入白名单:ignoreip 

(2)禁止设置:bantime,findtime和maxretry选项定义禁令时间和禁止条件。

(3)Fail2ban Jails:注意此处的sshd下的enabled,我之前就搞错了。

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

(4)邮件通知
当IP被禁止时,Fail2ban可以发送电子邮件警报。要接收电子邮件,您需要在服务器上安装SMTP并更改默认操作,该操作仅将IP禁止为%(action_mw)s,如下所示:

/etc/fail2ban/jail.local文件中:
action = %(action_mw)s
%(action_mw)s将禁止违规的IP,并发送包含Whois报告的电子邮件。如果要在电子邮件中包含相关日志,请将操作设置为%(action_mwl)s。
您还可以调整发送和接收电子邮件地址:
/etc/fail2ban/jail.local文件中:
destemail = admin@***.com
sender = root@***.com

CentOS8防暴力破解fail2banhttps://www.cnblogs.com/John-2011/p/14980220.html

对于CentOS8系统来说,/etc/hosts.deny不起作用,所以安装DenyHosts没用。我们采用fail2ban来防ssh暴力破解。

使用dnf install fail2ban 或者 yum install fail2ban

[root@localhost ~]# yum install epel-release[root@localhost ~]# dnf install fail2ban[root@localhost ~]# systemctl enable --now fail2ban
Created symlink Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.[root@localhost ~]# systemctl status fail2ban
● fail2ban.service - Fail2Ban ServiceLoaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)Active: active (running) since Sun 2022-11-27 18:29:05 CST; 14s agoDocs: man:fail2ban(1)Process: 2706671 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)Main PID: 2706673 (fail2ban-server)Tasks: 3 (limit: 49524)Memory: 14.7MCGroup: /system.slice/fail2ban.service└─2706673 /usr/bin/python3.6 -s /usr/bin/fail2ban-server -xf startNov 27 18:29:05 VM-16-13-centos systemd[1]: Starting Fail2Ban Service...
Nov 27 18:29:05 VM-16-13-centos systemd[1]: Started Fail2Ban Service.
Nov 27 18:29:05 VM-16-13-centos fail2ban-server[2706673]: Server ready

fail2ban安装后有两个程序,fail2ban-server 和 fail2ban-client对应的主配置文件是fail2ban.conf 和 jail.conf。fail2ban的.conf配置文件都是可以被.local覆盖,所以配置方式建议是添加.local文件,不修改原来的配置文件。

[root@localhost ~]# cd /etc/fail2ban/
[root@localhost fail2ban]# cp jail.conf jail.local
[root@localhost fail2ban]# vim jail.local
#白名单,不拦截,多个使用,分开
ignoreip = 127.0.0.1/8
#拦截后禁止访问的时间,时间单位可以是 s、m、h、d
bantime  = 10m
#如果将fail2ban设置在2两次失败后禁止IP,则这些失败必须在findtime持续时间内发生
findtime  = 10m
#禁止IP之前的失败次数
maxretry = 2
#[sshd]下添加
enabled = true

重启

systemctl restart fail2ban

查看被禁止的ip地址

iptables -L -n

 查看ssh黑名单

fail2ban-client status sshd

 fail2ban从黑名单中移除IP

fail2ban-client set sshd unbanip 8.8.8.8

查看日志

tail /var/log/fail2ban.log

二、centos7下的使用

在CentOS7 的/etc目录下有hosts.deny文件,在文件中按照相应的格式添加数据可以禁止相应的IP使用不同的协议进行服务器的连接。比如,禁止ssh爆破就可以使用sshd:all:deny来防范,限定条件deny可加可不加。但是在使用deny all的时候要注意,hosts.allow文件的优先级更高,需要查看同目录的hosts.allow文件中是否添加允许访问的ip地址,例如sshd:1.2.3.4:allow。

此时简单的方法是使用如下命令 ,查找使用不同用户名对本机进行爆破的不同IP地址,然后手动添加到hosts.deny文件中。

cat /var/log/secure |grep Failed|grep invalid\ user

此外,也可以使用sh脚本文件将/var/log/secure中密码输入超过一个指定次数的IP添加到黑名单文件中,然后将原来hosts.deny文件输出到/dev/null中,然后将符合条件的黑名单IP以"sshd:$IP:deny"的格式输出到hosts.deny文件中,即可实现对ssh爆破的防范。

但是这种防范和使用deny all有很大的不同,在达到阈值之前,服务器的端口都是对所有IP开放的,但是在某个IP尝试的次数达到阈值之后,服务器就会主动终止与远程IP的连接,因此,脚本的方法在前期虽然没有deny all的方法那么有效,但是从长远上看,省去了每次向hosts.allow白名单中添加IP地址的麻烦。

但是在使用命令cronable –e 尝试将刚刚完成的脚本文件自定义每隔一分钟运行时,由于没有反馈,因此无法确定脚本文件是否成功运行。修改了crontab -e中的内容为:

在crontab –e 中的格式为:

*/1 * * * * sh /usr/local/bin/secure_ssh.sh

在等待一分钟后,再次检查black.list文件的大小,发现文件的大小发生了变化,由此可以确定脚本已经成功的运行了

继续修改之前的sh过滤脚本,在今天上午对服务器日志检查的时候发现,依旧有少量的未知IP在试图对服务器的ssh端口进行暴破。
在检查日志的时候发现,暴力的端口并不是ssh标准的22端口,而是大量端口,因此修改端口并不能一劳永逸的解决问题。在对之前的分析中,发现sh脚本文件中的规则并不严格,原先的脚本文件将可疑IP加入黑名单的条件是连接失败的次数大于一位数,即十次,但是在实际观察日志的过程中,有大部分IP都是只连接了六次。在搜索资料后发现,CentOS密码错误的最大尝试次数就是六次,但是ssh:notty,即ssh空连接的最大次数并不是六次,因此,原脚本文件的意义是使用防火墙过滤所有使用ssh空连接进行连接的用户,和该服务器的需求并不完全符合
该脚本文件的内容如下:

#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.list
for i in `cat  /usr/local/bin/black.list`
doIP=`echo $i |awk -F= '{print $1}'`NUM=`echo $i|awk -F= '{print $2}'`if [ ${#NUM} -gt 1 ]; thengrep $IP /etc/hosts.deny > /dev/nullif [ $? -gt 0 ];thenecho "sshd:$IP:deny" >> /etc/hosts.denyfifi
done

经过分析后发现,该脚本文件的操作是从日志中查找所有Failed,即登录失败的ip,然后排序并去重取重复次数,按照x.x.x.x=x的格式输入到/usr/local/bin/下的balck.list中。接着遍历black.list中所有数据,首先使用#参数获得第二位数据即登录失败的次数,然后比对是否大于一,然后将其打印到hosts.deny中,为了让防火墙过滤更严格,所以可以将判断条件的首次判断进行修改,将其更改为if [ ${NUM} -gt 2 ]; then,当服务器检测到一旦有未知IP连接失败的次数超过3次时 ,就将该IP地址导入到服务器的黑名单

修改后的文件为:

#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.list
for i in `cat  /usr/local/bin/black.list`
doIP=`echo $i |awk -F= '{print $1}'`NUM=`echo $i|awk -F= '{print $2}'`if [ ${NUM} -gt 2 ]; then grep $IP /etc/hosts.deny > /dev/nullif [ $? -gt 0 ];thenecho "sshd:$IP:deny" >> /etc/hosts.deny#echo "transaform success" fifi
done

在重新检查日志后,发现之前小于十次连接的IP也成功导入到了防火墙的过滤名单中,但是为了以后会在新设备上对服务器进行连接,判断的条件也不能写的太小。因此服务器依旧会收到新的爆破攻击,但是这些流量算是在服务器的承载范围内,所以并不会有太大的问题

后期添加

不过在后期的使用过程中,虽然是没有没有了ssh爆破的困扰,但是现在又来新的问题了,现在日志中又出现了这种问题

Invalid user zenoss from 106.13.23.77 port 59988
破解不了密码直接弄用户,没办法,重新修改脚本文件
观察日志记录可发现该种日志和之前那种Failed日志IP地址的位置不一样
修改后就可以使用该脚本文件即可

#! /bin/bash
cat /var/log/secure|awk '/Invalid/{print $(NF-2)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.list
for i in `cat  /usr/local/bin/black.list`
doIP=`echo $i |awk -F= '{print $1}'`NUM=`echo $i|awk -F= '{print $2}'`if [ ${NUM} -gt 2 ]; then ##grep $IP /etc/hosts.deny > /dev/nullif [ $? -gt 0 ];thenecho "sshd:$IP:deny" >> /etc/hosts.denyfifi
done

直接执行 查看hosts.deny文件

sh /usr/local/bin/secure_user.sh
cat /etc/hosts.deny |grep 106.13.23.77

输出

sshd:106.13.23.77:deny

结束

一点小小的建议

其实如果有条件的话,还是建议使用密钥登录的方式。破解密钥肯定比破解密码麻烦,所以此时服务器的安全性还可以得到进一步的提升,关于这个的教程还是很简单的,随便弄一下就行了
————————————————
版权声明:本文为CSDN博主「東風谷早苗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40179508/article/details/100152437

/etc/hosts.allow和/etc/hosts.deny详解

今天遇到一台服务器22端口正常,但是通过ssh连接的问题。排查了防火墙和端口问题,半天没有找出来原因,后来求助大神,终于明白了通过etc目录下hosts.deny和hosts.allow文件可以限制远程访问,使用方法如下:

修改/etc/hosts.allow文件
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the ‘/usr/sbin/tcpd’ server.
#
sshd:210.13.218.*:allow
sshd:222.77.15.*:allow
以上写法表示允许210和222两个ip段连接sshd服务(这必然需要hosts.deny这个文件配合使用),当然:allow完全可以省略的。
当然如果管理员集中在一个IP那么这样写是比较省事的
all:218.24.129.110//他表示接受110这个ip的所有请求!

/etc/hosts.deny文件,此文件是拒绝服务列表,文件内容如下:
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the ‘/usr/sbin/tcpd’ server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
sshd:all:deny
注意看:sshd:all:deny表示拒绝了所有sshd远程连接。:deny可以省略。
所以:当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。

注意修改完后:
service network restart
重启网络服务才能让刚才的更改生效

配置优先级:
linux 系统会先检查/etc/hosts.deny规则,再检查/etc/hosts.allow规则,如果有冲突 按/etc/hosts.allow规则处理


http://chatgpt.dhexx.cn/article/I9587yS7.shtml

相关文章

SSHD 服务防止暴力破解

SSHD 服务防止暴力破解 目录 1、 配置安全的 SSHD 服务(方法一) 2、通过开源的防护软件来防护安全(方法二) 1、配置安全的 SSHD 服务 1.1、 服务器安全策略 密码足够复杂: 密码的长度要大于 8 位不大于 20 位。密…

TLS1.0协议漏洞修复

漏洞描述: 远程服务接受使用TLS 1.0加密的连接。TLS 1.0有许多密码设计缺陷。TLS 1.0的现代实现减轻了这些问题,但是像1.2和1.3这样的TLS的新版本是针对这些缺陷而设计的,应该尽可能使用。截至2020年3月31日,为TLS 1.2及更高版本启…

linux red hat 8.0 root密码破解

简介: root用户是linux用户最大权限的用户,如果不慎将其密码忘记是不可直接更改的,只能通过破解的方式来重置root密码。 linux系统的启动过程: 1 开机自检(POST),初始化部分硬件 2 搜素可用…

STL库实践

STL库实践 1 写在最前面的话1.1 容器(container)1.2 算法(algorithm)1.3 迭代器(iterator)1.4 仿函数1.5 适配器1.6 空间配置器1.7 stl初试牛刀 2 容器之 string2.1 string 构造函数2.2 string基本赋值操作2.3 string存取字符操作2.4 string拼接操作2.5 string查找和替换2.6 st…

【C++进阶——STL库】

STL库 介绍 STL是一个具有工业强度的,高效的C程序库,包含了很多计算机科学领域里所常用的基本数据结构和基本算法;六大组件:容器(Container)、迭代器(Iterator)、算法(Algorithm)、仿函数、适配器、分配器; 容器 定…

STL库:map和set

STL库:map和set 文章目录 STL库:map和set1.STL库中set的官方介绍2.set的常用接口3.set的总结4.STL库中multiset的官方介绍5.STL库中map的官方介绍6.map中的键值对pair7.map的常用接口7.1 map的访问操作7.2 map的修改操作7.3 map的查找操作 8.map的总结9.…

STL库(1)

STL库(1) vectorvector介绍vector使用初始化元素访问内存扩容插入删除 listlist介绍初始化,元素访问插入删除元素 vector和list区别 vector vector介绍 vector是可以改变大小的数组的容器。其内存结构和数组一样,使用连续的存储…

【C++学习五】STL库的应用

文章目录 初识C之 STL标准库1. CSTL的三大核心组件2. 自定义函数与算法对容器实现操作3. 基于自定义函数以及操作模板实现简易数字图像处理3.1 图像灰度变换3.2 图像二值化 4. 初识STL容器之:set集合5.初识STL容器之:map(关联容器)结语 初识C之 STL标准库…

STL库:vector

STL库:vector 文章目录 STL库:vector1.STL库对vector的官方介绍2.vecotr的常用接口2.1 vector的构造函数2.2 vector的迭代器与遍历操作2.3 vector的容量操作2.4 vector的访问操作2.5 vector的修改操作 3.vector迭代器失效问题3.1 insert导致的迭代器失效…

深入理解STL库

关注本人公众号,获取更多学习资料! 微信公众号搜索:阿Q正砖 上期说过C这块面试问的东西也蛮多,简历上只要出现C这几个字,那么STL库就是必问。 总不能是面试官问你了解STL库吗?你尴尬的说这块不怎么熟悉。…

C++ STL标准库

STL 组件 STL 是 C 标准程序库的核心。STL 内的所有组件都由模板构成,其元素可以是任意型别。程序员通过选用恰当的群集类别调用其成员函数和算法中的数据即可,但代价是 STL 晦涩难懂。 STL 组件主要包括容器,迭代器、算法和仿函数。 容器…

C++语法篇之STL库

1. STL介绍 STL是Standard Template Library的缩写,即标准模板库。之前在写 Templates 模板的时候,提到过STL对于模板的应用。STL是由多个模板类构成,能够为开发者提供通用的数据结构和算法。 STL主要包含以下内容: 容器 Conta…

【c++ • STL】初步认识什么是 STL 标准库

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:从零开始的 c 之旅🌈 若有帮助,还请关注➕点赞➕收藏,不行的…

STL库:list

STL库:list 文章目录 STL库:list1.STL库对list的官方介绍2.list的常用接口2.1 list的构造函数2.2 list的迭代器与遍历操作2.3 list的容量操作2.4 list的访问操作2.5 list的修改操作2.6 list的特别容器操作 3.list的底层源码4.list的模拟实现4.1 list的结…

STL库:string

STL库:string 文章目录 STL库:string1.STL库对于string类的介绍2.string常用接口的掌握2.1 string的构造接口2.2 string的容量操作接口2.3 string的访问操作接口2.4 string的迭代器遍历操作接口2.5 string的修改操作接口2.6 string的非成员函数重载接口2…

C++ 标准模板库STL

目录 前言 一、STL简介 二、STL的组件 三、STL头文件与命名空间 四、STL三大组件之 —— 容器 4.1 容器概述 4.2 序列式容器 4.3 排序式容器 4.4 哈希容器 五、STL三大组件之 —— 迭代器 5.1 迭代器概述 5.2 五种迭代器 5.3 迭代器的定义 5.4 迭…

C++ - STL标准库

1.C STL标准库简介 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西” 的方法,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种 组件&…

STL库--概述

C标准模板库(Standard Template Library,STL)是泛型程序设计最成功的实例。STL是一些常用数据结构和算法的模板的集合。 STL六大组件: 容器(containers):存放数据 算法(algorithms)&…

Standard Template Library(STL,标准模板库)

Standard Template Library(STL,标准模板库) STL(标准模板库)是C标准程序库的核心,它深刻影响了标准程序库的整体结构。 STL是一个泛型(generic)程序库,提供一系列软件方案,利用先进,高效的算…

pyqt学习笔记

pyqt学习笔记 文章目录 pyqt学习笔记前言pyqt主要模块开发环境安装qtpython选择使用anaconda集成版本:anaconda的特点:安装步骤: pycharm导入anaconda:pycharm设置qtdesigner,ui转py工具: 前言 gui学习是一个比较重要的内容&…