江戸一番のジャスタウェイ職人のブログ

江戸一番のジャスタウェイ職人

OpenSSL 1.0.2h アップデート

f:id:s-aska:20160504134005p:plain

VPSのメンテなどというものを人はいつまで続けるのか。

とはいえ安くて何でもできるVPSは便利なので1台は保持していたい。

cron-apt とは別に脆弱性検知ツールも導入してみることにした。

github.com

「お前のサーバーのOpenSSLやばいよ?」みたいなのをslackで通知してくれる、Dockerイメージもある、便利。

死活監視、性能監視、外形監視(疎通、DNS、証明書有効期限)あたりとまとめてどこかで動かしていたいがそういうことを考える度に「VPS辞めたい」という気持ちが湧いてくる。

スゲーッ爽やかな気分だぜ。新しいUbuntuを入れたばかりの正月元旦の朝のよーによォ~ッ

まず、sshのパスワード認証を止めます。

インターネットには22番ポートが空いているサーバーを見つけてクラッキングするクローラーが大量に居ます。

ssh

詳しい解説 doc.7kai.org - SSHの設定

# いつもの
mkdir .ssh
chmod 0700 .ssh
echo "自分の公開鍵" >> .ssh/authorized_keys
chmod 0644 .ssh/authorized_keys 
接続確認
exit
ssh username@hostname
パスワードなしでログイン出来るのを確認できたらパスワード認証を無効化します
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vi /etc/ssh/sshd_config

diff -u /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
--- /etc/ssh/sshd_config.bak    2016-04-07 15:32:28.901004710 +0900
+++ /etc/ssh/sshd_config    2016-04-06 19:02:05.076211610 +0900
@@ -25,7 +25,7 @@

 # Authentication:
 LoginGraceTime 120
-PermitRootLogin without-password
+PermitRootLogin no
 StrictModes yes

 RSAAuthentication yes
@@ -49,7 +49,7 @@
 ChallengeResponseAuthentication no

 # Change to no to disable tunnelled clear text passwords
-#PasswordAuthentication yes
+PasswordAuthentication no
反映させて終わり
sudo service ssh restart

鍵なしで接続時にパスワードを聞かれず接続が来られるか確認しておきましょう。

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
ssh username@hostname
> Permission denied (publickey).
mv ~/.ssh/id_rsa.bak ~/.ssh/id_rsa

まずこれで一安心ですが、その後立てるミドルウェアやアプリが丸裸にならないようにファイヤーウォールを設定します。

ufw

便利な時代になりました。

sudo ufw default deny
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status

cron-apt

パッケージの自動更新を設定します。

標準設定ではダウンロードのみでインストールはされません、通知メールを自分でやる派なのでその設定だけ入れます。

通知メールの配送のために postfix が必要ですが、25番ポートを閉じているならSPAM中継に悪用される事はありません。

postfix をインストールする際に構成を聞かれますが Internet Site で入れて後から master.cf から smtpコメントアウトします。

sudo apt-get install cron-apt postfix
sudo vi /etc/cron-apt/config
sudo /usr/sbin/cron-apt

/etc/cron-apt/config

APTCOMMAND=/usr/bin/apt-get
MAILTO="s.aska.org@gmail.com"
MAILON="changes"
DEBUG="changes"
OPTIONS="-o quiet=1"

サーバー監視

すぐ終わるので入れておきましょう。

mackerel.io

MySQL 5.7

AppサーバーにしろDBサーバーにしろclientかserverか大抵どちらか入れます。

最新の MySQL を入れるには mysql-apt-config を公式サイトから導入するのが簡単です。

cd /usr/local/src
sudo wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb
sudo dpkg -i mysql-apt-config_0.6.0-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server
# or 
sudo apt-get install mysql-client

server を入れる場合 root のパスワードを聞かれますが私は blank のまま Enter します。

それでも `sudo mysql` とやれば root でログインできるので、database と user を作り以後これを利用します。

sudo mysql
> CREATE DATABASE justaway DEFAULT CHARSET utf8mb4;
> CREATE USER justaway@192.168.0.20;
> GRANT ALL PRIVILEGES ON justaway.* TO justaway@127.0.0.1;
> FLUSH PRIVILEGES;
> quit

Let's Encryptと透かし入り証明書(nginx-ct)を導入し、証明書の更新も自動化する手順

Let's Encrypt 自体は本当に簡単なんですが nginx-ct を入れるのが本当に億劫でした。

それはなぜか、まず パッケージ管理システムに慣らされた我々にはとてもつらい という気持ちがあります。

コマンド一つでバージョンアップでき、各ディストリビューションに最適化された起動スクリプトやコンフィグファイルが提供されるのですから極力これを使いたいのです。

インストール手順

# まずは最新の nginx パッケージを手に入れる ( http://nginx.org/en/linux_packages.html )
wget -O - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -

sudo sh -c 'echo "deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx" >> /etc/apt/sources.list'
sudo sh -c 'echo "deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx" >> /etc/apt/sources.list'

sudo apt-get update

# そのままインストールしたいのを堪え、ビルドに必要なツールをインストールし、ソースを手に入れます
sudo apt-get build-dep nginx
sudo apt-get source nginx

# 次に、透かし入り証明書の導入に必要な nginx-ct を手に入れます
sudo wget https://github.com/grahamedgecombe/nginx-ct/archive/master.tar.gz
sudo tar xzvf master.tar.gz

# 更に、OpenSSL も最新版を手に入れます
sudo wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
sudo tar zxvf openssl-1.0.2g.tar.gz 

