WordPress へのspam 投稿をしたことのあるIP を拒否するようにした

最近WordPress へのコメントとトラックバックスパムが酷くなってきました。URL が含まれている物は承認が必要なようにしているのですが面倒です。このときにスパムはスパムだと手動で振り分けをしているので振り分けたものからIP を抜き出してアクセス制限を掛けるとましにならないかと設定してみました。

データベースから該当IP を抜き出す

MySQL からスパムを指定したIP の一覧は以下のようにして取得出来そうです。

$ cat /etc/wordpress/spamcommentip.sql
SELECT comment_author_IP FROM wordpress.wp_comments WHERE comment_approved='spam'
$ /usr/bin/mysql -umy -p < /etc/wordpress/spamcommentip.sql | /usr/bin/sort -n | /usr/bin/uniq -c| sort -n|cut -c-7|uniq -c
     81       1
     31       2
     26       3
     12       4
      8       5
      9       6
      4       7
      9       8
      1       9
      1      10
      3      11
      2      12
      3      13
      1      14
      1      15
      1      18
      4      20
      1      22
      1      23
      1      24
      1      26
      1      43
      1      82
      1     119
      1     146
      1     394

自動化したいので、MySQL にアクセスする為のMySQL の設定ファイルと、IP を抜き出すsqlファイルを用意します。

  • MySQL アクセスの為の設定ファイル

    $ cd /etc/wordpress
    $ umask 077
    $ sudo touch .my.conf
    $ sudo chown www-data.root .my.conf
    $ vi .my.conf
    cat .my.conf 
    user=wp
    password=XXXXXXXXXXXXXX
    database=wordpress
    
  • IP を抜き出す為のsqlファイル

    $ sudo vi /etc/wordpress/spamcommentip.sql
    $ cat $ cat /etc/wordpress/spamcommentip.sql
    SELECT comment_author_IP FROM wordpress.wp_comments WHERE comment_approved='spam'
    

以下のようにしてIP の一覧が取得出来るようになりました。

$ /usr/bin/mysql --defaults-file=/etc/wordpress/.my.conf < /etc/wordpress/spamcommentip.sql

apache httpd の .htaccess で指定IPアドレスからの WordPress のコメント投稿とトラックバックを制限

Debian のパッケージで WordPress を導入しているので導入パスは /usr/share/wordpress/ です。
設定ファイルは /etc/wordpress 以下です。
/usr/share/wordpress/.htaccess/etc/wordpress/htaccess のシンボリックリンクになっています。

アクセス制限をするには .htaccessdeny from ip address な感じで行けます。
さっきのIPの一覧取得時に並べ替えて同一IPをまとめて頭にdeny from を付けるようにします。

$ /usr/bin/mysql --defaults-file=/etc/wordpress/.my.conf < /etc/wordpress/spamcommentip.sql | /usr/bin/sort -n | /usr/bin/uniq | /bin/grep -v 'comment_author_IP' | /bin/sed "s/^/  deny from /"

あまり無いと思いますが、正しいIP アドレスを登録してしまっても本文が読めるようにコメントやトラックバックだけ制限しようと思います。コメント、トラックバックは次のwp-comments-post.php / wp-trackback.php を利用するようなのでこのファイルへのアクセスを制限します。
.htaccess の Files ディレクティブを利用して以下ような感じでいけそうです。

<Files ~ wp-comments-post.php|wp-trackback.php>
  deny from ip address
</Files>

動作確認は自分のIPアドレスを一時的に登録して行いました。blog本文にはアクセス出来てコメントURL は拒否されています。

% w3m -dump_head https://matoken.org/blog/blog/2015/06/09/facebook-pgp/|head -1
HTTP/1.0 200 OK
% w3m -dump_head https://matoken.org/blog/wp-comments-post.php|head -1
HTTP/1.1 403 Forbidden

cron を使って自動的に更新するようにする

IP list は外部ファイルにして読み込むようにすると便利そうですが、Include ディレクティブは .htaccess からは利用出来無いようなので分割ファイルを作って連結することにします。

  • /etc/wordpress/htaccess_base
    • 元のhtaccess
  • /etc/wordpress/htaccess_spamhead
    • Files ディレクティブの先頭
  • /etc/wordpress/htaccess_spamiplist
    • データベースから抜き出して作成した拒否IPリスト
  • /etc/wordpress/htaccess_spamtail
    • Files ディレクティブの末尾
  • /etc/wordpress/htaccess
    • 最終的に結合されて.htaccess のリンク元になるファイル

htaccess_base / htaccess_spamhead / htaccess_spamtail を用意します。

$ sudo cp -p /etc/wordpress/htaccess /etc/wordpress/htaccess_base
$ sudo sh -c "echo '<Files ~ wp-trackback.php|wp-comments-post.php>' > /etc/wordpress/htaccess_spamhead"
$ sudo sh -c "echo '</Files>' > /etc/wordpress/htaccess_spamtail"

htaccess_spamiplist / htaccess はcron で1時間毎に作成するようにします。

$ sudo -u www-data crontab -e
$ sudo -u www-data crontab -l
14 * * * *      /usr/bin/mysql --defaults-file=/etc/wordpress/.my.conf < /etc/wordpress/spamcommentip.sql | /usr/bin/sort -n | /usr/bin/uniq | /bin/grep -v 'comment_author_IP' | /bin/sed "s/^/  deny from /" > /etc/wordpress/htaccess_spamiplist && /bin/cat /etc/wordpress/htaccess-base /etc/wordpress/htaccess_spamhead /etc/wordpress/htaccess_spamiplist /etc/wordpress/htaccess_spamtail > /etc/wordpress/htaccess

