我对 Linux 还很陌生,并且正在使用iptables
。以下是我想要实现的目标:
我有一个 ASP.net 客户端,它与通过 Linux 上的 web-logic 托管的 Web 服务进行通信。通信通过 SSL 进行。
我尝试完成的操作
iptables
仅是阻止将响应返回给客户端。因此客户端发出 Web 服务调用,Web 服务处理请求并回复客户端。
我希望 Web 服务接收请求但阻止其向客户端返回响应。
为了测试目的,我清除了 中的所有规则。我在、和链上iptables
创建了默认策略。接下来,我向链中添加了一条规则,该规则适用于具有客户端源 IP 的任何内容。ACCEPT
INPUT
OUTPUT
FORWARD
OUTPUT
DROP
iptables -A OUTPUT -s client_ip_address -j DROP
显然,这没什么区别。我可以从客户端调用 Web 服务并仍能收到响应。
任何帮助表示感谢?
答案1
这取决于你到底想做什么。如果你想模拟网络超时,请使用以下命令:
iptables -A OUTPUT -d clientip -j DROP
它将悄悄地丢弃从服务器到客户端的所有数据包。
如果您想让 TCP 握手发生然后终止连接(可能有用或者您可以稍后激活上述规则)使用以下命令:
iptables -A OUTPUT -d clientip -p tcp --tcp-flags SYN,ACK SYN,ACK -j ACCEPT
iptables -A OUTPUT -d clientip -j DROP
如果您想模拟关闭的端口(服务未运行)使用:
iptables -A INPUT -s clientip -j REJECT
它将向客户端发送回“ICMP 目标不可达”消息。
希望能帮助到你。
答案2
可能在 OUTPUT 链中较早的位置有一条规则允许所有 ESTABLISHED 和 RELATED 连接 - 这很常见。如果存在这样的规则,它将在您使用 -A 放入的 DROP 规则之前进行匹配。尝试在 OUTPUT 链中尽早放入 DROP 规则:
iptables -I OUTPUT -d clientip -j DROP
将把规则置于链条的最顶端。