FTPを許可するために、次の規則を試しました。
# The following two rules allow the inbound FTP connection
iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# The next 2 lines allow active ftp connections
iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
# These last two rules allow for passive transfers
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
手動でFTP接続を許可したにもかかわらず、サーバーに接続しようとすると、「手動モードに切り替えています」というメッセージでFTPクライアントがハングします。
すべてのアウトバウンド接続を許可した後:
iptables -P OUTPUT ACCEPT
動作し始めました。
何が問題なの?
答え1
パッシブモードでは、使用するポートの1つだけがわかります。接続が確立された後、サーバーはクライアントに使用する別のポートを知らせ、クライアントは2番目のポートを開く必要があります。私はあなたの1024ルールがサーバーがクライアントに1024を使用するように指示するだけであることを知っている場合にのみ機能すると思います。
より正確に:http://slacksite.com/other/ftp.html
パッシブモード FTP では、クライアントはサーバーへの 2 つの接続を開始し、サーバーからクライアントへの着信データポート接続をフィルタリングするファイアウォールの問題を解決します。 FTP接続を開くと、クライアントは2つの権限のないランダムポートをローカルで開きます(N> 1023とN + 1)。最初のポートはポート21を介してサーバーに接続しますが、PORTコマンドを実行し、サーバーがデータポートに再接続できるようにする代わりに、クライアントはPASVコマンドを発行します。その結果、サーバーは許可されていない任意のポート(P> 1023)を開き、PASVコマンドに応答してPをクライアントに返します。その後、クライアントはデータを転送するためにポートN + 1からサーバーポートPへの接続を開始します。