阻止扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}

server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;

ssl_certificate /etc/nginx/certs/default_server.crt;
ssl_certificate_key /etc/nginx/certs/default_server.key;

return 444;
}

功能:主要功能是将所有没有匹配到特定域名的请求直接拒绝,不提供任何服务。

server_name _; 的设置会将这个 server 块视为默认服务器,用来处理所有未在其他 server 块中定义的域名请求。

在这个配置中,所有未明确定义的域名请求都会被引导到这个默认的 server 块,然后立即返回状态码 444,断开连接。

使用

Nginx proxy manage配置使用

docker-compose文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
environment:
- TZ=Asia/Shanghai # 设置为 CST 时区
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
- ./nginx/block_scanners.conf:/etc/nginx/conf.d/block_scanners.conf # 映射拦截配置文件
- ./nginx/certs:/etc/nginx/certs # 映射证书文件目录
  1. 移动到docker-compose.yml文件所在的目录,在此目录下创建/nginx/block_scanners.conf文件

  2. 把阻止扫描的配置复制到block_scanners.conf这个文件中

  3. 申请自签证书

先安装openssl

1
2
sudo apt update
sudo apt install openssl -y

再执行(确保当前在docker-compose.yml文件所在的目录)

1
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./data/nginx/certs/default_server.key -out ./data/nginx/certs/default_server.crt

在生成过程中,会被提示输入一些信息,如国家、省份和组织。可以随意填写,或者直接回车,生成证书和密钥文件即可。

最后执行:

1
docker-compose up -d

验证方法

使用 curl 命令: 在服务器上,使用 curl 命令发送请求到 Nginx Proxy Manager 容器,指定一个不存在的域名(未在 Nginx Proxy Manager 中配置的域名),例如:

1
curl -I http://localhost -H "Host: nonexisting.domain.com"

当收到 curl: (52) Empty reply from server 表示服务器没有返回任何内容,这正是 return 444; 配置的预期结果。