前言介绍
服务器一旦暴露在公网,就会持续受到来自全球的自动化扫描和暴力破解攻击。攻击者利用脚本尝试成千上万个常见用户名与弱密码组合,试图登录你的服务器面板或SSH端口。宝塔面板作为常用的服务器管理工具,默认的登录入口和端口容易被攻击者盯上。如果不做任何防护,轻则日志被刷爆,重则服务器被入侵、数据被加密勒索。本教程将手把手教你通过宝塔面板内置的安全功能以及系统层面的配置,彻底封堵暴力破解通道,实现非法登录拦截。全程无需编写代码,只需按步骤操作即可。
前置准备
1. 一台已安装宝塔面板的Linux服务器(CentOS/Ubuntu/Debian均可),确保面板版本为最新(建议7.9.0以上)。
2. 拥有宝塔面板管理员权限,能正常登录面板后台。
3. 已通过SSH连接至服务器(建议使用Xshell、Putty或阿里云/腾讯云网页终端),并拥有root或sudo权限。
4. 准备好一个不会忘记的复杂密码(至少12位,包含大小写字母、数字、特殊符号),后续需要修改面板和系统密码。
5. 建议先通过快照或备份功能创建服务器系统盘快照,防止误操作导致无法登录。
分步操作步骤
步骤1:修改宝塔面板默认端口和入口路径
宝塔面板默认使用8888端口和随机生成的入口路径,但很多用户安装后未修改,导致攻击者可以直接扫描8888端口并尝试默认入口。必须立即更改。
1. 登录宝塔面板后台,点击左侧菜单栏的“面板设置”。
2. 在“面板端口”输入框中,将默认的8888改为一个不常用的端口号,范围建议在10000-65535之间,例如:26888。注意不要与常用服务端口(如80、443、3306等)冲突。
3. 在“安全入口”输入框中,将默认的随机字符串改为你自己设定的复杂路径,例如:/admin_secure_2024。这个路径越长越复杂越好,建议包含数字和字母组合,长度不少于12位。
4. 点击页面底部的“保存”按钮。系统会提示需要重启面板才能生效。
5. 点击弹窗中的“立即重启”按钮,等待约10秒,面板会自动刷新。此时请务必使用新的端口和入口路径重新访问面板,例如:http://你的服务器IP:26888/admin_secure_2024。如果忘记新路径,可以通过SSH执行命令查看:cat /www/server/panel/data/admin_path.pl。
步骤2:开启宝塔面板的SSH登录安全防护
宝塔面板内置了SSH登录防护功能,可以自动检测并封禁频繁尝试登录的IP地址。
1. 在宝塔面板左侧菜单栏点击“安全”图标,进入安全设置页面。
2. 找到“SSH登录安全”区域,点击右侧的“设置”按钮。
3. 在弹出的窗口中,勾选“开启SSH登录防护”选项。
4. 设置“最大尝试次数”为3次。意思是同一个IP在指定时间内如果连续输错3次密码,就会被临时封禁。
5. 设置“封禁时间”为3600秒(即1小时)。可以根据实际情况调整,建议不少于30分钟。
6. 点击“保存”按钮。此时系统会自动在服务器上安装fail2ban服务(如果未安装),并开始监控SSH登录日志。注意:开启后请确保你自己的SSH登录密码正确,否则可能会把自己封禁。如果被封禁,可以通过面板的“安全”页面中的“已封禁IP”列表手动解封。
步骤3:配置防火墙仅允许必要端口和IP
宝塔面板的防火墙功能可以精确控制哪些IP能访问哪些端口,从源头阻断大部分无效扫描。
1. 在宝塔面板左侧菜单栏点击“安全”,然后点击“防火墙”选项卡。
2. 在“系统防火墙”区域,你会看到当前开放的端口列表。默认情况下,80、443、22、8888等端口都是开放的。
3. 首先,删除不必要的端口规则。例如,如果你不需要通过SSH从外网直接连接,可以点击22端口右侧的“删除”按钮(前提是你已经通过面板SSH终端或云控制台VNC连接)。如果必须保留SSH,建议修改SSH端口(后面步骤会讲)。
4. 点击“添加端口规则”按钮。
5. 在弹出窗口中,设置“端口”为你修改后的宝塔面板端口(如26888),“协议”选择TCP,“来源”选择“指定IP”。然后在“IP地址”输入框中填入你常用的办公网络公网IP(可以通过访问ip.sb或百度搜索“我的IP”获取)。如果家里和公司IP不固定,可以填多个IP,用逗号分隔,或者使用IP段(如192.168.1.0/24)。
6. 点击“保存”。这样只有你指定的IP才能访问宝塔面板,其他所有IP都会被防火墙拒绝。
7. 重复上述步骤,为其他需要外网访问的服务(如网站80/443端口)添加IP白名单,或者保持“所有IP”开放(但建议至少将SSH和面板端口限制为指定IP)。
步骤4:修改SSH默认端口并禁用root直接登录
SSH暴力破解是攻击者最常用的手段,修改默认端口和禁用root账户可以极大提高安全性。
1. 通过宝塔面板的“SSH终端”功能或第三方SSH客户端连接到服务器。
2. 输入命令:sudo vi /etc/ssh/sshd_config(如果系统没有vi,可以使用nano或vim)。
3. 找到 Port 22 这一行,将22修改为一个不常用端口,例如:Port 22222。确保该端口没有被其他服务占用,并且已在宝塔防火墙中开放。
4. 找到 PermitRootLogin yes 这一行,将 yes 改为 no。这表示禁止root用户通过SSH直接登录,你需要先使用普通用户登录,再通过su或sudo切换到root。
5. 找到 PasswordAuthentication yes 这一行,确保为yes(如果你使用密钥登录,可以改为no,但新手建议保留密码登录,配合fail2ban防护)。
6. 保存并退出编辑器(vi中按Esc,输入:wq回车)。
7. 重启SSH服务使配置生效:sudo systemctl restart sshd(CentOS系统)或 sudo service ssh restart(Ubuntu/Debian系统)。
8. 立即打开一个新的SSH连接窗口,使用新的端口(22222)和普通用户(非root)尝试登录。确认可以登录后,再关闭旧连接。如果无法登录,检查防火墙是否放行了新端口,或者通过云控制台VNC连接回服务器恢复配置。
步骤5:安装并配置Fail2ban高级防护(可选但强烈推荐)
虽然宝塔面板内置了SSH防护,但Fail2ban可以针对更多服务(如面板登录、网站登录)进行更精细的防护。
1. 通过SSH终端执行安装命令:sudo apt install fail2ban -y(Ubuntu/Debian)或 sudo yum install fail2ban -y(CentOS)。
2. 安装完成后,创建自定义配置文件:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local。
3. 编辑配置文件:sudo vi /etc/fail2ban/jail.local。
4. 找到 [sshd] 部分,修改以下参数:
- enabled = true
- port = 22222(改为你设置的SSH新端口)
- maxretry = 3
- bantime = 3600
- findtime = 600
5. 为了让Fail2ban也保护宝塔面板登录,需要添加一个自定义规则。在文件末尾添加以下内容:
[bt-panel]
enabled = true
port = 26888(改为你的面板端口)
filter = bt-panel
logpath = /www/server/panel/logs/request.log
maxretry = 3
bantime = 3600
findtime = 600
6. 创建对应的过滤器文件:sudo vi /etc/fail2ban/filter.d/bt-panel.conf,内容如下:
[Definition]
failregex = .*登录失败.*
ignoreregex =
7. 保存所有文件,重启Fail2ban服务:sudo systemctl restart fail2ban。
8. 查看运行状态:sudo fail2ban-client status。如果看到bt-panel和sshd两个jail都处于active状态,说明配置成功。
步骤6:设置宝塔面板登录二次验证(2FA)
即使密码被泄露,二次验证也能阻止非法登录,这是最后一道防线。
1. 在宝塔面板左侧菜单栏点击“面板设置”。
2. 找到“安全设置”区域,点击“谷歌验证器”旁边的“设置”按钮。
3. 使用手机上的身份验证器App(如Google Authenticator、Microsoft Authenticator、Authy)扫描屏幕上的二维码。
4. 在App中输入显示的6位动态验证码,然后点击面板上的“验证”按钮。
5. 验证成功后,面板会要求你输入当前面板密码确认。输入密码后点击“启用”按钮。
6. 此后每次登录宝塔面板,都需要先输入密码,再输入手机App上的6位动态码。建议将二维码截图或备份密钥字符串,保存在安全的地方,防止手机丢失后无法登录。
常见问题
Q1:修改面板端口后无法访问面板怎么办?
A:首先检查是否在防火墙放行了新端口。如果忘记放行,可以通过SSH连接服务器,执行命令:sudo firewall-cmd --add-port=26888/tcp --permanent && sudo firewall-cmd --reload(CentOS)或 sudo ufw allow 26888/tcp(Ubuntu)。如果仍然无法访问,检查云服务商的安全组规则,确保入方向放行了该端口。
Q2:开启SSH登录防护后,我自己被误封了怎么办?
A:如果当前SSH连接还在,可以执行 sudo fail2ban-client set sshd unbanip 你的IP 来解封。如果所有连接都被封,需要通过云服务商的控制台VNC功能登录服务器,然后执行 systemctl stop fail2ban 临时关闭服务,再排查原因。
Q3:修改SSH端口后,宝塔面板的SSH终端无法连接怎么办?
A:宝塔面板的SSH终端默认使用22端口。修改后,需要在面板左侧“SSH终端”设置中,将“SSH端口”改为你设置的新端口(如22222),然后保存。否则面板自带的终端会连接失败。
Q4:谷歌验证器二维码丢失,如何重新绑定?
A:通过SSH登录服务器,执行命令:cd /www/server/panel && python tools.pyc set_google_auth。系统会重新生成一个新的密钥和二维码,使用手机App重新扫描即可。
收尾总结
通过以上六个步骤,你的宝塔面板和服务器已经具备了多层次的暴力破解防御体系:修改默认端口和入口、启用fail2ban自动封禁、防火墙IP白名单、禁用root远程登录、以及二次验证。这些措施组合在一起,能够拦截99%以上的自动化攻击。建议每季度检查一次安全设置,确保所有规则仍然有效,并定期更换面板密码和SSH密钥。安全加固不是一次性工作,而是持续的过程。现在你的服务器已经比绝大多数未配置的服务器安全得多,可以放心部署生产环境了。