如何用Fail2ban保护Linux服务器?防止SSH暴力破解教程
更多云服务器知识,尽在hostol.com
我们来聊一个每个Linux服务器管理员,从第一天上线服务器开始,就必须面对的、一场永不休止的“地下战争”。
这场战争,悄无声息。没有炮火,没有硝烟。但它的激烈程度,远超你的想象。
你可能觉得,你的那台云服务器,安安静静地待在云端机房里,除了你和你的几个用户,无人问津。但真相是,从它获得公网IP地址的那一刻起,它就成了一座暴露在“黑暗森林”中的、散发着微弱光芒的“哨站”。
无数的、自动化的“鬣狗”(扫描程序和僵尸网络),正在互联网上7x24小时不间断地游荡,寻找着像你这样的“哨站”。它们会做的第一件事,就是去试探你那扇最重要的大门——SSH端口。
你觉得我在危言耸听?
现在,就请你立刻SSH登录到你的任何一台Linux服务器上,然后,复制并执行下面这行命令:
sudo grep "Failed password" /var/log/auth.log | less
这行命令的意思是:“请把这台服务器的‘访客登记册’(auth.log
)里,所有关于‘输错密码’的记录,都给我调出来。”
当你敲下回车,看到屏幕上那密密麻麻、来自世界各地、成百上千条的“登录失败”记录时,你是否会感到一丝寒意?这些,就是“鬣狗”们留下的爪印。它们正在用“密码字典”,一秒钟几十次、几百次地,不知疲倦地,尝试撞开你的大门。
你的服务器密码,就是你和这场“暴力破解”的洪水之间,唯一的那道“堤坝”。如果你的密码不够坚固,或者某天不小心被泄露,那么,“失守”,只是时间问题。
难道,我们只能被动地、把所有的希望,都寄托于这道“堤壩”的坚固程度吗?不。
一个专业的“城防官”,除了加固城门,更会主动出击。今天,我要教你的,就是如何为你的“哨站”,雇佣一位**“不知疲倦的、拥有过目不忘能力的、且绝对忠诚的AI哨兵”**。
它的名字,叫Fail2ban。
第一章:“主动防御”的艺术 —— Fail2ban是如何工作的?
在我们“雇佣”这位哨兵之前,你必须先理解它的“工作逻辑”。
被动防御(你的现状): 你设置了一个超复杂的密码。这就像你给城堡的大门,上了一把极其复杂的锁。小偷想破解它,可能需要几百年的时间。这很安全,但问题是,你得忍受这个小偷,每天24小时,都在你家门口,“叮叮当当”地,不停地试钥匙。这,很烦人。
主动防御(Fail2ban的哲学):
比喻: 你在大门口,装了一个智能摄像头,并连接到一个自动路障系统。你给系统下达了一个简单的规则:“嘿,摄像头,你盯着点。如果同一个人,在5分钟内,连续输错3次密码,我不管他是谁,立刻升起路障,把他拉进‘黑名单’,禁止他靠近我的大门一小时!”
技术真相: Fail2ban,就是一个极其智能的**“日志分析与防火墙联动”**工具。它会像一个不知疲倦的哨兵,实时地、逐行地,阅读你服务器的各种“访客登记册”(日志文件)。一旦它发现某个IP地址的行为,符合了你预设的“可疑模式”(比如:在10分钟内,SSH登录失败了5次),它就会立刻“拔刀”,自动执行一条防火墙命令(比如
iptables
或firewalld
),将这个充满恶意的IP地址,关进“小黑屋”(禁止访问),关一段时间(比如1小时,或者永久)。
看到了吗?Fail2ban让你的服务器,从一个只会“挨打”的“沙袋”,变成了一个懂得“还手”的“武林高手”。
第二章:“哨兵”的入职手续 —— 安装与核心配置
好了,让我们来正式“雇佣”这位哨兵。
第一步:安装
在Ubuntu/Debian系统上,安装过程简单到只有一行命令: sudo apt update
sudo apt install fail2ban -y
安装完成后,Fail2ban的服务会自动启动。现在,这位“哨兵”,已经静悄悄地,开始阅读你服务器的日志了。但是,他现在用的,还是“出厂设置”的规则手册,我们需要为他“量身定制”一套更符合我们需求的规则。
第二步:配置的“黄金法则”
进入/etc/fail2ban/
目录,你会看到一个核心的配置文件jail.conf
。
黄金法则:永远,永远,不要直接修改jail.conf
!
为什么? 因为这个文件,是Fail2ban的“默认出厂设置说明书”。当你将来升级Fail2ban时,系统很可能会用一个新版本的“说明书”,直接覆盖掉你修改过的旧版本,你所有的自定义配置,都会付之一炬!
正确的姿势是什么? 我们需要创建一个我们自己的“定制规则手册”,名为
jail.local
。Fail2ban的读取逻辑是,它会先读取jail.conf
,然后再读取jail.local
。如果两份文件里,有相同的配置项,它会以jail.local
里的为准。比喻:
jail.conf
是“集团公司章程”,而jail.local
是你“分公司”的“本地化补充条款”。当两者冲突时,以“本地条款”为优先。
第三步:撰写我们的“本地条款” (jail.local
)
我们先从默认文件,复制一份模板过来:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
现在,让我们来编辑这份属于我们自己的“规则手册”:
sudo nano /etc/fail2ban/jail.local
打开后,你会看到一个很长的文件,里面全是各种配置。别怕,对于保护SSH来说,我们只需要关心和修改其中的几个核心“条款”。
在[DEFAULT]
这个“通用条款”部分,你可以找到并修改:
bantime = 10m
含义: “关小黑屋”的时长。默认是10分钟,有点太短了,攻击者等10分钟,又是一条好汉。
建议修改:
bantime = 1h
(关1小时) 或者更狠一点bantime = 24h
(关一整天)。
findtime = 10m
和maxretry = 5
含义: 这两条要连在一起看。它的意思是:“如果在10分钟的‘观察期’内,同一个人‘犯规’的次数,达到了5次,就触发‘关小黑屋’的惩罚。”
建议修改: 你可以改得更严格一些,比如把
maxretry
改成3
。
接下来,按Ctrl + W
,搜索[sshd]
,直接跳转到我们最关心的“SSH岗哨”的专属条款。
你需要确保,[sshd]
这一节下面,有这样一行:
enabled = true
含义: 它的意思是:“SSH岗哨,现在正式开启!” 如果它是
false
,那就把它改成true
。
通常,对于SSH的防护,你只需要做到以上几步,就足够了。保存并退出 (Ctrl+X
-> Y
-> Enter
)。
第四步:让“新规”生效
修改完“规则手册”,我们需要让“哨兵”重新学习一下。
sudo systemctl restart fail2ban
好了,从这一刻起,你那位全新的、严格按照你的指示工作的“AI哨兵”,已经正式上岗,开始为你站岗放哨了!
第三章:与你的“哨兵”对话 —— 日常管理与“特赦”
“哨兵”上岗后,我们该如何了解他的工作状态,或者与他沟通呢?我们需要一个“对讲机”——fail2ban-client
命令。
查看“战情室”总体状态:
sudo fail2ban-client status
它会告诉你,现在总共有几个“岗哨”(Jail)处于激活状态。查看“SSH岗哨”的详细战报:
sudo fail2ban-client status sshd
这是我们最常用的命令!它会返回一份详细的报告,告诉你这个岗哨总共发现过多少次“可疑行为”,以及,最重要的——当前被关在“小黑屋”里的IP地址列表!“长官,我手滑了!”—— 如何“特赦”一个IP? 有时候,你可能会因为自己多次输错密码,而不幸被自己雇的“哨兵”给关进了小黑屋。别急,你有“长官”的权力。
sudo fail2ban-client set sshd unbanip 你的IP地址
执行后,你就可以立刻重新连接了。
【终极测试】亲手体验一次“被捕” 如果你想亲眼看看你的“哨兵”是不是真的在工作,可以做个小实验。用你的另一台设备(比如手机上的SSH客户端),故意输错几次密码。然后,你会发现,你的手机,再也连接不上服务器了。 接着,在你的电脑上,执行sudo fail2ban-client status sshd
,你就会在“Banned IP list”里,看到你手机的IP地址。 这种“亲眼所见”的震撼,会让你对Fail2ban的可靠性,建立起绝对的信心。
第四章:超越SSH —— 为你的“整个城堡”都配上“哨兵”
Fail2ban的强大之处,在于它是一个**“通用框架”**。它不仅仅能保护SSH。理论上,任何一个会产生“登录失败”日志的服务,都可以被Fail2ban守护!
比如,你的WordPress网站后台,是不是也经常被人用程序,不知疲倦地尝试各种用户名和密码? 我们可以为它,也配一个“哨兵”!
在
/etc/fail2ban/
目录下,创建一个filter.d/wordpress.conf
文件,定义“WordPress登录失败”这种“可疑行为”的特征。在
jail.local
里,新增一个[wordpress]
岗哨的条款,告诉它去监控Nginx的访问日志,并使用我们刚定义的wordpress.conf
过滤器。重启Fail2ban。
从此,任何一个试图暴力破解你WordPress后台的IP,也会在尝试几次后,被自动拉黑。
同理,你可以为你的FTP服务、邮件服务、甚至是任何你自定义的应用,都配上专属的“哨兵”。Fail2ban,可以成为你整个服务器的、统一的、智能的“主动防御中心”。
当你配置好Fail2ban,过上几天,再回去用sudo fail2ban-client status sshd
查看战报时,你可能会看到,你的“已拉黑IP列表”里,已经有了成百上千个“战果”。
看着这个列表,你会有一种前所未有的“安心感”。你知道,在你看不到的、深夜的每一个小时,这位忠诚的“AI哨兵”,都在为你,默默地,将成千上万次潜在的威胁,拒之门外。
服务器,从此不再是一座需要你时刻提心吊胆的“孤城”。它,成了一座拥有了自我防御能力的、坚不可摧的“智能堡垒”。