これで1時間毎にWordPress 上でspam と判定したコメント/トラックバックの送信元IP からコメント/トラックバックを拒否するようになりました。
うまくいくといいのですが……。

追記)
設定して数日経ちましたが,spam激減しました!

Facebook PGP対応を試す

logo-gnupg-light-purple-bg

ということでFacebook 自体は殆ど利用していないのですが、PGP GNU 実装のGnuPG の鍵を登録してみました。

先ずは自分の鍵を確認して、

% gpg --fingerprint 572E532C         
pub   4096R/572E532C 2010-03-17
                 指紋 = 9C3E C527 2FFD AF80 3289  ADE4 398C 09CC 572E 532C
uid                  K.I.Matohara <matoken@gmail.com>
uid                  [jpeg image of size 2077]
uid                  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
uid                  Kenichiro MATOHARA (KagoshimaLinuxUserGroup.) <matoken@kagolug.org>
sub   2048R/74FBCF68 2015-01-15

公開鍵をASCIIで書き出しして、

% gpg -a --export 572E532C|xclip

facebook に登録します。登録ページは次からアクセス出来ます。
https://www.facebook.com/me/about?section=contact-info

Screenshot from 2015-06-02 11:16:18
Screenshot from 2015-06-02 11:16:38

ここで Use this public key to encrypt notification emails that Facebook sends you? にチェックを付けるとFacebook からの通知も暗号化されるのですが、以下のエラーになってしまいました。(チェックをしない場合はエラーにならない)
利用した鍵の問題だったようです。下記の追記を参照して下さい。

Screenshot from 2015-06-02 11:17:19

PGP public key will be unusable too soon
This PGP Public Key will be unusable for encryption within 30 days. This most likely means that its expiry date is within 30 days, it is already revoked, or the key does not have encryption enabled. Please extend the expiry date or add an encryption subkey to your existing key, or generate a new public key to receive encrypted notifications.

鍵は全部期限内で無期限なんだけどなぜだろう?1024R/2048R/4096Rの鍵をそれぞれ新しく作って試すとこれはいけました。
副鍵が多かったりimage がいけないのかな?公開鍵も大きいし

$ gpg -a --export 572E532C|wc -l #怒られる4096R
208
$ gpg -a --export BD929CA7|wc -l #1024R
13
$ gpg -a --export DB7157B1|wc -l #2048R
30
$ gpg -a --export D9A959F4|wc -l #4096R
52

鍵の登録がうまくいくと以下のような暗号化メールが届きます。これを復号して確認URL にアクセスすると次のメールから暗号化されます。

% head /home/mk/encrypted.asc
-----BEGIN PGP MESSAGE-----

hQIMAxvR4gJcick7AQ/9GA1pbc/bU7p3o3PcxxsTT3HdPeOA5KdD5/GBcxODM1SS
ousJS+9g/IRgykaHcUHcYTJCbW/vyhQnm33Q+HjmOGI6t3n6UfTpxiNFH7WVSNVW
cd5nVSYj/9nlvq1lBk200+NjYdbxSPK40RrLMGwjMHkqRNilK85xFrOW1+B7FRXq
mYdSZkQ2n1XQsqywL+onPGkuM1RA0NARqNX9Iq4PJLrSx04h+8DgCAk8gul7z/iU
l3YnVjDz+I45EMQyzABckFbQQDoFC1T75tV+HDKJetSGQALoYGltA5COZusQdarM
Qmk+ukg+4xWAinV/Vci9jqANdeUDryADKh8nnuJoxVFyz9V4fIJjfp75+D5zPNdQ
uwrTQzBDRQIF9Qttk+5Id8Pi2/vuDzrRFO0ELrh/Zah78Wd3iMUykk2GMeXdnGve
7sq+LT0xkOt1i6vUzYpvlWwxlQ8gdUCXoIIlzEsMD0+TvEhx5xu9/OWt7CCKpYUg
% gpg -d /home/mk/encrypted.asc

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Kenichiro MATOHARA (4096R key) <matoken@gmail.com>”
4096ビットRSA鍵, ID 5C89C93B作成日付は2015-06-08 (主鍵ID D9A959F4)

gpg: 4096-ビットRSA鍵, ID 5C89C93B, 日付2015-06-08に暗号化されました
      “Kenichiro MATOHARA (4096R key) <matoken@gmail.com>”
Content-Type: multipart/alternative;
        boundary="b1_391ab87f1b42dbae36913baf98ac3c0c"


--b1_391ab87f1b42dbae36913baf98ac3c0c
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit

こんにちは、Kenichiroさん

This is an email to help you enable encrypted notification emails for your Facebook account.

If you prefer to not enable encrypted notification emails from Facebook, you may simply ignore this message.

If you enable encrypted notification emails, Facebook will begin encrypting notification emails to you with your public key. These may include account recovery notification emails.

BEWARE: If at some time in the future you cannot decrypt your account recovery notification emails and if you also become locked out of Facebook, you may be unable to recover your Facebook account.

To proceed with enabling encrypted notification emails, please click this link:

