私はDebianをインストールしました(私のラズベリーパイにありますが、質問は非常に一般的です):
Linux raspberrypi 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux
私はここで単純な匿名およびプレーンテキスト(SSLなし)FTPサーバー(vsftpd)を設定しようとしています。 TCPポートは通常のFTPポート21なので、手動モードのみを許可します。
私は厳密なファイアウォール設定をしたいので、sshと前述のFTPサーバーのみを許可します。
この目的のために、私はこのconntrack
モジュールを使用して正当なインバウンド接続のみを許可します。だからモジュールmodprobe
をロードしましたnf_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システムでほぼ同じ設定を行いましたが、正常に動作しました。私は何か重要なものを逃しましたか?
助けてくれてありがとう :)
答え1
@meuhがコメントで提案したようにホストされたドキュメントを見ました。https://home.regit.org/netfilter-en/secure-use-of-helpers/。
「安全性を向上させるためのCTターゲットの使用」の段落では、次のように説明します。
ヘルパーの一般的な問題は、ヘルパーが事前定義されたポートでリッスンすることです。サービスが標準ポートで実行されていない場合は宣言する必要があります。 2.6.34以前は、モジュールオプションを使用することが唯一の方法でした。これにより、選択したヘルパーが追加されたポートのシステムチェックが実行されます。これは明らかに次善策であり、CTターゲットは2.6.34に導入されました。特定のプロセスでどのヘルパーが使用されるかを指定できます。たとえば、ポート 2121 で実行される IP アドレス 1.2.3.4 の FTP サーバーがあるとします。
それを宣言するために、私たちは簡単に行うことができます
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はセキュリティの点で最高のプロトコルではありません。