Country Blockerを更新。

今回の更新で名称を「Country Blocker」から「Country Filter」に変更しました。
今まではブラックリスト方式だったけれど、ホワイトリスト方式も使用できるようにしたのでBlockerは違うなーってことで。

今回の更新はもう書いちゃったのもあるけど、
 ・名称の変更
 ・ホワイトリスト方式を追加
 ・filteringLevel=0が動いていなかった問題を修正
 ・コマンドを1つ追加
の4点。
 
この更新で設定ファイル名と設定項目名が変わりました。

韓国・中国・台湾をブロックする場合は
 matchType=0
 countrys_Deny=KR,CN,TW

日本からのみ許可する場合は
 matchType=1
 countrys_Allow=JP

ちなみに、ブラックリスト方式とホワイトリスト方式の両方を使用する事はできません。
というか、IPアドレスでのフィルタリングじゃないから両方有効にしても意味が無いんですよねw

 

丁度Country Filterの話題なので、ちょっと前に来ていた幾つかのメールの内容をネタに。

内容は「US...(略)...など海外を指定しているのに接続される」、「hamachiでのブロック方法を教えて」と言う物。
どちらにも共通しているのは「hamachi」を使用しているサーバーであること。
 
まず、Country Filter(Country Blockerでも同じ)は接続してきたIPアドレスをMaxMind社のGeoLiteCountryデータベースに照会して何処の国からのアクセスか判定しています。

プロキシ経由やVPN(今回はhamachi。)なんかでのアクセスは接続元のIPアドレスがわからないため国情報を判定できません。
一定の条件が揃えばプロキシでも判定可能ですがVPNは無理です。
 
どれだけダダをこねられても無理です、VPNとhamachiの仕組みをちゃんと理解してください。
それができたらファイアーウォールの設定を変更してグローバルIPアドレスから接続できるようにしましょう。
 
あとメールは受信可能なアドレスを指定してくださいねー。

Borderlands2の世界にMinecraftが。

最近は、TERAをやっていない空き時間にBorderlands2をプレイしているのですが、このBorderlands2で探索中にMinecraftのブロックを発見!
Borderlands2 - Minecraft 土ブロック Borderlands2 - Minecraft 土ブロック 破壊
見つけた瞬間は思わず「ん?え?ナニコレ、なんでマイクラ?」と喋ってしまった・・(ノ∀`*)
パロディが多いとは聞いていたけれどこんなのもあるのねー
(この場合パロディと言うよりはイースターエッグかな。)

このMinecraftのブロックは見た目だけじゃなくて、近接攻撃をすると掘れるんです。
壊してもブロックとしてアイテム化はしませんけど・・w
 
どんどん掘っていくと・・・これまた見覚えのある石ブロックと石炭鉱石ブロックが登場。
Borderlands2 - Minecraft 石&石炭鉱石ブロック 1
石は3回の近接攻撃、石炭は5回の近接攻撃で壊れて、石炭はアイテムをドロップするみたい。
 
そしてお馴染み匠ことクリーパー先生、そして巨匠((゜Д゜;))
Borderlands2 - Minecraft クリーパー Borderlands2 - Minecraft クリーパー 爆発 Borderlands2 - Minecraft 巨大クリーパー
音もなく近づいてきて爆発します(`・ω・)b
 
細かく作られているようで、クリーパーの爆発に巻き込まれたブロックはちゃんと壊れますw
Borderlands2 - Minecraft ブロック爆発前 Borderlands2 - Minecraft ブロック爆発後
 
奥にはダイア鉱石があってレア装備でも出るのかなー?と、どんどん掘っていった結果は・・・
Borderlands2 - Minecraft 終了?
なんと大量の弾薬のみでしたヽ(`Д´)ノ
激しくイラナイ。
 
スカイリムの「ノッチのピッケル」みたいな感じでコラボ装備でもあるのかと期待しちゃったじゃない(´・ω・`)
 
会話のパロディや世紀末っぷりもなかなかだけど、こんな風に遊びがあるのはプレイしていてすごく楽しいかなー

おおかみこどもの雨と雪を観てみた。

スカで「おおかみこどもの雨と雪、なかなかよかった」と言われたので観てみました。
おおかみこどもの雨と雪
 
いやー、思いの外よかったです、かなりグッときました。
ハウルの動く城ぐらいから見ていませんが、最近のジブリより良いんじゃないか?ってぐらいです。

思いの外と言うのは、スカで聞いた話しでは、「獣人に変身する」、「狼に変身する」、「切ない」と言う物だったし、
自分が知っていたのは「ケモノ耳+尻尾のキャラ」、「主人公達が自分の道を選択していく」だったので、時間つぶしになればイイカナー程度だったのですよー

ところがどっこい、見終わった後に休憩しながら考えを整理させてくれましたw
最近の映画って見終わって、考えを整理するような物あんまり無かったですからねー

個人的に、彼の死から子供が学校に通うぐらいまでは結構来るものがありましたし、最後もかなり。
 
色々モヤモヤしたところ。
 ・彼の死因。
  ⇒事故だろうけど、もうちょっと詳しい説明とかがほしかったなあー。
   周囲の状況をみると獲物の羽根とかが散らばっていたし、雨がヤマセミを捕って流された時の様な状況になったのかも。

 ・物語最後の雨の選択の後。
  ⇒周囲の人達は雨が居なくなった事について全く触れていない・・すごく気になる。
  
