web-dev-qa-db-ja.com

Iptables: `nf_conntrack_ftp`がDebianで機能しない

私はdebianをインストールしました(私のラズベリーに、しかし質問はかなり一般的です):

Linux raspberrypi 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux

そして、その上に単純な匿名でプレーンテキストの(SSLなしの)FTPサーバー(vsftpd)をセットアップしようとしています。 TCPポートは通常の21FTPポートであり、パッシブモードのみを許可します。

ファイアウォールを厳しく設定したいので、sshと前述のFTPサーバーのみを許可します。

この目的のために、私はconntrackモジュールを使用して、正当なインバウンド接続のみを許可しています。このため、modprobenf_conntrack_ftpモジュールをロードしました。

modprobe nf_conntrack_ftp

私のiptables構成:

# Generated by iptables-save v1.4.21 on Sat Aug 12 15:50:44 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [108:11273]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 15:50:44 2017

この構成では、パッシブデータ接続を適切に機能させることができません。

Tcpdumpを設定し、-A INPUT j LOGの直前に-A INPUT -j DROPルールを追加しました。Iptablespassiveデータ接続の受信パケットがログに記録されて拒否されるのがはっきりとわかります。

しばらく前、私はCentos7マシンでほとんど同じセットアップを行いましたが、正しく動作しました。重要なものが欠けていますか?

助けてくれてありがとう:)

2
Dacav

コメントで@meuhが示唆したように、私は https://home.regit.org/netfilter-en/secure-use-of-helpers/ でホストされているドキュメントを確認しました。

「CTターゲットを使用してセキュリティを強化する」の段落では、次のように説明しています。

ヘルパーの典型的な問題の1つは、ヘルパーが事前定義されたポートでリッスンするという事実です。サービスが標準ポートで実行されない場合は、宣言する必要があります。 2.6.34より前は、これを行う唯一の方法はモジュールオプションを使用することでした。これにより、選択されたヘルパーが追加されたポートを体系的に解析できるようになりました。これは明らかに最適とは言えず、CTターゲットは2.6.34で導入されました。特定のフローに使用するヘルパーを指定できます。たとえば、IPアドレス1.2.3.4のFTPサーバーがポート2121で実行されているとします。

それを宣言するために、私たちは簡単に行うことができます

iptables -A PREROUTING -t raw -p tcp --dport 2121 \\
       -d 1.2.3.4 -j CT --helper ftp

これは私のケースではありませんが(通常のポート21を使用しているため)、インバウンド接続でftpヘルパーを有効にしたい場合でも機能するようです。

iptables -A PREROUTING -t raw -p tcp -m tcp --dport 21 -j CT --helper ftp

私の(動作する)構成は次のとおりです。

# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*raw
:PREROUTING ACCEPT [445:37346]
:OUTPUT ACCEPT [375:44051]
-A PREROUTING -p tcp -m tcp --dport 21 -j CT --helper ftp
COMMIT
# Completed on Sat Aug 12 17:39:53 2017
# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [169:17775]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 17:39:53 2017

ファイアウォールの動作はユーザー入力に依存するため、ドキュメントがこの種の構成に注意することをどのように示唆しているかは、おそらく注目に値します。

このようにオープンインターネット上のFTPサーバーに直面することによるリスクがあるのではないかと思います。とにかく、一般的にFTPはセキュリティの観点から最良のプロトコルではないことが知られています…

3
Dacav