我的问题是为了一般理解,而不是为了解决我遇到的问题。
我设法运行iptables -A OUTPUT -p tcp --dport 80 -j REJECT
并阻止 http 请求。当我跑的时候curl http://b.scorecardresearch.com/beacon.js
我有curl: (7) Failed to connect to b.scorecardresearch.com port 80: Connection refused
然后我删除了 OUTPUT 规则并创建了 INPUT 规则iptables -A INPUT -p tcp --dport 80 -j REJECT
。然后我就可以curl http://b.scorecardresearch.com/beacon.js
毫无问题地访问了。
我明白为什么传出请求没有被阻止,但是当我发出 http 请求时,响应不是在同一端口 (80) 上返回,并且应该被端口 80 的 INPUT REJECT 阻止吗?
答案1
当您向服务器发送 HTTP 请求时,除非 URL 中另有指定,否则您将使用 HTTP 的默认端口 80(命名为http
,符号形式通常更容易记住)。这就是为什么此规则正确禁止尝试连接远程 HTTP 端口的原因:
iptables -A OUTPUT -p tcp --dport http -j REJECT
当服务器回复时,它会从该端口 (http/80) 向您的计算机发送数据。这意味着该iptables
规则应提及 80 作为源端口:
iptables -A INPUT -p tcp --sport http -j REJECT
答案2
不,在客户端将使用不同的端口进行通信,因此这不是端口 80 到端口 80 的连接。
您可以使用以下命令获得概述。在那里您可以看到您的本地 IP 地址和端口以及相关的外部 IP 地址和端口。
netstat -tn