configuring-pfsense-firewall-rules について
pfSenseでネットワーク分割、ファイアウォールのアクセスルール、NATを設定するネットワーク管理向けスキルです。VPN、ログ監視、設定バックアップ、ルールテストも扱います。
主な機能
- 01インターフェースとVLANの分割設定
- 02ゾーン別アクセスルールの作成
- 03NATポートフォワーディングの設定
- 04ログ、バックアップ、ルールテスト
活用シーン
- 01オフィス、ゲスト、IoTネットワークの分離
- 02VLAN間の通信制限
- 03NATによる内部サービスの公開
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill configuring-pfsense-firewall-rulesインストール後、Claude Code で/configuring-pfsense-firewall-rulesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
pfSense ファイアウォールルールの設定
使用する場面
- DMZ、内部、ゲスト、IoT などのネットワークゾーンを分離して保護するため、境界ファイアウォールまたは内部ファイアウォールを導入する場合
- VLAN とネットワークセグメント間のトラフィックを制限するため、きめ細かなアクセス制御ルールを作成する場合
- インターネットに公開する内部サービスへのポート転送用に NAT ルールを設定する場合
- IPsec または OpenVPN を使用して、拠点間またはリモートアクセス VPN トンネルを構築する場合
- サービス品質要件に対応するため、トラフィックシェーピングと帯域幅管理を実装する場合
次の用途には使用しないでください:個々のシステムのホストベースのファイアウォールの代替、専用のハードウェアアクセラレーションなしでの SSL/TLS ディープパケットインスペクション、または IDS/IPS を併用しない単独のセキュリティ対策。
前提条件
- 2 つ以上のネットワークインターフェースを備えた専用ハードウェアまたは仮想マシンに、pfSense 2.7 以降がインストールされていること
- pfSense WebConfigurator へのアクセス(デフォルト:https://192.168.1.1)
- すべてのインターフェース、VLAN、想定されるトラフィックフローを示すネットワークトポロジ図
- 各ネットワークゾーンの DNS および DHCP 設定が計画されていること
- TCP/IP、NAT、ステートフルファイアウォールの概念を理解していること
ワークフロー
ステップ 1:ネットワークインターフェースと VLAN を設定する
pfSense WebConfigurator にアクセスして、インターフェースを定義します。
Navigate: Interfaces > Assignments
WAN Interface (igb0):
- Type: DHCP or Static IP from ISP
- Block private networks: Enabled
- Block bogon networks: Enabled
LAN Interface (igb1):
- IPv4: 10.10.1.1/24
- Description: CORPORATE_LAN
Create VLANs:
Navigate: Interfaces > VLANs > Add
- VLAN 10 on igb1: DMZ (10.10.10.1/24)
- VLAN 20 on igb1: SERVERS (10.10.20.1/24)
- VLAN 30 on igb1: GUEST (10.10.30.1/24)
- VLAN 40 on igb1: IOT (10.10.40.1/24)
Assign VLANs:
Navigate: Interfaces > Assignments > Add each VLAN
Enable each interface and assign the gateway IP
ステップ 2:各ゾーンの DHCP と DNS を設定する
Navigate: Services > DHCP Server
CORPORATE_LAN (10.10.1.0/24):
Range: 10.10.1.100 - 10.10.1.200
DNS: 10.10.20.10 (internal DNS server)
Gateway: 10.10.1.1
DMZ (10.10.10.0/24):
Range: 10.10.10.100 - 10.10.10.200
DNS: 10.10.20.10
Gateway: 10.10.10.1
GUEST (10.10.30.0/24):
Range: 10.10.30.100 - 10.10.30.200
DNS: 1.1.1.1, 8.8.8.8 (public DNS only)
Gateway: 10.10.30.1
Navigate: Services > DNS Resolver
Enable DNS Resolver on all interfaces except GUEST
Enable DNSSEC
Configure forwarding to upstream DNS servers
ステップ 3:ファイアウォールルールのエイリアスを作成する
Navigate: Firewall > Aliases
RFC1918_Networks:
Type: Network
Values: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
WebPorts:
Type: Port
Values: 80, 443
ManagementPorts:
Type: Port
Values: 22, 3389, 5900
CriticalServers:
Type: Host
Values: 10.10.20.10, 10.10.20.11, 10.10.20.12
BlockedCountries:
Type: URL Table
URL: https://www.ipdeny.com/ipblocks/data/aggregated/cn-aggregated.zone
Update: 24 hours
ステップ 4:ゾーンごとにファイアウォールルールを実装する
Navigate: Firewall > Rules
=== WAN Rules ===
# Block all inbound by default (implicit deny)
# Allow established/related traffic (automatic in pfSense stateful mode)
# Allow inbound to DMZ web server (via NAT)
Action: Pass | Interface: WAN | Protocol: TCP
Source: any | Destination: WAN Address | Port: 80, 443
Description: Allow HTTP/HTTPS to DMZ web server
=== LAN Rules ===
# Allow LAN to access internal servers
Action: Pass | Interface: LAN | Protocol: TCP
Source: LAN net | Destination: SERVERS net | Port: WebPorts, 3306, 5432
Description: Allow LAN to internal web and database servers
# Allow LAN to internet
Action: Pass | Interface: LAN | Protocol: any
Source: LAN net | Destination: ! RFC1918_Networks
Description: Allow LAN to internet (block inter-VLAN via RFC1918 exclusion)
# Block LAN to IoT (explicit deny before implicit allow)
Action: Block | Interface: LAN | Protocol: any
Source: LAN net | Destination: IOT net
Description: Block direct LAN to IoT communication
=== DMZ Rules ===
# Allow DMZ web servers to query internal DNS
Action: Pass | Interface: DMZ | Protocol: TCP/UDP
Source: DMZ net | Destination: 10.10.20.10 | Port: 53
Description: Allow DMZ DNS queries to internal resolver
# Allow DMZ to internet for updates only
Action: Pass | Interface: DMZ | Protocol: TCP
Source: DMZ net | Destination: any | Port: 80, 443
Description: Allow DMZ outbound HTTP/HTTPS for updates
# Block all other DMZ traffic
Action: Block | Interface: DMZ | Protocol: any
Source: DMZ net | Destination: any
Description: Default deny for DMZ
=== GUEST Rules ===
# Allow guest to internet only (DNS and web)
Action: Pass | Interface: GUEST | Protocol: TCP/UDP
Source: GUEST net | Destination: ! RFC1918_Networks | Port: 53, 80, 443
Description: Allow guest internet access only
# Block all guest to internal
Action: Block | Interface: GUEST | Protocol: any
Source: GUEST net | Destination: RFC1918_Networks
Description: Block guest access to all internal networks
=== IOT Rules ===
# Allow IoT to specific cloud endpoints
Action: Pass | Interface: IOT | Protocol: TCP
Source: IOT net | Destination: ! RFC1918_Networks | Port: 443, 8883
Description: Allow IoT HTTPS and MQTT to cloud
# Block IoT inter-device communication
Action: Block | Interface: IOT | Protocol: any
Source: IOT net | Destination: IOT net
Description: Prevent IoT lateral movement
# Block IoT to all internal networks
Action: Block | Interface: IOT | Protocol: any
Source: IOT net | Destination: RFC1918_Networks
Description: Block IoT access to internal
ステップ 5:NAT ルールを設定する
Navigate: Firewall > NAT > Port Forward
# Web server in DMZ
Interface: WAN | Protocol: TCP
Destination: WAN address | Port: 443
Redirect target IP: 10.10.10.50 | Port: 443
NAT Reflection: Enable
Description: HTTPS to DMZ web server
# SSH jump host (non-standard port)
Interface: WAN | Protocol: TCP
Destination: WAN address | Port: 2222
Redirect target IP: 10.10.20.11 | Port: 22
Description: SSH to internal jump host via port 2222
Navigate: Firewall > NAT > Outbound
Mode: Hybrid Outbound NAT
# Add rule for DMZ servers to use a dedicated public IP
Interface: WAN | Source: 10.10.10.0/24
Translation Address: <dedicated_public_ip>
Description: DMZ outbound NAT via dedicated IP
ステップ 6:ロギングとモニタリングを有効にする
Navigate: Status > System Logs > Settings
Remote Logging: Enable
Remote log servers: 10.10.20.15:514 (Syslog/SIEM)
Log firewall default blocks: Enabled
Navigate: Firewall > Rules
Enable logging on critical rules:
- All BLOCK rules
- WAN inbound PASS rules
- Inter-VLAN PASS rules
Navigate: Diagnostics > pfTop
Monitor real-time connection states and bandwidth usage
Install pfBlockerNG package:
Navigate: System > Package Manager > Available Packages
Install pfBlockerNG-devel
Configure IP blocklists (Spamhaus DROP, Emerging Threats)
Configure DNSBL for malware domain blocking
ステップ 7:設定をバックアップしてテストする
# Export configuration backup
Navigate: Diagnostics > Backup & Restore
Download XML configuration file
# Test rules from each zone
# From LAN:
curl -I https://10.10.20.10 # Should succeed (LAN to SERVERS)
curl -I https://10.10.40.5 # Should fail (LAN to IOT blocked)
# From GUEST:
curl -I https://www.google.com # Should succeed (internet)
curl -I https://10.10.20.10 # Should fail (guest to internal blocked)
# From DMZ:
nslookup google.com 10.10.20.10 # Should succeed (DNS allowed)
ssh 10.10.1.50 # Should fail (DMZ to LAN blocked)
# Verify logging
Navigate: Status > System Logs > Firewall
Check that blocked and passed traffic is logging correctly
# Schedule automated config backups
Navigate: Diagnostics > AutoConfigBackup
Enable automatic backups to Netgate cloud or local storage
主な概念
| 用語 | 定義 |
|---|---|
| ステートフルファイアウォール | ネットワーク接続の状態を追跡し、確立済みのセッションへの応答トラフィックを明示的なルールなしで自動的に許可するファイアウォール |
| エイリアス | pfSense で IP アドレス、ネットワーク、またはポートをまとめた名前付きグループ。ルール管理を簡素化し、可読性を高めます |
| NAT(ネットワークアドレス変換) | 内部ネットワークと外部ネットワーク間で IP アドレスを変換する仕組み。内部サービスへのインバウンドアクセス向けのポート転送も含みます |
| フローティングルール | 複数のインターフェースに同時に適用され、インターフェースごとのルールより先に処理される pfSense のルール |
| pfBlockerNG | IP レピュテーションブロックリストと DNS ベースのブロックリストを統合し、脅威を自動的にブロックする pfSense パッケージ |
| ルールの処理順序 | pfSense は各インターフェースタブ内のルールを上から順に評価します。最初に一致したルールが適用され、一致しないトラフィックはデフォルトでブロックされます |
ツールとシステム
- pfSense 2.7+:FreeBSD をベースとするオープンソースのファイアウォールおよびルータープラットフォーム。ウェブベースの管理機能と豊富なパッケージエコシステムを備えています
- pfBlockerNG:脅威インテリジェンスを自動的に統合する IP および DNS ブロックリストパッケージ
- Snort/Suricata パッケージ:インラインのトラフィック検査に利用できる、pfSense パッケージとしての IDS/IPS 統合機能
- OpenVPN/IPsec:拠点間およびリモートアクセス接続に対応する、組み込みの VPN 実装
- Netgate AutoConfigBackup:pfSense の災害復旧に利用できる、クラウドベースの設定バックアップサービス
よくあるシナリオ
シナリオ:pfSense による小規模事業所ネットワークのセグメント化
背景:医療機関が、HIPAA の要件を満たすためにネットワークをセグメント化する必要があります。インターネット接続は 1 つで、電子カルテ(EHR)サーバー、スタッフ用ワークステーション、ゲスト用 Wi-Fi ネットワーク、医療用 IoT デバイス(バイタルサインモニター、画像診断機器)があります。予算の制約から、オープンソースのソリューションが必要です。
アプローチ:
- 4 つの物理インターフェース(WAN、LAN、DMZ、MGMT)を備えた Netgate 4100 アプライアンスに pfSense を導入します
- スタッフ用(VLAN 10)、EHR サーバー用(VLAN 20)、ゲスト Wi-Fi 用(VLAN 30)、医療機器用(VLAN 40)の VLAN を作成します
- 厳格なルールを設定します:スタッフ用 VLAN は HTTPS のみで EHR サーバーにアクセスできます。医療機器は、特定のポートで EHR サーバーとのみ通信できます。ゲスト Wi-Fi はインターネットのみにアクセスでき、内部ルーティングはできません
- 医療分野に特化した脅威フィードとマルウェアドメインのブロックを備えた pfBlockerNG を有効にします
- 内部 IP アドレスがインターネットに漏えいしないよう、送信 NAT を設定します
- 包括的なログ記録を有効にし、すべてのファイアウォールログを syslog 経由で SIEM に転送します
- 設定の自動バックアップを設定し、監査要件への準拠のためにルールベースを文書化します
落とし穴:
- ポートを指定したルールではなく、許可範囲が広すぎるルール(「allow any any」)を作成してしまう
- ルールの処理順序を忘れ、広範な PASS ルールを特定の BLOCK ルールより上に配置してしまう
- 重要なルールでログ記録を有効にせず、インシデント調査が不可能になる
- IoT デバイスにインターネットへの無制限のアクセスを許可し、データ流出の経路を作ってしまう
出力形式
## pfSense Firewall Configuration Report
**Device**: pfSense 2.7.2 on Netgate 4100
**Interfaces**: WAN (igb0), LAN (igb1), DMZ (igb2), MGMT (igb3)
**VLANs**: 4 configured (Staff, Servers, Guest, IoT)
**Total Rules**: 28 active rules across all interfaces
### Rule Summary by Interface
| Interface | Pass Rules | Block Rules | Logging Enabled |
|-----------|-----------|-------------|-----------------|
| WAN | 2 | 1 (default) | Yes |
| LAN | 4 | 2 | Yes (blocks) |
| DMZ | 3 | 1 (default) | Yes |
| GUEST | 1 | 2 | Yes |
| IOT | 1 | 3 | Yes |
### Security Controls
- pfBlockerNG: 12 IP blocklists + DNSBL enabled
- Snort IDS: Running on WAN and LAN interfaces
- VPN: OpenVPN remote access configured with MFA
- Logging: All traffic forwarded to SIEM (10.10.20.15)
コメント
Markdown 対応