‘WordPress’ カテゴリーのアーカイブ

新手のWordPressを狙うパスワード総当り攻撃(ブルートフォースアタック)に注意

WordPress | by 管理者
7月 26日 2014 年

新手のブルートフォースアタック

1日にせいぜい10件程度だったWordpressのログイン画面を狙った、ユーザIDと力任せにパスワードを変更した組み合わせで何度も不正ログインを試みる攻撃が7月22日の朝から7月24日の朝まで延々と続いた。
下の画面は4回ログインに失敗するとプラグインのLimit Login Attemptsから送信されてくるメールの一覧だが約1500通あるので2日間で約6000回の不正ログインがあったことになる。

ブルートフォースアタック

一番初めのユーザIDはadminで始まり、次はtestに変わり、今度はサブドメイン名のitをユーザIDに変更してログインを試みているが、今回はいくら待っても終わる気配が無い。

既にWordpressを狙うパスワード総当り攻撃(ブルートフォースアタック)の対策として、数回パスワードを間違えるとログインできないようにIPアドレスを指定してロックを掛けているのだが、今回はいつもと様子が違う。

今までいくら長くても数時間で終わるのだが、どうしたのだろうか?

ユーザIDもパスワードも長くて複雑なものにしているので、何回不正ログインを試みても成功することはありえない。
しかし少なからずサーバのリソースを使っており、VPSサーバも共有サーバなので、こんな無駄なことにまともな対応をしたくない。
よって有無を言わせずアクセス拒否すべく、どこの国からアクセスしに来ているのか確認すると、アメリカが多いものの国際色豊かで一部の国を規制すれば良いというものではない。
そこで国内のIPアドレスのみログイン画面(wp-login.php)にアクセスできるように以下のコードを.htaccessに記述して制限することにした。

Options +FollowSymLinks
RewriteEngine On

<Files wp-login.php>
order deny,allow
deny from all

allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
allow from  ・
allow from  ・
allow from  ・
</Files>

ところが、一向に不正アクセスは収まらない。おかしい。

そこで、アクセスログを確認すると、wp-login.phpと同じ階層にあるxmlrpc.phpにアクセスしていることが分かった。

xmlrpc.phpって何だろうと思って、ブラウザからアクセスすると「XML-RPC server accepts POST requests only.」のメッセージが表示される。

ようするにxmlrpc.phpにユーザIDとパスワードを引数に持たせるとログイン画面(wp-login.php)を経由しなくてもログインできるみたいだ。

この方法なら、wp-login.phpの名称を変えようが、場所を変えようが関係ない。
本当にスパマーって良く考えるな~とあきれるばかり。

対策方法

そこで、wp-login.phpだけじゃなく、xmlrpc.phpも国外からアクセスできないように.htaccessを作成した。
この.htaccessをwp-login.phpとxmlrpc.phpのある場所(同じ場所)に配置するだけ。

試しに海外からアクセスするとhttpレスポンスコードが403(アクセス禁止)になるので、おそらく大丈夫だろう。
もちろん自分のパソコンからログイン画面にアクセスできることも確認済み。

ステータスチェッカー

WordPressのパーマリンク設定がデフォルト(動的URL)の場合の重複コンテンツ対策

WordPress | by 管理者
3月 28日 2014 年