Yes, encrypt notification emails sent to me from Facebook.[https://www.facebook.com/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]

よろしくお願いいたします。
Facebookチーム

Facebook はなんでこの機能を付けたのかよくわかりませんが,以下の辺りも関係しているのかもですね.

ところで,この機能はクレジットカード会社や銀行なども取り入れて欲しいところです.自分の契約しているところだと法人向けだとやっている所はあるようですが個人向けは無さそうで残念です…….

おまけ?
Key fingerprint = 9C3E C527 2FFD AF80 3289 ADE4 398C 09CC 572E 532C
https://gist.github.com/200fce0896b735ccbc13


追記)
Google+ で+Niibe Yutakaさんにコメントを貰って暗号化用の副鍵が無いのが原因だったようですorz

572E532Cを—edit-keyで見てみると暗号のための副鍵はないので(署名Sと認証Aだけ)、主鍵は署名Sと鍵への署名Cで、この鍵では暗号化メールは送れません。暗号化の副鍵を追加して、ついでにrevokeした副鍵は削除して登録してみるといいんじゃないでしょうか。

% gpg --edit-key 572E532C
gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
秘密鍵が使用できます。
pub  4096R/572E532C  作成: 2010-03-17  満了: 無期限      利用法: SC
信用: 絶対的     有効性: 絶対的
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  作成: 2011-02-23  失効: 2014-02-11  利用法: S
sub  2048R/74FBCF68  作成: 2015-01-15  満了: 無期限      利用法: A
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ultimate] (4)  Kenichiro MATOHARA (KagoshimaLinuxUserGroup.) <matoken@kagolug.org>
gpg> uid 1
pub  4096R/572E532C  作成: 2010-03-17  満了: 無期限      利用法: SC
信用: 絶対的     有効性: 絶対的
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  作成: 2011-02-23  失効: 2014-02-11  利用法: S
sub  2048R/74FBCF68  作成: 2015-01-15  満了: 無期限      利用法: A
[ultimate] (1)* K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ultimate] (4)  Kenichiro MATOHARA (KagoshimaLinuxUserGroup.) <matoken@kagolug.org>
gpg> key 1
pub  4096R/572E532C  作成: 2010-03-17  満了: 無期限      利用法: SC
信用: 絶対的     有効性: 絶対的
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub* 2048R/E0FE9E3E  作成: 2011-02-23  失効: 2014-02-11  利用法: S
sub  2048R/74FBCF68  作成: 2015-01-15  満了: 無期限      利用法: A
[ultimate] (1)* K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ultimate] (4)  Kenichiro MATOHARA (KagoshimaLinuxUserGroup.) <matoken@kagolug.org>
gpg> delkey
この鍵を本当に削除しますか? (y/N) y
pub  4096R/572E532C  作成: 2010-03-17  満了: 無期限      利用法: SC
信用: 絶対的     有効性: 絶対的
sub  2048R/74FBCF68  作成: 2015-01-15  満了: 無期限      利用法: A
[ultimate] (1)* K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ultimate] (4)  Kenichiro MATOHARA (KagoshimaLinuxUserGroup.) <matoken@kagolug.org>
gpg> addkey
鍵は保護されています。
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“K.I.Matohara <matoken@gmail.com>”
4096ビットRSA鍵, ID 572E532C作成日付は2010-03-17
ご希望の鍵の種類を選択してください:
(3) DSA (署名のみ)
(4) RSA (署名のみ)
(5) Elgamal (暗号化のみ)
(6) RSA (暗号化のみ)
選択は? 6
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
<n>  = 鍵は n 日間で満了
<n>w = 鍵は n 週間で満了
<n>m = 鍵は n か月間で満了
<n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)
Key does not expire at all
これで正しいですか? (y/N) y
本当に作成しますか? (y/N) y
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
十分な長さの乱数が得られません。OSがもっと乱雑さを収集
できるよう、何かしてください! (あと175バイトいります)
...............+++++
十分な長さの乱数が得られません。OSがもっと乱雑さを収集
できるよう、何かしてください! (あと198バイトいります)
...................+++++
pub  4096R/572E532C  作成: 2010-03-17  満了: 無期限      利用法: SC
信用: 絶対的     有効性: 絶対的
sub  2048R/74FBCF68  作成: 2015-01-15  満了: 無期限      利用法: A
sub  4096R/2D937827  作成: 2015-06-11  満了: 無期限      利用法: E
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ultimate] (4)  Kenichiro MATOHARA (KagoshimaLinuxUserGroup.) <matoken@kagolug.org>
gpg> save
% gpg --send-keys 572E532C
gpg: 鍵572E532Cをhkpサーバーkeys.gnupg.netへ送信

この状態で公開鍵をFacebook に登録するとまくいきました。

mineoを刺したLGL22のA-GPSサーバを変更してみる

Screenshot_2015-04-21-20-55-30
LGL22 にmineo のSIM を挿して運用していますが,どうもGPS の動作がおかしい.IngressGPS Status & Toolbox を起動して1時間とかずっと置いといても測位できなかったりする.
以下のページを見るとキャリアが用意したA-GPS 情報を配布しているサーバは外からアクセスできなくてMVNO だと使えない,Google提供のA-GPS サーバがあってこれは外から使えるらしいということが分かりました.A-PGS 使えなかった時はタイムアウトして欲しい気もしますが….

  • トークセッション. MVNOとGPSについて (大内)

    趣旨:「MVNOではGPSは使えない」という誤解がありますが、正しくありません。しかし、一部のスマホでGPSの位置情報がうまく利用できないように見えるのも事実です。Androidを例に位置情報取得の仕組みとその原因についてご紹介します。

