この記事では、Ubuntu 環境の ufw 設定について紹介します。
EC2 や VPS 等で Ubuntu を選択することは多いと思いますが、まず最初にやるべき設定の一つがファイアウォールの設定です。
サーバーをインターネットに公開する際、適切なセキュリティ対策は必須であり、その中でも特に重要なのがファイアウォールの設定です。
Ubuntu には「ufw(Uncomplicated Firewall)」というシンプルで使いやすいファイアウォール設定ツールが標準で搭載されています。
その名前の通り、複雑な iptables の知識がなくても、簡単なコマンドで堅牢なファイアウォール設定が可能です。
ufw 設定の必要性
なぜファイアウォールが必要か
インターネットに接続されたサーバーは、常に様々な攻撃にさらされています。
- 不正アクセスの試み
- ポートスキャン
- DoS攻撃(サービス拒否攻撃)
- マルウェアの侵入
などなど・・・。
これらの脅威からサーバーを守るためには、必要なポート以外はすべて閉じるという「デフォルト拒否」の考え方が重要です。
ufw のインストールと基本設定
インストール(原則不要)
Ubuntu には ufw が標準でインストールされています。 基本的には手動でのインストールは不要ですが、一応記載します。
sudo apt update
sudo apt install ufw
基本設定の流れ
ufw を設定する際の基本的な流れです。
- 必要なサービスの許可
- ufwの有効化
推奨設定
1. デフォルトポリシーの設定
基本的にはすべての受信接続を拒否し、すべての送信接続を許可という設定です。
# すべての受信接続を拒否
sudo ufw default deny incoming
# すべての送信接続を許可
sudo ufw default allow outgoing
2. SSHアクセスの許可(重要)
SSHなど必要なサービスへの接続を許可する設定です。
注意
SSHへのアクセスを許可する前に ufw を有効化すると、サーバーから締め出される可能性があります。 もしくは、入れなくなって困ってしまうことがあります(一敗)。
# SSHポート(デフォルトは22)への接続を許可
sudo ufw allow ssh
# または
sudo ufw allow 22/tcp
しかし、SSH のポートが 22 であることは一般的すぎて攻撃の対象になりかねません。
セキュリティを高めるために、SSHのポートを変更する方が良いです。
# 例:SSHのポートを2222に変更している場合
sudo ufw allow 2222/tcp
3. その他の必要なサービスの許可
サーバーの用途はさまざまだと思います。 必要なポートのみ許可していきましょう。
例えば、システムを構築して公開する場合は、Webサーバーのために 80, 443 を許可します。
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
4. ufwの有効化
すべての必要な許可設定が完了したら、ufwを有効化します。
sudo ufw enable
有効化後、確認を求められるので「y」と入力します。
重要なので繰り返します。
SSHへのアクセスを許可する前に ufw を有効化すると、サーバーから締め出される可能性があります。 もしくは、入れなくなって困ってしまうことがあります(一敗)。
5. 設定の確認
sudo ufw status
よく用いるコマンド集
基本コマンド
# ステータス確認
sudo ufw status
sudo ufw status verbose # 詳細表示
# 有効化/無効化
sudo ufw enable
sudo ufw disable
# 設定のリセット
sudo ufw reset
ルールの追加
# ポート番号で指定
sudo ufw allow 80/tcp # TCPの80番ポートを許可
sudo ufw allow 53/udp # UDPの53番ポートを許可
# サービス名で指定
sudo ufw allow http
sudo ufw allow ssh
# 特定のIPアドレスからの接続を許可
sudo ufw allow from 192.168.1.100
sudo ufw allow from 192.168.1.0/24 # サブネット指定
# 特定のIPアドレスの特定のポートへの接続を許可
sudo ufw allow from 192.168.1.100 to any port 22
ルールの削除
# 番号で削除
sudo ufw status numbered # ルールに番号を表示
sudo ufw delete 2 # 2番のルールを削除
# 設定と同じ構文で削除
sudo ufw delete allow 80/tcp
sudo ufw delete allow from 192.168.1.100
拒否ルールの設定
# 特定のポートへの接続を拒否
sudo ufw deny 8080/tcp
# 特定のIPアドレスからの接続を拒否
sudo ufw deny from 10.0.0.5
アプリケーションプロファイルの利用
利用可能なアプリケーションプロファイルの確認
sudo ufw app list
プロファイルの詳細確認
sudo ufw app info 'Nginx Full'
プロファイルを使用したルール追加
sudo ufw allow 'Nginx Full'
ログの設定
# ログを有効化
sudo ufw logging on
# ログレベルの設定(low, medium, high, full)
sudo ufw logging medium
ログは /var/log/ufw.log
に記録されます。
実践的な設定例
基本的なWebサーバー設定
# SSHアクセスの許可
sudo ufw allow ssh
# Webアクセスの許可
sudo ufw allow http
sudo ufw allow https
# ufwの有効化
sudo ufw enable
SSHのセキュリティ強化
特定のIPアドレスからのみSSHアクセスを許可
# 一旦SSHの一般ルールを削除(まだ接続中に実行しないこと)
sudo ufw delete allow ssh
# 特定のIPからのみSSHを許可
sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw allow from 203.0.113.0/24 to any port 22
# 設定を有効化
sudo ufw enable
レート制限の設定
ブルートフォース攻撃対策として、SSHへの接続試行回数を制限
# 30秒以内に6回以上の接続があった場合、以降の接続を拒否
sudo ufw limit ssh
トラブルシューティング
ルールが適用されない場合
-
ufwが有効になっているか確認
sudo ufw status
-
ルールの順序を確認(番号の小さいルールが優先)
sudo ufw status numbered
-
ログを確認
sudo tail -f /var/log/ufw.log
サーバーから締め出された場合
SSHアクセスを許可せずにufwを有効化してしまった場合でも、サービスのコンソール画面では大抵の場合、サーバーにアクセスする手段が用意されている(ことが多い)ので、絶望することはありません。
- VPSプロバイダのコンソールからサーバーにアクセス
- 以下のコマンドを実行
sudo ufw disable sudo ufw allow ssh sudo ufw enable
おわりに
ufwは、Ubuntuサーバーを安全に保つための強力かつシンプルなツールです。
適切なファイアウォール設定は、サーバーセキュリティの第一歩です。
その他のセキュリティ対策(適切なユーザー権限管理、定期的なアップデート、侵入検知システムの導入など)と組み合わせることで、より堅牢なサーバー環境を構築しましょう。
コメント