質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

vsftpdによるftps ( ftp over tls/ssl ) において、データ用ポート(ftp-data)だけ暗号化されない

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,673

score 6

 前提・実現したいこと

経路暗号化されたNAS環境を簡単に構築するために、
Ubuntuにおいて、ftpsの設定をしたvsftpdに対し、
iosアプリのftpmanagerからftps接続で完全なtls通信を
させたい。

 発生している問題・エラーメッセージ

vsftpdのftpsには、tlsとしてimplicit,explicitの2つがあり、
vsftpd.confにおいて

・ implicit_ssl=YES # implicitなtls接続しかサーバは受け付けない
・ #implicit_ssl=YES explicitでも可

の各設定の場合に合うように、ftpmanagerのプロトコル設定も

・ require explicit ftp over tls
・ require implicit ftp over tls

と設定して試したが、ubuntu側でwiresharkによりパケットを見ると、
どちらの場合も、

ftpsの
制御用portの21 or 990はtls
データ用portの20はftp-data

と表示されて、データが暗号化されていません。

tls化しているにもかかわらず、ファイル転送が暗号化されないなら、意味ないです。

あと、匿名ユーザーとunixユーザーでのログインで比較しても結果は同じです。
ソフトの問題というより、ftpのデータ用ポートは非暗号化される仕様なのでしょうか。

vsftpd 3.0.3の/etc/vsftpd.confに対して加えた設定変更の差分は以下です。
(編集履歴を参照。
cipher_suites,pasv拒否、ftp-data port20のblockのみです。
)

diff -u vsftpd.conf.orig vsftpd.conf

@@ -11,7 +11,8 @@
 #
 # Run standalone?  vsftpd can run either from an inetd or as a standalone
 # daemon started from an initscript.
-listen=NO
+#listen=NO
+listen=YES
 #
 # This directive enables listening on IPv6 sockets. By default, listening
 # on the IPv6 "any" address (::) will accept connections from both IPv6
@@ -19,33 +20,36 @@
 # sockets. If you want that (perhaps because you want to listen on specific
 # addresses) then you must run two copies of vsftpd with two configuration
 # files.
-listen_ipv6=YES
+#listen_ipv6=YES
 #
 # Allow anonymous FTP? (Disabled by default).
-anonymous_enable=NO
+anonymous_enable=YES
 #
 # Uncomment this to allow local users to log in.
 local_enable=YES
 #
 # Uncomment this to enable any form of FTP write command.
-#write_enable=YES
+write_enable=YES
 #
 # Default umask for local users is 077. You may wish to change this to 022,
 # if your users expect that (022 is used by most other ftpd's)
-#local_umask=022
+local_umask=022
 #
 # Uncomment this to allow the anonymous FTP user to upload files. This only
 # has an effect if the above global write enable is activated. Also, you will
 # obviously need to create a directory writable by the FTP user.
-#anon_upload_enable=YES
+anon_upload_enable=YES
 #
 # Uncomment this if you want the anonymous FTP user to be able to create
 # new directories.
-#anon_mkdir_write_enable=YES
+anon_mkdir_write_enable=YES
+
+no_anon_password=YES
+
 #
 # Activate directory messages - messages given to remote users when they
 # go into a certain directory.
-dirmessage_enable=YES
+dirmessage_enable=NO
 #
 # If enabled, vsftpd will display directory listings with the time
 # in  your  local  time  zone.  The default is to display GMT. The
@@ -57,7 +61,8 @@
 xferlog_enable=YES
 #
 # Make sure PORT transfer connections originate from port 20 (ftp-data).
-connect_from_port_20=YES
+#connect_from_port_20=YES
+connect_from_port_20=NO
 #
 # If you want, you can arrange for uploaded anonymous files to be owned by
 # a different user. Note! Using "root" for uploaded files is not
@@ -67,11 +72,11 @@
 #
 # You may override where the log file goes if you like. The default is shown
 # below.
-#xferlog_file=/var/log/vsftpd.log
+xferlog_file=/var/log/vsftpd.log
 #
 # If you want, you can have your log file in standard ftpd xferlog format.
 # Note that the default log file location is /var/log/xferlog in this case.
-#xferlog_std_format=YES
+xferlog_std_format=NO
 #
 # You may change the default value for timing out an idle session.
 #idle_session_timeout=600
@@ -96,8 +101,8 @@
 # predicted this attack and has always been safe, reporting the size of the
 # raw file.
 # ASCII mangling is a horrible feature of the protocol.
