iptablesポートリダイレクトが機能しない

iptablesポートリダイレクトが機能しない

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は特別です。つまり、すべてのアドレスを受信することを意味します。

おすすめ記事