コース一覧
サーバー運用実践:セキュリティ・監視・デプロイ
sshdを固める

サーバー運用実践:セキュリティ・監視・デプロイ

構築済みのnginxサーバーを、専用ユーザー・SSH鍵認証・ufwで保護し、HTTPS化、ログとヘルスチェックの監視、systemdタイマー、リリース切替、ロールバック、障害復旧までを実践します。本番を想定した安全な公開・監視・デプロイの基本を身につける30レッスンのコースです。

1
セキュリティのきほん
01. 専用ユーザーで動かす16分
02. SSH鍵認証16分
03. sshdを固める16分
04. ufwファイアウォール16分
05. ポートの棚卸し16分
06. ミッション サーバーを固める16分
07. 第4章クイズ12分
2
HTTPS
01. HTTPSとTLSのしくみ16分
02. 自己署名証明書を作る16分
03. nginxにHTTPSを設定16分
04. HTTPからのリダイレクト16分
05. ミッション HTTPS化完了16分
06. 第5章クイズ12分
3
運用と監視
01. tmuxで多重端末16分
02. ログローテーション16分
03. エラーログ監視16分
04. ヘルスチェック16分
05. systemdタイマー16分
06. ミッション 監視の自動化16分
07. 第6章クイズ12分
4
デプロイ
01. デプロイの型16分
02. シンボリックリンク16分
03. deploy.sh v216分
04. ロールバック16分
05. ミッション ワンコマンドデプロイ16分
06. 第7章クイズ12分
5
総合制作
01. ゼロから構築ミッション16分
02. 障害対応演習16分
03. 自由拡張16分
04. 完成と次のステップ16分

sshdを固める

鍵を用意しただけでは、入口は閉じていない

前の回で deploy は鍵で入れるようになりました。ただし、この時点でパスワードでのログインも root での直接ログインも、まだ有効なままです。強い鍵を作っても、隣に緩い扉が開いていれば意味がありません。

塞ぐ場所は1つのファイルです。

ターミナル

vi /etc/ssh/sshd_config

名前が紛らわしいので先に整理します。ssh_config はこちらから出ていくときの設定、sshd_config は向こうから入られるときの設定です。末尾の d はデーモンの d でした。締めるのは sshd_config のほうです。

締める行は2つ

プレーンテキスト

PermitRootLogin no
PasswordAuthentication no

1つ目は、root で直接入るのを禁じます。root は何でもできるうえ、名前が全世界で共通なので、真っ先に狙われます。まず deploy で入り、必要なときだけ権限を上げる。この形にしておけば、狙われる名前がひとつ減ります。

2つ目は、パスワードでのログインそのものを止めます。総当たりが通る余地が消えるので、効きがいちばん大きい1行です。これを入れる前に、鍵で入れることを必ず確かめておいてください。順番を逆にすると自分が入れなくなります。

既定のファイルでは、この2行が # で始まるコメントとして書かれていることがあります。その場合は # を外して値を書き換えます。コメントのまま値だけ直しても効きません。

反映の前に文法を見る

設定を書き換えたら、nginx のときと同じことをします。

ターミナル

sshd -t

何も出なければ問題なしです。誤りがあれば行番号付きで教えてくれます。これを飛ばして再起動すると、sshd が立ち上がれず、そのサーバーに二度と入れなくなります。nginx なら最悪サイトが止まるだけですが、こちらは復旧する手段まで失います。手を抜けない一手です。

いま入っている接続は切れない

ターミナル

systemctl restart ssh

再起動しても、すでに繋がっている接続は切れません。切り替わるのはこれから来る接続だけです。これを利用して、次の手順を守ります。

  1. いまの接続はそのまま開けておく
  2. 別の窓を新しく開いて、鍵で入れるか試す
  3. 入れたと確かめてから、最初の接続を閉じる

入れなくなっていた場合、最初の接続が生きていれば設定を戻せます。閉じてしまうと戻せません。締める作業では必ずこの順番を踏んでください。

いま効いている値を確かめる

ファイルに書いた内容と、実際に効いている値は別物です。書き間違いや、あとの行での上書きがあり得ます。sshd 自身に聞くのが確実です。

ターミナル

sshd -T | grep -i permitrootlogin
# permitrootlogin no

-T は、すべての設定項目を解決した結果を並べて出す指定です。nginx の nginx -T と同じ発想で、思い込みではなく実際の値を見られます。

手を動かす

root での直接ログインとパスワードでのログインを止め、文法を確かめてから反映します。deploy が鍵で入れる状態が保たれていることも確かめます。

ヒント

ssh_config は出ていくとき、sshd_config は入られるときの設定です

sshd -T は、すべての項目を解決したあとの実際の値を並べて出します

  • 1. /etc/ssh/sshd_config の PermitRootLogin を no にする
  • 2. PasswordAuthentication を no にする。# が付いていたら外す
  • 3. sshd -t で文法を確かめる
  • 4. systemctl restart ssh で反映する
  • 5. sshd -T > /root/sshd-effective.txt を保存し、効いている値を読む

Linux は使うときに起動します(初回は約102MB通信します)

8 項目で採点します