-#ascii_upload_enable=YES
-#ascii_download_enable=YES
+ascii_upload_enable=YES
+ascii_download_enable=YES
 #
 # You may fully customise the login banner string:
 #ftpd_banner=Welcome to blah FTP service.
@@ -128,7 +133,7 @@
 # default to avoid remote users being able to cause excessive I/O on large
 # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
 # the presence of the "-R" option, so there is a strong case for enabling it.
-#ls_recurse_enable=YES
+ls_recurse_enable=YES
 #
 # Customization
 #
@@ -146,10 +151,36 @@
 #
 # This option specifies the location of the RSA certificate to use for SSL
 # encrypted connections.
-rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
-rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
-ssl_enable=NO
+#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
+#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
+rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
+rsa_private_key_file=/etc/pki/tls/certs/vsftpd.pem
+#ssl_enable=NO
+ssl_enable=YES
+ssl_sslv2=NO
+ssl_sslv3=NO
+ssl_tlsv1=NO
+force_local_data_ssl=YES
+force_local_logins_ssl=YES
+force_dot_files=YES
+allow_anon_ssl=YES
+require_ssl_reuse=YES
+ssl_ciphers=ECDHE:ECDSA:!aNULL:!eNULL:!EXPORT:!DES:!CAMELLIA:!RC4:!MD5:!SHA:!PSK:!aECDH:!EDH:!DH:!DSS:!CBC3:!CBC
+
+implicit_ssl=YES
+listen_port=990
+
+pasv_promiscuous=NO
+#pasv_min_port=30000
+#pasv_max_port=30100
+
+#syslog_enable=YES 
+log_ftp_protocol=YES
+
+

 #
 # Uncomment this to indicate that vsftpd use a utf8 filesystem.
-#utf8_filesystem=YES
+utf8_filesystem=YES

 経路暗号化を実現するNAS用プロトコルの代替案について

NASに利用できるプロトコルは様々にありますが、

・sambaだと、ldapの設定無しに、tls/sslを利用できない。
・webdavはデータの破損が怖い (webdav vs ftpより)
・tls likeな通信がいいので、sftpは除外

という問題があり、ftpを試しました。非暗号接続でいいなら、sambaで十分なのですが。

 補足情報(FW/ツールのバージョンなど)

ubuntu 18.04
vsftpd 3.0.3
iphone ios 11.4
ftpmanager 5.1.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • raccy

    2018/08/18 06:17

    暗号化されていない判断した根拠はWireshark上で実際に生のデータ(ファイルの中身)が見えたということでよろしいでしょうか?

    キャンセル

  • tatsa398

    2018/08/18 14:39

    調査中です

    キャンセル

  • tatsa398

    2018/08/18 17:17 編集

    見当たりませんでした

    キャンセル

回答 1

+1

手元でvsftpdサーバーを立ててWiresharkでパケットキャプチャで確認しました。(CentoOS7とFFFTPを用いたので全く同じ環境ではありません)

検証はサーバーからクライアントへのダウンロードを行う物で、ダウンロードするファイルの中身は

This is a test file.
Can you read me?

という内容のテキストファイルです。

暗号化していない場合は、下記のようなパケットになっていました。中身がパケットにそのまま現れる事が確認できます。(172.25.255.20がサーバー、172.25.255.17がクライアント)

11    0.073771    172.25.255.20    172.25.255.17    FTP-DATA    92    FTP Data: 38 bytes (PASV) (RETR test.txt)
0000   76 15 e0 3e 40 0f 00 15 5d 84 b2 0c 08 00 45 08   v.à>@...].²...E.
0010   00 4e 12 88 40 00 40 06 d1 c0 ac 19 ff 14 ac 19   .N..@.@.ÑÀ¬.ÿ.¬.
0020   ff 11 b6 a9 cb fc dc 46 d1 3a 06 05 9f 21 50 18   ÿ.¶©ËüÜFÑ:...!P.
0030   00 e5 67 b5 00 00 54 68 69 73 20 69 73 20 61 20   .ågµ..This is a 
0040   74 65 73 74 20 66 69 6c 65 2e 0a 43 61 6e 20 79   test file..Can y
0050   6f 75 20 72 65 61 64 20 6d 65 3f 0a               ou read me?.

次にimplicitモードにして試しました。コマンド自体は暗号化されていますが、FTPデータ通信用ポートを使った最初のパケットが次のようになっていました。

