dns-intelligence について
dns-intelligenceは、DNSレコードやメール認証、サブドメインを監査する、セキュリティ・運用チーム向けのMCPサービスです。取得可能な放置サブドメインも調査し、評価と修正案を示します。
主な機能
- 01一般的なDNSレコードを列挙
- 02SPF、DMARC、DKIMを分析
- 03サブドメインを発見して乗っ取りリスクを確認
- 04DNSSEC、CAA、ネームサーバーを確認
- 05メールセキュリティの問題と修正案を集約
活用シーン
- 01ドメインのDNS設定を監査
- 02メール認証と配送の安全性を調査
- 03デプロイ前に取得可能なサブドメインを発見
MCP 対応
MCPクライアントにDNS検索、ドメイン監査、サブドメイン列挙、乗っ取り検出、メールセキュリティ確認のツールを公開します。CLIにも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| domain | string | はい | 列挙するドメイン(例:example.com) |
詳細
@guardbee/mcp-dns-intelligence
🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch
DNS レコードを列挙し、SPF/DMARC/DKIM の設定ミスを検出して、乗っ取り可能なサブドメインを見つける MCP サーバーです。サブドメインは Certificate Transparency とワードリストを使って検出します。Node.js 組み込みの dns/promises を使用し、外部依存関係はありません。
テレメトリーはデフォルトでオフです。
GUARDBEE_TELEMETRY=1にすると、サーバー、ツール、成功状況、実行時間、ファイルパスなどの短いパラメーター値を送信します。長い文字列や、content、token、passwordなどのフィールドはプレースホルダーに置き換えられます。詳しくは@guardbee/mcp-telemetryを参照してください。
機能
- DNS の完全な列挙 — A、AAAA、MX、NS、TXT、CNAME、SOA レコード
- SPF 分析 —
+all、?all、重複レコード、および受信側と同じ方法でカウントする RFC 7208 の制限:ネストされたinclude/redirectによる DNS ルックアップ(最大 10 回)、空振りのルックアップ(最大 2 回)、includeのループと不足しているinclude - DMARC 分析 — ポリシー(
none/quarantine/reject)、pct、ruaアドレスの欠落 - DKIM チェック — よく使われる 9 種類のセレクター(
default、google、selector1、mailなど)を調査 - サブドメイン検出 — Certificate Transparency のログ(crt.sh と Cert Spotter に並列で問い合わせ。送信されるのはドメイン名のみ)からの名前と、75 件の名前を含むワードリストを使用します。ワイルドカード DNS は除外されます。応答のある名前はすべて、サブドメイン乗っ取りの有無をチェックします
- メールセキュリティの概要 — SPF、DMARC、DKIM をまとめて分析し、そのままコピーして使える修正案を提示
- 23 件のユニットテスト — 純粋なロジックのテストで、ネットワーク接続は不要
クイックスタート
npm install -g @guardbee/mcp-dns-intelligence
claude_desktop_config.json に追加します:
{
"mcpServers": {
"guardbee-dns-intelligence": {
"command": "npx",
"args": ["-y", "@guardbee/mcp-dns-intelligence"]
}
}
}
MCP ツール
| ツール | 説明 |
|---|---|
enumerate_dns | A〜F の評価付きで DNS を完全にチェック:レコード、SPF/DMARC/DKIM、MTA-STS、DNSSEC、CAA、ネームサーバー |
audit_domains | 最大 20 個のドメインを監査し、評価と主な検出事項を比較 |
enumerate_subdomains | 一般的なサブドメインを調査(ワイルドカードを考慮)し、サブドメイン乗っ取りを検出 |
check_takeover | 指定されたホスト名について、サブドメイン乗っ取りの有無をチェック |
check_email_security | 修正案付きで SPF、DMARC、DKIM をまとめて監査 |
lookup_dns | 特定のレコードタイプ(A/MX/TXT など)を指定した DNS ルックアップ |
使用例
Claude に次のように尋ねることができます:
「example.com の DNS 設定に問題はありますか?」
「example.com のメールセキュリティ(SPF、DMARC、DKIM)を監査してください」
「example.com のサブドメインを一覧表示し、参照先のないものがあれば指摘してください」
「example.com の MX レコードを教えてください」
出力例
Email Security Check: example.com
──────────────────────────────────────────────────
── SPF ─────────────────────────────────────────
✓ v=spf1 include:_spf.google.com -all
── DMARC ───────────────────────────────────────
✗ No DMARC record found at _dmarc.example.com
Add: v=DMARC1; p=quarantine; rua=mailto:[email protected]
── DKIM ────────────────────────────────────────
✓ Found DKIM selectors: google
SPF の検出結果
| コード | 重大度 | 説明 |
|---|---|---|
SPF_MISSING | 🟡 中 | SPF レコードが見つかりません |
SPF_PERMISSIVE_ALL | 🔴 重大 | +all — すべてのサーバーを許可します |
SPF_NEUTRAL_ALL | 🟠 高 | ?all — 未承認の送信者を拒否しません |
SPF_NO_ALL | 🟡 中 | all メカニズムがありません |
SPF_TOO_MANY_LOOKUPS | 🟠 高 | DNS ルックアップが 10 回を超えています — SPF が失敗します |
SPF_DUPLICATE | 🟠 高 | SPF レコードが複数あります |
SPF_AT_LOOKUP_LIMIT | 🔵 低 | ルックアップがちょうど 10 回です — include がもう 1 つあると SPF が失敗します |
SPF_TOO_MANY_VOID_LOOKUPS | 🟠 高 | 2 件を超える include がレコードを返しません |
SPF_INCLUDE_MISSING | 🟠 高 | include/redirect の参照先に SPF レコードがありません(permerror) |
SPF_INCLUDE_DUPLICATE | 🟠 高 | include されたドメインが複数の SPF レコードを公開しています |
SPF_INCLUDE_LOOP | 🟠 高 | include が評価中のレコードに戻るループを形成しています |
SPF_PTR | 🔵 低 | 非推奨の ptr メカニズムを使用しています |
DMARC の検出結果
| コード | 重大度 | 説明 |
|---|---|---|
DMARC_MISSING | 🟠 高 | DMARC レコードがありません |
DMARC_NO_POLICY | 🟠 高 | p= ポリシーがありません |
DMARC_POLICY_NONE | 🟡 中 | p=none — 適用を行わない監視モードです |
DMARC_PCT_LOW | 🔵 低 | pct が 100 未満です — 部分的な適用です |
DMARC_NO_RUA | 🔵 低 | 集計レポートの送信先(rua)がありません |
DMARC_MULTIPLE | 🟠 高 | DMARC レコードが複数あります — 受信側はすべて無視します |
DMARC_INVALID_POLICY | 🟠 高 | p= が none、quarantine、reject のいずれでもありません |
DMARC_SUBDOMAINS_NONE | 🟡 中 | sp=none により、サブドメインがなりすまし可能な状態になります |
DOMAIN_NOT_FOUND | 🟠 高 | ドメインが存在しません(NXDOMAIN) |
独自の DMARC レコードを持たないサブドメインは、受信側と同様に親ドメインのポリシー(sp=)を継承します。サブドメインの列挙ではワイルドカード DNS を検出し、ワイルドカードのみで応答する名前は除外します。
DKIM、MX、トランスポートの検出結果
| コード | 重大度 | 説明 |
|---|---|---|
DKIM_NOT_FOUND | 🟡 中 | 一般的な約 35 個のセレクターで DKIM キーが見つかりません(独自のセレクターは dkimSelectors で渡してください) |
DKIM_KEY_WEAK | 🟠 高 | RSA キーが 1024 ビット未満です |
DKIM_KEY_1024 | 🟡 中 | 1024 ビットの RSA キーです — 2048 ビットにローテーションしてください(RFC 8301) |
DKIM_KEY_INVALID | 🟡 中 | 公開されたキーを解析できません |
DKIM_TESTING | 🔵 低 | t=y のテストモードです |
MX_UNRESOLVABLE | 🟠 高 | MX ホストに A/AAAA レコードがありません |
MTA_STS_MISSING | 🔵 低 | MTA-STS がありません:受信メールが平文にダウングレードされる可能性があります |
MTA_STS_MX_MISMATCH | 🟠 高 | enforce ポリシーに稼働中の MX が含まれていません — 準拠する送信者は配信を拒否します |
MTA_STS_POLICY_UNREACHABLE / _INVALID | 🟡 中 | ポリシーファイルがない、リダイレクトされている、または不正な形式です — 送信者は MTA-STS を無視します |
MTA_STS_TESTING / _MODE_NONE / _MAX_AGE_SHORT | 🔵 低 | 適用されていない、取り消されている、または max_age が 1 日未満です |
TLSRPT_MISSING / _INVALID | 🔵 低 | MTA-STS と併用できる TLS-RPT がありません |
SPF_MISSING は、ドメインに MX レコードがある場合(Google Workspace なら v=spf1 include:_spf.google.com ~all などの基本レコードを設定)🟠 高となり、それ以外の場合は 🟡 中となります(v=spf1 -all の設定を推奨)。
ネームサーバーの検出結果
ゾーンの各ネームサーバーに対し、DNS(UDP/TCP 53)経由で直接問い合わせます。再帰なしの SOA クエリ、AXFR リクエスト(最初のメッセージのみ読み込み、ゾーン全体はダウンロードしません)、およびホストしていない名前への再帰クエリを実行します。--no-ns-probe / nameserverProbe: false でスキップできます。
| コード | 深刻度 | 説明 |
|---|---|---|
NS_AXFR_ALLOWED | 🟠 高 | 誰でもゾーン全体をダウンロードできます(ゾーン転送) |
NS_LAME | 🟠 高 | リストにあるネームサーバーが権威ある応答を返しません(REFUSED、SERVFAIL、AA なし、または応答なし) |
NS_UNRESOLVABLE | 🟠 高 | ネームサーバー自体の名前にアドレスがありません |
NS_OPEN_RESOLVER | 🟡 中 | ネームサーバーが誰からの再帰クエリにも応答します(増幅攻撃、キャッシュポイズニング) |
NS_SOA_SERIAL_MISMATCH | 🔵 低 | 同じプライマリのサーバーが異なるシリアル番号を返します(マルチプロバイダー構成はプライマリごとに比較します) |
DNSSEC と CAA の検出結果
| コード | 深刻度 | 説明 |
|---|---|---|
DNSSEC_BROKEN | 🔴 致命的 | 検証に失敗します。検証を行うリゾルバー(Google、Cloudflare、ほとんどの ISP)はドメインを解決できません |
DNSSEC_NO_DS | 🟡 中 | ゾーンには署名がありますが、親ゾーンに DS がないため、何も検証されません |
DNSSEC_WEAK_ALGORITHM | 🟡 中 | 非推奨の署名アルゴリズム(RSASHA1、RSAMD5、DSA、GOST。RFC 8624) |
DNSSEC_DS_SHA1 | 🔵 低 | DS ダイジェストが SHA-1 のみです |
DNSSEC_DISABLED | 🔵 低 | ゾーンに署名がありません |
CAA_BLOCKS_CURRENT_CA | 🟡 中 | CAA が、有効な証明書を発行した CA を許可していません。更新に失敗します |
CAA_UNKNOWN_CRITICAL | 🟠 高 | CA が理解できない重大な CAA タグがあります。すべての CA が発行を拒否する必要があります |
CAA_MISSING | 🔵 低 | ツリー内のどこにも CAA がありません。どの CA でも発行できます |
DNSSEC は DNS-over-HTTPS(dns.google)経由で取得します。Node のリゾルバーでは DS/DNSKEY レコードや AD フラグを確認できないため、検証クエリと cd=1(検証無効)クエリを比較します。CAA は RFC 8659(最も近い祖先)に従い、:443 で提供される証明書の発行者と照合します。http: false で両方のチェックをスキップできます。
サブドメインの乗っ取り検出
CNAME を持つ稼働中の各サブドメインを、CNAME チェーン(最大 5 ホップ)をたどってチェックします。ワイルドカードレコードもチェックします。*.domain が宙ぶらりんになっていると、リストにないすべての名前を取得できる状態になります。
| リスク | 条件 | プロバイダー |
|---|---|---|
| ⚠️ 乗っ取りの可能性あり | プロバイダーが誰にでも名前の取得を許可している | AWS S3(NoSuchBucket ページ)、Microsoft Azure および AWS Elastic Beanstalk(CNAME ターゲットが NXDOMAIN)、Surge.sh(project not found)、および未登録ドメインを指す CNAME |
| ⚠️ 手動で確認 | リソースは消失していますが、プロバイダーがドメインの所有確認を求める場合があります | GitHub Pages、Heroku、Netlify、Vercel、Ghost、Pantheon、WordPress.com、Help Scout、Tumblr、ngrok |
| 🧹 古いレコード | ターゲットは消失していますが、所有者だけが管理する登録済みドメイン配下にあります。レコードを削除してください。乗っ取りではなく、CI は失敗しません | その他のプロバイダー |
各ページのフィンガープリントは、プロバイダー上のランダムな未取得名を使って確認しました。「見つからない」ページに安定した目印がなくなったプロバイダーは記載していません。HTTP チェックでは、サブドメインに GET / を 1 回送信します(HTTPS、次に HTTP)。--no-http / httpProbe: false で無効にできます。すでに把握しているホスト名には check_takeover / takeover <host…> を使用してください。
CLI — CI/CD 連携
MCP サーバーモードに加えて、CLI として直接使用することもできます。
# Full DNS + email security check
npx @guardbee/mcp-dns-intelligence check example.com
# Fail only on high and above
npx @guardbee/mcp-dns-intelligence check example.com --fail-on=high
# Subdomain scan — exits 1 if a dangling CNAME is found
npx @guardbee/mcp-dns-intelligence subdomains example.com
# Subdomain scan with higher concurrency
npx @guardbee/mcp-dns-intelligence subdomains example.com --concurrency=50
# JSON output
npx @guardbee/mcp-dns-intelligence check example.com --format=json
# Several domains with an A–F grade each and a summary table (or every domain in guardbee.yml when none is given)
npx @guardbee/mcp-dns-intelligence check example.com example.de example.co.uk
npx @guardbee/mcp-dns-intelligence check --format=sarif > dns.sarif
評価:検出結果ごとに点数が減点されます(致命的 40、高 20、中 8、低 2)。また、最も深刻な検出結果によって評価の上限が決まります。致命的な問題が 1 件でもあれば F、高の問題があれば最高でも C、中の問題があれば最高でも B です。
終了コード: 0 = 問題なし · 1 = しきい値を超える検出結果/宙ぶらりんのサブドメイン · 2 = エラー
guardbee.yml による設定
プロジェクトのルートに guardbee.yml を作成すると、CLI フラグを保存できます。CLI フラグは常にファイルの設定より優先されます。
dns-intelligence:
fail-on: high # critical | high | medium | low
concurrency: 20 # parallel subdomain probes
domains: # used when no domain is given on the CLI
- example.com
- staging.example.com
サンプルファイルについては、guardbee.example.yml をご覧ください。
GitHub Actions — DNS セキュリティ監査
name: DNS Security Check
on:
schedule:
- cron: "0 6 * * *" # Every day at 06:00
workflow_dispatch:
jobs:
dns-check:
runs-on: ubuntu-latest
steps:
- name: Check DNS configuration
run: npx @guardbee/mcp-dns-intelligence check ${{ vars.DOMAIN }} --fail-on=high
- name: Scan for dangling subdomains
run: npx @guardbee/mcp-dns-intelligence subdomains ${{ vars.DOMAIN }}
GitLab CI
dns-security:
image: node:20
script:
- npx @guardbee/mcp-dns-intelligence check $DOMAIN --fail-on=high
- npx @guardbee/mcp-dns-intelligence subdomains $DOMAIN
only:
- schedules
デプロイ前のメールセキュリティチェック
- name: Verify email security records
run: |
npx @guardbee/mcp-dns-intelligence check ${{ vars.DOMAIN }} \
--fail-on=high \
--format=json | tee dns-report.json
- name: Upload DNS report
uses: actions/upload-artifact@v4
with:
name: dns-security-report
path: dns-report.json
開発
npm install
npm test # 23 unit tests
npm run build # TypeScript compile
ライセンス
MIT — GuardBee
フィードバック
ご質問、ご提案、または誤検知がありましたら、GitHub Discussions でスレッドを立てるか、issue を作成してください。GuardBee が役立った場合は、リポジトリに ⭐ を付けていただけると、ほかの方にも見つけてもらいやすくなります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。