ファイアウォール
ネットワークトラフィックの制御
ファイアウォールとは
ファイアウォールは、ネットワークトラフィックを監視・制御するセキュリティ機構です。 事前に定義したルールに基づいて、パケットの許可(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 # ルール一覧 7 iptables -L -n -v 8 iptables -L INPUT -n --line-numbers 9 10 # 基本ルール追加 11 # SSH許可 12 iptables -A INPUT -p tcp --dport 22 -j ACCEPT 13 14 # 特定IPからのみHTTP許可 15 iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 80 -j ACCEPT 16 17 # 確立済み接続を許可(ステートフル) 18 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 19 20 # その他を拒否 21 iptables -A INPUT -j DROP 22 23 # ルール削除 24 iptables -D INPUT -p tcp --dport 80 -j ACCEPT 25 iptables -D INPUT 3 # 行番号指定 26 27 # 永続化(Ubuntu/Debian) 28 iptables-save > /etc/iptables/rules.v4
nftables基本
1 # nftables設定確認 2 nft list ruleset 3 4 # テーブル作成 5 nft add table inet filter 6 7 # チェーン作成 8 nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; } 9 10 # ルール追加 11 nft add rule inet filter input tcp dport 22 accept 12 nft add rule inet filter input ct state established,related accept 13 14 # 設定保存 15 nft 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統計 2 iptables -L -n -v # パケット/バイトカウント 3 4 # conntrack確認 5 cat /proc/sys/net/netfilter/nf_conntrack_count 6 cat /proc/sys/net/netfilter/nf_conntrack_max 7 8 # conntrack最大値増加 9 sysctl -w net.netfilter.nf_conntrack_max=262144 10 11 # ログ設定(DROPをログ) 12 iptables -A INPUT -j LOG --log-prefix "DROPPED: " --log-level 4 13 # ログは /var/log/kern.log または dmesg