iptables/netfilter: "nf_nat_ftp" が最新の Linux カーネルで正しく動作しません。

iptables/netfilter:

Ubuntu-16.04.02-LTEに組み込まれたLinuxカーネル4.10-28-genericでは、次の問題に直面しました。マイコンピュータには、次の2つのイーサネットアダプタがあります。

enp0s3: 198.168.56.2(内部ネットワーク)
enp0s8: 172.22.181.41(外部ネットワーク)

enp0s3に接続されている内部ネットワークには、enp0s8を介して接続された外部ネットワークから接続したいFTPサーバーとTelnetサーバーがあります。
FTPモードを有効にする必要があります。

これを行うには、次のiptablesルールを使用します。

modprobe nf_conntrack_ftp  
modprobe nf_nat_ftp  
sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"  

## Masquerade settings
iptables -A POSTROUTING -t nat -o enp0s3 -j MASQUERADE
iptables -A POSTROUTING -t nat -o enp0s8 -j MASQUERADE  

## ftp rules
iptables -t nat -I PREROUTING  -p tcp -m tcp --dport 20         -i enp0s8 -j DNAT --to-destination 192.168.56.2:20 
iptables -t nat -I PREROUTING  -p tcp -m tcp --dport 21         -i enp0s8 -j DNAT --to-destination 192.168.56.2
iptables -t nat -I PREROUTING  -p tcp -m tcp --dport 1024:65535 -i enp0s8 -j DNAT --to-destination 192.168.56.2:1024-65535

## telnet rules
iptables -t nat -I PREROUTING -p tcp -m tcp --dport 23 -i enp0s8 -j DNAT --to-destination 192.168.56.2`

これらのルールは、Linuxカーネル2.6.32-38-genericを使用するUbuntu-10で動作しますが、新しいカーネルとのデータ接続を確立することはできません。クライアントがPORTコマンドを発行すると、サーバーはサーバーのIPアドレスを受け取ります。内部ネットワークの代わりに外部ネットワーク。サーバー側で実行されている「netstat」によると、「nf_nat_ftp」モジュールが正しく機能していないようです。つまり、クライアントIPアドレス(外部アドレス)を入力インタフェースenp0s8(内部アドレス)のIPアドレスに置き換えないことです。コマンドをサーバーに渡す前に。したがって、サーバーが外部IPアドレス(SYN状態)への接続を確立しようとすると中断されます。
FTPはTelnet接続だけでなく、手動モードでも問題なく動作します。

この問題を解決するための提案を提供できますか?これは回帰ですか、それとも新しい要件に従ってiptablesルールを変更する必要がありますか?

よろしくお願いします!

ありがとう、ステファノ

ベストアンサー1

すでに私この質問はsuperuser.comで回答されました。

デフォルトでは、最新のカーネル(> = 4.7)は明示的な規則のために自動ヘルパーモジュールポート割り当てを使用しなくなりました。

以前の動作の簡単な修正を受けてください。

echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

より良い長期修正(より多くの作業が必要ですが、より良い制御を提供します):

詳細については、iptables-extensions(8)のマニュアルページのCTターゲットの説明を参照してください。

また、このブログの例を読んでください。

https://home.regit.org/netfilter-en/secure-use-of-helpers/

重要:多くのFTPルールは意味がありません(2番目のルールのみが必要です)。たとえば、そのようなものはありません--dport 20。一度。アクティブFTPの使用源泉ポート20、決して目的地ポート 20. nf_conntrack_ftp/nf_nat_ftp はすでにこれを処理しています。 NAT 関連の接続をまったく試みないでください。それがアシスタントの使命です。

ファイアウォールを使用している場合は、ファイアウォールルール(filterいいえnat)には一般的なルールが必要です-m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT (長期的な解決策については、これに関するブログもお読みください)。たぶん、すべてのルールを設定していないか、ファイアウォールを使用していない可能性があります。

おすすめ記事