mcpField
C
configuring-firewalls

configuring-firewalls

github.com/ancolemanセキュリティ52595 回インストール46 週間前に更新
リポジトリ

configuring-firewalls について

Linuxホスト、クラウドネットワーク、Kubernetesを対象とするエンジニア向けのファイアウォール設定スキルです。ツール選定、ルール例、設定ミスや接続不能を防ぐための注意点をまとめています。

主な機能

  1. 01ホスト・クラウド・コンテナの設定案内
  2. 02ファイアウォールツールの選定支援
  3. 03ルール例と設定パターン
  4. 04接続不能を防ぐ安全確認
  5. 05トラブル対応と移行ガイド

活用シーン

  1. 01新規サービスへのネットワークアクセス制限
  2. 02クラウドのセキュリティグループとNACLの設定
  3. 03KubernetesのPodネットワークポリシー設定
  4. 04接続障害やファイアウォールルールの調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ancoleman/ai-design-components --skill configuring-firewalls

インストール後、Claude Code で/configuring-firewallsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

outputs.yaml
examples/kubernetes/
default-deny-allow-dns.yaml
examples/nftables/
web-server.nft
examples/terraform-aws/
three-tier-architecture.tf
examples/ufw/
basic-web-server.sh
references/
aws-security-groups.md
azure-nsg.md
bastion-pattern.md
database-patterns.md
decision-tree.md
dmz-pattern.md
egress-filtering.md
gcp-firewall.md
iptables-patterns.md
k8s-networkpolicies.md
migration-guide.md
nftables-patterns.md
troubleshooting.md
ufw-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: ルール番号順に評価されます

共通のベストプラクティス

  1. デフォルトで拒否: すべて拒否する設定から始め、必要なトラフィックを明示的に許可します
  2. 最小権限の原則: 必要なポート/IP のみを開放します
  3. 機密性の高いポートで 0.0.0.0/0 を使わない: SSH/RDP/データベースへのアクセスを、接続元を問わず許可してはいけません
  4. バージョン管理: ファイアウォールのルールを Git に保存します
  5. ログ記録: ファイアウォールのログを有効にして監視します
  6. 定期的な監査: 四半期ごとにルールを確認し、未使用のルールを削除します
  7. ツールを混在させない: iptables と nftables を同時に実行しないでください
  8. 本番環境の前にテスト: まずステージング環境でテストします

高度なトピック

踏み台ホストのアーキテクチャ: 単一のエントリーポイントパターンについては 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 と NACL
  • examples/terraform-gcp/ - GCP ファイアウォールルール
  • examples/terraform-azure/ - Azure NSG
  • examples/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 - ツール選択のビジュアルガイド

コメント