さくらインターネット レンタルサーバーのHDDからSSD移行 大成功

結局何も変更せずに高速になって大成功と言うお話。

実はサンドボックス用にレンタルサーバー借りてます。Apache serverで Ngix やNode.js 全盛時代についていけませんが。

www1****.sakura.ne.jp 時代から契約しています。段々HDDの容量が増やしてもらったのはありがたかったんですが、最近のサーバーはSSDでいいななんて思っていました。

2022年2月18日(金) に「[さくらのレンタルサーバ]最大5倍高速化された新サーバーがリリースされました!」というアナウンスで移行ツールもありますとの事です。多分HDDの管理の手間がかかってるんだろうなとは思ったものの、どうせサーバーネーム変わってプログラム検証全部しないといけないななんて思っていたんですが。

当然OWN RISKなので躊躇していました。移行ツールはありがたかったけど、だって前データベースアップグレードで全部のプログラム読み直してサーバー名書き換えましたもん。仕方ないけど。

で今回もサーバー名書き換えがあるなと思って、久しぶりに全ディレクトリをしらみつぶしに見て回ってスクリプトを実行。Movable Typeを移行できずにWordpress どっちも使っているので、変更になりそうなところを全部メモして。

いざSSD移行ツールを起動

しようとしたら、バックアップ&ステージング SnapUP を切断する必要があるらしく、切断して tar czf 2024-02-22.tgz * コマンドを発行して、データを Filezilla で落としてこようとしたら何故か落ちなくて、httpsでchrome で頑張って落とした。

いざSSD移行ツールを起動

したら何故か「現在移行ツールの申し込みを停止してます」なんて出るので、何事かと思えば、レンタルサーバーで障害が発生していると。どうやらあのダウンロード失敗も関係しているのかな。必要な条件(データベースが5.7とか)はクリアしているはずなので、待ってみる。

いざSSD移行ツールを起動

やっと移行手続きができる。始まったら止まりません。みたいな案内が出て、いざ開始。始まった時にメールは無し。

20分くらいでメールが届いた。「[rjp*****]移行ツール処理成功 のお知らせ」、では検証を始める。管理しているサイトを順番に見ていくと。

高速になって問題が無かった。

びっくりした。問題が無いなんて。管理画面を見るとサーバー番号が変わっていない。これはありがたかった。その他確か無かったPython3 が追加されている。(無いので自分で入れてたからな)OSもBSD 11 だったと思ったんだけど BSD13になっている。このあたりありがたいね。

ついでに PerlとPHPのバージョンアップもやってしまった。PHPは7シリーズから8まで上げるので緊張したが、問題無し。

検証するなら一気に出来るし。あとセキュリティ警告は、売れてない1サイトのhttps接続と強制https接続のみ。

手軽にバックアップを再設定して終わり。次はNextCloudだ。

ハックされて割られてSPAMメールサーバーにされてからのの復旧

  1. 今回の教訓
    1. 何か書き込んだらバックアップ
    2. 他のユーザーに書き込ませない
    3. cgi-bin 内だけで実行させることも考える
    4. .htaccess で厳格に制限
    5. wordpress等有名どころのデフォルト設定がターゲットにされている
  2. 気付いたのは過負荷のお知らせメール
  3. 割れたきっかけ
  4. 緊急対策
  5. 被害状況
    1. 見るからに怪しいファイルたち
    2. tester.phpの優れた機能
    3. 犯人は手作業?
    4. ディレクトリ編
      1. ty_
      2. Fox-C
        1. .htacess
        2. そしてリンク集が
  6. SEO的被害状況

いきなりの結論


今回の教訓


何か書き込んだらバックアップ

これに尽きる。さくらインターネットさんもバックアップツールがあるのに上手く使えてなかった。


他のユーザーに書き込ませない

レンタルサーバーの他のユーザーからもアクセスできるらしい。実際にchmod 700 でも動作している。


cgi-bin 内だけで実行させることも考える

万一クラックされても書き込める範囲が狭かったり自由なエリアを狭めることで、影響は最小に抑えられる。

.htaccess で厳格に制限

フォルダ毎に実行権限を徹底的に奪っておくと安全。


wordpress等有名どころのデフォルト設定がターゲットにされている

インストールするときは個性を足して、一段深いディレクトリとデータベース名
にすることだな。


