服务器端口扫描漏洞防护配置指南:零基础也能轻松上手
为什么服务器的端口扫描漏洞必须重视
端口扫描是攻击者的“侦察”手段——通过探测服务器上开放的端口,他们能快速锁定弱口令服务、过时版本或未修补的漏洞。
对于刚上线的云服务器,如果不做任何防护,几分钟内就会被扫描工具盯上。
本文的目标就是让零基础用户,通过几个实际步骤,大幅降低端口扫描带来的风险。
前置准备:你只需要一台Linux服务器(以CentOS 7/8或Ubuntu 20.04为例),以及root或sudo权限。
本文所有命令都可以直接复制执行,无需额外工具。
第一步:修改默认的SSH端口
绝大多数扫描攻击都瞄准默认的22号SSH端口。
改了它,就能拦下至少80%的扫描流量。
- 登录服务器(用你现有的方式)。
- 编辑SSH配置文件:
sudo vi /etc/ssh/sshd_config - 找到
#Port 22这一行,去掉注释,将数字改成高位端口,例如Port 22333(注意避开常用端口如80、443、3306)。 - 如果是Ubuntu,还要确保
PermitRootLogin设为no(避免root直接登录),再增加一个普通用户并赋予sudo权限。 - 保存文件并重启SSH服务:
sudo systemctl restart sshd(CentOS)或sudo systemctl restart ssh(Ubuntu)。 - 不要立即断开当前会话,新开一个终端用新端口测试登录(例如
ssh -p 22333 user@你的IP),确认能连上再关闭旧会话。
避坑:记得在云服务商的安全组/防火墙中放行新端口,否则你会把自己锁在外面。
第二步:配置防火墙——只放行必需端口
用iptables或firewalld(推荐firewalld,CentOS 7+默认)严格限制入站流量。
使用firewalld(CentOS):
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-port=22333/tcp # 放行SSH新端口
sudo firewall-cmd --permanent --add-port=80/tcp # 网站服务
sudo firewall-cmd --permanent --add-port=443/tcp # HTTPS
sudo firewall-cmd --reload
sudo firewall-cmd --list-all # 确认只有这三个端口开放
使用UFW(Ubuntu):
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22333/tcp comment 'SSH new port'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
关键点:只开放业务必需的端口。
如果你不需要远程连接数据库,就不要放行3306端口。
如果必须开放,一定要限制来源IP(如 sudo ufw allow from 你的公司IP to any port 3306)。
第三步:部署Fail2ban——自动封禁频繁扫描的IP
Fail2ban会监控日志文件,当发现某个IP在短时间内尝试登录失败多次,就会自动添加iptables规则临时封禁它。
- 安装:
sudo yum install -y fail2ban(CentOS)或sudo apt install -y fail2ban(Ubuntu)。 - 创建自定义配置文件:
sudo vi /etc/fail2ban/jail.local - 写入以下基础内容(针对SSH服务):
[sshd]
enabled = true
port = 22333 # 改成你实际使用的端口
filter = sshd
logpath = /var/log/secure # CentOS默认路径;Ubuntu是 /var/log/auth.log
maxretry = 3 # 3次失败就封禁
bantime = 3600 # 封禁1小时(单位秒)
findtime = 300 # 5分钟内达到3次则封禁
- 启动服务:
sudo systemctl start fail2ban并设为开机启动:sudo systemctl enable fail2ban。 - 检查状态:
sudo fail2ban-client status sshd。如果看到Banned IP list:有内容,说明已成功拦截扫描IP。
避坑:别把 maxretry 设得太小(比如1),否则正常误输密码也会被封。
另外,如果修改了SSH端口,务必在 jail.local 里指定 port,否则Fail2ban仍然监控默认22端口。
第四步:验证防护效果
执行完以上配置,最好自己模拟一次扫描来确认防护是否生效。
- 使用另一台机器(或本机)执行
nmap扫描:nmap -sS -p 1-65535 你的服务器IP。如果只显示之前开放的几个端口,说明防火墙生效;如果扫描卡顿或连接超时,也说明防护起了作用。 - 故意用错误密码SSH登录几次(用新IP或不同IP),然后检查Fail2ban日志:
sudo tail -f /var/log/fail2ban.log,你会看到类似Ban 恶意IP的记录。 - 用以下命令查看当前被封的IP:
sudo iptables -L -n | grep fail2ban。
成功验证后,你的服务器端口扫描漏洞防护配置就基本到位了。
常见问题与避坑指南
Q:我改完SSH端口后无法连接了怎么办?
A:如果你在云平台上有“远程连接”功能(如VNC、控制台),可以登录进去检查防火墙设置,重新放行旧端口或检查新端口配置。如果没有VNC,联系云服务商工单救援。记住:改端口时必须先放行新端口再重启SSH。
Q:Fail2ban封禁后,我想解封某个IP怎么做?
A:执行 sudo fail2ban-client set sshd unbanip 被封IP。如果想查看所有被封IP,用 sudo fail2ban-client status sshd。
Q:我需要开放很多端口(比如游戏服务器),该怎么防护?
A:对于大量端口开放,建议只放行业务端口,同时开启Fail2ban的对应服务规则(如针对HTTP、MySQL)。此外,可以用云平台的DDoS高防或CDN隐藏真实IP。
Q:扫描攻击用大量IP轮换,Fail2ban能防住吗?
A:分布式扫描很难单靠Fail2ban彻底防住,需要结合云安全组白名单(只允许已知IP访问敏感端口)和Web应用防火墙。但它能大幅降低单点扫测成功的概率。
结语
端口扫描漏洞防护不是一次配置就一劳永逸的工作。
建议你定期查看服务器日志(/var/log/secure 或 /var/log/auth.log)和Fail2ban统计,同时留意操作系统和服务的官方安全公告。
如果你希望站内继续学习,可以搜索“服务器入侵应急响应”或“Linux安全基线检查”相关教程。
按本文步骤操作后,你的服务器已经具备了基础且有效的端口扫描防御能力。
遇到任何异常,优先回顾避坑说明和高频问题部分,多数情况能自行解决。