ネットワークファイアウォールはシステム管理者が定義したルールに基づきデータパケットの受信/送信を制御し、内部ネットワークのセキュリティを保護します。Linuxでは主にiptablesとfirewalldの2種類のツールが利用され、いずれもnetfilterを介してパケットフィルタリングを実行します。
iptables: 静的ファイアウォール
デフォルトではすべてのトラフィックを許可し、拒否ルールを明示的に設定する必要があります。インターネット経由のパケットのみフィルタリング可能で、内部ネットワーク間の通信には対応しません。ルール変更後は再読み込みが必要です。
テーブルとチェーン構造
| テーブル | 機能 |
|---|---|
| filter | パケット許可/拒否(INPUT/OUTPUT/FORWARD) |
| raw | 状態トラッキング(OUTPUT/PREROUTING) |
| mangle | パケット内容変更(全チェーン) |
| nat | アドレス変換(OUTPUT/PREROUTING/POSTROUTING) |
基本コマンド例
# HTTPサービスを許可(8080ポート)
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
# ルール削除
iptables -D INPUT 2
# 設定保存
iptables-save > /etc/sysconfig/iptables
firewalld: 動的ファイアウォール
「ゾーン」を概念として導入し、外部/内部ネットワークの両方をフィルタリング可能。デフォルトではすべてを拒否し、許可ルールを追加して動作します。リアルタイムでルールを更新でき、サービスを再起動せずに反映できます。
主要ゾーン機能
- public: SSHとDHCPv6のみ許可(デフォルト)
- internal: SSHとIPPクライアントのみ許可
- trusted: すべてのトラフィックを許可
- block: すべての受信トラフィックを拒否(応答あり)
サービス設定例
# HTTPDサービスを公開ゾーンに追加
firewall-cmd --permanent --zone=public --add-service=httpd
# 設定再読み込み
firewall-cmd --reload
# 設定確認
firewall-cmd --list-all --zone=public
パケットフローの動作原理
- ネットワークインターフェース受信時: PREROUTINGチェーンで処理
- ルーティング決定前: ルール適用・変換
- ルーティング後: POSTROUTINGチェーンで最終処理
- ローカル生成トラフィック: OUTPUTチェーンで処理