パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。毎日更新を目指す!

vsftpd で ftps 設定ではまった

Wordpressプラグインを更新しようとしたら、ftp 接続を要求されたので、なぜかは分からないが、vsftpd を導入してみた。yum install vsftpd からインストール始めた(参考ページ: Qiita の egnr-in-6matroom さんの記事)。

ところが、全然接続できない。Windows PC から FFFTP で接続してみたのだが、パスワードを送信したところで切れる。WinSCP でもほぼ同様の状況。WinSCP のログにある

SSL3 alert write: fatal: protocol version
wrong version number

辺りが問題の原因かと検索してみたが、苦労して英語の記事も参照しても解決策は見つからず。
openssl s_client -connect localhost:21 -state -debug -tls1 -msg
で見てみると、

>>> TLS 1.0 Alert [length 0002], fatal protocol_version
02 46

辺りが怪しい。が、こちらを検索しても解決策は見つけられず。

なんか、PASV 用のポート(21000~21010 に vsftpd.conf で設定)が上手く接続できない場合もあるとかで、サーバーの iptables をさくらサーバーの推奨を参考に(もちろん ftp のポート 21 と PASV 用 udp も開けて)設定した。が、変化は無し。ちなみに iptalbes で連続複数ポートの指定は、11111:12345 という感じでコロンを挟む。

tcpdump portrange 21000-21010 で、監視しつつ外部のサーバーから nc -u 対象サーバー 21000 すると、ちゃんとパケットはとどいているようだ。nc の表示では、connection refused だが、そういうものか。

vsftpd も openssl も yum で取ってきた最新のものだし、打つ手なしかと…

ふと、vsftpd.conf で chroot の設定をしていたことを思い出して、/etc/vsftpd/chroot_list を新たに作成し、ログインしたいユーザーを追加してみた。するとどうでしょう、パスワード認証までは通るようになった!! が、ファイル一覧の取得でエラーになってしまった。一筋縄ではいかんのう…

vsftpd.conf で、pasv_address=~ に、ホスト名をそのまま書いていたせいか、pasv_addr_resolv=YES を追加しないといけなかったようだ。この行を追加すると、もう少し先に進んだが、まだファイル一覧は取得できず…

ダウンロードのためにホスト xx.xx.xx.xx (21010) に接続しています. (TCP/IPv4)

という表示は出るようになった。が、tcpdump で見ていると、パケットは届いているが、返事はしていない。vsftpd もポートを LISTEN していないっぽい。なぜだろう。

と思ったら、たんなる小生のアホな思い込みだった。PASV 用のポートを udp で開けていたのだった… ftpudp だとばっかり思っていたが、普通に tcp である。iptablestcp で PASV 用ポートを accept したら、無事ファイル一覧が出るようになった!!

で、ftps な設定はできたのだが、本当の目的の Wordpress の更新は、実は、ftp がいらないことがわかった… Wordpress のインストール先のディレクトリのパーミッションが、apache になっていれば、ボタン一発で更新できるのだった… なんと。この苦労(3時間?)は全く役に立たなかったなぁ。まぁ、色々細かいスキルが上がったのでいいことにしよう。iptables の設定も出来たし。