| この記事の要点 |
|
概要
ファイアウォールは、ネットワークの境界に置かれた「関所」です。通過しようとする通信を許可ルールと拒否ルールに照らし合わせ、許可された通信だけを通し、それ以外を遮断します。インターネットからの不正アクセスや、内部から外部への意図しない通信を制御する、ネットワークセキュリティの最も基本的な防御線です。
動作する層によって性質が変わります。古典的なファイアウォールは L3/L4(IP アドレスとポート番号)で判断します。一方、次世代ファイアウォール(NGFW)や UTM は L7(アプリケーションの中身)まで見て制御します。「どの層で何を見て判断するか」がファイアウォールを理解する鍵です。
仕組み
もっとも基本的な方式がパケットフィルタリングです。1 つ 1 つのパケットについて、送信元 IP・宛先 IP・送信元ポート・宛先ポート・プロトコル(TCP/UDP)を見て、ルールに合致すれば許可、しなければ拒否します。高速ですが、パケットを個別に見るだけなので「この応答は、さっき自分が出した要求への返事か?」を判断できません。これがステートレスな動作です。
これを改良したのがステートフルインスペクションです。ファイアウォールがコネクション(通信の状態)を表で記憶し、「内部から出ていった通信の応答」を自動的に許可します。おかげで「行きのルールだけ書けば帰りは自動で通る」ため、ルールが大幅に簡潔になり、戻りパケットを狙った攻撃も防ぎやすくなります。現代の iptables/nftables を含むほとんどのファイアウォールはステートフルです。
ネットワーク構成上の重要概念が DMZ(DeMilitarized Zone / 非武装地帯)です。Web サーバーやメールサーバーのように外部に公開する必要があるホストを、内部 LAN とは別のセグメントに置きます。万が一公開サーバーが乗っ取られても、DMZ と内部 LAN の間にもう一段ファイアウォールがあるため、被害が内部に波及しにくくなります。
L4 と L7 の違いも押さえましょう。L4 ファイアウォールは「ポート 443 を許可」までしか言えませんが、L7(NGFW)は「ポート 443 を流れる通信のうち、特定のアプリや危険な URL は遮断」といったアプリ単位の制御ができます。UTM はこれにアンチウイルス・IDS/IPS・Web フィルタなどを 1 台に統合した製品カテゴリです。
設定・実用例
クラウドのセキュリティグループや OS のファイアウォールも考え方は同じです。Linux の ufw による基本的な許可・拒否の例です。
# デフォルトは全拒否、出ていく通信は許可
ufw default deny incoming
ufw default allow outgoing
# SSH(22) と HTTPS(443) のみ許可
ufw allow 22/tcp
ufw allow 443/tcp
# 特定の管理元 IP だけ SSH を許可(IP 制限)
ufw allow from 203.0.113.10 to any port 22 proto tcp
ufw enable
ufw status verbose特定 IP だけを通す手法の詳細は IP制限をかける方法 も参照してください。
主な用途
- 境界防御:インターネットと社内 LAN の境界で不正アクセスを遮断
- サーバー保護:必要なポート以外を閉じ、攻撃面を最小化
- セグメント分離:DMZ・開発/本番ネットの分離
- アウトバウンド制御:マルウェアの外部通信(C2)を遮断
比較テーブル
| 方式 | 見る情報 | 状態管理 | 特徴 |
|---|---|---|---|
| ステートレス パケットフィルタ | IP・ポート(L3/L4) | なし | 高速だが戻り通信の設定が煩雑 |
| ステートフル | IP・ポート+接続状態 | あり | 応答を自動許可。現在の標準 |
| 次世代FW(NGFW) | アプリ・URL(L7) | あり | アプリ単位の制御・侵入防御 |
| UTM | L3〜L7+複合機能 | あり | AV・IDS・フィルタを統合 |
注意点
- デフォルト拒否(ホワイトリスト)が原則。「許可を明示し、それ以外は全拒否」とする
- ファイアウォールは万能ではない。許可したポート上のアプリ脆弱性は防げない
- ルールは増えると管理不能になる。定期的に棚卸しし不要ルールを削除する
- 境界防御だけに頼らず、ゼロトラストの考えで内部通信も検証する
関連リンク
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09