避免我的服务器被端口扫描的最佳做法是什么

信息安全 网络 linux 港口 网络扫描仪 敲门
2021-09-11 10:55:12

标题可能说明了一切。我只想知道避免端口扫描程序检测到我的服务器上的开放端口的最佳技术。我使用 Linux 发行版作为我的操作系统(Ubuntu 服务器)。

请不要考虑使用外部设备(如外部防火墙),我希望我只能使用发行版或外部软件包提供的东西。

4个回答

敲门

Portknocking 是一种通过对其他端口执行一系列连接尝试(敲门)来打开防火墙通常保持关闭的端口的方法。在端口敲门的有效序列后,所需的端口将打开。

把敲门想象成一种特殊的敲门声,让门打开。

这是来自ArchLinux wiki的示例

$ ssh username@host
(Ctrl+c to exit) ^C 
$ nmap -Pn --host_timeout 201 --max-retries 0 -p 1111 host
$ nmap -Pn --host_timeout 201 --max-retries 0 -p 2222 host
$ ssh user@host
user@host's password:

用户敲击端口,1111然后为 SSH2222打开端口22

端口欺骗

Portspoof是一个程序,它使解释端口扫描结果变得非常困难,因此减慢了识别开放端口的速度。

Portspoof 计划的主要目标是通过一系列新技术来增强操作系统的安全性:

  • 所有 TCP 端口始终打开

Portspoof 不会通知攻击者特定端口已关闭或已过滤状态,而是会在每次端口连接尝试时返回 SYN+ACK。

  • 因此,对系统使用隐形(SYN、ACK 等)端口扫描是不切实际的,因为所有端口总是报告为 OPEN。

  • 每个打开的 TCP 端口都模拟一个服务

Portspoof 有一个庞大的动态服务签名数据库,可以用来欺骗扫描仪,让他们相信有合法的服务正在运行。扫描软件通常会尝试确定在开放端口上运行的服务版本。Portspoof 将使用基于服务签名正则表达式数据库动态生成的有效服务签名来响应每个服务探测。结果,攻击者将无法确定您的系统真正使用的端口号。

引用自https://github.com/drk1wi/portspoof

Portspoof 使识别侦听服务变得更加困难,并且正如 README 所述,识别哪些端口实际上正在侦听需要 8 多个小时。识别真实端口非常耗时,攻击者可能会放弃。

本指南展示了如何安装 Portspoof:

  1. 编译软件,进入你解压/放置源代码的目录并给出以下命令:

$./configure $ make $ sudo make install

或者

$ g++ -lpthread -Wall -g Configuration.cpp connection.cpp Portspoof.cpp revregex.cpp Utils.cpp Fuzzer.cpp Server.cpp -o portspoof

  1. 配置防火墙规则:

iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 1:65535 -j REDIRECT --to-ports 4444

iptables-restore < iptables-config (system_files 目录)

使用服务仿真运行 Portspoof:

$ portspoof -c portspoof.conf -s portspoof_signatures -D

在“开放端口”模式下运行 Portspoof:

$ 端口欺骗 -D

  1. 将portspoof 添加到系统的启动脚本中。为此,请修改或使用您可以在“system_files”目录中找到的默认 init.d 脚本。

将 Portknocking 与 Portspoof 结合起来,您就可以很好地防御端口扫描器。

虽然您可以玩一些技巧,例如在可疑连接尝试后阻止源,但世界上所有的 nmap 也已经有了对策(慢速扫描、随机扫描等)。

恕我直言,你应该退后一步,问问自己你害怕什么,也就是你的威胁模型是什么?如果攻击者知道哪些端口是开放的,这是否会削弱您的安全性?因为不应该。你不要试图隐藏你的前门,你安装一个合适的锁,对吧?

如果您希望能够连接到您的服务器而不需要在客户端增加额外的痛苦 - 没有办法保护这些端口不被扫描。这是一个矛盾的说法。端口扫描只是尝试连接并查看返回的响应。

如果你愿意在客户端实施额外的措施,你可以使用端口敲门之类的东西。请注意,这仍会使某些端口处于打开状态以进行扫描尝试,它们根本不会是运行任何服务器的端口。

如果速度和延迟不是大问题,另一个解决方案是使用 Tor 隐藏服务。这实际上使得使用端口扫描无法发现服务并且相当容易做到。它还提供更多隐私,例如加密和匿名。访问该服务所需的只是 Tor 以及使用 SOCKS5 通过 Tor(默认端口 9050)进行连接的能力。您可以使用代理链或 torsocks 来代理不支持 SOCKS5 的程序。您还可以为隐藏服务设置密码。

您可以将所有端口作为隐藏服务,然后从互联网上关闭它们。