
FTP サーバーに問題があり、1 週間以上修復を試みてきました。
私の設定:
- 私はRaspberry PiでRaspbianを実行しています。
- 私の FTP サーバーは pure-ftpd であり、次のスイッチを使用して実行しています。
/usr/local/sbin/pure-ftpd -D -C 5 -E -A -H -x -p 35000:36000 -u 0 -y 5:3 -Y 1
- オプション「--with-tls」を付けてコンパイルしました
- 使っています明示的なTLS暗号化(暗黙的にも試してみましたが、結果は同じでした)
- pure-ftpdの-pスイッチで定義されたパッシブポート範囲をポート転送しました。
- ポート20を21にポート転送しました
私が実行している他のサーバー:
- サンバサーバー
- Apache ウェブサーバー
- カスタム Python ソケット サーバー
- 内蔵shh/sftpサーバー
no-ip DUCクライアントも実行しています
簡単に言うと、pure-ftpd で私が抱えている問題は次のとおりです。
- TLSなしのLAN内のFTP(アクティブおよびパッシブ): 動作中
- TLS(アクティブおよびパッシブ)を使用したLAN内のFTP:動作中
- TLSなしのWANでのFTP(パッシブ): 動作中
- TLS を使用した WAN 内の FTP (アクティブおよびパッシブ): 動作しない
- WANでは機能しないためポートを変更できません
エラー ログと試したことは次のとおりです。
ftptest.net の結果 (FTP(TLS付き)の場合):
........
コマンド: PASV
返信: 227 パッシブモードに入る (192,168,0,4,138,78)
エラー: サーバーは PASV 応答でルーティングできないプライベート IP アドレスを返しました
フォーラムで、-P スイッチを使用して PASV IP アドレスを指定する必要があると読んだので、そのように実行したところ、次の結果が得られました。
返信: 211-サポートされている拡張機能:
...............................
エラー: 改行のない復帰を受信しました
そしてこれはTLS の有無にかかわらず!つまり、-P スイッチはまったく機能しません。
パッシブモードポートが正しいことも指摘しておくべきでしょう(PASVコマンドから取得)
Filezilla ログ (明示的な tls 付き):
コマンド: PASV
レスポンス: 227 パッシブモードに入る (192,168,0,4,138,251)
ステータス: サーバーはルーティングできないアドレスでパッシブ応答を送信しました。代わりにサーバー アドレスを使用します。
コマンド: MLSD
エラー: データ接続を確立できませんでした: ECONNREFUSED - サーバーによって接続が拒否されました
エラー: サーバーによって接続が閉じられました
エラー: ディレクトリリストの取得に失敗しました
-P スイッチを使用する場合:
「サーバーがルーティング不可能なアドレスを送信しました*」がない点を除いて同じです
また、次のコマンドを使用してすべてを許可し(つまりファイアウォールを無効にして)、ファイアウォール(iptables)を操作してみました。
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
また、デフォルトのポートを変更すると、接続拒否エラーが発生するため、変更できません。
そして今日からまた別の奇妙な症状が出始めました。
ポート 20 を開くと SSH サーバーが取得されるため、ポート 21 を 21 にのみ開くことができます (動作します)。
ログ:
ステータス: 接続済み、ようこそメッセージを待っています... 返信:
SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
エラー: 応答に有効な応答コードが含まれていません
また、ポート 443、989 から 990 (暗黙の TLS 用) へのポート転送も試し、Raspberry Pi を DMZ ホストとして設定してみました。
注: vsftpd は遅く、セキュア FTP をサポートしていなかったため、vsftpd から切り替えました (Raspberry Pi の 3.x はセキュア FTP サポートでコンパイルする必要がありますが、コンパイル時にエラーが発生しました)。また、proftpd は tls サポートでコンパイルできなかったため使用していません。
/var/log/messages は役に立つ情報を提供しません (ユーザーが tls の有無にかかわらず毎回ログインしていることのみを示します)
本当に困っているので、皆さんが助けてくれると嬉しいです!
答え1
ついに解決しました!私がしなければならなかったのは、パッシブ ポートの範囲を 50000 ~ 51000 から 12000 ~ 13000 に変更することだけでした。これですべてがうまく動作します。現在、私は pure-ftpd を次のように使用しています。
/usr/local/sbin/pure-ftpd -D -C 5 -E -A -H -x -S 192.168.0.4,60 -p 12000:13000 -u 0 -y 5:3 -Y 1 -P &