iptables块输入端口80

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*问。

+0

那么,为什么当我在端口22上为ssh创建一个TCP连接时,传出和传入数据包将在同一端口上传输(22 )而不是随机端口? – yanivps

+0

不,这是相同的,数据包被传输到端口22,但是在您的计算机上的客户端端口上接收,这是为您创建连接的原因。 –