iptables块输入端口80
问题描述:
我的问题是一般的理解,而不是解决我有一个问题。iptables块输入端口80
我设法运行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
然后我删除输出规则,并建立了一个输入规则iptables -A INPUT -p tcp --dport 80 -j REJECT
。然后我可以访问curl http://b.scorecardresearch.com/beacon.js
而没有任何问题。
我明白为什么传出的请求没有被阻塞,但是当我发出一个http请求时,响应不会在同一个端口(80)上返回并且应该被端口80的INPUT REJECT阻塞?
答
当您创建TCP连接时,客户端端口是随机的并且与目标端口(此处为80)不同。你可以看到,通过运行:netstat -pant
在你的终端:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.41:39878 201.15.39.91:80 ESTABLISHED 2270/firefox
这就是为什么阻断目标端口80并不禁止你到达HTTP服务器的传入数据包。但是,如果你有一个HTTP服务器,它将不能在端口80*问。
那么,为什么当我在端口22上为ssh创建一个TCP连接时,传出和传入数据包将在同一端口上传输(22 )而不是随机端口? – yanivps
不,这是相同的,数据包被传输到端口22,但是在您的计算机上的客户端端口上接收,这是为您创建连接的原因。 –