Ubuntuのファイアウォールが正しく動いているのか不安。セキュリティは大丈夫なのか。特定のポートが開いているか確認したい。
サーバーを運用していると、ファイアウォールの設定は非常に重要です。でも、今どんな状態になっているのか、どのポートが許可されているのか、きちんと確認できていますか?
実は、Ubuntuのファイアウォール設定を確認する方法は、とてもシンプルです。主にUFW(Uncomplicated Firewall)というツールを使えば、初心者でも簡単に状態をチェックできます。
この記事では、Ubuntuのファイアウォール設定を確認する方法を、初心者の方にも分かりやすく解説します。基本的な状態確認から、詳細なルールの調査、トラブルシューティングまで、すべてカバーします。
あなたのシステムのセキュリティ状態を確認して、安心してUbuntuを使いましょう!
Ubuntuのファイアウォールの基礎知識
確認方法の前に、基本を理解しておきましょう。
Ubuntuで使われるファイアウォール
UFW(Uncomplicated Firewall):
Ubuntu標準のファイアウォール管理ツールです。
特徴:
- 名前の通り「複雑でない(Uncomplicated)」
- コマンドがシンプル
- 初心者でも扱いやすい
- iptablesのフロントエンド
iptables:
Linuxカーネルに組み込まれたパケットフィルタリング機能です。
特徴:
- より低レベルで強力
- 設定が複雑
- 上級者向け
- UFWの裏側で動いている
関係性:
UFWは、iptablesを簡単に操作するための「フロントエンド」です。
UFWでルールを設定すると、内部的にiptablesのルールが生成されます。
ファイアウォールの役割
説明:
ネットワークトラフィック(データの流れ)を監視し、許可されていない通信をブロックします。
イメージ:
家の玄関の鍵のようなもの。許可された人(通信)だけを通して、不審者(不正アクセス)をブロックします。
重要性:
- 不正アクセスの防止
- 悪意のあるプログラムの侵入阻止
- サーバーのセキュリティ向上
【最も基本】UFWの状態を確認する
最も簡単で重要な確認方法です。
UFWが有効か無効か確認
コマンド:
sudo ufw status
結果の見方:
有効な場合:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
無効な場合:
Status: inactive
意味:
Status: active
→ ファイアウォールが動作中Status: inactive
→ ファイアウォールが停止中(すべての通信が許可)
重要:
inactive
の場合、ファイアウォールによる保護がありません。セキュリティリスクが高い状態です。
詳細な状態を確認
コマンド:
sudo ufw status verbose
表示例:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
表示される情報:
- Status:有効/無効
- Logging:ログ記録の設定
- Default:デフォルトポリシー(基本動作)
- incoming(受信):deny(拒否)
- outgoing(送信):allow(許可)
- routed(ルーティング):disabled(無効)
番号付きでルールを表示
コマンド:
sudo ufw status numbered
表示例:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 3306/tcp ALLOW IN 192.168.1.0/24
メリット:
ルールに番号が振られているので、特定のルールを削除する時に便利です。
実例:
「ルール2番を削除したい」→ sudo ufw delete 2
【ポート別】開いているポートを確認する
特定のポートが開いているか確認する方法です。
UFWで許可されているポート一覧
コマンド:
sudo ufw status
出力の「To」列に、許可されているポート番号が表示されます。
よく使われるポート:
- 22 → SSH(リモート接続)
- 80 → HTTP(Webサーバー)
- 443 → HTTPS(暗号化されたWeb)
- 3306 → MySQL(データベース)
- 5432 → PostgreSQL(データベース)
- 25 → SMTP(メール送信)
実際にポートが開いているか確認
UFWで許可していても、サービスが起動していなければポートは開きません。
コマンド:
sudo ss -tulpn
または
sudo netstat -tulpn
説明:
-t
:TCPポート-u
:UDPポート-l
:待ち受け(LISTEN)状態-p
:プロセス名を表示-n
:数値で表示(名前解決しない)
表示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:443 0.0.0.0:*
見方:
0.0.0.0:22
→ すべてのIPアドレスからポート22への接続を待ち受けLISTEN
→ ポートが開いている
netstatがない場合:
sudo apt install net-tools
外部から見てポートが開いているか確認
注意:
これは自分のマシンから外部サイトに接続して確認する方法です。
オンラインツール:
ブラウザで「port checker」などで検索し、確認したいポートを入力します。
ncatコマンドを使う:
nc -zv IPアドレス ポート番号
例:
nc -zv 192.168.1.100 22
成功すれば「succeeded」、失敗すれば「failed」と表示されます。
【詳細確認】iptablesで直接確認する
より低レベルの設定を確認できます。
iptablesのルールを表示
コマンド:
sudo iptables -L -v -n
説明:
-L
:ルールをリスト表示-v
:詳細情報を表示-n
:IPアドレスを数値で表示(名前解決しない)
表示例:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ufw-before-logging-input all -- 0.0.0.0/0 0.0.0.0/0
ufw-before-input all -- 0.0.0.0/0 0.0.0.0/0
ufw-after-input all -- 0.0.0.0/0 0.0.0.0/0
注意:
UFWを使っている場合、iptablesの出力は非常に複雑になります。UFWが自動的に多くのルールを生成するためです。
特定のチェーンだけを表示
INPUTチェーン(受信)のみ:
sudo iptables -L INPUT -v -n
OUTPUTチェーン(送信)のみ:
sudo iptables -L OUTPUT -v -n
FORWARDチェーン(転送)のみ:
sudo iptables -L FORWARD -v -n
行番号付きで表示
コマンド:
sudo iptables -L -v -n --line-numbers
ルールの順番が分かりやすくなります。
【GUIツール】グラフィカルに確認する
コマンドが苦手な方向けのGUIツールです。
GUFW(Graphical UFW)
説明:
UFWのグラフィカルフロントエンドです。
インストール:
sudo apt update
sudo apt install gufw
起動方法:
- アプリケーションメニューから「ファイアウォール設定」を検索
- アイコンをクリック
- 管理者パスワードを入力
確認できる情報:
- ファイアウォールの状態(有効/無効)
- 設定されているルール一覧
- デフォルトポリシー
操作:
- スイッチでオン/オフ切り替え
- 「ルール」タブでルール一覧を確認
- 「+」ボタンで新しいルールを追加
メリット:
- マウス操作だけで確認・設定可能
- 視覚的に分かりやすい
- 初心者にやさしい
ログを確認する
ファイアウォールがブロックした通信を確認できます。
UFWのログを有効にする
デフォルトでは無効:
ログ機能がオフになっていることがあります。
有効化:
sudo ufw logging on
レベル指定:
sudo ufw logging low
ログレベル:
off
:ログなしlow
:通常(ブロックされたパケットのみ)medium
:中程度high
:詳細full
:すべて
ログファイルの場所
ログの保存先:
/var/log/ufw.log
確認方法:
sudo tail -f /var/log/ufw.log
リアルタイムでログを監視できます。終了は Ctrl + C
。
最近のブロック記録を見る:
sudo grep 'BLOCK' /var/log/ufw.log | tail -20
ログの見方
ログの例:
Dec 1 10:30:45 ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... SRC=192.168.1.50 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 PROTO=TCP SPT=54321 DPT=22 WINDOW=29200 SYN
重要な情報:
[UFW BLOCK]
:ブロックされたSRC=192.168.1.50
:送信元IPアドレスDST=192.168.1.100
:宛先IPアドレスPROTO=TCP
:プロトコル(TCP)SPT=54321
:送信元ポートDPT=22
:宛先ポート(この場合SSH)
解釈:
192.168.1.50から、ポート22(SSH)への接続がブロックされました。
デフォルトポリシーを確認
何も設定されていない場合の動作を確認します。
現在のデフォルトポリシー
コマンド:
sudo ufw status verbose
表示例:
Default: deny (incoming), allow (outgoing), disabled (routed)
意味:
- incoming(受信):deny
- 明示的に許可していない受信通信は拒否
- outgoing(送信):allow
- すべての送信通信は許可
- routed(転送):disabled
- ルーティング(転送)は無効
推奨設定:
セキュリティのため、incomingはdeny(拒否)が基本です。
デフォルトポリシーの変更(参考)
受信を拒否:
sudo ufw default deny incoming
送信を許可:
sudo ufw default allow outgoing
注意:
デフォルトポリシーを変更する前に、必要なサービス(SSHなど)を明示的に許可しておきましょう。でないと、リモート接続が切れてしまいます。
アプリケーションプロファイルを確認
よく使うアプリケーション用の設定プロファイルです。
利用可能なプロファイル一覧
コマンド:
sudo ufw app list
表示例:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Nginx Full
Nginx HTTP
Nginx HTTPS
プロファイルの詳細
コマンド:
sudo ufw app info OpenSSH
表示例:
Profile: OpenSSH
Title: Secure shell server, an rlogin/rsh replacement
Description: OpenSSH is a free implementation of the Secure Shell protocol.
Port:
22/tcp
説明:
このプロファイルを使えば、個別にポート番号を指定しなくても、アプリケーション名で許可できます。
例:
sudo ufw allow OpenSSH
これで、ポート22(SSH)が許可されます。
現在有効なプロファイル
コマンド:
sudo ufw status
プロファイル名でルールが表示されていれば、そのプロファイルが有効です。
表示例:
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
特定のIPアドレスからのアクセスを確認
どのIPアドレスからの接続が許可されているか確認します。
全ルールを確認
コマンド:
sudo ufw status numbered
表示例:
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 3306/tcp ALLOW IN 192.168.1.0/24
[ 4] 22/tcp ALLOW IN 203.0.113.10
意味:
- ルール1、2:すべてのIPアドレスから許可
- ルール3:192.168.1.0/24(192.168.1.1~192.168.1.254)から許可
- ルール4:203.0.113.10のみから許可
特定のIPが許可されているか検索
方法:
sudo ufw status | grep "203.0.113.10"
該当するルールがあれば表示されます。
UFWが正しく動作しているか確認
ファイアウォール自体の動作を確認します。
UFWのサービス状態
コマンド:
sudo systemctl status ufw
正常な場合:
● ufw.service - Uncomplicated firewall
Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2024-10-17 10:00:00 JST; 2h 30min ago
確認ポイント:
Active: active
→ 起動中enabled
→ システム起動時に自動起動
起動していない場合:
sudo systemctl start ufw
自動起動を有効化:
sudo systemctl enable ufw
iptablesが適用されているか
コマンド:
sudo iptables -S | head -20
UFWが動作していれば、多くのルールが表示されます。
何も表示されない場合:
iptablesのルールが適用されていません。UFWの設定を見直しましょう。
よくあるトラブルシューティング
ファイアウォール確認時の問題と解決方法です。
問題1:「Permission denied」エラー
原因:
管理者権限が必要なコマンドを、sudo
なしで実行しています。
解決法:
コマンドの前に sudo
を付けます。
sudo ufw status
問題2:UFWがインストールされていない
確認:
which ufw
何も表示されなければ、インストールされていません。
インストール:
sudo apt update
sudo apt install ufw
問題3:ルールを設定したのに反映されない
原因:
UFWが有効になっていません。
確認:
sudo ufw status
Status: inactive
なら無効です。
有効化:
sudo ufw enable
注意:
リモート接続(SSH)している場合、SSHポートを許可してからenableしましょう。
sudo ufw allow 22/tcp
sudo ufw enable
問題4:設定が複雑で分からなくなった
リセット方法:
sudo ufw reset
すべてのルールが削除され、初期状態に戻ります。
警告:
リモート接続中に実行すると、接続が切れる可能性があります。
問題5:ログが大きくなりすぎた
ログファイルのサイズ確認:
ls -lh /var/log/ufw.log
ログローテーション:
Ubuntuは自動的にログをローテーションしますが、手動で削除することもできます。
sudo truncate -s 0 /var/log/ufw.log
または
sudo rm /var/log/ufw.log
次回ログが発生すると、新しいファイルが作成されます。
セキュリティチェックリスト
ファイアウォール設定で確認すべき項目です。
基本チェック
1. ファイアウォールは有効か?
sudo ufw status
Status: active
になっているか確認。
2. デフォルトポリシーは適切か?
sudo ufw status verbose
Default: deny (incoming)
になっているか確認。
3. 必要なポートだけが開いているか?
sudo ufw status numbered
不要なポートが開いていないか確認。
4. SSHポートは制限されているか?
外部に公開する場合、特定のIPアドレスからのみ許可するのが安全です。
sudo ufw status | grep 22
5. 不要なサービスは停止しているか?
sudo ss -tulpn
開いているポートに対応するサービスが必要かどうか確認。
定期的な確認
月に一度:
- ルール一覧の見直し
- ログの確認(不審なアクセスがないか)
- 不要なルールの削除
新しいサービス追加時:
- 必要最小限のポートのみ開く
- 可能であればIPアドレス制限を追加
- ログで動作確認
実践的な確認例
具体的なシナリオでの確認方法です。
シナリオ1:Webサーバーのファイアウォール確認
必要なポート:
- 80(HTTP)
- 443(HTTPS)
確認コマンド:
sudo ufw status | grep -E '80|443'
正しい設定例:
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
シナリオ2:SSHサーバーの確認
確認:
sudo ufw status | grep 22
望ましい設定例(特定IPから):
22/tcp ALLOW 203.0.113.10
または:
OpenSSH ALLOW 203.0.113.10
シナリオ3:データベースサーバーの確認
MySQLの場合:
sudo ufw status | grep 3306
正しい設定例(ローカルネットワークのみ):
3306/tcp ALLOW 192.168.1.0/24
外部から直接アクセスできないようにします。
まとめ:定期的な確認でセキュリティを保とう
Ubuntuのファイアウォール確認方法をまとめます。
最も基本的な確認:
sudo ufw status
これだけで、有効/無効と基本的なルールが分かります。
詳しく確認したい時:
sudo ufw status verbose
sudo ufw status numbered
実際に開いているポートを確認:
sudo ss -tulpn
ログを確認:
sudo tail -f /var/log/ufw.log
GUIで確認したい場合:
sudo apt install gufw
インストール後、アプリケーションメニューから起動。
重要なコマンド一覧:
目的 | コマンド |
---|---|
状態確認 | sudo ufw status |
詳細表示 | sudo ufw status verbose |
番号付き表示 | sudo ufw status numbered |
ログ確認 | sudo tail /var/log/ufw.log |
開いているポート | sudo ss -tulpn |
iptables確認 | sudo iptables -L -v -n |
アプリ一覧 | sudo ufw app list |
サービス状態 | sudo systemctl status ufw |
セキュリティチェックポイント:
- ファイアウォールは有効か(active)
- デフォルトは受信拒否(deny incoming)
- 必要なポートだけが開いている
- 不要なサービスは停止している
- ログで不審なアクセスがないか
トラブル時の対処:
Permission denied
→sudo
を付ける- UFWがない →
sudo apt install ufw
- 反映されない →
sudo ufw enable
で有効化 - 分からなくなった →
sudo ufw reset
でリセット
ベストプラクティス:
- 月に一度はルールを見直す
- ログを定期的に確認
- 不要なルールは削除
- SSHは特定IPに制限
- データベースは内部ネットワークのみ許可
この3ステップで、基本的なセキュリティチェックができます。
こんな時に確認が必要:
- 新しいサービスをインストールした後
- ポートが開かない/つながらない時
- セキュリティ監査の時
- サーバーを公開する前
- 定期的なメンテナンス
コメント