シェルで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
で確認できます。これを解決すると(私は想像します)、問題を解決するはずです。
いくつかの注意:
更新:次のルール-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
を追加すると、問題が修正されます。宛先ポートではなく送信元ポートに基づいて接続を許可することに関するセキュリティ上の懸念はありますか?
インターフェースeth0とeth1に対してのみRELATED,ESTABLISHED
ルールがあるため、cURLの接続要求に対するWebサーバーの応答は、どのルールでも受け入れられないため、iptablesによってドロップされます。すべてのインターフェースに適用されるようにRELATED,ESTABLISHED
ルールを変更すると、問題が解決するはずです。
非常に特別な理由で必要な場合を除いて、トラフィックを受け入れるルールを使用しないでくださいfrom特定の送信元ポート:すべてのトラフィックを受け入れるルールがあるfromポート80は、誰でも接続できることを意味します彼/彼女が接続を開くことができるならばあなたのサービスのいずれかにfromポート80(どんな攻撃者にとっても取るに足らない)。