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 で開けていたのだった… ftp は udp だとばっかり思っていたが、普通に tcp である。iptables で tcp で PASV 用ポートを accept したら、無事ファイル一覧が出るようになった!!
で、ftps な設定はできたのだが、本当の目的の Wordpress の更新は、実は、ftp がいらないことがわかった… Wordpress のインストール先のディレクトリのパーミッションが、apache になっていれば、ボタン一発で更新できるのだった… なんと。この苦労(3時間?)は全く役に立たなかったなぁ。まぁ、色々細かいスキルが上がったのでいいことにしよう。iptables の設定も出来たし。