私の質問は一般的な理解のためであり、私が経験している問題を解決することではありません。
httpリクエストを実行してブロックしましたiptables -A OUTPUT -p tcp --dport 80 -j REJECT
。走ったときにcurl http://b.scorecardresearch.com/beacon.js
持っていたcurl: (7) Failed to connect to b.scorecardresearch.com port 80: Connection refused
その後、OUTPUTルールを削除してINPUTルールを作成しましたiptables -A INPUT -p tcp --dport 80 -j REJECT
。これによりcurl http://b.scorecardresearch.com/beacon.js
問題なく接続できます。
発信要求がブロックされない理由はわかりますが、http要求を実行するときに応答は同じポート80から戻るのではなく、ポート80のINPUT REJECTによってブロックされるべきですか?
答え1
HTTP要求をサーバーに送信するときにhttp
URLに特に指定しない限り、HTTPのデフォルトポート80(という名前、通常はシンボル形式が覚えやすい)を使用します。これが、このルールがリモートHTTPポートへの接続試行を正しくブロックする理由です。
iptables -A OUTPUT -p tcp --dport http -j REJECT
サーバーが応答すると、そのポート(http/80)からコンピュータにデータが送信されます。これはiptables
、ルールから送信元ポートとして80を参照する必要があることを意味します。
iptables -A INPUT -p tcp --sport http -j REJECT
答え2
いいえ、クライアントは別のポートを使用して通信するため、これはポート80からポート80への接続ではありません。
次のコマンドを使用して概要を確認できます。ここでは、ローカルIPアドレスとポート、接続されている外部IPアドレスとポートを表示できます。
netstat -tn