localhost:8082で実行されるWebサーバーを設定し、ポート80をこのサーバーにリダイレクトしようとしています。
ディクショナリパスリダイレクトnatテーブルを使用してこれを実行しましたが、うまくいかないようです。パケットがルールに到着しても転送されないようです。
私のiptablesは次のとおりです。
ubuntu@ip-172-31-31-104:~$ sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 6 packets, 348 bytes)
pkts bytes target prot opt in out source destination
6 320 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8082
2 84 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 redir ports 8082
0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:38204 redir ports 38204
Chain INPUT (policy ACCEPT 14 packets, 752 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 381 packets, 27905 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 381 packets, 27905 bytes)
pkts bytes target prot opt in out source destination
localhost:8082でカールすると、私のサーバーログは次のようになります。
2019/09/16 11:47:36 "GET http://localhost:8082/ping HTTP/1.1" from 127.0.0.1:40386 - 200 87B in 83.384µs
しかし、postmanを使用して外部eiから要求を試みると、ipテーブルは次のようになります。
ubuntu@ip-172-31-31-104:~$ sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 6 packets, 348 bytes)
pkts bytes target prot opt in out source destination
11 580 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8082
2 84 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 redir ports 8082
0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:38204 redir ports 38204
Chain INPUT (policy ACCEPT 19 packets, 1012 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 395 packets, 28995 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 395 packets, 28995 bytes)
pkts bytes target prot opt in out source destination
pkts 列と bytes 列は変更されるため、パケットがシステムに到達するように見えますが、サーバーログには新しいログは表示されません。
心配する必要がある別のファイアウォールや抽象化のレベルはありますか?
ご協力ありがとうございます!
修正する これはnetstatです。私のサーバーはcentrifugeと呼ばれるので、ポート8082でリッスンします。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 4163/centrifuge
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:52698 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:38204 0.0.0.0:* LISTEN 4163/centrifuge
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::8088 :::* LISTEN 26143/pm2-gui slave
tcp6 0 0 ::1:52698 :::* LISTEN -
ベストアンサー1
@msp9011と@user4556274が説明しようとしたように、サーバーは「127.0.0.1」アドレスではなく「すべてのアドレス」でリッスンする必要があります。そのため、ウェブサーバソフトウェアによっては、いわゆる「受信アドレス」を以下のように変更することができる。
- 127.0.0.1を空白に置き換えます。つまり、構成を削除します。
- 127.0.0.1を0.0.0.0に置き換えると、すべてのIPでリッスンするという意味です。
- デフォルトの127.0.0.1をオーバーライドするには、0.0.0.0設定を追加します。
- この行に沿って、「受信」または「バインディング」アドレスのドキュメントとローカルアドレスのみを受信しないようにする方法を確認してください。
あなたが持っているWebサーバーソフトウェアについてもっと教えてください。
しかし、成功すると、現在のnetstat出力に次の行が表示されます。
tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 4163/centrifuge
構成を正常に更新したら、次のようにする必要があります。
tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN 4163/centrifuge
@user4556274が引用した文書は、ローカルIPアドレス123.456.78.9のインターフェースを使用して新しい接続が入ると、REDIRECT宛先が宛先ポートを8082に変更し、宛先ホストを123.456.78.9(例:127.0.0.1ではない)に変更します。することを意味します。 )。 0.1)。構成は127.0.0.1でのみリッスンするため、他の宛先アドレスを持つパケットは表示されません。アドレス0.0.0.0は特別です。つまり、すべてのアドレスを受信することを意味します。