ということで,/etc/gps.conf のSUPL 部分を以下のように書き換えてみました.

SUPL_HOST=supl.google.com と SUPL_PORT=7275 or SUPL_PORT=7276 部分.書き換えた後再起動しても症状は変わらないよう.

Cinnamon Mod だと元々Google のサーバを向いているとのことなので CM12 をそのまま真似してみる.

これで数日使ってみているけど今のところ問題無さそう.
ただ,この方法は /system 領域の編集が必要なので通常は要root
もうすぐキャリア端末のSIM Free がやりやすくなるようですが,この辺りも解決して欲しいですね.APN みたいに設定画面から書き換えできるようにするとか.

以下は書き換え時のメモです.

$ ./adb shell
$ su
# mount -o rw,remount /system
# cp -p /etc/gps.conf /etc/gps.conf.org
# vi /etc/gps.conf
# cat /etc/gps.conf
XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
SUPL_HOST=supl.google.com
SUPL_PORT=7276
# mount -o ro,remount /system
# exit
$ exit

Debian Jessie のAdobe Flash Player をupdate-flashplugin-nonfreeで最新にする

IMGP9666_DNG

最近Debian Jessie でAdobe Flash が古いと怒られてるけどpkgでなかなか降りて来ないのでupdate-flashplugin-nonfree を手動で叩いて最新にしたメモです.
#え?GNU Gnashですか?ちょっとつらいですねARM とかでも動くのは良いんですが….

最近Iceweasel やFirefox でAdobe Flash のあるページを見ようとするとバージョンが古いのでAdobe Flash がブロックされます.とりあえず許可すると動作しますが面倒だし意図しないものも実行してしまいそうです.Jessie はtesting とはいえもう2週間位この状態が続いている気がするのでもしかしてFirefox がLinux以外のバージョンを元に古いと行ってる可能性があるのでは?と思って以下のページで確認すると最新は11.2.202.451 なのに対して11.2.202.425 と実際古かったです.

#しかしLinux版大分バージョン番号が離れてきましたね….今のところ見当たらないけどそろそろ対応できないsiteとか出てきたりして.

Debian Jessie ではAdobe Flash はflashplugin-nonfree パッケージを利用して導入しています.このパッケージはAdobe Flash Player のバージョンの確認を行い,最新版をダウンロードして導入してくれるものです.パッケージの中を見るとこんな感じでした.

% dpkg -L flashplugin-nonfree
/.
/var
/var/lib
/var/lib/flashplugin-nonfree
/var/cache
/var/cache/flashplugin-nonfree
/usr
/usr/sbin
/usr/sbin/update-flashplugin-nonfree
/usr/share
/usr/share/applications
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/update-flashplugin-nonfree.8.gz
/usr/share/icons
/usr/share/icons/hicolor
/usr/share/icons/hicolor/22x22
/usr/share/icons/hicolor/22x22/apps
/usr/share/icons/hicolor/48x48
/usr/share/icons/hicolor/48x48/apps
/usr/share/icons/hicolor/32x32
/usr/share/icons/hicolor/32x32/apps
/usr/share/icons/hicolor/24x24
/usr/share/icons/hicolor/24x24/apps
/usr/share/icons/hicolor/16x16
/usr/share/icons/hicolor/16x16/apps
/usr/share/pixmaps
/usr/share/bug
/usr/share/bug/flashplugin-nonfree
/usr/share/bug/flashplugin-nonfree/script
/usr/share/doc
/usr/share/doc/flashplugin-nonfree
/usr/share/doc/flashplugin-nonfree/copyright
/usr/share/doc/flashplugin-nonfree/changelog.gz
/usr/share/doc/flashplugin-nonfree/README
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/flashplugin-nonfree
/usr/lib
/usr/lib/flashplugin-nonfree
/usr/lib/flashplugin-nonfree/pubkey.asc
/usr/lib/mozilla
/usr/lib/mozilla/plugins
/usr/bin

README を確認するとWiki page 読んでねとのこと.

% cat /usr/share/doc/flashplugin-nonfree/README
Please read the information at:
http://wiki.debian.org/FlashPlayer

てことで--status で確認を行い,--installで最新に出来るようです.実際に叩いてみます.

% sudo /usr/sbin/update-flashplugin-nonfree
Usage:
update-flashplugin-nonfree --install
update-flashplugin-nonfree --uninstall
update-flashplugin-nonfree --status
Additional options:
--verbose
--quiet
% sudo /usr/sbin/update-flashplugin-nonfree --status
Flash Player version installed on this system  : 11.2.202.425
Flash Player version available on upstream site: 11.2.202.451
flash-mozilla.so - auto mode
link currently points to /usr/lib/flashplugin-nonfree/libflashplayer.so
/usr/lib/flashplugin-nonfree/libflashplayer.so - priority 50
/usr/lib/gnash/libgnashplugin.so - priority 10
Current 'best' version is '/usr/lib/flashplugin-nonfree/libflashplayer.so'.
% sudo /usr/sbin/update-flashplugin-nonfree --install
--2015-03-29 06:35:12--  https://fpdownload.macromedia.com/get/flashplayer/pdc/11.2.202.451/install_flash_player_11_linux.x86_64.tar.gz
:
% sudo /usr/sbin/update-flashplugin-nonfree --status
Flash Player version installed on this system  : 11.2.202.451
Flash Player version available on upstream site: 11.2.202.451
flash-mozilla.so - auto mode
link currently points to /usr/lib/flashplugin-nonfree/libflashplayer.so
/usr/lib/flashplugin-nonfree/libflashplayer.so - priority 50
/usr/lib/gnash/libgnashplugin.so - priority 10
Current 'best' version is '/usr/lib/flashplugin-nonfree/libflashplayer.so'.

