iptables 删除以保持端口静默,无响应

iptables 删除以保持端口静默,无响应

我正在研究网络望远镜(又称暗网、黑洞),这需要使端口不响应外部流量(即当其他服务器 PING 或发送 SYN 请求时,我的服务器应该记录此数据包但不响应 SYN、RST 等消息)。所以我决定配置我的 iptables 和防火墙以丢弃我响应的流量。由于我需要通过端口 22 通过 SSH 登录服务器,因此应该保留端口 22s 的请求和通信。

sudo iptables -A OUTPUT -p tcp ! --sport 22 -j DROP

当我在命令行中输入此代码后,我与服务器的连接就断开了。为什么此代码会导致 SSH 断开连接?我应该怎么做才能恢复与服务器的连接?我应该怎么做才能实现对外部流量的忽略并对 SSH 以外的流量不做出响应?

答案1

TCP 连接使用服务器端的一个端口(在您的情况下为 22),以及客户端的一个端口,该端口不是众所周知的端口,而是临时端口(在 Linux 中,大于 32768)。从服务器的角度来看,该临时端口是 OUTPUT 端口,因此,如果客户端的本地端口不是 22,则您已关闭当前连接并避免将来的连接。

要解决此问题,您应该使用 LocalPort=22 选项通过 SSH 连接登录服务器。假设您可以使用 openssh:

ssh -p 22 -o "LocalPort=22" [username]@[server-address]

当然,当您尝试登录服务器时,客户端的端口 22 将专用于此连接,这意味着客户端无法在端口 22 上运行 SSH 服务器。

进入服务器后,首先要做的是(如果您配置的规则是服务器中唯一的规则)

sudo iptables -F OUTPUT

然后我建议使用虚拟机来测试任何其他配置;)

答案2

从 ssh 服务器返回的 ssh 数据包的目标端口为 22,而不是源端口。此外,如果您无法发送数据包,则无法探测其他主机。

如果这是我的任务,那么我会阻止所有没有 SYN 标志的传入数据包(ssh 除外)。

iptables -I INPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn -j ACCEPT
iptables -P INPUT DROP

相关内容