やりたかったこと
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 22とallow sshは同じ) ufw resetするとSSHの設定も消えるので要注意- Dockerを使っている場合、UFWのルールをDockerが迂回することがある(
DOCKER-USERチェーンの設定が必要) - デフォルトで incoming は deny になっているので、必要なポートだけ明示的に許可する
UFWを設定する前に、LinuxのSSH接続の基本(VPSに接続する方法)でSSHポートの設定を確認しておくと、誤ってSSH接続を遮断するリスクを減らせる。
関連記事
おすすめのVPS/ドメイン
VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。