configuring-firewalls について
Linuxホスト、クラウドネットワーク、Kubernetesを対象とするエンジニア向けのファイアウォール設定スキルです。ツール選定、ルール例、設定ミスや接続不能を防ぐための注意点をまとめています。
主な機能
- 01ホスト・クラウド・コンテナの設定案内
- 02ファイアウォールツールの選定支援
- 03ルール例と設定パターン
- 04接続不能を防ぐ安全確認
- 05トラブル対応と移行ガイド
活用シーン
- 01新規サービスへのネットワークアクセス制限
- 02クラウドのセキュリティグループとNACLの設定
- 03KubernetesのPodネットワークポリシー設定
- 04接続障害やファイアウォールルールの調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ancoleman/ ai-design-components --skill configuring-firewallsインストール後、Claude Code で/configuring-firewallsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
outputs.yamlexamples/kubernetes/default-deny-allow-dns.yamlexamples/nftables/web-server.nftexamples/terraform-aws/three-tier-architecture.tfexamples/ufw/basic-web-server.shreferences/aws-security-groups.mdazure-nsg.mdbastion-pattern.mddatabase-patterns.mddecision-tree.mddmz-pattern.mdegress-filtering.mdgcp-firewall.mdiptables-patterns.mdk8s-networkpolicies.mdmigration-guide.mdnftables-patterns.mdtroubleshooting.mdufw-patterns.md詳細
ファイアウォールの設定
目的
ホストベース(iptables、nftables、UFW)、クラウドベース(AWS Security Groups、NACL)、コンテナベース(Kubernetes NetworkPolicies)の各環境で、ファイアウォールを設定する方法を、実用的なルール例と、ロックアウトやセキュリティ設定ミスを防ぐための安全なパターンとともに、エンジニア向けに説明します。
このスキルを使用するタイミング
トリガーフレーズ:
- 「[サーバー/サービス] のファイアウォールを設定する」
- 「[AWS リソース] のセキュリティグループを設定する」
- 「ファイアウォールでポート [X] を許可する」
- 「IP アドレス [X.X.X.X] をブロックする」
- 「Ubuntu サーバーで UFW を設定する」
- 「iptables/nftables のルールを作成する」
- 「踏み台ホストのファイアウォールを設定する」
- 「送信トラフィックのフィルタリングを実装する」
よくあるシナリオ:
- サーバーの初期設定とセキュリティ強化
- 新しいサービス(ウェブサーバー、API、データベース)の公開
- ネットワークのセグメンテーションの実装
- 踏み台ホストまたはジャンプボックスの作成
- iptables から nftables への移行
- クラウドのセキュリティグループの設定
- 接続の問題のトラブルシューティング
判断基準:どのファイアウォールツールを使うか
クラウド環境
AWS:
- インスタンスレベルの制御 → Security Groups(ステートフル、許可ルールのみ)
- サブネットレベルの適用 → Network ACLs(ステートレス、許可ルールと拒否ルール)
- 多層防御のため、両方を使用します
GCP:
- VPC Firewall Rules を使用します(ステートフル、優先度ベース)
Azure:
- Network Security Groups(NSG)を使用します(ステートフル、優先度ベース)
Linux のホストベースファイアウォール
Ubuntu/Debian + シンプルさを重視する場合:
- UFW(Uncomplicated Firewall)を使用します。多くのユーザーに推奨されます
- 簡潔な構文で iptables/nftables を操作するフロントエンドです
RHEL/CentOS/Fedora:
- firewalld を使用します(Red Hat エコシステムのデフォルト)
- 動的に更新できるゾーンベースの設定です
最新のディストリビューション + 高度な制御が必要な場合:
- nftables を使用します(最高のパフォーマンスを備えた最新の標準)
- iptables の O(n) に対して O(log n) のパフォーマンスです
- IPv4/IPv6/NAT の構文が統一されています
レガシーシステム:
- iptables を使用します(可能であれば nftables に移行してください)
- 古いカーネル(< 4.14)では必須です
Kubernetes/コンテナ
- NetworkPolicies を使用します(CNI プラグインが必要です:Calico、Cilium、Weave)
- references/k8s-networkpolicies.md を参照してください
ステートフルとステートレス
ステートフル(ほとんどの場合に推奨):
- 戻りのトラフィックを自動的に許可します
- 設定が簡単です
- 例:Security Groups、UFW、nftables のデフォルト
ステートレス(特定用途向け):
- 両方向の通信を明示的に許可する必要があります
- 細かく制御でき、状態追跡が少なくなります
- 例:Network ACLs、カスタム nftables ルール
クイックスタートの例
UFW(Ubuntu/Debian)
# 1. Set defaults
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. CRITICAL: Allow SSH before enabling (prevent lockout)
sudo ufw allow ssh
sudo ufw limit ssh # Rate-limit to prevent brute force
# 3. Allow web traffic
sudo ufw allow http # Port 80
sudo ufw allow https # Port 443
# 4. Allow from specific IP (e.g., database access)
sudo ufw allow from 192.168.1.100 to any port 5432
# 5. Enable firewall
sudo ufw enable
# 6. Verify rules
sudo ufw status verbose
UFW のパターンの全容については、references/ufw-patterns.md を参照してください
nftables(最新の Linux)
#!/usr/sbin/nft -f
# /etc/nftables.conf
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Accept loopback
iif "lo" accept
# Accept established connections (stateful)
ct state established,related accept
# Drop invalid packets
ct state invalid drop
# Allow SSH
tcp dport 22 accept
# Allow HTTP/HTTPS
tcp dport { 80, 443 } accept
# Log dropped packets
log prefix "nftables-drop: " drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
適用:sudo nft -f /etc/nftables.conf
起動時に有効化:sudo systemctl enable nftables
高度なパターン(セット、マップ)については、references/nftables-patterns.md を参照してください
AWS Security Groups(Terraform)
# Web server security group
resource "aws_security_group" "web" {
name = "web-server-sg"
description = "Security group for web servers"
vpc_id = aws_vpc.main.id
# Allow HTTP/HTTPS from anywhere
ingress {
description = "HTTPS from anywhere"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# Allow SSH from bastion only
ingress {
description = "SSH from bastion"
from_port = 22
to_port = 22
protocol = "tcp"
security_groups = [aws_security_group.bastion.id]
}
# Allow all outbound
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "web-server-sg"
}
}
Security Groups と NACL のガイドについては、references/aws-security-groups.md を参照してください
安全確認リスト
ファイアウォールを有効にする前に:
- 有効化する前に必ず SSH を許可する(ロックアウトを防ぎます)
- 有効化する前にルールをテストする(可能であればドライランを実施します)
- デバッグ用のログ記録を有効にする
- ルールをバージョン管理(Git)に記録する
- nmap で外部から確認する:
nmap -Pn <server-ip> - コンソールアクセス(クラウド)または物理アクセス(オンプレミス)を確保する
- デフォルトですべて拒否し、必要なトラフィックを明示的に許可する
- SSH にレート制限を設定する(
ufw limit ssh)
よくあるパターン
パターン 1:基本的なウェブサーバー
要件:
- HTTP(80)と HTTPS(443)をすべての送信元から許可する
- SSH は特定の IP または踏み台ホストからのみ許可する
- その他すべての受信トラフィックはデフォルトで拒否する
UFW:
sudo ufw default deny incoming
sudo ufw allow from 203.0.113.0/24 to any port 22 # Office IP
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
nftables: 完全な例については、references/nftables-patterns.md を参照してください
AWS Security Group: Terraform モジュールについては、references/aws-security-groups.md を参照してください
パターン 2:データベースサーバー(プライベート)
要件:
- アプリケーション層からのみデータベースポート(5432、3306 など)へのアクセスを許可します
- パブリックインターネットへのアクセスを許可しません
- 踏み台ホストからのみ SSH 接続を許可します
実装については references/database-patterns.md を参照してください
パターン 3:踏み台ホスト(ジャンプボックス)
目的: SSH アクセス用の、単一の堅牢化されたエントリーポイント
完全な実装については references/bastion-pattern.md を参照してください
パターン 4:送信トラフィックのフィルタリング
目的: データの持ち出しを防ぐため、送信トラフィックを制御します
実装については references/egress-filtering.md を参照してください
主な概念
ステートフルファイアウォール
接続状態(確立済み、関連、新規)を追跡します:
- 戻りトラフィックを自動的に許可します
- ルールの設定がより簡単です
- 使用例:Security Groups、UFW、nftables(デフォルト)
ステートレスファイアウォール
接続を追跡しません:
- 双方向の通信を明示的に許可する必要があります
- 戻りトラフィック用にエフェメラルポート(1024-65535)を許可する必要があります
- 使用例:Network ACL
多層防御
複数のファイアウォール制御を重ねます:
- クラウド: Security Groups + NACL
- ホスト: UFW/nftables + fail2ban
- コンテナ: NetworkPolicies
ルールの評価
Security Groups(AWS): すべてのルールが評価され、最も許可範囲の広いルールが適用されます Network ACL(AWS): 順番に評価され、最初に一致したルールが適用されます nftables/iptables: 順番に評価され、最初に一致したルールが適用されます UFW: ルール番号順に評価されます
共通のベストプラクティス
- デフォルトで拒否: すべて拒否する設定から始め、必要なトラフィックを明示的に許可します
- 最小権限の原則: 必要なポート/IP のみを開放します
- 機密性の高いポートで 0.0.0.0/0 を使わない: SSH/RDP/データベースへのアクセスを、接続元を問わず許可してはいけません
- バージョン管理: ファイアウォールのルールを Git に保存します
- ログ記録: ファイアウォールのログを有効にして監視します
- 定期的な監査: 四半期ごとにルールを確認し、未使用のルールを削除します
- ツールを混在させない: iptables と nftables を同時に実行しないでください
- 本番環境の前にテスト: まずステージング環境でテストします
高度なトピック
踏み台ホストのアーキテクチャ: 単一のエントリーポイントパターンについては references/bastion-pattern.md を参照してください
DMZ(非武装地帯): ネットワークのセグメント化については references/dmz-pattern.md を参照してください
送信トラフィックのフィルタリング: 送信トラフィックの制御については references/egress-filtering.md を参照してください
Kubernetes NetworkPolicies: Pod 間の分離については references/k8s-networkpolicies.md を参照してください
iptables から nftables への移行: 変換手順については references/migration-guide.md を参照してください
クラウドファイアウォールの比較:
- AWS:references/aws-security-groups.md
- GCP:references/gcp-firewall.md
- Azure:references/azure-nsg.md
トラブルシューティング
「SSH で自分を締め出してしまいました」:
- クラウド:コンソール/セッションマネージャーを使ってアクセスします
- オンプレミス:物理コンソールまたは IPMI/iLO を使ってアクセスします
- 予防策:ファイアウォールを有効にする前に、必ず SSH を許可します
接続がタイムアウトする場合:
- ファイアウォールがトラフィックをブロックしていないか確認します:
sudo ufw statusまたはsudo nft list ruleset - サービスが待ち受けていることを確認します:
ss -tuln | grep <port> - 外部からテストします:
nmap -Pn <ip> -p <port> - ログを確認します:
/var/log/ufw.logまたはjournalctl -u nftables
AWS:エフェメラルポートの問題:
- NACL では戻りトラフィックが必要です:インバウンドの 1024-65535 を許可します
- Security Groups はステートフルです(エフェメラルポートの設定は不要です)
Kubernetes の Pod 間で通信できない場合:
- NetworkPolicies を確認します:
kubectl get networkpolicies -n <namespace> - CNI プラグインが NetworkPolicies をサポートしていることを確認します(Calico、Cilium)
- まずポリシーなしでテストします
詳しいトラブルシューティングガイドについては、references/troubleshooting.md を参照してください
よくある避けるべき間違い
❌ SSH/RDP で 0.0.0.0/0 を許可する → 踏み台ホストまたは VPN を使用します ❌ ファイアウォールの有効化を忘れる → ルールは設定されていても有効になっていません ❌ 有効化する前にテストしない → アクセス不能になるおそれがあります ❌ NACL でエフェメラルポートを許可し忘れる → 戻りトラフィックがブロックされます ❌ iptables と nftables を同時に実行する → 競合が発生し、予測不能な動作につながります ❌ ログを記録しない → デバッグや監査ができません ❌ 広範囲のポートを開放する → 不要な攻撃対象領域が生じます ❌ ルールを文書化しない → 後で混乱が生じます
ツール別のコマンド
UFW
# Status
sudo ufw status verbose
sudo ufw status numbered
# Add rules
sudo ufw allow <port>/<protocol>
sudo ufw allow from <ip> to any port <port>
sudo ufw limit ssh # Rate limiting
# Delete rules
sudo ufw delete <rule-number>
sudo ufw delete allow 80/tcp
# Logging
sudo ufw logging on
tail -f /var/log/ufw.log
# Reset (disable and remove all rules)
sudo ufw reset
nftables
# List ruleset
sudo nft list ruleset
# Load config
sudo nft -f /etc/nftables.conf
# Flush all rules
sudo nft flush ruleset
# Add rule dynamically
sudo nft add rule inet filter input tcp dport 8080 accept
# Enable on boot
sudo systemctl enable nftables
iptables
# List rules
sudo iptables -L -v -n
sudo iptables -L INPUT --line-numbers
# Add rule
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Delete rule
sudo iptables -D INPUT <rule-number>
# Save rules
sudo netfilter-persistent save # Debian/Ubuntu
sudo service iptables save # RHEL/CentOS
AWS CLI
# List security groups
aws ec2 describe-security-groups --group-ids sg-xxxxx
# List NACLs
aws ec2 describe-network-acls --network-acl-ids acl-xxxxx
# Add rule to security group
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxx \
--protocol tcp \
--port 443 \
--cidr 0.0.0.0/0
インフラストラクチャをコードとして管理する場合は、Terraform を使用してください(references/aws-security-groups.md を参照)。
サンプルディレクトリ
すぐに実行できるサンプルを以下から利用できます。
examples/ufw/- UFW 設定スクリプトexamples/nftables/- nftables ルールセットexamples/iptables/- iptables ルールスクリプトexamples/terraform-aws/- AWS Security Groups と NACLexamples/terraform-gcp/- GCP ファイアウォールルールexamples/terraform-azure/- Azure NSGexamples/kubernetes/- NetworkPolicy マニフェスト
統合ポイント
関連スキル:
-
security-hardening - ファイアウォールはサーバーのハードニングを構成する要素のひとつです。SSH のハードニング、fail2ban、auditd、SELinux については、security-hardening スキルを参照してください。
-
building-ci-pipelines - CI ランナーには、リポジトリやアーティファクトストアへのネットワークアクセスが必要です。セルフホスト型ランナー向けにファイアウォールルールを設定してください。
-
deploying-applications - アプリケーションを公開するには、ファイアウォールルールが必要です。統合については deploying-applications を参照してください。
-
infrastructure-as-code - Terraform/CloudFormation でファイアウォールをコードとして管理します。IaC のベストプラクティスについては infrastructure-as-code を参照してください。
-
kubernetes-operations - 基本的な NetworkPolicy を超える高度な K8s ネットワーキングについては、kubernetes-operations を参照してください。Services、Ingress、CNI の設定を扱います。
-
network-architecture - より広範なネットワーク設計パターンについては、network-architecture を参照してください。VPC の設計、サブネット、ルーティングを扱います。
リファレンスファイル
ツール固有のガイド:
- references/ufw-patterns.md - サンプル付きの UFW 完全ガイド
- references/nftables-patterns.md - nftables の構文、セット、マップ、ロギング
- references/iptables-patterns.md - iptables の基本と移行方法
- references/migration-guide.md - iptables から nftables への変換
クラウドプロバイダーのガイド:
- references/aws-security-groups.md - Terraform を使った Security Groups と NACL の比較
- references/gcp-firewall.md - GCP VPC ファイアウォールルール
- references/azure-nsg.md - Azure Network Security Groups
高度なパターン:
- references/bastion-pattern.md - ジャンプボックスのアーキテクチャ
- references/dmz-pattern.md - DMZ を使ったネットワークセグメンテーション
- references/egress-filtering.md - アウトバウンドトラフィックの制御
- references/k8s-networkpolicies.md - Kubernetes ポッドの分離
サポート:
- references/troubleshooting.md - よくある問題と解決方法
- references/decision-tree.md - ツール選択のビジュアルガイド