やりたかったこと

VPSを立ち上げた後、不要なポートを閉じてセキュリティを強化したかった。 UFW(Uncomplicated Firewall)はコマンドが直感的で使いやすかった。

UFWのインストールと有効化

# Ubuntuはデフォルトで入っている場合が多い
sudo apt install ufw

# 状態確認
sudo ufw status

有効化する前に必ずSSHを許可しておく。これをやらないとVPSにログインできなくなる。

sudo ufw allow ssh      # ポート22を許可
sudo ufw enable         # UFWを有効化

ポートの許可と拒否

# ポート番号で指定
sudo ufw allow 80
sudo ufw allow 443
sudo ufw deny 8080

# サービス名で指定
sudo ufw allow http
sudo ufw allow https

# 特定のIPアドレスからのみ許可
sudo ufw allow from 192.168.1.100 to any port 22

ルールの確認と削除

# 番号付きで一覧表示
sudo ufw status numbered

# 番号指定で削除
sudo ufw delete 3

# ルールを直接指定して削除
sudo ufw delete allow 8080

UFWのリセット

設定をやり直したい時。

sudo ufw reset

リセット後はSSHの許可から再設定する必要がある。

よく使うポートをまとめて設定する

# Webサーバー
sudo ufw allow 80
sudo ufw allow 443

# SSH(デフォルトポートを変えた場合)
sudo ufw allow 2222

# nginx + Node.jsの場合(3000はローカルのみ)
sudo ufw allow 80
sudo ufw allow 443
sudo ufw deny 3000

現在の設定を確認する

sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)

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

ハマったポイント

  • ufw enable する前に必ず ufw allow ssh を実行する(忘れるとSSH接続できなくなる)
  • ポート番号とサービス名は同じ意味(allow 22allow ssh は同じ)
  • ufw reset するとSSHの設定も消えるので要注意
  • Dockerを使っている場合、UFWのルールをDockerが迂回することがある(DOCKER-USER チェーンの設定が必要)
  • デフォルトで incoming は deny になっているので、必要なポートだけ明示的に許可する

UFWを設定する前に、LinuxのSSH接続の基本(VPSに接続する方法)でSSHポートの設定を確認しておくと、誤ってSSH接続を遮断するリスクを減らせる。

関連記事

おすすめのVPS/ドメイン

VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。