防止sshd服务被暴力破解
方法有很多种,这里介绍两种。
(1).配置安全的shhd设置
不允许root用户直接登录到系统,添加一个普通用户,必要时再切换到root用户。
修改默认端口号。
不允许密码登录,只能通过密钥登录系统。
root用户的密码足够复杂,足够长,可以包含大小写字母、数字和特殊符号。
sshd配置信息详见:简单了解sshd_config配置文件。
sshd密钥登录详见:CentOS7做ssh免密登录。
(2).使用fail2ban来防护
1)确认python的版本必须大于2.4
1 2 | [root@youxi1 ~]# python -V Python 2.7.5 |
2)要有epel扩展源
1 2 | [root@youxi1 ~]# yum list installed | grep epel-release epel-release.noarch 7-11 @extras |
3)yum安装fail2ban
1 | [root@youxi1 ~]# yum -y install fail2ban |
4)修改配置文件
说明:fail2ban的配置文件保存在/etc/fail2ban/目录下,其中主要的有action.d文件夹、fail2ban.conf文件与file2ban.d文件夹、filter.d文件夹、jail.conf和jail.d文件夹。action.d文件夹是动作文件夹,内含iptables和mail等动作配置。fail2ban.conf文件和fail2ban.d文件夹定义了日志级别、日志位置和sock文件位置。filter.d文件夹是过滤条件文件夹。jail.conf文件和jail.d文件夹是主要配置文件以及模块化。
1 2 3 4 | [root@youxi1 ~]# ls /etc/fail2ban/ action.d filter.d paths-common.conf paths-freebsd.conf fail2ban.conf jail.conf paths-debian.conf paths-opensuse.conf fail2ban.d jail.d paths-fedora.conf paths-osx.conf |
主要修改的就是/etc/fail2ban/jail.conf文件。这个配置文件中有许多模块,针对sshd服务需要修改的是[sshd]模块。初始的[sshd]模块只有三行:
1 2 3 | port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s |
在[sshd]模块中添加如下行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //激活sshd模块 enabled = true //过滤条件,sshd是过滤条件,对应filter.d文件夹下的sshd.conf文件 filter = sshd //动作,iptables是动作,对应action.d文件夹下的iptables.conf文件,并传递三个参数。如果ssh端口不是22,那么prot的值等于实际的端口号 action = iptables[name=SSH,prot=ssh,protocol=tcp] //sendmail-whois是第二个动作,对应action.d文件夹下的sendmail-whois.conf文件,并传递四个参数 //dest是接收邮箱,sender是发送邮箱,sendername是邮件标题 sendmail-whois[name=SSH,dest=you@example.com,sender=fail2ban@example.com,sendername= "Fail2Ban" ] //日志文件地址 logpath = / var /log/secure //禁止时间1小时 bantime = 3600 //指定规定时间为3分钟 findtime = 180 //规定时间内最大尝试次数 maxretry = 3 |
5)启动fail2ban并设置开机自启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@youxi1 ~]# systemctl start fail2ban [root@youxi1 ~]# systemctl enable fail2ban Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service. [root@youxi1 ~]# systemctl status fail2ban ● fail2ban.service - Fail2Ban Service Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled) Active: active (running) since 二 2019-05-14 15:59:01 CST; 28s ago Docs: man:fail2ban(1) Main PID: 12128 (fail2ban-server) CGroup: /system.slice/fail2ban.service └─12128 /usr/bin/python2 -s /usr/bin/fail2ban-server -s / var /run/f... 5月 14 15:59:01 youxi1 systemd[1]: Starting Fail2Ban Service... 5月 14 15:59:01 youxi1 fail2ban-client[12125]: 2019-05-14 15:59:01,718 fail...7 5月 14 15:59:01 youxi1 fail2ban-client[12125]: 2019-05-14 15:59:01,719 fail...e 5月 14 15:59:01 youxi1 systemd[1]: Started Fail2Ban Service. Hint: Some lines were ellipsized, use -l to show in full. |
6)测试
连续输错密码3次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@youxi2 ~]# ssh 192.168.5.101 The authenticity of host '192.168.5.101 (192.168.5.101)' can't be established. ECDSA key fingerprint is SHA256:l8MUM3o4X+Apo/ULW0VOVDhD0ylTANVQEIULquuH0AY. ECDSA key fingerprint is MD5:d2:4f:03:4d:34:67:2c:93:a6:29:ae:f3:cd:23:cf:de. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.5.101' (ECDSA) to the list of known hosts. root@192.168.5.101's password: Permission denied, please try again. root@192.168.5.101's password: Permission denied, please try again. root@192.168.5.101's password: ^C [root@youxi2 ~]# ssh 192.168.5.101 ssh: connect to host 192.168.5.101 port 22: Connection refused |
另外在本地也可以使用iptables -nL查看被禁止的IP地址
1 2 3 4 | Chain f2b-SSH (1 references) target prot opt source destination REJECT all -- 192.168.5.102 0.0.0.0/0 reject-with icmp-port-unreachable RETURN all -- 0.0.0.0/0 0.0.0.0/0 |
也可以使用fail2ban-client status查看。
7)将被禁止的IP地址从黑名单中移除
有可能手误被加到黑名单中了,但总不能等一小时吧。所以可以使用一下命令移除黑名单
1 2 | [root@youxi1 fail2ban]# fail2ban-client set sshd unbanip 192.168.5.102 //sshd对应的jail.conf中的模块名 192.168.5.102 |
fail2ban-client详细用法请看帮助说明
8)注意
iptables重启,那么fail2ban也需要重启。
修改端口,fail2ban的jail.conf中[sshd]模块,iptables动作传递的port参数也需要修改,最后重启。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性