気付いたのは過負荷のお知らせメール

サーバーを乗っ取られメールサーバー化された。気が付いたのはさくらインターネットによるお知らせメール

弊社ではサーバの稼働状況について24時間体制で監視を行っておりますが、
この度、お客様にご利用いただいております「さくらのレンタルサーバ スタンダード」
にて負荷が著しい状況にあり、調査の結果、下記のパスに設置されている
ファイルが原因であると思わしきことを確認しましたため、ご連絡差し上げ
ました。
/home/xx1x/www/xxx1xx.xxx/lib/include/config.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/include/j_catmgr.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/include/config.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/include/global.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/include/gui.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/include/j_picmgmt.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/include/jupload.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/include/session.inc.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/lang/chinese_big5.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/lang/arabic.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/lang/brazilian_portuguese.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/lang/chinese_gb.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/lang/croatian.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/lang/czech.php
/home/xx1x/www/xxx1xx.xxx/lib/plugins/jupload/lang/danish.php

何だこの見たことないファイルたちは。
さくらインターネットによって公開ディレクトリは chmod 000 。つまりcd も出来ない状態に変更された。のはありがたかったが、ホームページ内容全部消えたかと思った。
さくらインターネットによるバックアップの周期の直前だったことから、何とか復元できないかと、ネットを漁ると、ファイル変更の日付が新しいものがハックされたファイルとの事。

なるほど ls-R を csv で吐かせて 800k行のファイルを見ていくと、怪しいディレクトリ3つとルートに明らかに変なphp ファイルを発見。

ありがたいことに、wordpress とかを上書きされたわけではないようだ。

ざっと調べるとメール送信のための踏み台にされていた。

さくらインターネットのレンタルサーバーにPython3を対応させる

待っていてもPyhton3に対応してくれないので、自分でインストールする事に。

最初の頃は勝手にビルドしたりインストールしたりして良いのかなんて思っていたんですが、これほどまで皆さんがされて居いるから問題ないないだろうと。

pyenvもせずに、ストレートにインストールするのが主流の様で。

これからPython3で楽にコードが書けそうです。

ありがたや。先人様。あと、サーバーでダウンロードすると100MB/sなんて出るんだ。

Last login: Tue Jun  8 15:19:49 2021 from a024.ap.plala.or.jp
FreeBSD 11.2-RELEASE-p14 (GENERIC) #0: Mon Aug 19 22:38:50 UTC 2019

Welcome to FreeBSD!

%  mkdir -p ~/work/python3
% cd work/
% cd python3/
% wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
--2021-06-08 15:27:04--  https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
Resolving www.python.org... 151.101.108.223, 2a04:4e42:1a::223
Connecting to www.python.org|151.101.108.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25627989 (24M) [application/octet-stream]
Saving to: 'Python-3.9.5.tgz'

Python-3.9.5.tgz    100%[===================>]  24.44M  95.2MB/s    in 0.3s

2021-06-08 15:27:04 (95.2 MB/s) - 'Python-3.9.5.tgz' saved [25627989/25627989]



% tar zxf Python-3.9.5.tgz
% cd Python-3.9.5
% ./configure --prefix=$HOME/local/python/


いろいろchecking 

config.status: creating pyconfig.h
creating Modules/Setup.local
creating Makefile


If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure --enable-optimizations



% make


% make install


Installing collected packages: setuptools, pip
  WARNING: The scripts pip3 and pip3.9 are installed in '/home/XXX/local/python/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-21.1.1 setuptools-56.0.0
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
%

% cd ~/
%

% cp .cshrc cshrc2021-06-08
% vi .cshrc


if ($?prompt) then
        # An interactive shell -- set some stuff up
        set filec
        set history = 100
        set savehist = 100
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey "^W" backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
        endif
endif

