web-dev-qa-db-ja.com

安全なFTPアクセス。ベストプラクティス

開発者がファイルをアップロードするためにアクセスできるいくつかのWebアプリケーション(B2B、B2C eコマース)があります。

FTP部分が安全であることを確認する必要があります。

それについて最善の方法は何ですか?

現在、私は持っています:

  • 変更されたポート番号、および
  • アップロード用の静的IP(ローカルIPのみ)を設定する

FTPアクセスを安全にするのに十分ですか?

21
Smart Bird

@ mahbubut-r-aamanがついでに言及していますが、SSHについて少し詳しく説明したいと思いました。 FTPを保護するために私が言う答えは、FTPを使用しないことです。その理由は、デフォルトでユーザー名とパスワードを平文で送信するためです。これは、非常に安全なアプローチとは見なされていません。

代わりに、SFTP(SSHプロトコルを使用)またはFTP(S)を使用して、暗号化にSSLを備えたFTPプロトコルを使用できます。

さらに、パスワード推測の試みをブロックするのに役立つ fail2ban のようなソリューションを検討することをお勧めします。

リッスンするポートを変更することは、ランダムな攻撃のログのノイズを回避するのに少し役立ちますが、それに頼るべきではありません。

特定のソースIPアドレスへのアクセスをロックダウンすることは、サイトへのアクセスを試行できるユーザーを制限するので、実用的である場合に適しています。

21
Rory McCune

標準FTPの問題

標準のFTPプロトコルは安全ではありません。ネットワーク上の誰でも(いわゆる「中間者」と呼ばれ、接続上のデータの読み取りや変更が可能な人)は、送信内容を確認し、送信されたデータを変更できます。典型的なFTPログインは次のようになります。

* TCP connection is made to the server
220 Welcome to this FTP server!
USER <username>
331 Password required for <username>
PASS <password>
<a positive or negative response>

ご覧のとおり、パスワードはまったく保護されていません。ネットワーク上の誰でもこれを読み取ることができるため、攻撃者は盗んだユーザー名とパスワードで簡単にログインできます。

これを修正する方法はいくつかあります。 FTP以外のものを使用することもできますが、ここではトピックから外れているので、ここでは説明しません。 FTP自体は、FTPSとSFTPの2つの一般的なセキュアバージョンを認識しています。 FTPSの最後にはSがあり、HTTPSと同じです。実際、これはHTTPSとまったく同じように機能し、SSL/TLSプロトコルによるものです。接頭辞Sが付いたSFTPは、SSHを使用して接続し、Linuxサーバーでより一般的です。

この投稿では、FTPSに焦点を当てます。

これまでの取り組みについて

まず第一に、これを積極的に確保しようとしているのは良いことです。多くの人は単に気にしないでしょう!

  • ポート番号の変更

    これは2つの点で役立ちますが、どちらも実際には価値がありません。

    1. 代替ポートを使用すると、それがFTPトラフィックであることは少しわかりにくくなりますが、誰かが積極的にハッキングしようとしてネットワークを監視できるようになったときに気付くことは、非常に簡単です。
    2. セキュリティで保護されていないアカウントがアクティブかどうかを確認するために、ポート21でランダムなサーバーをスキャンしている人を定期的に見ていますが、「1Q3XX」のようなパスワードは既に推測されていません(ほとんどが辞書攻撃です)。したがって、パスワードが「admin」または「123456」よりも優れている場合にポートを変更することは、実際には有利ではありません。
  • アップロードは固定(ローカル)IPから実行できます

    これはもう少し役立ちますが、それもあなたを制限します。あなたが家にいて、あなたのウェブサイトに巨大なセキュリティホールに気づいたら、あなたは車を運転する必要があるでしょう。まともなパスワードを使用すれば、特に、無効なログイン試行が多すぎた後の自動禁止をサポートするサーバーがある場合は、IPを制限する必要はありません。

    VPNを設定して車を運転しなくても済むようにすることはできますが、強力なFTPパスワードを選択するだけの場合はどうでしょうか。

