MovableTypeではMTインストールフォルダに .htaccess でIP制限かけたほうがいいよ

サイト運営していると、まあ不正アクセス者との戦いといいますか。外人との戦いといいますか。
サイトの規模が大きくなればなるほど、加速度的に不正アクセスを試みている痕跡が目に見えて増えてきます。
サーバーのエラーログとかとか見ていると、ありもしないphpMyAdmin フォルダやsetup.phpとかを探していたり、MTだったら、mt-search.cgi に一秒間に数十回とアクセスを試みていたり完全にサーバー落とすつもりな感じ。殆どが中国・ウクライナ・アメリカ・韓国・台湾からが多いかな。
これデフォルトのまま、何も対策せずに運営してたら瞬殺だなと思う。セキュリティ対策は本当に大事。以下のようなログは日常茶飯事。

[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/admin
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/editor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/editor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/editorold
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/fck
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/common
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/editor1
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/FCKeditor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/Fckeditornew
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/Fckeditorold
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/Fckeditor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/include
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/administartor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/fckeditor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/ckeditor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/manage
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/sysadmin
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/system
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/scripts
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/templates
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/editor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/Plugins
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/fckeditor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/includes
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/editor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/html
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/system
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/inc
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/scripts
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/plugins
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/data
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/scripts
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/library
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/outils
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/admin
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/news/fckeditor
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/new
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/modules
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/data
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/lib
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/admin
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/outils
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/plugins
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/lib
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/home
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/library
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/home
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/new
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/modules
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/news
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/js/lib
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/inc
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/inc
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/inc
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/inc
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/support
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/main
[Tue May 26 14:02:46 2015] [error] [client 142.4.115.26] File does not exist: /home/main

なので、外部から攻撃されたら不味いファイルがあるようなMTフォルダやphpMyAdmin とかは、思い切って海外からのアクセスはというか、管理する人が一人だけで環境が固定IPならば、そのIPだけ許可してあとはすべて遮断措置をおこなうのがベスト。
でも、MTの場合でmt-search.cgiを使ってサイト内検索的な使い方をしているなら、Googlebotは許可しておかないとそのページが検索インデックスから消えてしまうことになるので注意。

自分一人で管理していて、環境が固定IPでなおかつ、mt-search.cgiを使っていないし、コメントやトラックバックも受け付けていないっていうならすべて遮断でいいと思う。
以下の.htaccess を作ってMTインストールフォルダーに突っ込むだけ。もちろんphpMyAdmin なんて管理者しかさわらないから、こちらにも突っ込んでおこう。
自身のIPアドレスはアクセス情報【使用中のIPアドレス確認】で確認しよう。

order deny,allow
deny from all
allow from <自分のIPアドレス>

それとは別に mt-search.cgi は使いたい。でも海外からのアクセスは防ぎたいし、Googlebotは弾きたくないという人は以下のようにしよう。
要するに、googlebotはUser-Agentで判定して許可。あとは日本のIP以外はすべて遮断している。

SetEnvIf User-Agent "Google" welcome
order deny,allow
deny from all
allow from env=welcome
#
# [jp] 日本 (Japan)
#  https://ipv4.fetus.jp/jp.apache.txt
#  出力日時: 2015-05-26 14:30:54 JST (2015-05-26 05:30:54 UTC)
#
allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
allow from 1.5.0.0/16
allow from 1.21.0.0/16
allow from 1.33.0.0/16
....(以下略)

ちなみに、日本CIDRは国/地域別IPアドレス割当数一覧から取得できる。.htaccessで一覧ダウンロードもできるので便利だ。

いやいや、そんな広範囲に制限したら、なんか動作に問題がでそうだから、一部のファイルだけを制限したいという人はこういう書き方にすればいい。以下の例は、mt.cgi と mt-cp.cgi を制限した場合。

<Files ~ "^(mt\.cgi|mt-cp\.cgi)$">
order deny,allow
deny from all
allow from <自分のIPアドレス>
</Files>

あ、忘れがちだけど、設定した.htaccess 自体にアクセスできないようにしとかないとダメ。
以下の例はhtaccessに加えて、ベーシック認証のhtpasswdと、ftpアクセスのIP制御であるftpaccessにアクセスできないようにしている。

<Files ~ "^\.(htaccess|htpasswd|ftpaccess)$">
deny from all
</Files>

これを応用して、見られたくないlogファイルやdatなどを追加していくのも良い。

<Files ~ "\.(log|dat)$">
deny from all
</Files>