if ! $?PATH setenv PATH '';
if "${PATH}" != '' setenv PATH "/home/XXX/perl5/bin:${PATH}";
if "${PATH}" == '' setenv PATH "/home/XXX/perl5/bin";
if ! $?PERL5LIB setenv PERL5LIB '';
if "${PERL5LIB}" != '' setenv PERL5LIB "/home/XXX/perl5/lib/perl5:${PERL5L
IB}";
if "${PERL5LIB}" == '' setenv PERL5LIB "/home/XXX/perl5/lib/perl5";
if ! $?PERL_LOCAL_LIB_ROOT setenv PERL_LOCAL_LIB_ROOT '';
if "${PERL_LOCAL_LIB_ROOT}" != '' setenv PERL_LOCAL_LIB_ROOT "/home/XXX/pe
rl5:${PERL_LOCAL_LIB_ROOT}";
if "${PERL_LOCAL_LIB_ROOT}" == '' setenv PERL_LOCAL_LIB_ROOT "/home/XXX/pe
rl5";
if ! $?PERL_MB_OPT setenv PERL_MB_OPT '';
setenv PERL_MB_OPT "--install_base "\""/home/XXX/perl5"\""";
if ! $?PERL_MM_OPT setenv PERL_MM_OPT '';
setenv PERL_MM_OPT "INSTALL_BASE=/home/XXX/perl5";


#
setenv LANG ja_JP.UTF-8
setenv LC_CTYPE ja_JP.UTF-8


## この行を追加 お手本とちょっと違う。
set path = ($path $HOME/local/python/bin)

:wq



% source ~/.cshrc
% rehash
%

% which python3
/home/XXX/local/python/bin/python3
% which pip3
/home/XXX/local/python/bin/pip3
%


 python3 --version
Python 3.9.5
%
% pip3 --version
pip 21.1.1 from /home/XXX/local/python/lib/python3.9/site-packages/pip (python 3.9)
%
% rm -r ~/work/python3





MovableType6 から MT7 へ

今頃?である。実はブログ始める時にWordPressか MT かで迷った。いろいろ比較し、自分なりに両方インストールしたりして比べて比較した。当時MTにした理由は最終的にHTMLで出力されログが取りやすいことと、WordPress に比べて動作が速かったことだ。当時の iPhone4だったかなでも WordPress の javascript が動作せず、出先で書くこともできないのも困りものだった。

しかし無料と世界中で使われることもあり、アッという間に WordPress が覇者となった。

なぜか今になっても正式な移行ツールは無い。そこでとりあえずMT6 から MT7 へアップして保存しておこうという腹だ。

ついでにDB も MySQL5.1 から 5.7 に上げる

実はそれがきっかけだった。sakura internet から切り替えてくれ。DB移行ツールも用意した。でも無保証。と催促が来た。

いま少し時間があるし取り組んでおこう。ホトトギス。

移行ツールというのは 5.1 サーバから全く別の 5.7 サーバへコピーするツールだ。つまり、移行ツールを使ってもコピーされるだけで、ブログやデータベースアプリケーションの設定を変えない限り古い5.1を使い続ける。

myPhpAdminで久しぶりに見てみると、知らないテーブルがあった。なんだこれ。ああそうだ自作のDBアプリだった。mixi を社員がログインしてるのを監視する・・・。当時のことを思い出し、いろいろプログラムを見て、いらないテーブルを消した。

残りを見ると MT で使っているテーブルと 3 つのブログで使っている WordPressのテーブルだ。手を付けたら最後全部変更してしまわないと。

MT7インストール

自分のやり方だ。sakura internet に ssh で入り、www で wget でzip ファイルをとってくる。展開。

wget https://movabletype.jp/downloads/release/xxxxxxxxxxxxxxx3ac99620fc/MT7-R4706.zip
 tar xzf MT7-R4706.zip

unzip のほうが良かったかも

MT7-R4706 へリンクを張る。

rm mt
ln -s MT7-R4706 mt

MT-6.0.3 の中から mt-config.cgi を MT7-R4706 へコピー

cp MT-6.0.3/mt-config.cgi mt

mt-config.cgi 変更

変更するところはデータベースサーバとデータベース名の2か所。

ユーザー名やパスワードに変更はない。今までデータベース名とユーザー名が一緒だったのである意味見分けがつきやすくなった。

マニュアルによるとmt-staticもコピーすることとあるけど、実はルートにおいてあるので変えたことがない。


そしてmtへブラウザでアクセス。

あなたがお掛けになったperl 5.4 は現在MTには対応していません。perl 5.10 以上にしてから出直してきなさい。

今まであんたに合わせて古いシステム使ってきてるのに、なんだよ。

sakura internet レンタルサーバーの perl バージョンの上げ方

実はsshでログインしたユーザーディレクトリの .perl.version というファイルにバージョンが書いてあってそのバージョンを実行している。

 cat .perl.version