ソフトウェアの提案

あなたはそれについて言及しなかったので、私はあなたがどんなOSでも利用可能なFTPクライアントとサーバーの実装に開放的であると仮定します。

私は多くのFTPサーバーをテストしていませんが、FileZilla Serverは私の目的にはうまく機能し、小規模な組織にはうまくいくと思います。機能は次のとおりです。

  • 複数のユーザーとユーザーグループ
  • 特定のIPからのアクセスをユーザーごとおよびサーバー全体で許可または拒否する
  • FTPS。 HTTPSがセキュアHTTPであるように、FTPSはセキュアFTPです。 SSL/TLSを介して完全に機能し、送信されるデータを保護します。データ(ログインおよびコード)は、真ん中の誰か(公共のwifiネットワークのハッカー、または政府またはISP)。独自の証明書をインストールするだけです。
  • ユーザーごとにFTPSの使用を強制でき、送信されるファイルの暗号化も強制できます(一部のクライアントはログインデータのみを暗号化します)
  • 無効なログインが多すぎると自動的に禁止される可能性があります(一定期間IPを禁止します。これは設定可能です)
  • ロギングがサポートされており、ログの保存期間、ログのサイズなどを設定できます。
  • 速度スロットリング/制限、同時クライアント数の制限、クライアントがリッスンするポートの設定、ウェルカムメッセージの設定など、セキュリティ以外の多くの機能。
  • 構成はXMLであり、管理パネルがあります(管理パネルはリモートで接続でき、パスワードで保護されています)。つまり、必要に応じて、XMLファイルへのユーザーの追加を自動化することもできます。
  • 1つの欠点は、Windows専用であることです。

Linuxサーバーを使用している場合は、同様のオプションを持つFTPサーバーを探すことができます。 サーバーで検索する最も重要な機能はFTPSまたはSFTPであり、暗号化せずに誤って接続できないように強制する可能性があります。さらに、自動禁止とロギングはかなり重要です。

次にクライアントについては、FileZillaは非常に優れたオプションであると再度​​思います。

  • FTPSおよびSFTP、さらには認証用のクライアント証明書もサポートしています。
  • サーバーから送信された証明書を明示的に信頼する必要があり、オプションで証明書を格納して信頼する必要があります。証明書がハッカーによって偽造されている場合は、「この不明な証明書を信頼しますか?」.
  • マルチプラットフォーム(Windows、Mac、Linuxで実行)
  • 同期ディレクトリブラウジング、サイトマネージャー(さまざまなサーバーのストアログイン)、サイズと変更日に基づくローカルおよびリモートディレクトリリスト内のファイルの比較、速度制限、同時転送など、さらに多くのオプション.
15
Luc

次の手順は、FTPアクセスを保護するのに役立ちます

  • 匿名アクセスを無効にする
  • FTPサイトをブラインドプットとしてセットアップする
  • ディスククォータを有効にする
  • ログオン時間制限を使用する
  • IPによるアクセスの制限
  • ログオンイベントの監査
  • 強力なパスワード要件を有効にする
  • アカウントロックアウトとアカウントロックアウトのしきい値を有効にする
  • SSHアクセスを必須にする

EDIT:

EDIT:実装例

EDIT:私は@Rory McCuneのAnswerが好きです。素晴らしい説明。

FTPを使用する代わりに、SFTP(SSHプロトコルを使用)またはFTP(S)を使用して暗号化にSSLを使用するFTP(S)を確認する方がよいでしょう。

fail2ban は、パスワード推測の試みをブロックするのに役立つ素晴らしいソリューションです。

リッスンするポートを変更すると、ランダムな攻撃のログのノイズを回避するのに少し役立ちます。

EDIT:@Rookのコメントを好む

don't use ftp! Your password and your code in in plain text!
2