iptablesルールが機能しない

iptablesルールが機能しない

私はlogstashというアプリケーションを使用しており、UDPポート514でデータをリッスンする必要があります。問題は、Logstashがポート514でリッスンすることを許可されていないことです。この問題を解決するために、iptables natテーブルを使用することにしました。

iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to-port 5140

その後、次のコマンドを使用して、udpポート514に向けられたパケットがルールによってキャプチャされたことを確認しました。

iptables -t nat -nxvL

出力は次のとおりです

Chain PREROUTING (policy ACCEPT 608395 packets, 392277304 bytes)
    pkts      bytes target     prot opt in     out     source               destination

       1      594 REDIRECT   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:514 redir ports 5140

       0        0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:514 redir ports 5140

Chain INPUT (policy ACCEPT 1716 packets, 638207 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8906 packets, 538280 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 8906 packets, 538280 bytes)
    pkts      bytes target     prot opt in     out     source               destination

ご存知のように、このルールは複数のパケットがポートに到着しても1つのパケットのみをキャプチャします。

tcpdump -nni any -port 514

上記のコマンドの出力は次のようになります。

12:58:22.222661 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 545
12:58:22.232715 IP 100.100.200.2.10099 > 10.93.33.115.514: SYSLOG local7.notice, length: 519
12:58:22.233787 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 699
12:58:22.237041 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 550
12:58:22.237100 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 564
12:58:22.242670 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.242722 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.246941 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.warning, length: 746
12:58:22.247627 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.247654 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.252840 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 604
12:58:22.254676 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.254704 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 687
12:58:22.258491 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 677
12:58:22.260588 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.info, length: 581
12:58:22.261878 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.261908 IP 100.100.200.2.10099 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.261917 IP 100.100.200.2.23295 > 10.93.33.115.514: SYSLOG local7.notice, length: 540
12:58:22.262554 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.262568 IP 100.100.200.2.8587 > 10.93.33.115.514: SYSLOG local7.notice, length: 542
12:58:22.266295 IP 100.100.200.2.5006 > 10.93.33.115.514: SYSLOG local7.notice, length: 639
^C

824 packets captured
855 packets received by filter
18 packets dropped by kernel

なぜルールが機能しないのですか?ポート514に到着するすべてのUDPパケットはリダイレクトする必要があります。私はこの問題の原因が何であるかを本当に知りません。 iptables-service が実行中で、ファイアウォールが無効になっています。

ベストアンサー1

ServerFaultの答え適用可能:

natテーブルルールは常に接続の最初のパケットにのみ適用されます。同じ接続の後続のパケットはnatルールリストを通過せず、conntrack コードでのみサポートされます。

UDP は本質的に接続がないため、ここで「接続」はアドレス、ポート、およびタイムアウトによってのみ定義されます。したがって、同じ送信元ポートとアドレス、同じ宛先ポートとアドレスを持つ2番目のUDPパケットがタイムアウト内に到着すると、Linuxはそれを確立された「接続」に属すると見なし、そのルールnatテーブルをまったく評価せずに再利用します。前のパケットに。

したがって、ルールがあなたの場合、1つのパケットだけをキャプチャしても、関連するすべてのパケットがリダイレクトされる可能性があります。パケットがアプリケーションに到着しない限り(ただし到着しなければならない)、心配することはありません。

おすすめ記事