WordPressのパーマリンク設定がデフォルト(URLがhttp://サイト名/?p=123の形式)で運用しているサイトの重複コンテンツ対策は簡単ではありません。何故なら存在しないURLでもHTMLレスポンスコードの200を返して、あたかもページが存在するように振舞う場合があり、プラグインでは対策不可。結局ソースを弄って対策しましたが、その方法について紹介します。

あなたのWordpressサイトは重複コンテンツ対策できていますか?

以下のテストで重複対策できているのか、ご確認ください。

1. http://www.exapmle.com/?p=123  ・・・個別記事のURLです。※ ドメイン名や記事IDは適宜ご自分のサイト名のものに修正してください。

1-1. http://www.exapmle.com/?p123  ・・・イコールを抜きます。

2. http://www.exapmle.com/?m=2014  ・・・2014年の記事を新しい記事の順に表示します。

2-1. http://www.exapmle.com/?m2014  ・・・イコールを抜きます。

3. http://www.exapmle.com/?m=2014&paged=2  ・・・2014年の記事を新しい記事の順に表示したときの2ページ目を表示します。

3-1. http://www.exapmle.com/?m2014&paged=2  ・・・イコールを抜きます。

4. http://www.exapmle.com/?cat=5  ・・・カテゴリの記事を新しい記事の順に表示します。 ※ カテゴリのIDはご自分のサイトでカテゴリをクリックすると分かります。

4-1. http://www.exapmle.com/?cat5  ・・・イコールを抜きます。

5. http://www.exapmle.com/?cat=5&paged=2  ・・・カテゴリの記事を新しい記事の順に表示したときの2ページ目を表示します。

5-1. http://www.exapmle.com/?cat5&paged=2  ・・・イコールを抜きます。

これらの上記テストで下線を引いたURLは存在しないURLなので、「ページが存在しない」と表示されればOK。

もし、何事も無くページが表示されるなら、マウスで右クリックしてソースを表示し、「canonical」をいう文字を検索します。

canonicalを探す

そして「canonical」が示すURLが正しければOK。しかし、「canonical」をいう文字が無かったり、URLが間違っていた場合は重複エラーになっています。そして、ほとんどのパーマリンクをデフォルトで運用しているWordpressのサイトでは2-1、3-1、4-1、5-1のテストでNGになります。

そもそも重複コンテンツはなぜダメなの?

重複コンテンツがあるとサイトの品質が低いと評価されてGoogleの掲載順位が下がります。これはパンダアップデートが導入されたときから言われていたことですが、実際にウェブマスターツールの「HTMLの改善」に重複したURLが表示され、管理者に重複コンテンツの修正を促しています。

下の画面は4ヶ月前に重複コンテンツの対策をしたときのウェブマスターツールの「HTMLの改善」画面ですが、存在しないデタラメな文字列のURLなのに404(ページが存在しない)を返さないで200(ページが存在する)を返しているため、重複コンテンツとして認識されています。

重複パターン

簡単に解決できるか!?

重複コンテンツを解決する定番の方法は、対策用のプラグインを入れることですが、パーマリンクをデフォルトで運用しているWordpressではこの方法が使えません。私は定番のプラグインである「WordPress SEO by Yoast」と「All in One SEO Pack」を確認しただけですが、前者は上記テストの2でNG(m=2012を指定してもcanonicalは最新の年である2014を引っ張って来てしまう)、後者は動的URLに対応していないため、URLの&が/になってしまいました。

※ 他にも重複対策用のプラグインがありますが、上記以外のプラグインは調べていません。もしかしたら、それで解決できる可能性はあります。

重複コンテンツ対策

基本的な対策は以下の2つ。

存在しないページにはHTTPステータスコード404を返し、それが不可能な場合には重複したページにcanonicalを挿入します。

① 存在しないページとしてHTTPステータスコード404を返す。

functon.phpに以下を追加します。

function check_invalid_query_vars( $wp ) {
	global $wp_query;
	if ( ! is_admin() && $wp_query->is_main_query() ) {
		foreach ( $wp->query_vars as $key => $val ) {
			$wp_query_var = (string)$wp_query->get( $key );
			if ( $wp_query_var != $val ) {
				$wp_query->set_404();
				status_header( 404 );
				break;
			}
		}
	}
}
add_action( 'wp', 'check_invalid_query_vars' );

一番最後の?>の上にでも挿入すればOKです。

② canonicalを挿入する。

WordPressの個別記事は自動的にcanonicalが挿入されますが、それ以外は挿入されません。
そのため、日付やカテゴリ、そしてこれらが複数ページになった場合にcanonicalを挿入するようにします。
functon.phpに以下を追加します。

remove_action('wp_head', 'rel_canonical');

一番最後の?>の上にでも挿入すればOKです。

header.phpの<head>~</head>に以下を追加します。

<?php if ( is_home() ) {
    $canonical_url=get_bloginfo('url')."/";
    if ( $paged >= 2 || $page >= 2)
    {
    $canonical_url=$canonical_url.'?paged='.max( $paged, $page ); 
    }
?>
<link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php
}
else if (is_category())
{
    $canonical_url=get_category_link(get_query_var('cat'));
    if ( $paged >= 2 || $page >= 2)
    {
    $canonical_url=$canonical_url.'&#038;paged='.max( $paged, $page ); 
    }
?>
<link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php
}
else if (is_year())
{
    $canonical_url=get_year_link(get_the_time('Y'));
    if ( $paged >= 2 || $page >= 2)
    {
    $canonical_url=$canonical_url.'&#038;paged='.max( $paged, $page ); 
    }
?>
<link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php
}else if (is_month())
{
    $canonical_url=get_month_link(get_the_time('Y'),get_the_time('m'));
    if ( $paged >= 2 || $page >= 2)
    {
    $canonical_url=$canonical_url.'&#038;paged='.max( $paged, $page ); 
    }
?>
<link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php
}
else if (is_day())
{
    $canonical_url=get_day_link(get_the_time('Y'),get_the_time('m'),get_the_time('d'));
    if ( $paged >= 2 || $page >= 2)
    {
    $canonical_url=$canonical_url.'&#038;paged='.max( $paged, $page ); 
    }
?>
<link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php
}
else if (is_page()||is_single())
{
    $canonical_url=get_permalink();
    if ( $paged >= 2 || $page >= 2)
    {
    $canonical_url=$canonical_url.'&#038;paged='.max( $paged, $page ); 
    }
?>
<link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php
}
?>

私はTitleの下に挿入していますが、お好きな場所に入れてください。

但し、お約束ですが自己責任でお願いします。

ウェブマスターツールの構造化データ(hentry)のエラー対策

WordPress | by 管理者
12月 18日 2013 年

僅か3日くらい前から出始めたウェブマスターツールの構造化データのエラー。

いきなり718件もエラーになっているので、「何事か?」って驚きますよね。

WMTで構造化データのエラーが発生

エラーの内容を見ると、「・entry-titleがありません。・updatedがありません。・author がありません。」とあるように定義しないといけない項目が未定義なので出ているということが分かります。

発生したエラーの内容

だけど、718件も修正するの?

今ブログを付け始めたばかりならともかく、今更こんなものやってられるか!

じゃ、ないでしょうか!?

対策方法は?

「・entry-titleがありません。・updatedがありません。・author がありません。」とエラーを出しているのは、データタイプの「hentry」なので、これが何者なのか調査したところ、Wordpressのテーマにpost_class()が使われると、hentryクラスがくっ付いてくることが分かりました。

それなら、post_class()からhentryクラスを抜けば良のではないか?という考え方です。

さらに調べると、WordpressでAutopagerizeを動作させないためにpost_class()からhentryクラスを抜く方法を公開しているサイトが沢山あったので、それを参考にしたところ、以下のfunction remove_hentry( $classes ) {xxxxx}までをfunction.phpに追加、add_fillter(xxxxx)をsingle.phpに追加すれば良いと記載されていました。

function remove_hentry( $classes ) {
    $classes = array_diff($classes, array('hentry'));
    return $classes;
}

add_filter('post_class', 'remove_hentry');

しかし、今回は使用目的が違うので、秀丸エディタのgrepを使ってpost_class()を使っているphpのソースを調べるとarchive.php、index.php、search.php、single.phpの4つあり、single.phpだけでは対策が不十分のはず。

それなら、上記の青文字部分を全て、function.phpに追加すれば良いのではないか?

具体的には、Wordpressの外観 → テーマ編集 → テーマのための関数(function.php)をクリックして、最後の方に上記の青文字部分を全て追加しました。

具体的な修正箇所

ウェブマスターツールの構造化データにある「ライブデータのテスト」機能で見ると、エラーが消えているので、おそらく大丈夫かな!

暫く待てば、ソースを弄らなくても簡単に対策出来るプラグインが公開されるかもしれません。

WordPressで使っている古いテーマに問題があった場合、それを修正するスキルがあれば良いですが、無ければテーマを変更するしかありません。

今回は何とかなったけど、WEBの世界はどんどんと難しくなって、シロートでは触れなくなってきていると実感します。

※ いかなる障害が発生しての責任は取れないので、自己責任で修正して下さい。

結果の報告

この通りエラーは無くなりました。

2014年1月10日に0件になったので、約1ヶ月かかりました。

エラー件数の推移

現在、ブルートフォースアタックを受けています。不正アクセスしたIPは2400時間のロックアウトにエスカレーション。

WordPress | by 管理者
7月 11日 2013 年

私のサイトは不正ログインを行って、規定回数のログインに失敗するとメールが送られてくるようになっています。

このメールで現在ブルートフォースアタックを受けていることが判明したので、Wordpressのプラグイン「Limit Login Attempts Settings」の設定値を厳しくて、2400時間(100日間)のロックアウトにしてやりました。

 

ブルートフォースアタック

 

沢山のIPアドレスを使って少し時間をおいてアクセスしてくるので、同時攻撃を仕掛けている多くのサイトの中の1つに私のサイトがあるのだろうけど、このIPで次回の攻撃ができるのは100日先です。

 

WordPressで危険なユーザーIDはadminとドメイン名とadministratorです。

もし、この3つを使っていたら、今すぐ違うユーザIDに変更しましょう。

 

 

現在の「Limit Login Attempts Settings」の設定はこれです。

2回ロックアウトしたら、次は100日間のロックアウトにエスカレーションします。

limit login attempts設定

 

 

WordPressで絶対使ってはいけないユーザー名の1位:admin、2位:ドメイン名、3位:administrator

WordPress | by 管理者
7月 06日 2013 年

159個のIPアドレスからログインパスワードの総当たり攻撃(ブルートフォースアタック)を受けたときのアクセスログです。

パスワードの総当たり攻撃のアクセスログ

 

私のサイトはこの攻撃を想定して、数回のログインを失敗すると短時間ログイン画面をロックアウトし、さらにそれを何度か繰り返すと長時間に及ぶロックアウトにエスカレーションします。

そしてそのトラップの引っかかったサイトのIPアドレスを掲載します。

 

これをみると、約8割がユーザー名:admin、残りの2割がドメイン名(例えばあなたのサイトがhoge.example.comの場合、hoge.exampleとかexample)で無差別攻撃しているのが分かります。

さらにIPアドレスを調査すると、国際色豊かですが、意外なことに日本のIPアドレス(赤字)も有りました。

これをみると、Wordpressのユーザー名に「admin」を使うのは論外ですが、同様にドメイン名も危険なので止めた方が良いでしょう。

 

以下のログはWordpressのプラグイン、Limit Login Attemptsでパスワードを規定回数間違えて記録されたログです。

まだ、Limit Login Attemptsを導入していなければ、ブルートフォースアタックを防ぐために入れた方が良いと思います。

178.151.216.53 admin (1 lockout)
116.70.155.177 admin (1 lockout), {domain} (1 lockout)
114.187.68.220 admin (7 lockouts), {domain} (2 lockouts)
125.196.157.28 admin (1 lockout)
126.43.103.137 admin (2 lockouts)
120.60.140.166 admin (1 lockout)
58.11.135.111 admin (1 lockout)
110.168.119.246 admin (1 lockout)
171.96.25.91 admin (1 lockout)
125.15.40.43 admin (1 lockout)
58.9.59.191 admin (1 lockout)
122.102.233.91 admin (1 lockout)
31.192.16.226 admin (3 lockouts)
190.183.224.253 admin (2 lockouts)
49.48.246.151 admin (2 lockouts)
112.208.98.182 admin (2 lockouts)
42.116.189.151 admin (1 lockout)
58.9.174.71 admin (1 lockout)
182.168.236.115 admin (1 lockout)
49.129.72.199 admin (1 lockout)
122.220.255.199 admin (1 lockout)
189.225.129.63 admin (1 lockout)
190.42.128.134 admin (1 lockout)
202.79.157.70 admin (2 lockouts)
78.166.146.253 admin (1 lockout)
177.0.55.22 admin (1 lockout)
187.107.13.37 admin (1 lockout)
85.103.199.39 admin (1 lockout)
95.69.185.246 admin (3 lockouts)
91.103.29.238 admin (5 lockouts)
27.142.44.232 admin (4 lockouts), {domain} (1 lockout)
210.147.180.171 admin (1 lockout)
126.6.176.208 admin (1 lockout), {domain} (1 lockout)
111.93.180.66 admin (1 lockout)
124.122.96.69 admin (2 lockouts)
78.166.170.156 admin (1 lockout)
114.156.16.181 admin (1 lockout)
46.160.94.252 {domain} (1 lockout)
2.135.48.69 it.trend-ai (1 lockout), admin (1 lockout)
39.41.76.16 {domain} (1 lockout)
58.8.194.243 it.trend-ai (1 lockout), admin (2 lockouts)
202.55.191.35 it.trend-ai (1 lockout)
27.3.140.193 {domain} (1 lockout)
77.47.132.25 admin (1 lockout)
197.7.28.197 admin (1 lockout)
126.12.145.146 admin (1 lockout)
122.154.28.178 admin (1 lockout)
110.78.147.154 admin (1 lockout)
41.99.77.19 admin (1 lockout)
197.78.141.111 admin (1 lockout)
200.79.132.153 admin (1 lockout)
212.252.194.54 admin (1 lockout)
124.6.181.167 admin (1 lockout)
110.77.231.113 admin (1 lockout)
37.236.140.47 admin (1 lockout)
202.14.87.157 admin (1 lockout)
202.21.105.13 admin (1 lockout)
190.218.168.175 admin (1 lockout)
202.28.78.139 admin (1 lockout)
193.31.206.154 admin (1 lockout)
84.229.49.47 admin (1 lockout)
124.121.226.106 it.trend-ai (1 lockout), admin (1 lockout)
178.131.57.28 admin (1 lockout)
58.9.218.213 admin (1 lockout)
2.147.129.219 admin (1 lockout)
82.200.205.101 it.trend-ai (1 lockout), admin (1 lockout)
190.214.25.244 it.trend-ai (1 lockout)
175.139.134.113 it.trend-ai (1 lockout)
151.244.7.65 it.trend-ai (1 lockout)
110.170.4.50 it.trend-ai (1 lockout)
193.31.200.155 it.trend-ai (1 lockout)
180.146.118.2 admin (2 lockouts)
112.208.39.17 admin (1 lockout)
197.251.167.139 admin (1 lockout)
133.37.209.103 admin (3 lockouts)
202.29.239.117 admin (1 lockout)
39.48.121.252 admin (1 lockout)
201.141.36.212 admin (1 lockout)
42.116.174.28 admin (1 lockout)
182.182.106.52 admin (1 lockout)
93.173.245.96 admin (1 lockout)
113.166.46.177 admin (1 lockout)
78.188.62.25 admin (1 lockout)
105.168.7.201 admin (1 lockout)
79.182.102.147 admin (1 lockout)
85.154.86.73 admin (1 lockout)
182.93.213.121 admin (1 lockout)
113.53.61.228 admin (1 lockout)
121.97.121.89 admin (1 lockout)
58.11.135.83 admin (1 lockout)
126.119.162.190 admin (1 lockout)
122.3.199.152 admin (1 lockout)
187.199.174.137 admin (1 lockout)
1.179.148.9 admin (1 lockout)
139.190.208.154 admin (1 lockout)
180.183.161.96 admin (2 lockouts), it.trend-ai (1 lockout)
171.4.113.187 {domain} (1 lockout), admin (1 lockout)
182.178.233.55 admin (1 lockout)
37.150.236.182 admin (1 lockout)
210.174.2.150 admin (1 lockout)
41.86.151.158 admin (1 lockout)
147.30.184.225 admin (1 lockout)
41.221.105.92 admin (1 lockout)
217.15.126.2 admin (1 lockout)
2.132.70.206 admin (1 lockout)
188.159.18.51 admin (1 lockout)
171.5.199.181 admin (1 lockout)
2.133.66.132 admin (1 lockout)
41.57.82.12 it.trend-ai (1 lockout)
41.215.149.137 admin (1 lockout)
88.204.239.58 admin (1 lockout)
37.236.114.64 it.trend-ai (1 lockout)
203.215.65.198 it.trend-ai (1 lockout), admin (1 lockout)
186.46.154.109 admin (1 lockout)
201.51.155.33 {domain} (1 lockout)
115.31.19.88 admin (1 lockout)
109.67.15.67 admin (1 lockout)
42.119.224.187 admin (1 lockout)
203.100.215.44 admin (1 lockout)
190.37.107.115 admin (1 lockout)
181.64.138.157 admin (1 lockout)
106.147.69.99 admin (1 lockout)
186.101.201.105 admin (2 lockouts)
124.6.181.182 admin (1 lockout)
186.44.180.180 admin (1 lockout)
189.18.241.180 admin (1 lockout)
218.103.91.245 admin (2 lockouts)
190.238.26.213 admin (1 lockout)
190.131.176.27 admin (1 lockout)
190.37.239.121 admin (1 lockout)
78.168.17.102 admin (1 lockout)
189.135.186.170 admin (1 lockout)
201.240.219.49 admin (1 lockout)
217.165.128.124 admin (1 lockout)
189.231.8.163 admin (1 lockout)
223.204.9.207 admin (1 lockout)
187.153.194.77 admin (1 lockout)
41.188.104.129 admin (1 lockout)
186.101.151.201 it.trend-ai (1 lockout), admin (1 lockout)
122.196.199.165 {domain} (1 lockout), admin (1 lockout)
113.53.253.115 it.trend-ai (1 lockout), admin (1 lockout)
114.159.240.111 {domain} (1 lockout)
201.141.48.84 admin (1 lockout)
189.114.54.226 admin (1 lockout)
91.140.186.226 admin (1 lockout)
190.214.201.83 admin (1 lockout)
153.131.87.165 admin (1 lockout)
185.21.120.43 it.trend-ai (1 lockout)
186.3.15.10 admin (1 lockout)
27.142.134.114 admin (1 lockout)
177.107.32.78 admin (1 lockout)
115.37.232.206 admin (1 lockout)
200.110.77.39 admin (1 lockout)
151.244.1.252 admin (1 lockout)
189.231.20.217 admin (1 lockout)
41.98.113.241 admin (1 lockout)
189.54.41.127 admin (1 lockout)
217.76.69.123 admin (1 lockout)
112.209.132.72 admin (1 lockout)

 

別のサイト

178.151.216.53 admin (1 lockout)
94.72.87.134 lifestyle.trend-ai (1 lockout)
190.73.195.229 lifestyle.trend-ai (1 lockout)
217.118.79.22 lifestyle.trend-ai (1 lockout)
112.198.79.27 lifestyle.trend-ai (1 lockout)
201.157.4.22 lifestyle.trend-ai (1 lockout)
173.12.49.27 lifestyle.trend-ai (1 lockout)
94.74.143.198 lifestyle.trend-ai (1 lockout)
176.222.189.90 lifestyle.trend-ai (1 lockout)
203.114.107.6 administrator (1 lockout)
190.254.91.42 lifestyle.trend-ai (1 lockout)
118.174.147.197 administrator (1 lockout)
212.76.25.38 lifestyle.trend-ai (1 lockout)
27.3.64.159 lifestyle.trend-ai (1 lockout)
89.123.27.131 admin (1 lockout)
37.191.68.72 lifestyle.trend-ai (1 lockout)
41.107.239.166 lifestyle.trend-ai (1 lockout)
190.155.1.187 administrator (1 lockout)
187.207.3.217 lifestyle.trend-ai (1 lockout)
118.175.153.228 administrator (1 lockout)
188.159.143.57 lifestyle.trend-ai (3 lockouts)
58.26.127.143 administrator (1 lockout)
190.118.69.100 lifestyle.trend-ai (1 lockout)
2.187.114.216 lifestyle.trend-ai (1 lockout)
190.234.181.223 administrator (1 lockout)
212.112.119.35 lifestyle.trend-ai (1 lockout)
190.72.14.218 lifestyle.trend-ai (1 lockout)
95.58.125.58 administrator (1 lockout)
111.223.97.130 administrator (2 lockouts)
190.5.60.139 administrator (1 lockout)
2.187.50.129 lifestyle.trend-ai (1 lockout)
202.58.85.15 lifestyle.trend-ai (1 lockout)
202.126.89.177 administrator (1 lockout)
120.61.13.178 lifestyle.trend-ai (1 lockout)
92.46.227.41 administrator (1 lockout)
173.76.247.81 administrator (1 lockout)
186.5.31.36 lifestyle.trend-ai (3 lockouts)
2.179.101.9 lifestyle.trend-ai (1 lockout)
101.51.230.240 lifestyle.trend-ai (1 lockout)
2.187.99.67 administrator (1 lockout)
139.190.26.226 lifestyle.trend-ai (1 lockout)
2.51.4.78 lifestyle.trend-ai (1 lockout)
207.61.86.5 lifestyle.trend-ai (1 lockout)
114.79.1.218 lifestyle.trend-ai (1 lockout)

 

現在、ウェブサイトをサブドメインに分けて再構築中です。

WordPress | by 管理者
5月 26日 2013 年

しばらく前にお話ししたとおり、現在サイトを再構築しています。

メインテーマの珈琲焙煎機だけでなく、パソコンの設定や家電の修理、趣味のお菓子作りまで何でもごちゃ混ぜのデパート状態だったので、カテゴリに応じてサブドメインを作り、珈琲焙煎機・パソコン関連・それ以外(日記)と大きく3つに分類しています。

普通のHTMLならコピーするだけですが、Wordpressで記事を書いているため、新規に記事を追加すると、データベースのエキスポートからやり直しになるため、暫くサイトの更新が滞っています。

あと、3~4日で終わると思いますので、よろしくお願いします。

 

 

2013年5月25日

現在、自宅に待機している予備機のLinuxサーバ上でドメイン分割して移行を行ない、テスト中です。

手間のかかる作業は全て修了しており、現在確認作業のみやっていますが、公開サーバにアップしてGoogleにインデックスされてから変更すると、スパム扱いされる可能性があるため、これが一番重要だったりします。

ドメイン名変更による設定手順をウェブで調べると、Wordpressのダッシュボード上におけるURLの変更とMySQLのwp-optionsテーブルの変更、wp-config.phpの変更方法が当たり前のように書いてあり、これをやらないとブログに書いた文章すら見ることが出来ない最低限の設定内容で、大した作業じゃありません。

しかし、それ以外に旧ブログで画像を取り込んでいたら、画像URLの変更や旧URLから新URLへの301リダイレクトの設定もやらないといけないので、こちらの方が敷居が高く、大変な作業になります。

今回、画像URLの変更を忘れていたので、なんと404エラーが2000件も発生しました。

本番環境でテストなしに一発で移行を始めたら、怖いですね。

今回301リダイレクトを300件程度行ないますが、カテゴリとタイトルとURLを連結するSQLを作成してからExcelに取り込み、文字列操作してリダイレクト文を作成すると楽でした。

 

 

2013年5月26日

まだ完全に移行が終了していませんが、公開しても問題ないと思える・・・希望的観測?ので公開します。

今回のドメイン分割で失敗したところ・・・Wordpressの本体をそのままにして不要な投稿を削ったデータべースだけを戻すと、使っていないメディアファイルが分からなくなります。

これは、記事が1/3になっているのにバックアップしたときの容量が全然変わっていなくて気が付きました。

対策として元のデータに戻してシコシコ削除するか、移行後の環境からwp-contentのuploadsフォルダごと入れ替えるか・・・

急を要する作業じゃないので、時間が有るときに作業します。

Linuxサーバのトラブル復旧のご報告、原因はWordPressでMySQLに溜ったゴミデータだった。

WordPress | by 管理者
4月 23日 2013 年

3月23日にホームページに繋がらなくなるサーバトラブルが発生してから、たびたび同様のトラブルが発生しており、4月21日の日曜日には11時と14時と立て続けにトラブルが発生してしまいました。

そのため予備機に最新データの移行を行ってサーバを変更する準備をしていましたが、結局予備機に切り替えることなくトラブルが解消したのでご報告します。

・・・というか対策してから30時間このトラブルが発生していないので、おそらく解消したと思われます。

 

 

症状:

・ホームページにもWordpressのブログにも繋がらない。

・ホームページに繋がるが、Wordpressのブログに繋がらない。

・リモートでサーバーに繋がらない。

そのときのエラーログ

[Sun Apr 21 14:35:02 2013] [error] [client xxx.xxx.xxx.xxx] WordPress \xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc: MySQL server has gone away for query SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (6758) made by require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/glass/single.php'), the_content, apply_filters('the_content'), call_user_func_array, ald_wherego_content, ald_wherego, has_post_thumbnail, get_post_thumbnail_id, get_post_meta, get_metadata, update_meta_cache, referer: http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDQQFjAA&url=http%3A%2F%2Fwww.trend-ai.com%2Fwordpress%2F%3Fp%3D6783&ei=9HFzUY-mJ4SbkgWN_oDYBQ&usg=AFQjCNGDcG0TetTp55prNXI4Xz7RAi1HOA&sig2=3Ndfr6lvskTbtwSd2rQRtA&bvm=bv.45512109,d.dGI

 

まさに症状はバラバラ。

原因は、本来のデータの6倍にも及ぶMySQLデータベースのゴミでした。

データベースにゴミが溜れば不調になるのは当たり前ですが、症状がバラバラで何を疑って良いか見当もつかず、偶然データベースの最適化をやったところ、それが当たりだったみたいです。

WordPressを使えば使うほどゴミも一緒に溜っていきます。

例えば、スパムコメントを削除しただけではゴミデータを完全に削除したことにはならず、定期的にデータベースの最適化をする必要があります。

 

 

忌まわしきは、ゴミばかり送り付けてくるスパム業者。

今までは、Akismetがスパムコメントを捕獲してくれるから大丈夫とタカを括っていましたが方針を変更し、スパムコメントは登録できないようにしました。

そこで使用したプラグインは「スロースパムアウェイ」(敢えて日本語でプラグイン名称を書いています。英語で書いたらスパム業者に分かってしまうので!)

スパム業者にこのようなスパム対策をしていることを知らせたくないので、エラーを出さずに元の画面に戻るようにしています。

スパムコメントを登録出来ていると思っているんだろうね。ザマーミロ!

また、彼らの目的はリンクを張ることなので、リンクの多い記事はたとえ日本語記事でも登録できないようにしました。

私のブログには1日に10~20件のスパムコメントが登録されますが、この対策をしてから30時間近くたった今でも1件も登録されていません。

 

*** 2013年04月25日 ***

丸2日経ちましたが1件もスパムコメントが登録されていません。

海外のスパマーは日本語が読めないから、何やってるのか分からないだろうね。

対策してなかったら保留になっているとはいえ30件くらい書き込まれていたわけだから、気持ちイイです。

WordPressの下書き(レビジョン)を削除してDBの最適化を自動実行するプラグイン

WordPress | by 管理者
4月 22日 2013 年

まずは実行結果から。

このプラグインを初回実行した結果、69MBのデータベースサイズが最適化されて、たったの9MBになりました。・・・60MBのゴミデータが削除されてデータベースのサイズがコンパクトに小さくなりました。

最適化した結果

 

 

このプラグインを入れた目的は、2つあります。

1.下書き(レビジョン等)不要なデータを削除してバックアップを早くすること。

・毎日、夜スケジュールを組んで自動バックアップを行っていますが、ネットワークにあるクラウドにバックアップしているため、転送するファイルの大きさが小さければ小さい方が良い。

2.パフォーマンスの向上

・データ件数が多くなればデータの検索に時間がかかるのは当然のこと。不要なゴミデータを削除してパフォーマンスを向上させます。

 

そこで、数あるプラグインの中から目を付けたのが、Optimize Database after Deleting Revisionsです。

 

下書き(レビジョン)を削除するプラグインは数ありますが、さらにデータベースの最適化とスケジュールを定期的に自動実行してくれるプラグインはこれ以外に見つかりませんでした。

 

 

データベースのサイズはデータを削除しても小さくならない。

知らない人が多いですが、データベースはデータを削除しても大きさ(サイズ)は小さくなりません。

これは削除するたびにテーブルからレコードを削除して作り直していたのではパフォーマンスが悪くなるので、インデックスから消去しているだけなんです。

つまり下書き(レビジョン)を削除しても、データは残ったままなのでデータベースの大きさは小さくならないため、それだけでは何の意味も無いわけです。

 

さらに、もう一つ。

あなたのWordpressには大量のスパムコメントは届いていないでしょうか?

私のブログのAkismet(スパム判定するツール)の統計では、5,500件ものスパムを捕獲したと誇らしげに表示しています。

akismetの統計

 

もちろんこのようなスパムコメントは見つけ次第サクッと削除していますが、このスパムコメントも削除しただけではいつまでもデータベースにゴミデータとして残り続けます。

※ 実はこちらのスパムコメントの方が下書き(レビジョン)より件数が多いため、スパムコメントの完全削除の方が重要だったりします。

そして、これらのゴミデータをデータベースから完全削除する機能が最適化(optimaize)になります。

 

 

 Optimize Database after Deleting Revisionsの設定

 

Maximum number of - most recent - revisions to keep per post / page: 下書き(レビジョン)を残す回数の指定。0だと全部削除

Delete all trashed items     :ゴミ箱を削除するときにチェック

Delete all spammed items     :スパムを削除するときにチェック

Keep a log     :ログを残すときにチェック

Scheduler :自動実行するスケジュールを指定、run optimization weeklyで毎週実行

 

EXCLUDE DATABASE TABLES FROM OPTIMIZATION: CHECKED TABLES WON'T BE OPTIMIZED!

除外するテーブルを指定するときに、チェックする。

最適化するだけなので、基本的にデフォルト(チェックしない)のままでOK。

 

設定画面

 

 

上記画面でGoto Optimaizeをクリックすると下の画面に遷移するのでStart Optimaizationをクリックして最適化を開始。

結果は、冒頭に紹介したとおり、69MBから9MBに最適化されました。

実行

 

WordPressのユーザーadminへのパスワード攻撃(ブルートフォースアタック)の実態、1秒ごとに連続150回の攻撃

WordPress | by 管理者
4月 17日 2013 年

数日前からWordpressのユーザadminを狙って、パスワードを手当たり次第変えて力技でログインを試みるブルートフォースアタックが話題になっていますが、私のサイトの過去のアクセスログを見ていたら、私のサイトも攻撃を受けていたことが分かりました。

 

これが、アクセスログです。

173.38.155.8 - - [14/Apr/2013:12:53:22 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 2592 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:53:23 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:53:24 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:53:25 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:53:27 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"

途中略

173.38.155.8 - - [14/Apr/2013:12:56:46 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:56:48 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:56:49 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:56:51 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"
173.38.155.8 - - [14/Apr/2013:12:56:52 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 200 3501 "-" "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10"

 

 

4月13日~4月17日までのログを確認しましたが、ブルートフォースアタックと思われる攻撃はこのIPアドレスだけ。

見てのとおり、1秒ごとに150回パスワードを変えて攻撃してきていました。

9万件以上のIPアドレスを使って攻撃してくると聞いていたので、IPアドレスを次々と変えて攻撃するのかと思っていましたが、そうではないみたいです。

173.38.155.8のIPアドレスで150回攻撃したら終了でした。

このような攻撃方法であれば、①ユーザーadminを使わないことは当然として、②何回かパスワードを入力間違いしたら、同一IPからのログインにロックをかける対策も有効です。

 

 

私のサイトではユーザー名にadminを使っていないので①の対策は実施済み、さらに②の対策としてパスワードを数回間違えるとロックがかかるプラグインLimit Login Attempts Settingを導入しました。

 

Limit Login Attempts Settingの設定内容の説明

※ デフォルトの値を若干変更しています。

① パスワードを間違えても5回までリトライできる。

しかし、5回ログインに失敗したら、20分間ログインをロックする。(ログインを出来なくする。)

4回連続してロックされたら、24時間ログイン出来なくする。

12時間でリトライしたときの失敗をリセットする。

② リバースプロキシを使っているか、ダイレクトに接続するのか指定する。この場合はダイレクト接続する。

③ クッキーに保存された情報を使ってログインするか指定する。この場合はクッキーを使う。

④ ロックしたIPアドレスをログに残す。4回ロックしたらEmailで知らせる。

 

limit login attempts setting

 

ちなみにパスワードを打ち間違えると、以下のような画面が表示されます。

また、ログインに成功してもリトライできる回数はリセットされません。これはちょっと意外でした。

あくまでリセットする条件は①に指定した時間で決まるみたいです。

ログイン失敗の画面

WordPressのバックアップツールBackWPupからRestoreボタンが消えた!・・・DBの復元が面倒

WordPress | by 管理者
3月 05日 2013 年

WordPressのバックアップツールで定番だったBackWPupがVer3.0.XにバージョンアップしてRestoreボタンが消えてしまいました。

今まで気が付きませんでした。

 

これが消えたRestoreボタンです。(Ver2.1.17の画面)

RestoreボタンがあったVer2.1.17は、ボタン一発でデータベースを戻せるので楽ちん!

restoreボタン

 

バックアップとリストア(復元)はバックアップツールの表裏一体の存在でありながら、バックアップはツールで出来るけど、復元はツールに頼らないで手動でやって下さいということになります。

もし、手動でデータベースを戻すとなると、リストア用のツールを別に用意してDB Name、DB User、DB Password等のDB接続情報を設定しなければいけないので戻すのが面倒です。

BackWPupはVer3.0.Xにバージョンが上がってから高機能版は有料になったので、今後のバージョンアップでリストアができるようになったとしても、おそらく有料版なんだろうと想像できます。

というわけで、旧2.1.17に戻したければ、ここからダウンロードして戻すことができます。

 

Ver2.1.17に戻すときのコツですが、Ver3.0.4をWordPressのプラグイン画面から削除すると、せっかく設定してあったジョブスケジュールも一緒に削除されてしまうため、/wp-content/plugins/下にあるbackwpupフォルダを手動で削除するかリネームして、以下の画面でbackwpup.2.1.17.zipを指定して新規インストールすると設定済のジョブスケジュールを引き継げるようです。

 

プラグインのインストール

 

バックアップやリストアの具体的な方法は、こちらも合わせて参照してください。

バックアップデータが大きくなり過ぎたときに、データを分割してバックアップ・リストアする方法を具体的に説明していますが、参考になると思います。

 

*** 2013.03.06 追加 ***

バックアップとレストアが出来て、クラウドに転送出来て、分割バックアップ(BackWPupは年で分割できる)の出来るプラグインを探してみましたが見つかりませんでした。