本文へスキップ
BecomeCoder

ネットワークコース · 第5章 ネットワークを守る · レッスン18

ファイアウォールの考え方 ― 通す/落とすの関所

ローカル実施

導入

ファイアウォール(firewall=防火壁)は、サーバーに出入りする通信をチェックし、「通す」「落とす」を判断する関所です。第6章で学んだ「IP+ポート+プロトコル」を条件に、危険な・不要な通信をブロックします。まず考え方を図で押さえてから、次のレッスンで実際のコマンドを触ります。

説明

サーバーには、第6章で見たように複数のポート(窓口)が開いています。もし全部を無防備に世界へ晒すと、攻撃者に狙われ放題です。そこで関所を置き、**「入ってくる通信を1つずつ検問する」**のがファイアウォールです。

flowchart LR
    NET(("インターネット<br/>(世界中から)")) --> FW{"ファイアウォール<br/>(関所)"}
    FW -->|"22/SSH: 通す(ACCEPT)"| S1["SSH"]
    FW -->|"80/HTTP: 通す(ACCEPT)"| S2["Webサーバー"]
    FW -->|"23/telnet: 落とす(DROP)"| X1["✕ 遮断"]
    FW -->|"3306/DB: 落とす(DROP)"| X2["✕ 遮断"]

判断のキーワードは2つです。

  • ACCEPT(通す) … その通信を受け入れる。
  • DROP(落とす) … その通信を黙って捨てる(相手には無反応に見える)。

ファイアウォールの設計には、正反対の2つの発想があります。

flowchart TD
    A["ホワイトリスト方式(推奨)<br/>既定は『全部落とす』<br/>必要なものだけ明示的に通す"] --> A2["安全。閉じ忘れが起きにくい"]
    B["ブラックリスト方式<br/>既定は『全部通す』<br/>危険なものだけ落とす"] --> B2["穴が残りやすい"]

現代のサーバーでは、**「既定は閉じておき、必要な窓口(SSHの22・Webの80/443など)だけを開ける」**ホワイトリスト方式が基本です。開けるのを忘れても「つながらない」で済みますが、閉じ忘れると「侵入される」——だから安全側(閉じる側)に倒すのです。

Linux でこの関所を実現するコマンドが、歴史ある iptables と、その後継 nftables(nft) です(第6章の netstatss と同じ世代交代の関係)。どちらも設定を変えるにはシステムを触るので、管理者権限(sudosu)が必要です。

実際のクラウドでは、サーバー自身のファイアウォールに加えて、クラウド側の「セキュリティグループ」など複数の関所が重なっていることも多いです。考え方は同じ——「通す条件を最小限に絞る」。この章で関所の基本が読めるようになれば、それらも理解できます。

この章のまとめ

  • ファイアウォールは通信を検問する関所。条件は「IP+ポート+プロトコル」
  • 判断は ACCEPT(通す)DROP(落とす)
  • 基本はホワイトリスト方式(既定は閉じ、必要な窓口だけ開ける)
  • Linux では iptables と後継の nft。操作には管理者権限が必要