5.8

それを書き換えれば良い。

echo "5.14" > .perl.version
cat .perl.version
           5.14
perl -V
      Summary of my perl5 (revision 5 version 14 subversion 4) configuration:

Python2から Python3 への変更もこんな感じだったらいいのに。

DB も MySQL5.1 から 5.7 に上げる

実はそれがきっかけだった。sakura internet から切り替えてくれ。DB移行ツールも用意した。でも無保証。と催促が来た。大手になるとある程度きっかけやツールは作ってくれるので便利。

いつの間にか100GBまで容量増えてるし、スナップショットもとれるようになっている。

このツールは5000だったかを超えるテーブルがあると対応しないらしい。たまたま大規模なシステムを作る予定だったのでいいタイミングだった。

いま少し時間があるし取り組んでおこう。ホトトギス。

移行ツールというのは 5.1 サーバから全く別の 5.7 サーバへコピーするツールだ。つまり、移行ツールを使ってもコピーされるだけで、ブログやデータベースアプリケーションの設定を変えない限り古い5.1を使い続ける。

myPhpAdminで久しぶりに見てみると、知らないテーブルがあった。なんだこれ。ああそうだ自作のDBアプリだった。mixi を社員がログインしてるのを監視する・・・。当時のことを思い出し、いろいろプログラムを見て、いらないテーブルを消した。

残りを見ると MT で使っているテーブルと 3 つのブログで使っている WordPressのテーブルだ。手を付けたら最後全部変更してしまわないと。

遅いからって引っ越しする前にちょっと待って!さくらのレンタルサーバで快適にWordPressを動かす方法 – さくらのレンタルサーバ コラム –

ここは wordpress.com ですが、実はさくらでも借りています。

今までevernoteでやっていたニュースクリップとPC関係ノウハウをブログでまとめ、Wordpress の検索パワーで何とかしようと思ってこのサイトにしました。自分では検索サイトにも登録してないし、大っぴらにSEO掛けて収益化とか考えていません。儲かったら良いですけどね。

当時さくらインターネットのレンサバでもこっそりマニアックな趣味のブログやっていたんですが、やっぱり遅いんですよ。で、もう一つドメイン取って自分のためのブログインストールするか、 wordpress.com の本店使うかで悩んで WordPress の本店使うことにしました。

決め手は「スピード・スケーラビリティ」。

やっぱり自前のレンタルサーバーは遅かった。ところが最後に記述しますが当たり前のことでスピードが激遅でした。

ある障害を乗り越えたら wordpress.com の無料プランよりはるかに高速で動作するようになりました。

さくらのレンタルサーバはWordPressが遅い、そんな評判聞いたことありませんか?違うんです!設定次第で速くなるんです!ということで、今回はWordPressを高速に表示するためのチェックポイントをご紹介します。

情報源: 遅いからって引っ越しする前にちょっと待って!さくらのレンタルサーバで快適にWordPressを動かす方法 – さくらのレンタルサーバ コラム –

  • PHPのバージョンを新しく
  • モジュール版のPHPを
  • データーベースも新しく
  • 多すぎるプラグインを見直す
  • テーマを見直す
  • キャッシュを使う
  • 画像サイズを適切化
  • Javascriptの見直し
  • PageSpeed Insgithsはサーバには反対ですよ

ざっとこんな感じです。PHPとかデーターベースとかは確かに効果的です。

我がブログで一番遅かった原因

それはアクセスが無さ過ぎた事。

超マニアックなブログな故、アクセスする人が少ないわけです。そうするとサーバーは良くつかわれる人に高速な資源を渡します。

メモリはSSDへ退避。データはSSDからHDDへ、ついにはCPUリソースも0に。

そして突然ドメイン名が叩かれ、HDDからレジュームして来るのです。

まるで普段かかってこない電話に電話が掛かってきたかのようです。

何故気が付いたか

もともとプレイグラウンドとして借りていたので、熱心だったころは色々なスクリプトが走っていたのですが、最近は停めていました。

ところが最近またスクリプトとデーターベースを駆使するようになると、サーバーの反応速度が違うのです。

今となってみれば、どっちが良かったのかなぁと。

シェル上でCGI がパラメータが動作しているかテストする。setenv export CGI

