閉じる

Debianでファイアウォールを設定する方法

Debianで外部からの不要な通信を遮断するなら、初心者にはUFW(Uncomplicated Firewall)が扱いやすい方法です。本記事では、Debian 13でUFWを導入し、必要なポートだけを許可する手順を解説します。

最初に結論

基本設定は、受信を拒否・送信を許可にしたうえで、SSHやWebサーバーなど、実際に使う受信ポートだけを追加します。SSH接続中のDebianでは、UFWを有効にする前にSSHの許可が必要です。

UFWを導入
基本方針を設定
必要な通信を許可
有効化して確認

DebianのUFWとnftablesの違い

Debianでは、Linuxカーネルのnftablesが標準のパケットフィルタリング基盤です。一方のUFWは、複雑なファイアウォール操作を短いコマンドで管理しやすくするツールです。

方式 特徴 向いている人
UFW allowやdenyなどの短いコマンドで設定できる 初心者、一般的なPC・サーバー
nftables ルールを細かく設計でき、ルーターや複雑なサーバー構成にも対応しやすい 高度な制御が必要な管理者

本記事では、日常的なPCや小規模サーバーで扱いやすいUFWを使います。UFWの利用中に、別の方法でnftablesやiptablesの永続ルールを同時管理すると、設定が分かりにくくなるため避けてください。

補足:UFWで設定された内容を含む現在のルール全体は、sudo nft list rulesetでも確認できます。ただし、UFW管理中は表示されたルールを直接書き換えず、原則としてufwコマンドで変更します。

設定前に確認すること

管理者権限を使えるか確認する

本記事のコマンドは、管理者権限が必要なためsudoを付けて実行します。現在のユーザーがsudoを使えない場合は、先にsudoグループへの追加などを済ませてください。

SSHで接続している場合は先にポートを確認する

別のPCからSSHでDebianへ接続している場合、SSHの受信を許可せずにファイアウォールを有効化すると、再接続できなくなる可能性があります。

待ち受け中のTCP・UDPポートを確認
sudo ss -lntup

通常のSSHはTCPの22番ポートを使います。SSHのポートを変更している場合は、以降の22を実際のポート番号へ置き換えてください。

重要:SSH接続中は、作業中の接続を閉じないでください。UFW有効化後に別の端末から新しいSSH接続を試し、成功したことを確認してから元の接続を終了します。

UFWでファイアウォールを設定する手順

1UFWをインストールする

端末を開き、パッケージ情報を更新してUFWをインストールします。

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を有効にする前に必ず許可します。

SSHの22番ポートを許可
sudo ufw allow 22/tcp comment 'SSH'

SSHを使っていないデスクトップPCでは、このルールを追加する必要はありません。Webサーバーなどを動かしている場合は、必要なポートだけを同様に許可します。

4UFWを有効にする

ファイアウォールを有効化
sudo ufw enable

SSH接続に影響する可能性を知らせる確認が表示されたら、許可ルールが登録済みであることを確認し、yを入力してEnterキーを押します。ufw enableを実行すると、その場で有効になり、次回起動時にも自動的に適用されます。

5設定結果を確認する

状態・基本方針・ルールを確認
sudo ufw status verbose
完了の目安: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
必要なポートだけを開く:「念のため」と広い範囲を許可すると、ファイアウォールの効果が弱くなります。使っていないポートやサービスは許可しないでください。また、NFSv3は複数のRPC関連ポートを使うため、上表のNFSv4用設定だけでは接続できません。

複数のWeb用ポートをまとめて許可する

HTTPとHTTPSを許可
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'

特定のLANからだけ許可する

SSH、Samba、NFS、リモートデスクトップなどを家庭内LANだけで使う場合は、接続元を制限すると安全性を高められます。

192.168.1.0/24からのSSHだけを許可
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の場合は、その環境に合わせて変更します。

DebianのIPアドレスとネットワークを確認
ip -br address
ip route
SSH利用時の注意:接続元を制限する場合は、先に制限付きルールを追加し、別の端末から接続できることを確認してから、全接続元を許可する古いルールを削除してください。

SSHへの連続接続を制限する

UFWのlimitを使うと、同じIPアドレスから短時間に繰り返される接続を制限できます。

SSHへレート制限を設定
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へ同時に作られたルールもまとめて削除できます。

80/tcpの許可ルールを削除
sudo ufw delete allow 80/tcp

番号を使う場合は、削除直前に一覧を表示してから対象番号を指定します。

3番のルールを削除
sudo ufw status numbered
sudo ufw delete 3
番号は変わります:ルールを1件削除すると、それ以降の番号が詰め直されます。複数削除するときは、その都度status numberedを実行してください。

設定を再読み込みする

UFWを再読み込み
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を利用できます。

GUFWをインストール
sudo apt update
sudo apt install gufw

インストール後、アプリ一覧から「Firewall Configuration」または「ファイアウォール設定」を開き、管理者認証を行います。

  1. プロファイルで「Home」など利用環境に合うものを選ぶ
  2. 受信を「Deny」、送信を「Allow」にする
  3. 「Rules」で必要なサービスまたはポートだけを追加する
  4. 「Status」をオンにする
リモート操作中は慎重に:SSH経由で管理しているDebianでは、画面操作でも先にSSHの許可ルールを登録する必要があります。サーバーでは、確認しやすいコマンド操作を推奨します。

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の設定が期待どおり適用されない場合があります。

Docker利用時:「UFWで拒否したから外部公開されない」と判断しないでください。公開アドレスを127.0.0.1:8080:80のように明示する、リバースプロキシ側で制御する、Docker向けのフィルタリング設計を別途行うなど、構成全体で確認が必要です。

5. SSHで締め出された場合

ローカルの画面とキーボード、VPSのWebコンソール、シリアルコンソールなどからログインし、いったんUFWを無効化します。

コンソールから復旧
sudo ufw disable

SSHの実際のポートと接続元を確認し、許可ルールを修正してから再度有効化します。

よくある質問

家庭内のDebianにもファイアウォールは必要ですか?
家庭用ルーターには外部からの通信を遮断する機能がありますが、同じLAN内の機器からの通信や、持ち出したノートPCの接続先までは一律に守れません。不要な待ち受けポートを閉じる多層防御として、PC側でも有効にしておく意味があります。
受信を拒否するとWebサイトを見られなくなりませんか?
通常は見られます。deny incomingは、外部から新しく開始される不要な受信を拒否する設定です。Debian側から開始したWeb閲覧などの通信と、その応答は通常許可されます。
UFWを有効にすると再起動後も設定が残りますか?
はい。sudo ufw enableは、その場で有効化するとともに起動時にも有効になるよう設定します。再起動後はsudo ufw status verboseで確認できます。
IPv6も同じルールで保護されますか?
DebianのUFWでIPv6が有効になっていれば、allow 22/tcpのような一般的なルールはIPv4とIPv6の両方へ作成されます。ufw statusで「(v6)」のルールも確認してください。

まとめ

Debianで基本的なファイアウォールを設定する場合は、UFWで受信を拒否、送信を許可し、必要な受信ポートだけを追加する方法が分かりやすいです。

安全に設定するためのチェックリスト
  • UFWを有効にする前に必要なポートを確認する
  • SSH利用中は、先にSSHポートを許可する
  • LAN内限定のサービスは接続元ネットワークも制限する
  • ufw status verboseとss -lntupの両方を確認する
  • 不要になった許可ルールは削除する
  • Dockerの公開ポートはUFWだけで判断しない

設定後は、別の機器から必要なサービスだけに接続できることを確かめ、使っていないポートが許可されていないか定期的に見直しましょう。

参考資料

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *