
玩VPS的朋友们,今天咱们聊个实在的话题,一个只要你服务器的公网IP一暴露,就得天天面对的烦心事。
你可能觉得自己的小鸡(VPS)放在机房里,除了自己偶尔上去敲几行命令,平时根本没人搭理。但事实是,从你的服务器上线那一秒开始,它就已经被无数自动化的扫描脚本给盯上了。
这些脚本就像不知疲倦的苍蝇,7x24小时在网上乱撞,寻找着各种服务的默认端口,而它们最爱的,就是你那扇通往服务器核心的大门——SSH端口。
不信?我给你个机会亲眼看看。
现在,马上登录到你任何一台Linux服务器,把下面这行命令粘贴进去,回车:
sudo grep "Failed password" /var/log/auth.log | less
这命令干了啥?它把你服务器的登录日志(auth.log
)里,所有“密码错误”的记录全都翻了出来。
怎么样?看到屏幕上刷出来的那一长串来自世界各地的陌生IP了吗?是不是有点头皮发麻?没错,这些就是那些脚本留下的“犯罪证据”。它们正在用穷举法,拿着字典,一秒几百次地砸你家大门。
你的SSH密码,就是抵挡这场洪水唯一的防线。密码要是弱了,或者哪天不小心泄露了,服务器被拿下就是分分钟的事。
那我们除了设置一个长到自己都记不住的密码外,就没别的办法了吗?当然不是。
高手过招,不能光靠防守。今天我就教你怎么给你的服务器请一位全自动、铁面无私的“保安”。
这位保安的名字,叫Fail2ban。
Table of Contents
第一章:“主动防御”的艺术 —— Fail2ban是如何工作的?
在动手之前,你得先明白这玩意儿是怎么个工作原理,其实特简单。
- 被动防御(你现在的状态): 你设了个巨复杂的密码,就像给门上了把超级锁。小偷想撬开得花个几百年。这挺好,但你得忍着他天天在你门口叮叮当当地试钥匙,烦不烦?
- 主动防御(Fail2ban的玩法):
- 打个比方: 你在门口装了个监控,告诉它一个规则:“谁要是5分钟内连续输错3次密码,甭管是谁,直接关门放狗,让他一个小时内别想再靠近我家大门!”
- 技术上讲: Fail2ban就是个脚本,它会一直盯着你服务器的各种日志文件。一旦发现某个IP的行为符合你设定的“捣乱”规则(比如:10分钟内SSH登录失败5次),它就马上调用防火墙(比如
iptables
或者firewalld
),把这个IP拉黑,关它一会儿“小黑屋”(比如1小时,或者更久)。
看明白了吧?Fail2ban让你的服务器从一个只能被动挨打的木桩,变成了一个会主动反击的练家子。
第二章:“哨兵”的入职手续 —— 安装与核心配置
行了,理论听够了,咱们动手把这位保安请上岗。
第一步:安装
在主流的Ubuntu/Debian系统上,安装简单得不能再简单了:sudo apt update
sudo apt install fail2ban -y
装完之后,服务会自动跑起来。这时候,保安其实已经悄悄开始工作了,只不过他用的是一套默认的规则,有点太“仁慈”,咱们得给他“特训”一下。
第二步:配置的“铁律”
你进到/etc/fail2ban/
这个目录,会看到一个叫jail.conf
的文件,这是它的主配置文件。
记住这个铁律:永远,永远不要直接改jail.conf
这个文件!
- 为啥? 因为这是官方的默认配置。你一升级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
- 然后,用你喜欢的编辑器打开我们自己的文件,我这里用nano:
sudo nano /etc/fail2ban/jail.local
打开后别被那一大堆配置吓到,保护SSH的话,咱们就改几个关键的地方就行。
在[DEFAULT]
这个全局设置下面,找到这几项:
bantime = 10m
- 这是啥: 就是关小黑屋的时间。默认10分钟,说实话太短了,攻击者喝杯茶的功夫就出来了。
- 我建议: 至少改成
bantime = 1h
(关1小时),狠一点的直接bantime = 24h
(关一天)。
findtime = 10m
和maxretry = 5
- 这是啥: 这俩要放一块看。意思是“如果在10分钟内,同个IP试错了5次,就拉黑”。
- 我建议: 可以把
maxretry
改成3
,更严格一些,没必要给那么多机会。
接下来,在编辑器里按Ctrl + W
,搜索[sshd]
,直接跳到SSH专属的配置区域。
你就需要确认一件事,在[sshd]
的下面,有没有这一行:
enabled = true
- 这是啥: 意思就是“开启SSH监控”。如果它默认是
false
,或者被注释掉了,记得改成true
。
- 这是啥: 意思就是“开启SSH监控”。如果它默认是
基本上,对SSH的防护,改这几项就足够了。保存退出(Ctrl+X
,然后按Y
,再按回车)。
第四步:让新规则生效
改完了配置,得跟保安说一声,让他按新规矩办事。
sudo systemctl restart fail2ban
搞定!从现在开始,你这位严格的保安,已经正式上岗了!
第三章:与你的“哨兵”对话 —— 日常管理与“特赦”
保安上岗了,我们怎么知道他干得好不好,或者怎么跟他沟通呢?用fail2ban-client
这个命令就行。
- 查看整体工作状态:
sudo fail2ban-client status
这个会告诉你现在开了几个监控任务(Jail)。 - 查看SSH监控的详细报告:
sudo fail2ban-client status sshd
这个是我最常用的!它会告诉你SSH这边总共抓到过多少次捣乱的,更重要的是,会列出**当前正被关在小黑屋里的IP列表!** - “哎呀,是我自己手滑了!”—— 怎么把IP放出来? 难免有時候自己也会输错几次密码,结果被自家的保安给关外面了。别慌,你有管理员权限。
sudo fail2ban-client set sshd unbanip 你的IP地址
敲完这行命令,你就能马上重新连接了。
【自己动手测试一下】 如果你还是有点不放心,想亲眼看看它到底有没有用,可以自己做个实验。打开手机的SSH客户端,连你的服务器,然后故意输错几次密码。很快你就会发现,手机连不上了。这时候,回到电脑上,执行sudo fail2ban-client status sshd
,你就能在那个“Banned IP list”里看到你手机的公网IP。亲眼看过一次,你就会彻底信赖它了。
第四章:超越SSH —— 为你的“整个城堡”都配上“哨兵”
Fail2ban最牛的地方在于,它是个通用工具。它不光能保护SSH。说白了,只要你的某个服务会产生记录失败尝试的日志,Fail2ban就能保护它!
举个最常见的例子,你的WordPress网站后台,是不是也天天被人扫?没问题,一样可以给它配个保安!
- 在
/etc/fail2ban/filter.d/
目录里,新建一个wordpress.conf
文件,用来定义怎么从日志里识别“WordPress登录失败”的行为。 - 回到
jail.local
文件,加一个新的[wordpress]
配置段,告诉Fail2ban去监控Nginx或Apache的访问日志,并使用我们刚定义的那个规则。 - 重启Fail2ban。
就这么简单。之后,再有谁想暴力破解你的WP后台,试个几次就会发现网站直接访问不了了。
同理,FTP服务、邮件服务,甚至你自己写的应用,只要有日志,就能用Fail2ban来保护。它能成为你整个服务器统一的主动防御中心。
当你把Fail2ban配好,过个一两天,再回去用sudo fail2ban-client status sshd
看看报告,你可能会惊讶地发现,那个“已封禁IP列表”里,已经有了几百上千条记录。
看着这个列表,你会获得一种前所未有的安全感。因为你知道,在你睡觉的时候,在你忙别的事的时候,这位忠诚的“保安”,正在后台默默地为你挡掉成千上万次的恶意试探。
从这一刻起,你的服务器,不再是一座需要你时时刻刻担惊受怕的孤岛。它,成了一座拥有了自我防御能力的智能堡垒。
评论前必须登录!
注册