さくらインターネットではBSDだ。web上でトラブルが起こった際そもそも動作しているかどうかを試すもの。

環境変数でパラメータが渡されていることに注目しているが、os.environ[‘REQUEST_METHOD’]==”GET”などでその他の環境変数を使っている場合はそれなりに追記して行かなくてはならない。

GET

 setenv QUERY_STRING "CMD=sleep" ; ./echo.cgi

今回はこの echo.cgi というのがCGIである。

Bourne シェルやlinux では exportを使う場合もあるかもしれない。

 setenv QUERY_STRING="CMD=sleep" ; ./echo.cgi

またPOSTメソッドの場合、標準入出力となる。

さくらインターネットでモリサワフォント

我が家は小さいのですが、道の手前より家を引いて車が10台停められるようにしています。特に看板は上げていなかったのですが、問い合わせのある方に月極駐車場として貸していました。
そして家族は車で出勤し、家は無人になります。

そこで問題発生

客から突然「無断駐車がある」と連絡が来ます。

実は隣が日貸しの駐車場始めました。隣のコインパーキングにお金を払って我が家に駐車されますorz

正に「軒先貸して母屋取られる」の始まりです。大体そんなことがあると管理会社呼び出して説教垂れますが。こういう問題は管理会社に問題ありません。

例によって、君、もしくは君のメンバーが捕えられ、あるいは殺されても、当局は一切関知しないからそのつもりで。なおこのテープは自動的に消滅する。成功を祈る

良く駐車場に「トラブルがあっても当方は関知しない」ような但し書きがありますが、実は法にのっとった管理会社の正しい対応です。

何故なら加害者は停めた車の持ち主で被害者は自分だからです。

ココでムキになって知らない車を公道の真ん中に引きずり出し、何事もなかったように我が家に駐車すると「自力救済の禁止」という法を犯してしまいます。簡単に言うなら「目には目を」で暴力の応酬になるより、落ち着いて建設的な対応をしましょうという事です。

とはいって、追い出された自分の車を公道に停めておけば、これは警察が来てレッカーして罰金とレッカー代を払わされることになります。

悪いのは、入られた自分

土地の乗っ取り屋は所有者不明の土地を探し出し、先ずは居座るとこから始まります。何十年かして事実が出来れば、晴れて正式に土地が取得できます。(国鉄清算事業団がこれで大分やられてました。今資料探しているのですがこの苦労の記録がなかなか無いです。)

看板を作ろう

駐車場に柵もないのが問題なのですが、先ずは看板を作って周知してみることにしました。最終的に外注する予定です。

看板を作り始めたのですが、遠くから見えるフォントと言えば古くは「公団ゴシック(GD-高速道路ゴシックJA)」、最近は「モリサワ 新ゴ」。そのあとに纏められた所謂「UDフォント」です。

いろんなフォントを試してみたい

いろんなフォントを試してみたくて作ろうとしたのですが、殆どが有償フォントです。幸いさくらインターネットのレンタルサーバーをずっと借りていたので、ここのモリサワ30書体は試すことが出来ました。

プログラムは人間の面倒を解放してくれるはず

一つの看板で何種類もフォントを試してみたいことから、div の中に看板を作ってjquery の clone()で複製し、それぞれにforでcssでフォントを設定したらと思ったんですが、反映されない。しかしタダで使わせてもらっているのに文句は言えません。大体どんな感じになるか見たいだけなので。

だがモリサワフォントが反映されない

sakuraのwebフォントは表示されている文字を拾って後からフォントを読んでいるみたいです。仕方がないからコピペ30回して該当箇所をクリックしながら変えました。

Developer ToolsのInspector でみると行頭で [event] の中に DOMContentsLoaded で sakura.js が呼ばれている。という事は jquery でドキュメントいじった後、呼んで無理やり発火させればいいのかもしれなけいど。

希望

Developper tool を使っていてわかったんだけど、どうやら一旦フォントを読み込んでしまえば、後はDOMいじっても追随して来るみたいで、最初の方でdisplay:noneみたいにして使う書体を読んでしまえば良いみたい。もちろんそんなことしたら、レスポンス悪くなるからこういったテストする人向けだけだね。

そういえば、さくらインターネットのwebフォントをつかったフォントお試しサイトみたいなのは見かけませんね。
昔ながらのCGIならうまく行きそうですが。