如何防止服务器被恶意扫描?Linux 防扫描与 IP 封禁教程

下面是自己常用的一套在 Ubuntu 26.04 / Debian 系服务器上真正有效、可直接照做的防恶意扫描方案,不废话、不玄学,全是运维常用实战配置。

一、最核心原则

恶意扫描防不住,但可以:

  1. 不让它扫到真实端口
  2. 不让它暴力破解
  3. 扫几次就直接拉黑 IP
  4. 不暴露没必要的服务

二、立刻能做的 6 件事(最强防护)

1. 只开放必要端口(防火墙 UFW)

Ubuntu 默认自带 UFW,直接开:

# 只允许 80/443 和 SSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp

# 启用防火墙
sudo ufw enable

# 查看状态
sudo ufw status

数据库端口 3306、Redis 6379、Mongo 27017 一律不开放公网。


2. 安装 fail2ban(自动拉黑扫描 IP)

专门治你日志里那种疯狂试探的 IP:

sudo apt update
sudo apt install fail2ban -y

默认配置就已经能防:

  • SSH 爆破
  • Nginx 恶意请求
  • 代理扫描
  • 暴力破解

3. 数据库、缓存服务只绑内网

MySQL

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

确保:

bind-address = 127.0.0.1

Redis

bind 127.0.0.1
protected-mode yes

公网绝对不要暴露数据库。


4. SSH 强化(防止被扫爆)

sudo nano /etc/ssh/sshd_config

修改:

Port 你的自定义端口(可选)
PermitRootLogin no
PasswordAuthentication no  # 只用密钥
ChallengeResponseAuthentication no

重启:

systemctl restart sshd

5. Nginx 屏蔽异常请求(挡代理扫描)

在 Nginx 配置里加:

# 拦截空 UA、恶意二进制包
if ($request_uri ~* "^[\x00-\x1F]") { return 444; }
if ($user_agent = "") { return 444; }

# 禁止 CONNECT 代理请求
if ($request_method = CONNECT) { return 444; }

444 是 Nginx 专用关闭连接,不返回任何内容,扫描器直接断连。


6. 关闭不必要的服务

查看开启的服务:

ss -tulnp

不用的一律关掉:

特别是开源的软件,多一个就有一份可能

systemctl disable --now 服务名

三、进阶加固(可选,但非常强)

  1. Cloudflare 代理 真实 IP 隐藏,扫描器扫的是 CF IP,根本碰不到你服务器。
  2. 端口敲门 port-knocking SSH 不暴露,只有按顺序敲几个端口才能开门。
  3. 限制 IP 访问 后台、PHPMyAdmin 等只允许你自己的 IP。

只要你:

  • 防火墙开了
  • 数据库不暴露
  • fail2ban 装了
  • SSH 用密钥

这类扫描对你的机器毫无威胁(除非针对性恶意的)。

本文首发于 58Linux技术博客,专注Ubuntu桌面使用、Linux服务器运维与网站搭建实战。
       本系列的一部分

Linux服务器

Post 34 of 34

发表评论

粤ICP备10052831号 | © 2026 58Linux 技术笔记. All Rights Reserved. | 联系我们 | 关于本站
本站内容开放共享,仅供学习交流 | 专注 Ubuntu & Linux 实战教程
Built with GeneratePress