2017-09-24 141 views
0

我的問題是一般的理解,而不是解決我有一個問題。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阻塞?

回答

1

當您創建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,但是在您的計算機上的客戶端端口上接收,這是爲您創建連接的原因。 –