ということで最新の11.2.202.451になりました.
なんで最近apt コマンドで最新になっていないのかは未確認です….

OpenSSH 6.8/6.8p1 で鍵指紋のアルゴリズムの規定値が変わったので試す

openssh

OpenSSH 6.8/6.8p1 のリリースノートを眺めていて気になる点が.
http://www.openssh.com/txt/release-6.8

* Add FingerprintHash option to ssh(1) and sshd(8), and equivalent
command-line flags to the other tools to control algorithm used
for key fingerprints. The default changes from MD5 to SHA256 and
format from hex to base64.
Fingerprints now have the hash algorithm prepended. An example of
the new format: SHA256:mVPwvezndPv/ARoIadVY98vAC0g+P/5633yTC4d/wXE
Please note that visual host keys will also be different.

鍵指紋の規定アルゴリズムがMD5 からSHA256 に変わり,表示形式もhex からbase64 になった,visual host key も変わる.ということで確認してみました.

従来のコマンドでの鍵指紋表示.MD5/hex が使われる

% ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key
256 e8:d0:53:e7:34:59:e9:77:3a:e7:8d:8a:a9:f6:91:84 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
+---[ECDSA 256]---+
|            ..   |
|           o.    |
|        . =.     |
|     . o = .. . .|
|    . + E o  . o |
|     o . . .  o .|
|      .   o    =.|
|        .  +  . o|
|       ..o+ ..   |
+-----------------+

OpenSSH 6.8/6.8p1 のコマンドでの鍵指紋表示.SHA256/base64が使われて鍵指紋の頭にSHA256が付いたりvisual host key の見た目も変わる.

% /home/mk/usr/local/openssh-6.8p1/bin/ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key
256 SHA256:pDZReijOXeDXAE0IgYb5E+DHgbyvClEllKCs499RI54 root@x220(ECDSA)
+---[ECDSA 256]---+
|+*+++oo=+        |
|*o*o...=.o       |
|.=o+. = = .      |
|.o+o o B         |
|+ ..o.=oS        |
|.o ...+..        |
|...  E           |
|... . .          |
|o  . .           |
+----[SHA256]-----+

しかし,-E option が提供されるようになってアルゴリズムを指定できるのでこれでMD5/hex で鍵指紋の確認が可能.
※ssh-keygen —help より

   ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]

※man より

 -E fingerprint_hash
Specifies the hash algorithm used when displaying key fingerprints.  Valid options are: “md5” and “sha256”.  The default is “sha256”.

OpenSSH 6.8/6.8p1 のコマンドでMD5 を指定.MD5/hex で鍵指紋が表示される.ただ,アルゴリズムのMD5 が鍵指紋の頭につくし後ろにcomment も付くのでdiff とかを使うと差異が出る.visual host key も下に[MD5]がつくので同様.

% /home/mk/usr/local/openssh-6.8p1/bin/ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key
256 MD5:e8:d0:53:e7:34:59:e9:77:3a:e7:8d:8a:a9:f6:91:84 root@x220(ECDSA)
+---[ECDSA 256]---+
|            ..   |
|           o.    |
|        . =.     |
|     . o = .. . .|
|    . + E o  . o |
|     o . . .  o .|
|      .   o    =.|
|        .  +  . o|
|       ..o+ ..   |
+------[MD5]------+
% ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key

てことで暫くはMD5/SHA256の2種類の鍵指紋を提供したほうが良さそうですね.

Thinkpad x201s にBluetooth module 増設

最近のメインマシンはThinkpad x201s です.これは2台めで中古で買って元のものとニコイチで使っています.良い部品はだいたい移行していたのですが,Bluetooth module は液晶パネルしたとめんどくさいので後回しになっていたのでした.でもXperia Pro でBluetooth テザリングが可能になったので重い腰を上げることに.実際やってみるとあっという間でした.

Thinkpad は保守マニュアルが日本語で公開されているのでとても便利です :)

昔から公開していて,Webでpdfが公開される前はコピーサービスで入手していました.これのおかげで試行錯誤する必要がなくとても助かっています.これもThinkpadを使っている理由の一つです :)

マニュアルを見ると以下の辺りを参考にLCD全面ベゼルを取り外せば良いようですが,ネジキャップを剥がすのとかが面倒です.試しに赤く印をつけた3本だけを外して試すと旧マシンからモジュールの取り出しが出来ました.同様に新マシンも3本だけネジを外して取り付けも出来ました.
Screenshot from 2015-03-28 10:13:07
IMG_20150328_091845IMG_20150328_093620

組み付けた後起動するとさくっと認識.Bluetooth PAN 接続も問題なく行えました.
Screenshot from 2015-03-28 10:11:29

たまにUSBドングルで利用していましたが内臓はスッキリしてていいですね.