11    0.101559    172.25.255.17    172.25.255.20    TLSv1.2    361    Client Hello

これはTLSハンドシェイクの開始を意味しています。TLSハンドシェイクが完了した直後のパケットが下記です。

15    0.102205    172.25.255.20    172.25.255.17    TLSv1.2    121    Application Data
0000   76 15 e0 3e 40 0f 00 15 5d 84 b2 0c 08 00 45 08   v.à>@...].²...E.
0010   00 6b 5a d7 40 00 40 06 89 54 ac 19 ff 14 ac 19   .kZ×@.@..T¬.ÿ.¬.
0020   ff 11 ae 04 cb 0d 0e a0 77 51 10 5b 85 96 50 18   ÿ.®.Ë.. wQ.[..P.
0030   00 ed e8 34 00 00 17 03 03 00 3e 4b 98 8d 71 0e   .íè4......>K..q.
0040   cb c3 c0 60 06 e7 3f 02 86 55 3b e5 0f 78 61 4c   ËÃÀ`.ç?..U;å.xaL
0050   60 cc 50 49 68 c0 68 e0 f4 13 83 57 73 7e fe 1d   `ÌPIhÀhàô..Ws~þ.
0060   8a f6 29 c8 13 90 3e 6e 2b 3a 8f 22 f4 0a b6 6b   .ö)È..>n+:."ô.¶k
0070   50 a5 29 67 e3 44 1d 81 22                        P¥)gãD.."

これ以外にサーバーからクライアントへのデータ通信が現れる事がなく通信は閉じられます。このことからFTPデータ通信のデータ本体と思われますが、暗号化されているため、内容を知ることは出来ません。

以上の事からFTPSはデータ通信でも正常に暗号化しています。

vsftpdの設定ではforce_local_logins_ssl=YESを設定していれば、匿名ではないFTP接続ではない場合、データ通信が暗号化されることを強制します。この設定がなされている限り、データ通信は暗号化されているはずです。それでも暗号化されていなかった場合、vsftpdのバグと考えられます。パケットの中身、TLSハンドシェイクが開始されていないか、生データがパケットに現れていないかを確認してみてください。


なお、Samba、つまりSMB/CIFSに用いられる認証プロトコルは既に暗号化されています(ただし、古いWindowsと互換性のために用意されているNTLMは脆弱であるため使うべきではありません。少なくともNTLMv2にすべきです)。しかし、SMBでデータ通信の暗号化がサポートされたのはSMB3からになります。最新のSambaはSMB3にによる暗号化に対応していますが、クライアントでのSMB3はWindows 8からですので、Windows 7では使用できません。
参考: smb encrypt - smb.conf
ただし、これらはSSL/TLSではありません。

他にもっと手軽にSSL/TLSでファイルサーバーのようなアクセスをする方法として、Nextcloudやowncloudがあります。dropboxのような使い方(デスクトップアプリもあります)になりますが、通信はHTTPS上のみ行われるため、暗号化されることは確実です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/18 18:01

    秘密鍵と証明書もECDHE-ECDSA用に楕円曲線暗号にしているでしょうか?ただ、私は楕円曲線暗号は使ったことがないので、本当に出来るかどうかは試していません。

    キャンセル

  • 2018/08/18 18:05 編集

    ftpsで現在可能なスイートは、先程提示した

    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
    | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
    | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
    | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
    | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (secp256r1) - A

    です。server helloでは、

    Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

    が選択されています。そのため、鍵交換がrsaであるので、普通の方法で可能なはずです。

    PS1:
    https://www.slideshare.net/mnrkbys/pfstls

    ecdhe-rsaなので、おそらくsslkeylogfilesを用いないと不可能なようです。

    PS:2
    暗号スイートの読み方を間違えてました。

    http://enterprise.arcgis.com/ja/portal/latest/administer/windows/restrict-portal-for-arcgis-ssl-protocols-and-cipher-suites.htm
    「暗号スイートの表」

    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    だと、鍵交換がecdheなので、sslkeylogfilesが必須ですね。
    検証してみます。

    キャンセル

  • 2018/08/18 18:09

    復号できなければ、どこかでやり方が間違っていると言うことです。私もSSL/TLSについては通信の概要しかしりませんので、細部に関する分析についてはアドバイスは出来ません。本当に不安であれば、セキュリティの専門家に依頼するか、自分自身がセキュリティの専門家になるしか無いと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る