Image

知识库 → 通过 PortSpoof 在 Linux Debian 12 中模拟开放端口

[虚拟服务器]
出版日期: 17.11.2024

端口仿真是指一个特定的端口是开放的,可以连接到,但它并不是真正的服务,也无法提供核心功能,仅在连接时模拟类似或相同的问候消息。

端口仿真通常被大公司用来保护网络基础设施,防止服务和漏洞的扫描。简单来说,它会误导端口扫描器,并常常导致扫描尝试时卡住。

在本指南中,我们将安装 PortSpoof 服务,并为除实际使用的服务端口(22、80、443)外的所有端口配置仿真。

当只有三个端口开放,其余端口关闭时,全范围的端口扫描只需几秒钟,任何人都可以通过扫描服务器的 IP 地址来识别可用的服务。

然而,如果我们模拟所有端口的状态——使它们在 1 到 65535 的整个范围内都显示为开放,扫描将需要大约 65,535 秒,相当于约 18 小时。获得的信息几乎没有价值,这将显著增加寻找漏洞的难度。

1. 安装 PortSpoof

apt install git cmake build-essential autoconf automake libtool nano
git clone https://github.com/drk1wi/portspoof.git
cd portspoof
chmod +x configure
./configure --sysconfdir=/etc/
make -j$(nproc)
make install

1.1 创建日志文件

mkdir -p /var/log/portspoof
touch /var/log/portspoof/alerts.log
chmod 644 /var/log/portspoof/alerts.log

1.2 创建服务文件

nano /etc/systemd/system/portspoof.service

内容如下:

[Unit]
Description=Portspoof Daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/portspoof \
  -c /etc/portspoof.conf \
  -p 4444 \
  -s /etc/portspoof_signatures \
  -d \
  -l /var/log/portspoof/alerts.log
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

1.3 验证 PortSpoof 二进制文件路径

which portspoof

确保它与服务文件中的路径一致。

1.4 启动服务

systemctl daemon-reexec
systemctl daemon-reload
systemctl enable portspoof
systemctl start portspoof

检查状态:

systemctl status portspoof

1.5 测试设置

telnet <IP 地址> 4444
Trying 89.xx.187.xx...
Connected to 89.xx.187.xx.
Escape character is '^]'.

这表明连接成功。现在需要配置防火墙以重定向其余端口。

2. 安装 iptables 并设置持久规则

apt install iptables iptables-persistent

在 IPv4 和 IPv6 的交互窗口中按“是”。

2.1 设置规则

我们创建了几个规则来排除我们的服务(22、80、443)。根据你的服务进行相应调整。

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1:21 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 23:79 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 81:442 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 444:65535 -j REDIRECT --to-ports 4444

添加允许我们服务的规则:

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

保存规则以在服务器重启后生效:

netfilter-persistent save

或:

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

完成!现在你可以尝试连接到范围内的任何端口并检查其输出。我们使用了 Windows 上的免费端口扫描工具 Advanced Port Scanner。

可以看到,端口根据两个配置文件返回问候消息:

  • portspoof.conf - 列出特定端口及其响应。你可以添加端口和响应,或者为空响应,指定端口号和 ""。
  • portspoof_signatures - 包含未在配置文件中列出的所有端口的签名信息。

响应(横幅)来自这两个配置文件。

编辑文件后,只需重启服务:

systemctl restart portspoof

每个端口都有自己的响应。如果扫描未及时停止,程序可能会因端口数量过多而挂起。

特定端口的响应可以掩盖操作系统,导致扫描器将服务器误认为是路由器甚至打印机。

3. 附加步骤

要禁用端口问候消息,请将签名文件替换为空文件:

mv /etc/portspoof_signatures /etc/portspoof_signatures_orig
touch /etc/portspoof_signatures

在 EOF 前添加新行,否则服务无法启动:

printf "\n" > /etc/portspoof_signatures

重启服务:

systemctl restart portspoof

现在,未在 portspoof.conf 中明确指定的端口将返回空响应。要对所有端口应用此设置,请注释掉 portspoof.conf 中的相关行并重启服务。

对于大量端口来说,空响应是更好的解决方案,因为它避免了泄露哪个服务响应的信息。

然而,如果你的目标是伪装设备,端口响应很重要,但对所有端口都这样做太明显了。

成功连接后,连接会断开。要扫描大范围的端口,最好使用 nmap 工具。

4. 使用 nmap 进行端口扫描

apt install nmap

4.1 基本扫描

nmap -p 1-65535 <IP 地址>

4.2 更快的扫描

nmap -p 1-65535 -T4 <IP 地址>

4.3 显示服务信息

nmap -p 1-65535 -sV <IP 地址>

4.4 将结果保存到文件

nmap -p 1-65535 -oN result.txt <IP 地址>




No Comments Yet