# 最初に手に入れた nginx の configure オプションに nginx-ct と OpenSSL の記述を記述します
cd nginx-1.9.14/
sudo cp debian/rules debian/rules.bak
sudo vi debian/rules
diff -u debian/rules.bak debian/rules

--- debian/rules.bak    2016-04-07 15:22:04.952848801 +0900
+++ debian/rules    2016-04-06 19:46:41.649867569 +0900
@@ -54,7 +54,9 @@
    $(WITH_HTTP2) \
    --with-cc-opt="$(CFLAGS)" \
    --with-ld-opt="$(LDFLAGS)" \
-   --with-ipv6
+   --with-ipv6 \
+   --with-openssl=/usr/local/src/openssl-1.0.2g \
+   --add-module=/usr/local/src/nginx-ct-master

# ビルドします
sudo dpkg-buildpackage -b
cd ..

# インストールします
sudo dpkg -i nginx_1.9.14-1~trusty_amd64.deb

# うっかり apt-get upgrade して nginx-ct を失わないように nginx を更新対象から除外します
sudo apt-mark hold nginx

これならまぁ OpenSSL のバージョンが上がる度に対応すると考えても数分で終わるので耐えられる...筈

証明書の更新の自動化

letsencrypt-auto コマンドの後に ct-submit.sh を叩くスクリプトを用意し、これを crontab にセットします。

install ct-submit

cd /usr/local/src
sudo wget https://github.com/grahamedgecombe/ct-submit/archive/master.tar.gz
sudo tar zxvf master.tar.gz
cd ct-submit-master/
sudo /usr/local/go/bin/go build
sudo install -s -m755 ./ct-submit-master /usr/local/bin/ct-submit

/home/aska/justaway.info/scripts/ct-submit.sh

#!/bin/sh -eu
KEY=/etc/letsencrypt/live/justaway.info/fullchain.pem
SCTS_DIR=/etc/letsencrypt/live/justaway.info/scts
CTSUBMIT=/usr/local/bin/ct-submit

echo 1
sudo sh -c "$CTSUBMIT ct.googleapis.com/aviator \
<$KEY \
>$SCTS_DIR/aviator.sct"
echo 2
sudo sh -c "$CTSUBMIT ct.googleapis.com/pilot \
<$KEY \
>$SCTS_DIR/pilot.sct"
echo 3
sudo sh -c "$CTSUBMIT ct.googleapis.com/rocketeer \
<$KEY \
>$SCTS_DIR/rocketeer.sct"

/home/aska/justaway.info/scripts/renew-cert.sh

#!/bin/sh -eu
# crontab 設定例(rootユーザーのcrontabに入れます)
# 0 4 1 * * /home/aska/justaway.info/scripts/renew-cert.sh

/usr/local/src/letsencrypt/letsencrypt-auto certonly --webroot -d justaway.info --webroot-path /home/aska/justaway.info/static --renew-by-default
/home/aska/justaway.info/scripts/ct-submit.sh

まとめて github で管理すると便利

github.com

江戸から金沢へ

1日目


バスを待つ間にもりもり寿司で昼食

f:id:s-aska:20160306162517j:image
※参考画像

f:id:s-aska:20160306152614j:image
f:id:s-aska:20160306152627j:image
12月にリニューアルされ設備が真新しく高級ホテルの様だった

f:id:s-aska:20160306162539j:image
※参考画像

平日行く観光地はどこも空いていて最高


2日目

https://www.instagram.com/p/BCmd5PAqLDU/


f:id:s-aska:20160306152803j:image

長町武家屋敷跡

f:id:s-aska:20160306152809j:image

妙立寺(忍者寺)

金沢おでん三幸

f:id:s-aska:20160306163149j:image
※参考画像

3日目

ひがし茶屋街

中田屋のロールケーキ

https://www.instagram.com/p/BCmdf4tKLCq/

163 Could not determine source user

dev.twitter.com

Error Codes & Responses にないエラーコードで 163 というものがあり、これはフォロー関係を取得するAPIで source_screen_name が不正な場合などに出る。

Twitter は screen_name を変更できるので、これを考慮して極力 screen_name ではなく user_id を使ってAPIを操作しましょう。

https://api.twitter.com/1.1/friendships/show.json?source_screen_name=[変更前のscreen_name]&...

{"errors":[{"code":163,"message":"Could not determine source user"}]}

Holo の時代は終わった

Justawayではナビゲーションドロワーの制御に v4.app.ActionBarDrawerToggle というの使っているんですが、これはもう非推奨で時代遅れでいつ動かなくなるかわかりません。

警告: [deprecation] android.support.v4.appのActionBarDrawerToggleは非推奨になりました

などとビルドの度に言われかなり煽られます。

で、v7.app.ActionBarDrawerToggle というのを使うといいらしいんですが v7.app.ActionBarDrawerToggle を使うにはそもそもアプリのテーマを Holo から Theme.AppCompat などに変える必要があり、それをやるとアクションバーがマテリアルデザインのツールバーに書き換わりかなりアプリのルック・アンド・フィールが変わります、アプリのデザインをカスタマイズしている場合は結構な改修が必要です。

とはいえ Holo ベースのテーマを使い続けるのは限界とわかったのでまたデザインをやり直そうと思います。

デザインにはこだわりも思い入れもあったんですが、Android 4系を使っていた時の2系のデザインのアプリの残念感を思うとマテリアルデザインに慣れた世代が Holo ベースのアプリを見てもダサく見えるのかなぁとか考えてしまいますね。