Thinkpad関連でよく利用するお店

  • ThinkFactory IBM Lenovo秋葉原 持込修理 販売 保守パーツ 旧PS/PLAZA WAKAMATSU Thinkpadコーナー
  • 中古 ThinkPad 販売専門店 Be-Stock! 鹿児島県鹿屋市に実店舗がある中古店.通販が主で店舗には余り物は並んでない.言えば出てくる.
  • eBay パーツをよく買う
  • Xperia Pro(MK16a)に入れたCM12を使ってみる

    Xperia Pro(MK16a)にCM12を入れました.ちょこちょこ設定をしてみます.

    Bluetoothテザリングを試す

    先ずはやりたかったBluetoothテザリングの設定などをしてみます.
    といってもメニューから辿ってOnにするだけです.この設定は再起動してもそのままのようです.
    Screenshot_2015-03-27-13-54-20Screenshot_2015-03-27-13-54-36Screenshot_2015-03-27-13-54-52

    後は適当な機器とペアリングをすれば接続できます.同時接続も可能で3台までは確認しました.同時にRazikoをBluetoothヘッドホンで聞いても大丈夫.
    Screenshot_2015-03-27-13-59-43

    このテザリング機能はなかなか良く出来ていて,XperiaProが3Gに接続されている場合はもちろん,Wi-Fiに接続されている場合はそちらにルーティングを行います.これはなかなか便利.
    公衆Wi-Fiサービスなどで1台しか接続できない場合もありますがそういう時も大丈夫ですね.

    暫く使ってみていますが,途中で切れてしまうこともなく安定しています.
    #手持ちのAUの国内端末すぐ通信できなくなるので見習って欲しい….

    root権を使えるようにする

    adb shellからsuでrootになれず.SuperSUも使えなくてあれ?と思ったのですがCM12ではちょっと方法が変わっているようです.開発者向けオプションの中に以下のような設定ができていました.とりあえずADB shellで使いたいので「ADBのみ」の設定に
    Screenshot_2015-03-23-02-15-40 (2)

    カメラのシャッター音を消してみる

    ADBでrootが使えるように設定した後,シャッター音を消すためにadb shellでXperiaProの中に入ります.

    % ./adb shell
    shell@MK16i:/ $
    

    suコマンドでrootになります.

    shell@MK16i:/ $ su
    root@MK16i:/ #
    

    シャッター音らしきファイルをfindコマンドで探します.それらしいものがありました.

    root@MK16i:/ # find /system -name "*.ogg"|grep -i camera
    /system/media/audio/ui/camera_focus.ogg
    /system/media/audio/ui/camera_click.ogg
    

    該当のファイルシステムを書き込みできるようにremountします.

    root@MK16i:/ # df
    Filesystem               Size     Used     Free   Blksize
    /dev                   219.4M    36.0K   219.4M   4096
    /sys/fs/cgroup         219.4M     0.0K   219.4M   4096
    /mnt/asec              219.4M     0.0K   219.4M   4096
    /mnt/obb               219.4M     0.0K   219.4M   4096
    /system                919.5M   568.7M   350.8M   4096
    /cache                   4.0M   804.0K     3.2M   4096
    /data                    2.0G   505.2M     1.5G   4096
    /mnt/media_rw/sdcard0     5.4G   302.5M     5.1G   32768
    /mnt/secure/asec         5.4G   302.5M     5.1G   32768
    /storage/sdcard0         5.4G   302.5M     5.1G   32768
    root@MK16i:/ # mount -o remount,rw /system
    root@MK16i:/ # mount |grep /system
    /dev/block/mtd/by-name/system /system yaffs2 rw,seclabel,relatime 0 0
    

    該当ファイルをリネームします.

    root@MK16i:/ # cd /system/media/audio/ui/
    root@MK16i:/system/media/audio/ui # ls
    Dock.ogg
    Effect_Tick.ogg
    KeypressDelete.ogg
    KeypressInvalid.ogg
    KeypressReturn.ogg
    KeypressSpacebar.ogg
    KeypressStandard.ogg
    Lock.ogg
    LowBattery.ogg
    Trusted.ogg
    Undock.ogg
    Unlock.ogg
    VideoRecord.ogg
    WirelessChargingStarted.ogg
    camera_click.ogg
    camera_focus.ogg
    root@MK16i:/system/media/audio/ui # mv camera_click.ogg camera_click.ogg-
    root@MK16i:/system/media/audio/ui # mv camera_focus.ogg camera_focus.ogg-
    root@MK16i:/system/media/audio/ui # mv VideoRecord.ogg VideoRecord.ogg-
    

    元のようにファイルシステムを読み込み専用に戻します.

    root@MK16i:/ # mount -o remount,ro /system
    root@MK16i:/ # mount |grep /system
    /dev/block/mtd/by-name/system /system yaffs2 ro,seclabel,relatime 0 0
    

    カメラアプリを試すとシャッター音がしなくなっていました.成功のようです.

    アプリを導入してみる

    CM12にしてストレージは結構空きが出来たしSDへの導入も出来るようになりましたが,重いアプリは辛いのであまり入れていません.とりあえずキーボードを活かすためにエディタのJota+,日本語入力のためにFlickWnn,GPSログを取るためにOSMTracker,データやり取りのためにownCloud/Picasa Tool,サイマルラジオのRaziko(radiko.jp,らじる),念の為?Ingressといったところです.
    Screenshot_2015-03-27-14-08-40

    FlickWnn利用時はShift+Spaceで入力切替,右端の地球マークのキーで大文字小文字切り替えです.起動しは遅いけど起動してしまえば普通に入力できます.

    最近メインで使っているSNSのGoogle+も入れてみたのですが,重くて使い物にならないので諦めました.投稿機能だけでいいので軽いものとかがあると良いのですけど….標準ブラウザでの閲覧も重いです.モバイル版だとそこそこ軽いですが,投稿時に写真添付するのに画面遷移が必要だったりと結構ストレスです.この端末では諦めたほうが良さそう.

    しかし,重いとはいえOSが最新になったのは嬉しいです.重いと言っても2.3の頃と同じくらいの重さな感じなので戻す気はしません.今はいろいろと穴が多くてAndroid 4.3以前は使いたくないですしね….
    国内の大抵の端末は2年縛りがあってもそれ以前にサポートやめちゃって穴の開いたまま使うか新しいのに乗り換えるしか無いので辛いです.ずっとサポートされるのが理想ですが,サポートしないならこの端末のように公式でロック解除方法を提供してくれるのが普通になるといいのにと思います(Nexusシリーズなどは公式で初めからロック解除可能).そうしたら今回のようにOSを入れ替えて使い続けることが出来るかもしれません.そうならないとCMの開発対象になる国際端末やその国内版じゃないとなかなか手を出す気にならないです….
    #でも保証が無くなるのを理解しないでサポートに文句言うような人が要ると難しいのかもですね.

    XperiaPro(MK16a)にLolipopベースのCyanogenMod12を導入してみる

    Xperia Pro(MK16a)をBootloader Unlock してみた | matoken’s meme
    でXperia Pro のブートローダーのアンロックをしたのでROMを入れ替えてみます.
    入れ替えるROMはAndroidベースのCyanogenModを利用します.

    CyanogenModのページを見るとXperiaProのイメージはメンテされていないようです.

    古いXperiaのプロジェクトのLegacyXperia Projectを見に行くとアクティブなようなのでこちらのイメージを利用することにします.

    せっかくなのでLolipop ベースのCyanogenMod12 を試してみます.

    BasketBuild からcm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zipを入手しました.cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip.md5 は0byte でした….BasketBuild には8caec5afb32aacd9e529ca31f6df6595 と書かれていたのでこれと突き合わせました.

    % echo '8caec5afb32aacd9e529ca31f6df6595  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip' > cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip.md5
    % md5sum -c cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip.md5
    cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip: 完了
    % sha1sum cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
    7d9b2c06c34bb540f5ed74635e7ddee65d27c2fa  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
    % sha256sum cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip 
    b82909fffea8ddf9ceb4f69b84970e7148a4de1b6f745a7a17f1c9cf9b8b2436  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
    % sha512sum cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip 
    5a7c6b5c0314ee4df6d9e381669518468c265cdeec0c831c20278c852aa2c4c32146ede11a5650b57e07ecddccb02950b58509d3a53310512be704975e0cbae9  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
    

    CyanogenModにはGoogleの不自由なソフトウェアやプロプライエタリなドライバが同梱されていません.別パッケージのGoogle Apps(GApps)として配布されています.

    GAppsは巨大なので機能を削ってスリム化されたパッケージも配布されています.

    今回はこの pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip を利用しました.hashは見当たりませんでした.手元では以下のような感じです.

    % md5sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip
    3ee06867bb52465a83fd7625f7750f75  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip
    % sha1sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip 
    639411d58817e38212b892a34832bbe1db094d36  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip
    % sha256sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip
    f4a88039ff7870eaf989ab63c5d01ac315aecef3e66bff24e723cb8de66681fe  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip
    % sha512sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip 
    daec26a87eb5acb6a492d6a691c2d602adc9fb201a9d9e0604f199654c16c59dcc99f636f21684a38931930951cbf68692a4c4ac717a09a60802fc0d2ce854b2  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip
    

    #このPA_GAppsは記事を書くために確認したら開発をやめちゃうようです><
    ##次の辺りが使えるかもしれません.(未確認)

    cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zippa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip の2ファイルをmicroSD Card にコピーして,microSD をXperiaProに挿します.

    cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip内からboot.imgファイルを取り出します.

    % unzip cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip boot.img
    Archive:  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
    signed by SignApk
    inflating: boot.img
    

    Xperia Pro をnvflash モードで起動します.

    • 電源off 状態からメニューキーを押しながらUSB Cable 接続
    • 右上側面のHDMIコネクタ上のLEDが青になる

    nvflash コマンドでboot.img を送り込み起動させます.

    % ./fastboot flash boot boot.img
    [sudo] password for mk:
    sending 'boot' (8704 KB)...
    (bootloader) USB download speed was 139264kB/s
    OKAY [  0.999s]
    writing 'boot'...
    (bootloader) Download buffer format: boot IMG
    (bootloader) Flash of partition 'boot' requested
    (bootloader) S1 partID 0x00000003, block 0x00000280-0x000002e3
    (bootloader) Erase operation complete, 0 bad blocks encountered
    (bootloader) Flashing...
    (bootloader) Flash operation complete
    OKAY [  1.707s]
    inished. total time: 2.706s
    

    この後,USB Cableを抜いて電源を入れます.LegacyXperiaのロゴが出ている間に下ボリュームキーを連打します.うまく行くとCYANOGEN Recoveryの画面になります.

    IMG_20150327_130657

    先ずはデータ消去を行います.

    • ボリュームの上下でメニューを移動し,Wipe cache partition で電源キーを押し決定
    • ボリュームの上下でメニューを移動し,Wipe data/factory resetで電源キーを押し決定

    ROMを焼きます.

    • ボリュームの上下でメニューを移動し,Apply update で電源キーを押し決定
    • Choose from sdcard0を選択し,SD Card内のcm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zipを選択して焼く
    • 同様にGAppsのpa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zipを焼きます.
    • Reboot system nowで再起動します.

    後はAndroidの初期設定です.しかし,初期設定時はすごく重い(ホームボタンを押してもタイムアウトして何も出ないうちに画面が消灯したりする)ので気長にやりましょう.初期設定が終わればそこそこ実用的な速度になります.

    IMG_20150322_101440
    Screenshot_2015-03-27-13-36-34Screenshot_2015-03-27-13-36-41

    重いけどIngressも動きます.
    Screenshot_2015-03-25-12-45-44Screenshot_2015-03-25-12-59-16

    Xperia Pro(MK16a)をBootloader Unlock してみた

    Xperia Pro(MK16a)を持っているのですが,OSが古いし標準アプリも多くてストレージもいっぱいで使いたいアプリもなかなか入れることが出来ません.
    最近はこの端末にMVNOのSIMを刺してモバイルルータ and GPSロガー的に使っていますがbluetooth tethering も使えずWi-Fi tethering だとバッテリの減りも早いです.ということでカスタムROMやCyanogenMod11か12あたりに入れ替えたいのですがブートローダーにロックがかかっているのでまずはこれを解除しないといけません.Test Point を使ったりするのは面倒だなと思っていたのですが,現在は公式でアンロックコードを手に入れることができるのでこちらで行うことに.
    ※保証がきかなくなります.SEUSなどが利用できなくなります.公式アップデートも利用できなくなるそうです.(まあこれからOTAとか来ることはないと思いますが)

    本体の他に以下のものが必要です.ここでは開発環境の説明はしません.

    • Android 開発環境の動作するPC(今回はDebian Jessie)
    • Android 開発環境の中のfastboot コマンド(sdk/platform-tools 以下)
    • USB A-microB ケーブル

    アンロックコードの入手

    アンロックコードは以下のページから入手できます.

    機種を選択して,メールアドレスを入力すると確認メールが届くので,そのメールのURL をクリックするとIMEIの入力画面になって,そこでIMEI を入力することでCodeが入手できます.

    アンロック

    Xperia Pro の電源を切ります.
    USBケーブルはPCのみに接続する
    電源Off 状態からメニューボタンを押しながらUSBケーブルを接続する
    右上側面のHDMIコネクタ横のLEDが青くなるとFastbootモードになっている

    Fastboot モードの時のdmesgはこんな感じでした.

    [78677.917985] usb 1-1.1: new high-speed USB device number 30 using ehci-pci
    [78678.013776] usb 1-1.1: unable to get BOS descriptor
    [78678.025756] usb 1-1.1: New USB device found, idVendor=0fce, idProduct=0dde
    [78678.025764] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [78678.025769] usb 1-1.1: Product: S1Boot Fastboot
    [78678.025774] usb 1-1.1: Manufacturer: Sony Ericsson Mobile Communications AB
    [78678.025778] usb 1-1.1: SerialNumber: CB5A1G45XXXXXX
    

    fastboot devices コマンドで接続を確認します.

    % ./fastboot devices
    CB5A1G45XXXXXX  fastboot
    % ./fastboot -i 0x0fce getvar version
    version: 0.3
    finished. total time: 0.001s
    

    もしここでno permissions fastboot というエラーが出る場合はadb serverを起動しなおしてみるとうまく行くようです.それでもうまく行かない場合root権限で起動し直す(sudo command)とうまく行ったことも.

    % ./fastboot devices
    no permissions  fastboot
    % ./adb kill-server
    % ./adb start-server
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    % ./fastboot devices
    CB5A1G45XXXXXX  fastboot
    

    問題ないようなら以下のコマンドでアンロックコードを指定してアンロックします.

    % ./fastboot -i 0x0fce oem unlock 0xC3BA1080A6XXXXXX
    ...
    (bootloader) Unlock phone requested
    (bootloader) Erasing block 0x00001300
    (bootloader) Erasing block 0x00001400
    (bootloader) Erasing block 0x00001500
    (bootloader) Erasing block 0x00001600
    (bootloader) Erasing block 0x00001700
    (bootloader) Erasing block 0x00001800
    (bootloader) Erasing block 0x00001900
    (bootloader) Erasing block 0x00001a00
    (bootloader) Erasing block 0x00001b00
    (bootloader) Erasing block 0x00001c00
    (bootloader) Erasing block 0x00001d00
    (bootloader) Erasing block 0x00001e00
    (bootloader) Erasing block 0x00001f00
    OKAY [  4.587s]
    finished. total time: 4.587s
    

    これでアンロック完了です.
    次はOSを入れ替えてみます.

    ケーブルの抜け防止に良さそうな製品

    AVANTEC(アバンテック) | 電源、USB、HDMI等コネクタ、ケーブルの抜け防止製品のご紹介

    サーバやスイッチなんかの電源なんかは抜け防止の金具が付いてますが,PCなんかだと付いてません.
    電源だとサプライ品で見たことありましたがこちらの製品だとUSBやスマホなんかのmicroUSBなんかも対応するものがあるみたい.場合によっては便利そうです.
    オンラインショップはあるようですが,Amazonとかでも売ってると便利そうです.