如何配置 iptables 以便不将不需要的端口报告为已过滤

use*_*731 9 security linux tcpip iptables tcp

我想阻止其他人在 nmap 标准扫描(非特权)中看到我的端口被过滤。假设我打开了以下端口:22、3306、995 和配置如下的防火墙:

-A INPUT -p tcp -m tcp --dport 22 -j DROP
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
-A INPUT -p tcp -m tcp --dport 995 -j DROP
Run Code Online (Sandbox Code Playgroud)

这是 nmap 扫描的结果:

[+] Nmap scan report for X.X.X.X

    Host is up (0.040s latency).
    Not shown: 90 closed ports

    PORT     STATE    SERVICE
    22/tcp   filtered ssh
    995/tcp  filtered pop3s
    3306/tcp filtered mysql
Run Code Online (Sandbox Code Playgroud)

它将这些端口显示为已过滤,因为我的服务器没有为 SYN 回复 RST。有没有办法修改这种行为?例如:如果 iptables 防火墙阻止了一个端口,则为 SYN 回复 RST,而不是保持沉默(不回复任何内容)?

jor*_*ane 18

不要使用 DROP,如果您知道框已打开,很容易将其识别为“已过滤”。相反,您可以使用以下内容发送 RST。(好像有一个服务在监听,但它不接受来自你的连接)

-A INPUT -p tcp -m tcp --dport 22 -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)

或者简单地使用以下命令使端口看起来关闭。(好像没有服务在监听它)

-A INPUT -p tcp -m tcp --dport 22 -j REJECT
Run Code Online (Sandbox Code Playgroud)


Sve*_*ven 9

-A INPUT -p tcp -m tcp --dport 995 -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)

应该做你想做的事(回复 RST)。