Debianで外部からの不要な通信を遮断するなら、初心者にはUFW(Uncomplicated Firewall)が扱いやすい方法です。本記事では、Debian 13でUFWを導入し、必要なポートだけを許可する手順を解説します。
基本設定は、受信を拒否・送信を許可にしたうえで、SSHやWebサーバーなど、実際に使う受信ポートだけを追加します。SSH接続中のDebianでは、UFWを有効にする前にSSHの許可が必要です。
DebianのUFWとnftablesの違い
Debianでは、Linuxカーネルのnftablesが標準のパケットフィルタリング基盤です。一方のUFWは、複雑なファイアウォール操作を短いコマンドで管理しやすくするツールです。
| 方式 | 特徴 | 向いている人 |
|---|---|---|
| UFW | allowやdenyなどの短いコマンドで設定できる |
初心者、一般的なPC・サーバー |
| nftables | ルールを細かく設計でき、ルーターや複雑なサーバー構成にも対応しやすい | 高度な制御が必要な管理者 |
本記事では、日常的なPCや小規模サーバーで扱いやすいUFWを使います。UFWの利用中に、別の方法でnftablesやiptablesの永続ルールを同時管理すると、設定が分かりにくくなるため避けてください。
sudo nft list rulesetでも確認できます。ただし、UFW管理中は表示されたルールを直接書き換えず、原則としてufwコマンドで変更します。
設定前に確認すること
管理者権限を使えるか確認する
本記事のコマンドは、管理者権限が必要なためsudoを付けて実行します。現在のユーザーがsudoを使えない場合は、先にsudoグループへの追加などを済ませてください。
SSHで接続している場合は先にポートを確認する
別のPCからSSHでDebianへ接続している場合、SSHの受信を許可せずにファイアウォールを有効化すると、再接続できなくなる可能性があります。
sudo ss -lntup
通常のSSHはTCPの22番ポートを使います。SSHのポートを変更している場合は、以降の22を実際のポート番号へ置き換えてください。
UFWでファイアウォールを設定する手順
1UFWをインストールする
端末を開き、パッケージ情報を更新してUFWをインストールします。
sudo apt update
sudo apt install ufw
インストール直後は、通常UFWがまだ有効になっていません。状態を確認します。
sudo ufw status verbose
Status: inactiveと表示された場合は無効な状態です。この時点では異常ではありません。
2受信を拒否し、送信を許可する
基本方針として、外部からDebianへ新しく入ってくる通信を拒否し、Debianから外部へ出ていく通信は許可します。
sudo ufw default deny incoming
sudo ufw default allow outgoing
この設定でも、Web閲覧、APTによる更新、メールの送受信など、Debian側から開始する一般的な通信は通常そのまま利用できます。
3必要な受信ポートを許可する
SSHを使っている場合は、UFWを有効にする前に必ず許可します。
sudo ufw allow 22/tcp comment 'SSH'
SSHを使っていないデスクトップPCでは、このルールを追加する必要はありません。Webサーバーなどを動かしている場合は、必要なポートだけを同様に許可します。
4UFWを有効にする
sudo ufw enable
SSH接続に影響する可能性を知らせる確認が表示されたら、許可ルールが登録済みであることを確認し、yを入力してEnterキーを押します。ufw enableを実行すると、その場で有効になり、次回起動時にも自動的に適用されます。
5設定結果を確認する
sudo ufw status verbose
USER@debian:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
Status: activeと表示され、必要なポートだけがALLOW INになっていれば基本設定は完了です。
必要なポートを許可・制限する方法
ポート番号を指定して許可する
| 用途 | ポート | 設定例 |
|---|---|---|
| SSH | 22/tcp | sudo ufw allow 22/tcp |
| HTTP | 80/tcp | sudo ufw allow 80/tcp |
| HTTPS | 443/tcp | sudo ufw allow 443/tcp |
| リモートデスクトップ | 3389/tcp | sudo ufw allow from 192.168.1.0/24 to any port 3389 proto tcp |
| NFSv4 | 2049/tcp | sudo ufw allow from 192.168.1.0/24 to any port 2049 proto tcp |
複数のWeb用ポートをまとめて許可する
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
特定のLANからだけ許可する
SSH、Samba、NFS、リモートデスクトップなどを家庭内LANだけで使う場合は、接続元を制限すると安全性を高められます。
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp comment 'SSH from LAN'
192.168.1.0/24は、IPアドレスが192.168.1.1~192.168.1.254の機器をまとめて表す例です。自宅のネットワークが192.168.0.xや10.0.0.xの場合は、その環境に合わせて変更します。
ip -br address
ip route
SSHへの連続接続を制限する
UFWのlimitを使うと、同じIPアドレスから短時間に繰り返される接続を制限できます。
sudo ufw limit 22/tcp comment 'Rate limit SSH'
すでにallow 22/tcpがある場合は、後述の方法で古い許可ルールを削除してから、ルールの重複がないことを確認します。接続元をLANや固定IPに限定できる環境では、IPアドレスによる制限を優先するとより確実です。
アプリケーション名で許可する
インストール済みのソフトウェアがUFW用プロファイルを提供している場合は、ポート番号の代わりにアプリケーション名を使えます。
sudo ufw app list
sudo ufw app info OpenSSH
sudo ufw allow OpenSSH
表示名は環境によって異なります。app listにない名前は使わず、必ずapp infoで開放されるポートを確認してください。
ルールを確認・削除・初期化する方法
ルールに番号を付けて表示する
sudo ufw status numbered
登録したルールを削除する
元のルールを指定して削除する方法が分かりやすく、IPv4とIPv6へ同時に作られたルールもまとめて削除できます。
sudo ufw delete allow 80/tcp
番号を使う場合は、削除直前に一覧を表示してから対象番号を指定します。
sudo ufw status numbered
sudo ufw delete 3
status numberedを実行してください。
設定を再読み込みする
sudo ufw reload
通常、ufwコマンドでルールを追加・削除するとすぐに反映されます。設定ファイルを編集した場合などに再読み込みを使います。
UFWを無効にする
sudo ufw disable
この操作は現在のファイアウォールを停止し、起動時の有効化も解除します。再び使う場合はsudo ufw enableを実行します。
すべての設定を初期化する
sudo ufw reset
resetはUFWを無効にし、登録したルールをすべて初期化します。必要なルールを記録してから実行してください。
遮断ログを確認する
ログレベルは、まず負荷の小さいlowで十分です。
sudo ufw logging low
sudo journalctl -k --since today | grep 'UFW'
rsyslogを導入している環境では、/var/log/ufw.logにも記録される場合があります。高いログレベルは記録量が増えるため、常用する前にディスク容量への影響を確認してください。
GUFWを使って画面操作で設定する方法
コマンド操作が不安な場合は、UFWの画面操作用ツールであるGUFWを利用できます。
sudo apt update
sudo apt install gufw
インストール後、アプリ一覧から「Firewall Configuration」または「ファイアウォール設定」を開き、管理者認証を行います。
- プロファイルで「Home」など利用環境に合うものを選ぶ
- 受信を「Deny」、送信を「Allow」にする
- 「Rules」で必要なサービスまたはポートだけを追加する
- 「Status」をオンにする
UFW設定後につながらない場合の確認ポイント
1. UFWのルールを確認する
sudo ufw status verbose
sudo ufw status numbered
ポート番号、TCP・UDP、接続元IPアドレスに誤りがないか確認します。
2. サービスが実際に待ち受けているか確認する
sudo ss -lntup
UFWでポートを許可しても、SSHやWebサーバーなどのサービス自体は起動しません。対象ポートが表示されない場合は、サービスのインストール、起動状態、待ち受けアドレスを確認します。
3. Debian以外の経路も確認する
インターネット側から接続する場合は、UFW以外にも次の設定が関係します。
- 家庭用ルーターのポート転送
- VPSやクラウド側のファイアウォール/セキュリティグループ
- 契約回線のIPv4・IPv6方式やCGNAT
- 接続先IPアドレスとポート番号
UFWでALLOWと表示されても、ルーターやクラウド側で遮断されていれば外部から接続できません。
4. Dockerで公開したポートに注意する
Dockerで-pやComposeのportsを使ってコンテナのポートを公開すると、通信がUFWの通常ルールより先に処理され、UFWの設定が期待どおり適用されない場合があります。
127.0.0.1:8080:80のように明示する、リバースプロキシ側で制御する、Docker向けのフィルタリング設計を別途行うなど、構成全体で確認が必要です。
5. SSHで締め出された場合
ローカルの画面とキーボード、VPSのWebコンソール、シリアルコンソールなどからログインし、いったんUFWを無効化します。
sudo ufw disable
SSHの実際のポートと接続元を確認し、許可ルールを修正してから再度有効化します。
よくある質問
家庭内のDebianにもファイアウォールは必要ですか?
受信を拒否するとWebサイトを見られなくなりませんか?
deny incomingは、外部から新しく開始される不要な受信を拒否する設定です。Debian側から開始したWeb閲覧などの通信と、その応答は通常許可されます。UFWを有効にすると再起動後も設定が残りますか?
sudo ufw enableは、その場で有効化するとともに起動時にも有効になるよう設定します。再起動後はsudo ufw status verboseで確認できます。IPv6も同じルールで保護されますか?
allow 22/tcpのような一般的なルールはIPv4とIPv6の両方へ作成されます。ufw statusで「(v6)」のルールも確認してください。まとめ
Debianで基本的なファイアウォールを設定する場合は、UFWで受信を拒否、送信を許可し、必要な受信ポートだけを追加する方法が分かりやすいです。
- UFWを有効にする前に必要なポートを確認する
- SSH利用中は、先にSSHポートを許可する
- LAN内限定のサービスは接続元ネットワークも制限する
ufw status verboseとss -lntupの両方を確認する- 不要になった許可ルールは削除する
- Dockerの公開ポートはUFWだけで判断しない
設定後は、別の機器から必要なサービスだけに接続できることを確かめ、使っていないポートが許可されていないか定期的に見直しましょう。
