Linux
iptables 刪除了到 localhost 的 cURL
我正在嘗試在外殼上使用 cURL 連接到本地主機。我是
curl http://localhost:80
用來連接的。不幸的是,它被 iptables 阻止了。這是 iptables 日誌中的錯誤原因:IPTables-Dropped: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=80 DPT=58617 WINDOW=32768 RES=0x00 ACK SYN URGP=0
這是iptables:
iptables -L -v Chain INPUT (policy DROP 314 packets, 19725 bytes) pkts bytes target prot opt in out source destination 30731 4342K ACCEPT all -- eth0 any anywhere anywhere state RELATED,ESTABLISHED 255 31984 ACCEPT all -- eth1 any anywhere anywhere state RELATED,ESTABLISHED 6 360 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https 207 28142 ACCEPT tcp -- any any localhost.localdomain anywhere tcp dpt:6379 173 9634 ACCEPT tcp -- any any localhost.localdomain anywhere tcp spt:6379 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 31748 packets, 2974K bytes) pkts bytes target prot opt in out source destination
我想我已經將其範圍縮小到 cURL 似乎使用的目標埠不是 80 的事實。每次我發出新的 cURL 請求時,它也會發生變化。您可以在日誌條目中看到這一點:
SPT=80 DPT=58617
. 解決這個(我想)應該解決這個問題。一些注意事項:
- 執行 Debian Wheezy
- 網路伺服器是 nginx
- 從 localhost 到本地 Redis 伺服器的連接工作正常。
**更新:**添加以下規則
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
可解決問題。允許基於源埠而不是目標埠的連接是否存在安全問題?
您
RELATED,ESTABLISHED
只有介面 eth0 和 eth1 的規則,因此 web 伺服器對 cURL 連接請求的回答將被 iptables 丟棄,因為它不被任何規則接受。更改RELATED,ESTABLISHED
規則使其適用於所有介面應該可以解決問題。不要使用接受來自特定源埠的流量的規則,除非您出於非常特定的原因需要它們:擁有接受來自埠 80 的所有流量的規則意味著任何人都可以連接到您的任何服務,如果他/她可以打開連接埠 80(對於任何攻擊者來說都是微不足道的)。