ファイアウォール

ネットワークトラフィックの制御

ファイアウォールとは

ファイアウォールは、ネットワークトラフィックを監視・制御するセキュリティ機構です。 事前に定義したルールに基づいて、パケットの許可(ACCEPT)、拒否(DROP/REJECT)を判断します。 L3/L4情報で制御するパケットフィルタリングと、L7まで見るアプリケーションファイアウォールがあります。

ファイアウォールの種類

パケットフィルタリング(ステートレス)

各パケットを個別に評価。IP、ポート、プロトコルで判断。 ACLベース。シンプルだが柔軟性に欠ける。

ステートフルインスペクション

コネクションの状態を追跡。確立済み接続の応答パケットを自動許可。 現代のファイアウォールの標準。

アプリケーション層ファイアウォール(WAF)

L7のコンテンツまで検査。SQLインジェクション、XSS等を検出。 HTTPトラフィック向け。

次世代ファイアウォール(NGFW)

従来のFW + IPS + アプリケーション識別 + ユーザー識別。 統合脅威管理(UTM)。

ステートフルファイアウォール

内部クライアント
→ SYN(許可)← SYN+ACK(自動許可)→ ACK(自動許可)
外部サーバー
コネクションテーブル: 内部IP:12345 ↔ 外部IP:443 = ESTABLISHED

メリット: 内部から外部への接続を許可すれば、応答パケットは自動的に許可される。 明示的な戻りルールが不要で、セキュリティと利便性を両立。

Linux ファイアウォール(iptables/nftables)

Linuxカーネルのnetfilterフレームワーク上で動作。 iptablesは従来の標準、nftablesは後継(RHEL8+、Debian10+で推奨)。

iptables基本

1# チェーン
2# INPUT: 自ホスト宛て
3# OUTPUT: 自ホストから送信
4# FORWARD: 転送(ルーター/ブリッジ)
5
6# ルール一覧
7iptables -L -n -v
8iptables -L INPUT -n --line-numbers
9
10# 基本ルール追加
11# SSH許可
12iptables -A INPUT -p tcp --dport 22 -j ACCEPT
13
14# 特定IPからのみHTTP許可
15iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 80 -j ACCEPT
16
17# 確立済み接続を許可(ステートフル)
18iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
19
20# その他を拒否
21iptables -A INPUT -j DROP
22
23# ルール削除
24iptables -D INPUT -p tcp --dport 80 -j ACCEPT
25iptables -D INPUT 3 # 行番号指定
26
27# 永続化(Ubuntu/Debian)
28iptables-save > /etc/iptables/rules.v4

nftables基本

1# nftables設定確認
2nft list ruleset
3
4# テーブル作成
5nft add table inet filter
6
7# チェーン作成
8nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
9
10# ルール追加
11nft add rule inet filter input tcp dport 22 accept
12nft add rule inet filter input ct state established,related accept
13
14# 設定保存
15nft list ruleset > /etc/nftables.conf

クラウドのファイアウォール

AWS セキュリティグループ

  • ステートフル: 応答トラフィック自動許可
  • 許可ルールのみ: 暗黙のDeny
  • インスタンス単位: ENIに関連付け

AWS ネットワークACL

  • ステートレス: インバウンド/アウトバウンド両方定義必要
  • 許可/拒否ルール: 番号順に評価
  • サブネット単位: サブネットに関連付け

Kubernetes Network Policy

  • • Pod間、Pod-外部間のトラフィック制御
  • • ラベルセレクターで対象指定
  • • CNI(Calico、Cilium等)で実装

ファイアウォール設計のベストプラクティス

1. デフォルト拒否

明示的に許可したもの以外はすべて拒否(ホワイトリスト方式)。

2. 最小権限の原則

必要最小限のポート、IPのみ許可。0.0.0.0/0 は最小限に。

3. 多層防御

ネットワーク境界 + ホストベース + アプリケーション層で複数の防御。

4. ログ記録

拒否したトラフィックをログに記録。監査とトラブルシューティングに活用。

SRE/インフラ観点

監視項目

  • ドロップ数: 拒否されたパケット数の推移
  • コネクション追跡テーブル: conntrack使用率
  • ルール評価回数: パフォーマンスへの影響

よくある問題

  • ルール順序ミス: 期待通りに許可/拒否されない
  • conntrack溢れ: 高トラフィックで接続追跡失敗
  • 設定漏れ: 新サービス追加時のポート開放忘れ
1# iptables統計
2iptables -L -n -v # パケット/バイトカウント
3
4# conntrack確認
5cat /proc/sys/net/netfilter/nf_conntrack_count
6cat /proc/sys/net/netfilter/nf_conntrack_max
7
8# conntrack最大値増加
9sysctl -w net.netfilter.nf_conntrack_max=262144
10
11# ログ設定(DROPをログ)
12iptables -A INPUT -j LOG --log-prefix "DROPPED: " --log-level 4
13# ログは /var/log/kern.log または dmesg