web-dev-qa-db-ja.com

Ubuntu 19:10-ftp:setsockopt(無視):権限が拒否されました(アクティブモードでFTPサーバーに接続しています)

現在、Ubuntu 19:10をプライマリオペレーティングシステムとして実行しています。接続をアクティブモードにする必要があるFTPサーバーに接続する必要があります。私はアクティブなftpを有効にすることによって、またコマンドラインを介してFilezillaでこれを試しました。

FTPサーバーに接続できますが、_-d_フラグをftpコマンドに渡してデバッグモードで実行すると、ファイルを一覧表示しようとするとエラーが発生します。

これが私の端末ウィンドウのスクリーンショットです。

terminal window

おそらくpwdを正常に実行でき、cdを使用してディレクトリを変更できます。これは、2つのディレクトリの名前がす​​でにわかっているためです。

私が目にする最初のエラーはこれです:

_ftp: setsockopt: Bad file descriptor_

に続く:

ftp: setsockopt (ignored): Permission denied

_500 Illegal PORT command_

_ftp: bind: Address already in use_

多くのグーグルを行うことから、パッシブモードを有効にする、ファイアウォールをチェックするなど、さまざまな提案を見つけました。ただし、パッシブモードを有効にすると、次の問題が発生します。

terminal window passive

同様に、UFWが実行されていないことを確認しました。

_Sudo ufw status_

iptablesで何もブロックされていないことも確認しました。通常のFTPサーバーにパッシブモードで問題なく接続できます。接続時にアクティブモードを使用する必要があったのはこれが初めてです。

したがって、私が持っている質問は2つの部分に分かれています。

1。これは私のエンド(クライアント)またはFTPサーバーの問題である可能性がありますか?

2。それが私の問題である場合、何を修正することができますか?

どんな助けでも大歓迎です!

2
Matt Kent

今日のファイアウォールの概念が存在する前に作成されたFTPプロトコルは非常に複雑です。クライアントはコマンドのためにサーバーに接続し、データ転送のために(LISTコマンドの出力を含みますが、直接にあるPWDコマンドの出力は含みません)コマンド接続)いわゆるアクティブモードで、接続を開始するサーバー(通常fromポート20からクライアントが選択したランダムなポートへ) 。

これらすべてにより、「ダム」なファイアウォールがPORTコマンドでFTPを機能させることが困難になります。代わりに、PASVコマンドはクライアントにサーバーへの接続を2回開始させます。1つはコマンド用で、もう1つはすべてのデータ転送用です。しかし、問題は逆になりました。これは、IPとポートを含むPASVコマンドの応答を送信するときにサーバーによって選択されたランダムなポートに対処する必要があるサーバーのファイアウォール側です。

あなたにとっての結果は何ですか?

  • あなたはパッシブモードを使用できないと述べました:これは通常、FTPのサーバー側が制限された(ローカルまたはネットワークパス上)ファイアウォールの背後にあり、FTPサーバーが出力に対応する一時的なランダムなリスニングポートを開くことを許可する設定がないことを意味しますPASVコマンドの.

  • アクティブモードの場合:

    あなたが使用しているPORTコマンドのアドレスが100-64.0.0/10ネットワークにあることに気付きました RFC 6598 にある:

    このドキュメントは、キャリアグレードNAT(CGN)デバイスのニーズに対応するために、共有アドレススペースとして使用されるIPv4/10アドレスブロックの割り当てを要求します。

    そして

    o共有アドレススペースネットワークに関するルーティング情報は、サービスプロバイダーの境界を越えて伝播してはなりません。サービスプロバイダーは、共有アドレススペースに関する着信広告をフィルタリングする必要があります。

    o共有アドレススペースの送信元または宛先アドレスを持つパケットは、サービスプロバイダーの境界を越えて転送してはなりません。サービスプロバイダーは、入力リンクでそのようなパケットをフィルタリングする必要があります。

    これが、サーバーが500 Illegal PORT command.を返すと考えられる理由です。クライアントがCGNの背後にあるため、クライアントが外部から到達可能になることは(そのような接続を試みる両側の完全な制御を伴う何らかの困難なしに)不可能です。このFTP PORTコマンドの着信接続を変換および処理するために、どこでも(NATを実行する機器によって)プロビジョニングが行われていない可能性があります。これは、ルーティング不可能なアドレスであるため、サーバーによって拒否されます(ただし、FTPサーバーは同じものしか受け入れないため、より直接的になります。いわゆる FXP転送 を回避するためにコマンド接続で使用されるアドレス、およびFTPサーバーが参照するアドレスとは異なります)。

要するに:

  • 接続するFTPサーバーはパッシブモードを使用できません
  • iSPはアクティブモードの使用を許可できません

他に投資しなければ解決策はありません:

  • fTPサーバーにパッシブモードを受け入れさせる権限を適切な人に持っている場合は、それを試してください。

  • iSPを変更する

    ISPにCarrier-Grade NAT=アドレスを与えないでください。その後、ランダムなホームルーター(おそらくISPから提供されたものを含む)は、アクティブなFTPでPORTコマンドの変換を正しく処理します。

  • vPNを使用する

    これは、それを使用するクライアントを匿名化するための単純な商用VPNであってはなりません。これは、着信トラフィックとFTPプロトコルの正しい処理を許可するために完全に制御できる完全なVPNである必要があります。これは、一部のポートをポート転送することを許可する制限されたものである可能性があり、その場合も同じアドレスとポートに一致するようにクライアント側での構成が必要になります。または、たとえばnf_conntrack_ftp/nf_nat_ftpそして、iptablesまたはnftablesを使用して、PORTコマンドをクライアント(FTPで暗号化が使用されていない限り)。

  • 探しているリソースにFTPを使用しない

    HTTP、HTTPS、SFTPで利用できるようにします(FTPとは関係なく、SSHに沿っています)...

1
A.B