これは原作小説を読めばスッキリするのかなー

 
ここからは画像。
続きを読む

クライアント認証を利用してWordPressへ自動ログイン

なんか最近はブログへのログインが面倒くさくなってきましたw
かなり前に公開したDigest認証を利用してWordPressに自動ログインさせるプラグインでDigest認証のIDとパスを記録させてエンターを押すだけでいいのだけれど、それすらメンドウクサイw
 
最近はSSLで管理画面にログインしているので、「そうだ!クライアント認証ならエンターキーも必要ないんじゃね?」ってことでクライアント認証を導入。
SSL クライアント認証
firefoxのプラグインでサイトのクライアント証明書が1つの場合は、初回のみ選択ダイアログが出て以降は自動化してくれるようにしました。
 
あとはクライアント認証の環境変数を利用してWordpressへ自動ログインさせるようにするだけ・・なんだけど・・・
通常にクライアント認証をかけるとブログ全体にクライアント認証がかかり一般のユーザーは閲覧できなくなります。
 
なのでApacheのSSLバーチャルホスト内で以下のようにしました。

<Directory "/wordpress/">
	SSLOptions +StdEnvVars

	<Files wp-login.php>
		Satisfy any
		SSLVerifyClient require
	</Files>
</Directory>
<Directory "/wordpress/wp-admin/">
	SSLVerifyClient require

	<Files admin-ajax.php>
		Satisfy any
		SSLVerifyClient none
	</Files>
	<Files ~ "\.(gif|jpg|png|css|js|xml)$">
		Satisfy any
		SSLVerifyClient none
	</Files>
</Directory>

 
プラグインの方はこんな感じ。

<?php
/*
Plugin Name: WP Auto Login
Description: HTTP認証又はクライアント認証に成功した場合、自動でWordPressへログインします。
Version: 1.1.0
Author: REIMA
Author URI: http://blog.wolfs.jp/
*/
 
class wp_autoLogin {
    private $config = array(
        'no-loginform' => false, // hide wordpress loginform
        'wordpress-user' => 'wordpress-username',
        'client-auth' => false, // certificate auth
        'client-auth-cn' => '', // certificate-common name
        'client-auth-sn' => '', // certificate-serial number
        'http-auth-user' => 'http-username',
        'http-allow-host' => ''
    );
 
    public function __construct() {
        add_action('login_form', array($this, 'autoLogin'));
    }
 
    public function autoLogin() {
        $flagSuccess = false;
        $flagRedirect = false;
 
        if (is_user_logged_in()) {
            $flagSuccess = true;
            $flagRedirect = true;
        } else if (!$_GET['loggedout'] == 'true') {
            if ($_SERVER['SERVER_PORT'] == 443 && $this->config['client-auth'] == true) {
                if ($_SERVER['SSL_CLIENT_VERIFY'] == 'SUCCESS' && $_SERVER['SSL_CLIENT_S_DN_CN'] == $this->config['client-auth-cn']) {
                    $flagSuccess = true;
 
                    if ($this->config['client-auth-sn']) {
                        if ($_SERVER['SSL_CLIENT_M_SERIAL'] != $this->config['client-auth-sn']) {
                            $flagSuccess = false;
                        }
                    }
                }
            } else {
                if ($_SERVER['REMOTE_USER'] == $this->config['http-auth-user']) {
                    $flagSuccess = true;
                }
 
                if ($this->config['http-allow-host']) {
                    if (!(preg_match('/'.$this->config['http-allow-host'].'/', gethostbyaddr($_SERVER['REMOTE_ADDR'])))) {
                        $flagSuccess = false;
                    }
                }
            }
 
            if ($flagSuccess) {
                $wpUser = get_userdatabylogin($this->config['wordpress-user']);
 
                wp_set_current_user($wpUser->ID, $this->config['wordpress-user']);
                wp_set_auth_cookie($wpUser->ID);
                do_action('wp_signon', $this->config['wordpress-user']);
 
                $flagRedirect = true;
            }
        }
 
        if ($flagSuccess) {
            if ($flagRedirect) {
                $redirect_to = $_GET['redirect_to'];
                if (!$redirect_to) {
                    $redirect_to = admin_url();
                }
                wp_safe_redirect($redirect_to);
            }
        } else {
            if ($this->config['no-loginform'] == true) {
                wp_die('認証情報が正しくない為、ログインすることはできません。', '認証エラー');
            }
        }
    }
}
 
$wp_autoLogin_ins = new wp_autoLogin();
 
?>

HTTP認証の流れは以前と同じです。
クライアント認証は設定のclient-authがtrueかつ、SSLでアクセスされた場合のみ有効になります。
 
有効なクライアント証明書でSSLでアクセスされた場合、環境変数のSSL_CLIENT_S_DN_CNと設定のclient-auth-cnが同じ場合はログインを許可するようになっています。
client-auth-snに値がある場合は、クライアント証明書のシリアルナンバーも一致しないとログインできなくなります。
 
SSLの認証局を自分の所にした場合、認証局のデータベースからシリアルナンバーの正当性確認もできますね(`・ω・)b