コース一覧
サーバー運用実践:セキュリティ・監視・デプロイ
ufwファイアウォール

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

構築済みの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分

ufwファイアウォール

通す番号を、こちらから決める

ここまでで、入口の扉は締めました。次は、そもそもどの番号への接続を受け付けるかを決めます。これがファイアウォールの仕事です。

考え方は権限最小と同じです。全部を開けておいて危ないものを塞ぐのではなく、全部を閉じておいて必要なものだけ開ける。前者は塞ぎ忘れがそのまま穴になりますが、後者は開け忘れても不便になるだけで、危険にはなりません。

Debian で使うのは ufw です。名前は uncomplicated firewall の略で、その名のとおり、細かい仕組みを覆い隠して数行で書けるようにした道具です。

まず既定を決める

ターミナル

ufw default deny incoming
ufw default allow outgoing

入ってくる接続は既定で拒む、出ていく接続は既定で許す、という宣言です。サーバーが自分から取りに行く通信、たとえば apt でのパッケージ取得は出ていく側なので、こちらは許しておきます。

開ける番号を足す

ターミナル

ufw allow 22/tcp
ufw allow 80/tcp

22 は SSH、80 は HTTP です。番号のうしろの /tcp は、そのプロトコルに限る指定です。付けなくても動きますが、付けたほうが意図がはっきりします。

順番を間違えると自分が締め出される

ここが今回のいちばんの勘どころです。有効にする前に、必ず 22 番を先に許可します。

ターミナル

ufw allow 22/tcp    # 先にこれ
ufw enable          # そのあとでこれ

逆にすると、既定の deny が効いた瞬間に自分の SSH 接続も拒まれます。手元の VM ならやり直せますが、遠くにあるサーバーでは物理的に触れない限り復旧できません。実際によくある事故です。

ufw enable を打つと、いま繋がっている接続が切れるかもしれない、という警告が出て確認を求められます。あの警告はこの事故を指しています。

いまの状態を読む

ターミナル

ufw status verbose

プレーンテキスト

Status: active
Default: deny (incoming), allow (outgoing), disabled (routed)

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere

verbose を付けると既定の方針まで出ます。付けないと規則の一覧だけになるので、「既定が deny になっているか」を確かめたいときは必ず付けてください。

Anywhere は、どこからの接続でも許す、という意味です。接続元を絞りたいときは、こう書けます。

ターミナル

ufw allow from 203.0.113.10 to any port 22

決まった場所からしか運用しないなら、SSH はこの形にしておくと守りが一段強くなります。

規則を消す

ターミナル

ufw status numbered
ufw delete 2

番号を振って表示させ、その番号で消します。消すと番号が振り直されるので、複数消すときは大きい番号から消してください。小さいほうから消すと、あとの番号がずれて別の規則を消します。

手を動かす

既定を拒否に切り替え、SSH と HTTP だけを通す状態にします。順番を守り、有効にしたあともサイトと SSH が生きていることを確かめます。

ヒント

全部閉じてから必要なものだけ開ける、が守りの基本の形です

規則を複数消すときは、番号がずれないよう大きいほうから消します

  • 1. ufw default deny incoming と ufw default allow outgoing で既定を決める
  • 2. ufw allow 22/tcp を先に打つ
  • 3. ufw allow 80/tcp を打つ
  • 4. ufw enable で有効にする
  • 5. ufw status verbose > /root/ufw-status.txt に保存し、サイトと SSH が生きていることを確かめる

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

8 項目で採点します