Let’s Encryptの更新方法と更新の自動化

この投稿でLet’s Encryptで無料でSSL証明書を作りましたが有効期限が切れそうなので更新します。
環境は、サーバはさくらのVPS、OSはUbuntu16.04、webサーバはnginxです。

更新方法

参考:https://certbot.eff.org/#ubuntuxenial-nginx

Automating renewal

有効期限が切れる前に自動的に証明書を更新するようにCertbotを設定することができます。 Let’s Encrypt Encryptは90日間使用できるので、この機能を利用することをお勧めします。このコマンドを実行すると、証明書の自動更新をテストできます。

Ubuntu Xenial上のCertbotのバージョンに「電子メールなしで登録する!」という警告が表示されるバグがあります。以前にCertbotに電子メールを送っていたとしても。これが起こっても心配しないでください。更新には影響しません。それが正しく動作していると思われる場合は、以下を実行するcronまたはsystemdジョブを追加して自動更新を手配できます

更新する

更新はNginxをとめないといけません。止めずにrenewコマンドを実行すると、エラーがでます。

手動で更新する

Nginxを停止したのちに、renewコマンドを実行して、Nginxを再開するか、webrootプラグインを利用して、renewコマンドを実行する必要があります。webrootプラグインを利用する場合、80ポートにアクセスしてNot Foundとかにならないようにする必要があるようです。私の場合、httpsでしか接続できない(httpの場合強制的にhttpsにリダイレクトさせる)ようにしてあるので、webrootは使えませんでした。Nginx停止&再開をrenewコマンドの前後でやってみます。

自動更新させる

自動更新はcronを使います。

.crontabの中身を下記のようにします。

あるいは、ログを残しておく場合は下記のようにします。

crontabに反映させます。

設定がうまく反映できているかの確認をしたい場合、一旦上記cronの実行頻度を変更してすぐに実行させるようにしつつ、下記のような感じでログ出力したらいいと思います。

Ubuntu – cron

Ubuntu16.04です。

cronを使うには、crontabコマンドを使います。
crontab -e とやるとcronの編集ができますが、cron -rとやるとcronの設定内容が消えるので、危ないので気を付けるようにとネットでよく書いてあります。紹介されているのは、crontab -eで直接編集するのではなく、別ファイルでcron内容を作成・編集してcrontabで読み込むことです。

これで.crontabに書いた設定が反映されます。
ubuntu16.04の場合、cronの実行ログはデフォルトでは表示されないぽいです。またログの表示設定をしても、デフォルトでは、/var/log/cron.logは出力されず、/var/log/syslogに出力されるようです。実行ログのみでエラー内容や標準出力はログには残りません。/var/log/syslogにcronログを出力させるには、下記ファイルのcron関連のコメントを外してrsyslogを再起動します。

cronで実行結果をログに出力させるには、下記のようにします。
.crontab

2>&1の2は標準エラー出力、1は標準出力です。2を標準出力にリダイレクトさせることによって、エラーも出力されます。

複数コマンドを実行する場合、;か&&でつなげます。;は、前のコマンドがエラーでも次を実行します。&&はエラーだったら次を実行しません。複数コマンドを1行でつなげた場合、例えば下記のようにやっても最後のコマンドの出力以外は受け取れません。

下記のようにすると、最初のコマンドのエラーも含めた出力がファイルに保存されます。

下記なら、最初のechoに誤字があるので、その時点でエラーで終了し、エラー内容がファイルに出力されます。

さくらVPSにUbuntu16.04を入れた後の各種設定方法(1)

さくらVPSにUbuntu16.04を入れました。設定をしていきます。

参考:Ubuntuインストール

アップデート

SSH関連の設定

.sshディレクトリの作成

とりあえず.sshディレクトリを作成します。

公開鍵・秘密鍵を作成して公開鍵をサーバに転送する

次にローカルで秘密鍵を作成します。今windows10を使っていますが、gitをインストールしたらssh-kegenが入っているのでそれを使えるようです。あるいは、Tera Termでも簡単に作れます。作成した公開鍵をサーバに転送します。scpの場合下記のようになります。

サーバでauthorized_keysを作成する

サーバで、転送した公開鍵を./ssh/authorized_kesyに追加します。

SSHログインチェック

ローカルで下記のようにやってみます。windowsの場合、TeraTermを使ったりします。下記のhoge_rsaは秘密鍵です。

パスワード聞かれずにログインできたら成功です。

パスワードログインを禁止にする

  • Portを1万台にする
  • ルートログインを禁止する
    PermitRootLogin no
  • パスワードログインを禁止する
    PasswordAuthentication no
  • 指定したユーザーだけログイン可能にする(最下段に追加)
    AllowUsers ユーザー名

ファイル内のポート番号22を上記で変更した値にすべて変える

何も起こらなければ成功

sshサーバの再起動

TeraTermのマクロ作成

私はwindows10を使うときに、Teratermのマクロを使っていますので、それを作成します。

ファイヤーウォールの設定

ufwというコマンドで設定します。

VimとGitも入れておく

fail2banを入れる

下記を参考にやってみた。まず、/etc/fail2banに移動して、jail.localというファイルをつくって、そこに設定を書くといいらしい。

参考:Fail2ban fails to run after upgrade to Ubuntu 16.04
参考:How To Protect SSH With Fail2Ban on CentOS 7
参考:How To Protect SSH with Fail2Ban on Ubuntu 14.04

jail.local

fial2banを再起動する。enableは自動起動設定らしい。

下記で状態をチェックできる。statusの次にjail_nameをつけると、その詳細が表示される。

間違ったrootログインをしたら、fail2ban-client status sshdが更新された。しっかり動いている。でもメールの設定とかはまだ不十分かもしれない。

ログの場所のメモ

fail2banのログ

認証関連のログ

つかれた。残りは今度やる。セキュリティ対策は沢山やることあるなー。
参考: Ubuntu 12.04 LTSサーバーを安全にする