- होम
- क्लाइंट-साइड डिफेंस
- डायग्नोस्टिक्स और सत्यापन
डायग्नोस्टिक्स और सत्यापन
यह पृष्ठ आपके क्लाइंट-साइड डिफेंस परिनियोजन को एंड-टू-एंड सत्यापित करने के लिए एक स्तरीय UAT सत्यापन मैट्रिक्स प्रदान करता है। प्रत्येक परीक्षण मामला अवसंरचना निर्भरता श्रृंखला का अनुसरण करता है — DNS रिज़ॉल्यूशन से लेकर CSD टेलीमेट्री तक — ताकि आप व्यवस्थित रूप से यह सिद्ध कर सकें कि प्रत्येक घटक सही ढंग से कार्य कर रहा है।
ये कमांड CSD Console Walkthrough के API समकक्ष हैं — इनका उपयोग तब करें जब आपको टर्मिनल से सत्यापन करना हो, निगरानी स्वचालित करनी हो, या UI के बिना CSD क्षमताओं का प्रदर्शन करना हो।
पूर्वापेक्षाएँ
Section titled “पूर्वापेक्षाएँ”API स्वचालन — परिवेश सेटअप में वर्णित अनुसार अपने परिवेश चर सेट करें:
set -a && source .env && set +aनीचे दिए गए सभी कमांड xTOKENx प्लेसहोल्डर प्रारूप का उपयोग करते हैं। अपने परिवेश चरों ($F5XC_API_TOKEN, $F5XC_NAMESPACE, आदि) से प्रतिस्थापित करें या पृष्ठ के शीर्ष पर इंटरैक्टिव फ़ॉर्म का उपयोग करें।
API व्यवहार संबंधी नोट्स
Section titled “API व्यवहार संबंधी नोट्स”समय सीमा सहायक
Section titled “समय सीमा सहायक”कई CSD एंडपॉइंट को epoch टाइमस्टैम्प (Unix epoch के बाद से सेकंड) की आवश्यकता होती है। ये वन-लाइनर सामान्य श्रेणियों के लिए प्रारंभ/समाप्ति समय की गणना करते हैं।
क्रॉस-प्लेटफ़ॉर्म (macOS + Linux):
# Current time as epoch secondsNOW=$(date +%s)
# 1 hour agoSTART_1H=$(( NOW - 3600 ))
# 24 hours agoSTART_24H=$(( NOW - 86400 ))
# 7 days agoSTART_7D=$(( NOW - 604800 ))
# 30 days agoSTART_30D=$(( NOW - 2592000 ))| प्रीसेट | सेकंड | शेल एक्सप्रेशन |
|---|---|---|
| 1 घंटा | 3,600 | $(( $(date +%s) - 3600 )) |
| 24 घंटे | 86,400 | $(( $(date +%s) - 86400 )) |
| 7 दिन | 604,800 | $(( $(date +%s) - 604800 )) |
| 30 दिन | 2,592,000 | $(( $(date +%s) - 2592000 )) |
परीक्षण मामले का प्रारूप
Section titled “परीक्षण मामले का प्रारूप”नीचे दिए गए प्रत्येक परीक्षण की यह संरचना है:
| फ़ील्ड | विवरण |
|---|---|
| परीक्षण ID | परत संख्या + अनुक्रमिक ID (जैसे, DNS-1, TLS-2) |
| यह क्या सिद्ध करता है | सत्यापित की जा रही विशिष्ट अवसंरचना तथ्य |
| कमांड | चलाने के लिए तैयार curl या dig कमांड |
| PASS / FAIL | स्वस्थ बनाम अस्वस्थ स्थिति के लिए अपेक्षित आउटपुट |
| सुधार | संबंधित सेटअप या समस्या निवारण अनुभाग का लिंक |
परत 1: DNS रिज़ॉल्यूशन
Section titled “परत 1: DNS रिज़ॉल्यूशन”DNS आधार है — यदि डोमेन लोड बैलेंसर VIP पर रिज़ॉल्व नहीं होता, तो कुछ भी काम नहीं करता।
DNS-1: A रिकॉर्ड रिज़ॉल्यूशन
Section titled “DNS-1: A रिकॉर्ड रिज़ॉल्यूशन”यह क्या सिद्ध करता है: डोमेन लोड बैलेंसर VIP IP पते पर रिज़ॉल्व होता है।
dig +short xF5XC_DOMAINNAMEx A| परिणाम | अर्थ |
|---|---|
PASS — VIP IP लौटाया गया (जैसे, 72.19.3.185) | डोमेन LB वर्चुअल IP पर रिज़ॉल्व होता है |
| FAIL — खाली प्रतिक्रिया | DNS A रिकॉर्ड कॉन्फ़िगर नहीं किया गया |
सुधार: API स्वचालन — चरण 4: DNS कॉन्फ़िगर करें
DNS-2: ACME चैलेंज रिकॉर्ड
Section titled “DNS-2: ACME चैलेंज रिकॉर्ड”यह क्या सिद्ध करता है: स्वचालित TLS प्रमाणपत्र प्रावधान के लिए ACME चैलेंज रिकॉर्ड मौजूद है।
dig +short _acme-challenge.xF5XC_DOMAINNAMEx CNAMEdig +short _acme-challenge.xF5XC_DOMAINNAMEx TXT| परिणाम | अर्थ |
|---|---|
PASS — *.autocerts.ves.volterra.io. को CNAME (बाहरी DNS) | ACME चैलेंज CNAME जगह पर है |
| PASS — डोमेन मान के साथ TXT रिकॉर्ड (F5 Distributed Cloud (F5 XC) प्रबंधित DNS) | प्लेटफ़ॉर्म-प्रबंधित ACME चैलेंज TXT रिकॉर्ड के माध्यम से |
| FAIL — दोनों खाली | ACME रिकॉर्ड कॉन्फ़िगर नहीं; प्रमाणपत्र PreDomainChallengePending में रहेगा |
सुधार: बाहरी DNS के लिए, CNAME बनाएँ: _acme-challenge.xF5XC_DOMAINNAMEx → *.autocerts.ves.volterra.io। F5 XC प्रबंधित DNS के लिए, DNS ज़ोन पर allow_http_lb_managed_records सक्षम करें — DNS-4 देखें। API स्वचालन — चरण 4 देखें।
DNS-3: नेमसर्वर अधिकार
Section titled “DNS-3: नेमसर्वर अधिकार”यह क्या सिद्ध करता है: क्या F5 XC रूट डोमेन के लिए आधिकारिक DNS प्रदाता है।
dig +short NS xF5XC_ROOT_DOMAINx| परिणाम | अर्थ |
|---|---|
ns1.f5clouddns.com और ns2.f5clouddns.com शामिल हैं | F5 XC प्रबंधित DNS — रिकॉर्ड स्वतः बनाए जा सकते हैं |
| अन्य नेमसर्वर | बाहरी DNS — रिकॉर्ड मैन्युअल रूप से बनाने होंगे |
सुधार: API स्वचालन — DNS अधिकार का पता लगाएँ
DNS-4: F5 XC प्रबंधित रिकॉर्ड सक्षम
Section titled “DNS-4: F5 XC प्रबंधित रिकॉर्ड सक्षम”यह क्या सिद्ध करता है: F5 XC DNS ज़ोन लोड बैलेंसर के लिए स्वचालित रिकॉर्ड निर्माण की अनुमति देता है (केवल F5 XC प्रबंधित DNS)।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/dns/namespaces/system/dns_zones/xF5XC_ROOT_DOMAINx" \ | jq '.spec.primary.allow_http_lb_managed_records'| परिणाम | अर्थ |
|---|---|
PASS — true | प्लेटफ़ॉर्म LBs के लिए A और ACME रिकॉर्ड स्वतः बनाएगा |
FAIL — false या null | प्रबंधित रिकॉर्ड अक्षम; ज़ोन अपडेट के माध्यम से सक्षम करें |
सुधार: API स्वचालन — विकल्प A: F5 XC प्रबंधित DNS
परत 2: TLS प्रमाणपत्र
Section titled “परत 2: TLS प्रमाणपत्र”DNS रिज़ॉल्व होने के बाद, लोड बैलेंसर के पास एक वैध TLS प्रमाणपत्र होना चाहिए।
TLS-1: प्रमाणपत्र स्थिति
Section titled “TLS-1: प्रमाणपत्र स्थिति”यह क्या सिद्ध करता है: HTTPS LB पर स्वचालित TLS प्रमाणपत्र जारी किया गया है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq '.spec.cert_state'| परिणाम | अर्थ |
|---|---|
PASS — "CertificateValid" या "AutoCertRenewing" | प्रमाणपत्र वैध और सक्रिय है |
WARN — "DomainChallengePending" या "DomainChallengeStarted" | ACME चैलेंज प्रगति में — 5–10 मिनट प्रतीक्षा करें |
INFO — "AutoCertDomainRateLimited" | Let’s Encrypt दर सीमा पहुँच गई — डेमो परिवेशों में अपेक्षित, HTTP LB को प्रभावित नहीं करता |
FAIL — "PreDomainChallengePending" | ACME चैलेंज रिकॉर्ड गायब — DNS-2 देखें |
सुधार: सुनिश्चित करें कि ACME चैलेंज रिकॉर्ड जगह पर है (बाहरी DNS के लिए CNAME, या F5 XC DNS के लिए प्रबंधित रिकॉर्ड सक्षम करें)। रिकॉर्ड कॉन्फ़िगर होने के बाद प्रमाणपत्र प्रावधान में 5–10 मिनट लगते हैं। यदि 15 मिनट से अधिक समय के बाद भी अटका हुआ है, तो Certificate Stuck — Clean Recreation देखें। यदि दर-सीमित है, तो HTTP LB अप्रभावित है।
TLS-2: प्रमाणपत्र विवरण
Section titled “TLS-2: प्रमाणपत्र विवरण”यह क्या सिद्ध करता है: प्रमाणपत्र अपेक्षित डोमेन को कवर करता है और समाप्ति जानकारी दिखाता है। केवल HTTPS LB पर लागू।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq '{ cert_state: .spec.cert_state, auto_cert_info: .spec.auto_cert_info }'| परिणाम | अर्थ |
|---|---|
PASS — auto_cert_info में dns_records और प्रमाणपत्र मेटाडेटा शामिल है | प्रमाणपत्र प्रावधान विवरण उपलब्ध है |
FAIL — auto_cert_info null या खाली है | प्रमाणपत्र अभी तक प्रावधानित नहीं हुआ |
TLS-3: लाइव TLS हैंडशेक
Section titled “TLS-3: लाइव TLS हैंडशेक”यह क्या सिद्ध करता है: TLS प्रमाणपत्र वैध है और हैंडशेक क्लाइंट पक्ष से पूर्ण होता है। केवल तब लागू जब HTTPS LB के पास वैध प्रमाणपत्र हो।
curl -sv "https://xF5XC_DOMAINNAMEx/" 2>&1 \ | grep -E 'SSL connection|subject:|expire date:|issuer:'| परिणाम | अर्थ |
|---|---|
PASS — SSL connection using TLSv1.3, वैध विषय और समाप्ति दिखाता है | एंड-टू-एंड TLS काम कर रहा है |
| FAIL — कनेक्शन अस्वीकृत या प्रमाणपत्र त्रुटि | DNS रिज़ॉल्यूशन और प्रमाणपत्र स्थिति जाँचें; यदि दर-सीमित है, तो HTTP का उपयोग करें |
TLS-4: LB से ACME रिकॉर्ड लक्ष्य
Section titled “TLS-4: LB से ACME रिकॉर्ड लक्ष्य”यह क्या सिद्ध करता है: HTTPS लोड बैलेंसर प्रमाणपत्र सत्यापन के लिए सही ACME लक्ष्य रिपोर्ट करता है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq '{ vip_ip: .spec.dns_info[0].ip_address, acme_target: .spec.auto_cert_info.dns_records }'| परिणाम | अर्थ |
|---|---|
PASS — vip_ip और acme_target आबाद | DNS रिकॉर्ड इन मानों के विरुद्ध सत्यापित किए जा सकते हैं |
FAIL — null मान | LB में https_auto_cert कॉन्फ़िगर नहीं हो सकता |
परत 3: HTTP लोड बैलेंसर
Section titled “परत 3: HTTP लोड बैलेंसर”लोड बैलेंसर तैयार स्थिति में होना चाहिए और सही ढंग से कॉन्फ़िगर होना चाहिए।
LB-1: परिचालन स्थिति
Section titled “LB-1: परिचालन स्थिति”यह क्या सिद्ध करता है: HTTP लोड बैलेंसर (प्राथमिक) पूरी तरह से परिचालन में है और ट्रैफ़िक स्वीकार कर रहा है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '.spec.state'| परिणाम | अर्थ |
|---|---|
PASS — "VIRTUAL_HOST_READY" | LB परिचालन में है |
FAIL — "VIRTUAL_HOST_PENDING_A_RECORD" | DNS A रिकॉर्ड कॉन्फ़िगर नहीं — DNS-1 देखें |
सुधार: LB VIRTUAL_HOST_PENDING_A_RECORD में अटका हुआ
LB-2: डोमेन कॉन्फ़िगरेशन
Section titled “LB-2: डोमेन कॉन्फ़िगरेशन”यह क्या सिद्ध करता है: HTTP लोड बैलेंसर सही डोमेन(s) के लिए कॉन्फ़िगर किया गया है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '.spec.domains'| परिणाम | अर्थ |
|---|---|
PASS — array में आपका FQDN शामिल है (जैसे, ["app.example.com"]) | LB अपेक्षित डोमेन के लिए कॉन्फ़िगर है |
| FAIL — गायब या गलत डोमेन | सही डोमेन के साथ LB spec अपडेट करें |
LB-3: LB पर CSD सक्षम
Section titled “LB-3: LB पर CSD सक्षम”यह क्या सिद्ध करता है: क्लाइंट-साइड डिफेंस सही JS इंजेक्शन नीति के साथ लोड बैलेंसर पर सक्षम है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '{ csd_enabled: (if .spec.client_side_defense then true else false end), js_policy: .spec.client_side_defense.policy }'| परिणाम | अर्थ |
|---|---|
PASS — csd_enabled: true नीति में js_insert_all_pages के साथ | CSD सभी पृष्ठों पर JS इंजेक्शन के साथ सक्रिय |
FAIL — csd_enabled: false | LB पर CSD कॉन्फ़िगर नहीं |
सुधार: API Reference — लोड बैलेंसर पर CSD सक्षम करें
LB-4: डिफ़ॉल्ट रूट पूल
Section titled “LB-4: डिफ़ॉल्ट रूट पूल”यह क्या सिद्ध करता है: लोड बैलेंसर अपेक्षित वज़न और प्राथमिकता के साथ सही ऑरिजिन पूल को संदर्भित करता है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '.spec.default_route_pools[] | { pool: .pool.name, namespace: .pool.namespace, weight: .weight, priority: .priority }'| परिणाम | अर्थ |
|---|---|
| PASS — वज़न/प्राथमिकता के साथ आपका ऑरिजिन पूल नाम दिखाता है | LB सही बैकएंड पर रूट कर रहा है |
| FAIL — खाली या गलत पूल | LB default_route_pools कॉन्फ़िगरेशन अपडेट करें |
LB-5: परिनियोजन स्थिति (प्रति-साइट स्थितियाँ)
Section titled “LB-5: परिनियोजन स्थिति (प्रति-साइट स्थितियाँ)”यह क्या सिद्ध करता है: लोड बैलेंसर परिनियोजित है और सभी साइटों में स्वस्थ स्थितियाँ रिपोर्ट करता है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '{ state: .spec.state, dns_info: .spec.dns_info, host_name: .spec.host_name }'| परिणाम | अर्थ |
|---|---|
PASS — state VIRTUAL_HOST_READY है, dns_info आबाद है | LB VIP असाइन के साथ पूरी तरह से परिनियोजित |
FAIL — लंबित स्थिति या खाली dns_info | DNS या प्रमाणपत्र समस्या परिनियोजन को अवरुद्ध कर रही है |
LB-6: पूर्ण LB सारांश
Section titled “LB-6: पूर्ण LB सारांश”यह क्या सिद्ध करता है: डीबगिंग के लिए दोनों LB कॉन्फ़िगरेशन का व्यापक स्नैपशॉट।
HTTP LB (प्राथमिक):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '{ name: .metadata.name, state: .spec.state, domains: .spec.domains, csd_enabled: (if .spec.client_side_defense then true else false end), route_pools: [.spec.default_route_pools[] | .pool.name], advertise: (if .spec.advertise_on_public_default_vip then "public_default_vip" else "custom" end) }'HTTPS LB (द्वितीयक — प्रमाणपत्र स्थिति सहित):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq '{ name: .metadata.name, state: .spec.state, cert_state: .spec.cert_state, domains: .spec.domains, csd_enabled: (if .spec.client_side_defense then true else false end), route_pools: [.spec.default_route_pools[] | .pool.name] }'परत 4: ऑरिजिन पूल
Section titled “परत 4: ऑरिजिन पूल”ऑरिजिन पूल उन बैकएंड सर्वरों को परिभाषित करता है जिन पर लोड बैलेंसर ट्रैफ़िक रूट करता है।
OP-1: ऑरिजिन पूल कॉन्फ़िगरेशन
Section titled “OP-1: ऑरिजिन पूल कॉन्फ़िगरेशन”यह क्या सिद्ध करता है: ऑरिजिन पूल सही बैकएंड सर्वर, पोर्ट, और LB एल्गोरिदम के साथ मौजूद है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx" \ | jq '{ name: .metadata.name, origin_servers: [.spec.origin_servers[] | { ip: .public_ip.ip, labels: .labels }], port: .spec.port, lb_algorithm: .spec.loadbalancer_algorithm, endpoint_selection: .spec.endpoint_selection }'| परिणाम | अर्थ |
|---|---|
| PASS — सही IP, पोर्ट, और एल्गोरिदम दिखाता है | ऑरिजिन पूल सही ढंग से कॉन्फ़िगर है |
FAIL — 404 या गलत मान | ऑरिजिन पूल गायब या गलत कॉन्फ़िगर |
सुधार: API स्वचालन — चरण 2: ऑरिजिन पूल बनाएँ
OP-2: ऑरिजिन सर्वर से TLS
Section titled “OP-2: ऑरिजिन सर्वर से TLS”यह क्या सिद्ध करता है: LB और ऑरिजिन सर्वर के बीच कनेक्शन के लिए TLS कॉन्फ़िगर है या नहीं।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx" \ | jq '{ tls_config: (if .spec.no_tls then "no_tls (plaintext)" elif .spec.use_tls then "use_tls (encrypted)" else "unknown" end) }'| परिणाम | अर्थ |
|---|---|
no_tls (plaintext) | LB HTTP पर ऑरिजिन सर्वर से कनेक्ट होता है (Juice Shop डेमो के लिए अपेक्षित) |
use_tls (encrypted) | LB HTTPS पर ऑरिजिन सर्वर से कनेक्ट होता है |
OP-3: स्वास्थ्य जाँच संबद्धता
Section titled “OP-3: स्वास्थ्य जाँच संबद्धता”यह क्या सिद्ध करता है: ऑरिजिन पूल में सही स्वास्थ्य जाँच लिंक की गई है (यदि लागू हो)।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx" \ | jq '.spec.healthcheck'| परिणाम | अर्थ |
|---|---|
| PASS — स्वास्थ्य जाँच संदर्भ (नाम, namespace, प्रकार) के साथ array | स्वास्थ्य जाँच लिंक है |
OK — खाली array [] | कोई स्वास्थ्य जाँच नहीं (स्वीकार्य — CSD को एक की आवश्यकता नहीं है) |
| FAIL — एक स्वास्थ्य जाँच अपेक्षित थी लेकिन array खाली है | निर्माण के समय स्वास्थ्य जाँच नहीं मिली — Healthcheck Not Linked देखें |
OP-4: ऑरिजिन कनेक्टिविटी
Section titled “OP-4: ऑरिजिन कनेक्टिविटी”यह क्या सिद्ध करता है: ऑरिजिन सर्वर क्लाइंट पक्ष से पहुँचनीय है (LB-से-ऑरिजिन पथ का परीक्षण नहीं करता)।
curl -s -o /dev/null -w '%{http_code}' \ "http://xF5XC_ORIGIN_IPx:xF5XC_ORIGIN_PORTx/"| परिणाम | अर्थ |
|---|---|
PASS — 200 (या अन्य वैध HTTP कोड) | ऑरिजिन सर्वर प्रतिक्रिया दे रहा है |
FAIL — 000 या कनेक्शन अस्वीकृत | इस नेटवर्क से ऑरिजिन सर्वर अप्राप्य |
परत 5: स्वास्थ्य जाँच
Section titled “परत 5: स्वास्थ्य जाँच”स्वास्थ्य जाँच बैकएंड उपलब्धता की निगरानी करती है। ये CSD के लिए वैकल्पिक हैं लेकिन उत्पादन परिनियोजन के लिए उपयोगी हैं।
HC-1: स्वास्थ्य जाँच कॉन्फ़िगरेशन
Section titled “HC-1: स्वास्थ्य जाँच कॉन्फ़िगरेशन”यह क्या सिद्ध करता है: स्वास्थ्य जाँच सही प्रकार, पथ, समयिंग, और सीमाओं के साथ मौजूद है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx" \ | jq '{ name: .metadata.name, type: (if .spec.http_health_check then "HTTP" elif .spec.tcp_health_check then "TCP" else "unknown" end), path: .spec.http_health_check.path, expected_status: .spec.http_health_check.expected_status_codes, timeout: .spec.timeout, interval: .spec.interval, unhealthy_threshold: .spec.unhealthy_threshold, healthy_threshold: .spec.healthy_threshold }'| परिणाम | अर्थ |
|---|---|
PASS — पथ / और अपेक्षित 200 के साथ HTTP प्रकार दिखाता है | स्वास्थ्य जाँच सही ढंग से कॉन्फ़िगर है |
FAIL — 404 प्रतिक्रिया | स्वास्थ्य जाँच मौजूद नहीं (हो सकता है छोड़ दी गई हो — चरण 1 Phase 1 देखें) |
HC-2: सभी स्वास्थ्य जाँचें सूचीबद्ध करें
Section titled “HC-2: सभी स्वास्थ्य जाँचें सूचीबद्ध करें”यह क्या सिद्ध करता है: नामकरण और गिनती सत्यापित करने के लिए namespace में सभी स्वास्थ्य जाँचें गिनाता है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks" \ | jq -r ' ["NAME", "NAMESPACE", "DESCRIPTION"], (.items[] | [ .name, .namespace, (.description | if length == 0 then "—" else . end) ]) | @tsv' | column -tपरत 6: CSD कॉन्फ़िगरेशन
Section titled “परत 6: CSD कॉन्फ़िगरेशन”CSD को टेनेंट स्तर पर सक्षम होना चाहिए और JavaScript इंजेक्शन टैग कॉन्फ़िगर होना चाहिए।
CSD-1: टेनेंट CSD स्थिति
Section titled “CSD-1: टेनेंट CSD स्थिति”यह क्या सिद्ध करता है: CSD टेनेंट के लिए कॉन्फ़िगर और सक्षम है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status" \ | jq '{isConfigured, isEnabled}'| परिणाम | अर्थ |
|---|---|
PASS — दोनों true | इस टेनेंट के लिए CSD सक्रिय है |
FAIL — isConfigured: false | CSD टेनेंट स्तर पर सक्षम नहीं — F5 XC प्रशासक से संपर्क करें |
FAIL — isEnabled: false | CSD कॉन्फ़िगर लेकिन सक्रिय नहीं |
CSD-2: JS इंजेक्शन टैग
Section titled “CSD-2: JS इंजेक्शन टैग”यह क्या सिद्ध करता है: CSD JavaScript इंजेक्शन टैग उत्पन्न हुआ है और इंजेक्शन के लिए तैयार है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \ | jq '{has_script_tag: (.scriptTag | length > 0)}'| परिणाम | अर्थ |
|---|---|
PASS — has_script_tag: true | JS इंजेक्शन टैग कॉन्फ़िगर है |
FAIL — has_script_tag: false | कोई स्क्रिप्ट टैग नहीं — सत्यापित करें कि CSD सक्षम है और एक संरक्षित डोमेन पंजीकृत है |
CSD-3: JS टैग सामग्री
Section titled “CSD-3: JS टैग सामग्री”यह क्या सिद्ध करता है: सत्यापन या मैन्युअल इंजेक्शन के लिए पूरा स्क्रिप्ट टैग दिखाता है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \ | jq '.scriptTag'CSD-4: संरक्षित डोमेन पंजीकरण
Section titled “CSD-4: संरक्षित डोमेन पंजीकरण”यह क्या सिद्ध करता है: रूट डोमेन टेनेंट पर CSD संरक्षित डोमेन के रूप में पंजीकृत है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \ | jq '.items[] | {name, namespace, description}'| परिणाम | अर्थ |
|---|---|
PASS — गैर-खाली name के साथ एक आइटम दिखाता है | डोमेन संरक्षित है |
FAIL — आइटमों में खाली name और namespace फ़ील्ड | कोई संरक्षित डोमेन पंजीकृत नहीं — Phase 1 चरण 6 देखें |
CSD-5: लाइव JS इंजेक्शन सत्यापन
Section titled “CSD-5: लाइव JS इंजेक्शन सत्यापन”यह क्या सिद्ध करता है: CSD JavaScript वास्तव में लोड बैलेंसर द्वारा प्रदान किए गए पृष्ठ प्रतिक्रियाओं में इंजेक्ट किया जा रहा है।
curl -s "http://xF5XC_DOMAINNAMEx/" \ | grep -oE '(zeronaught|shape)\.com[^"]*' | head -1| परिणाम | अर्थ |
|---|---|
PASS — एक zeronaught.com या shape.com URL खंड लौटाता है (जैसे, zeronaught.com/__imp_apg__/js/...) | CSD JavaScript पृष्ठों में इंजेक्ट किया जा रहा है |
| FAIL — खाली आउटपुट | JS इंजेक्ट नहीं — LB-3 और CSD-1 जाँचें |
परत 7: ट्रैफ़िक सत्यापन
Section titled “परत 7: ट्रैफ़िक सत्यापन”सत्यापित करें कि लाइव ट्रैफ़िक लोड बैलेंसर तक पहुँच रहा है और सही ढंग से संसाधित हो रहा है।
TV-1: अनुरोध गिनती (पिछले 24 घंटे)
Section titled “TV-1: अनुरोध गिनती (पिछले 24 घंटे)”यह क्या सिद्ध करता है: ट्रैफ़िक लोड बैलेंसर तक पहुँच रहा है। शून्य परिणाम का मतलब है कोई ट्रैफ़िक नहीं आ रहा।
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "start_time": "'"$(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-24H +%Y-%m-%dT%H:%M:%SZ)"'", "end_time": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'" }' \ "xF5XC_API_URLx/api/data/namespaces/xF5XC_NAMESPACEx/access_logs/aggregation" \ | jq '{total_requests: .total_hits}'| परिणाम | अर्थ |
|---|---|
PASS — total_requests एक गैर-शून्य स्ट्रिंग है (जैसे, "380") | ट्रैफ़िक LB से होकर प्रवाहित हो रहा है |
FAIL — "0" या कोई डेटा नहीं | LB तक कोई ट्रैफ़िक नहीं — DNS-1 और LB-1 जाँचें |
TV-2: स्टेटस कोड वितरण
Section titled “TV-2: स्टेटस कोड वितरण”यह क्या सिद्ध करता है: प्रतिक्रिया स्टेटस कोड का विश्लेषण त्रुटि पैटर्न प्रकट करता है।
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "start_time": "'"$(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-24H +%Y-%m-%dT%H:%M:%SZ)"'", "end_time": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'", "sort": "DESCENDING", "limit": 100 }' \ "xF5XC_API_URLx/api/data/namespaces/xF5XC_NAMESPACEx/access_logs" \ | jq -r ' [.logs[] | fromjson | .rsp_code_class] | group_by(.) | map({class: .[0], count: length}) | sort_by(-.count) | ["STATUS_CLASS", "COUNT"], (.[] | [.class, .count]) | @tsv' | column -tस्वस्थ साइट के लिए अपेक्षित आउटपुट:
STATUS_CLASS COUNT2xx 82downstream_remote_disconnect 18| परिणाम | अर्थ |
|---|---|
PASS — बहुसंख्यक 2xx | साइट सफल प्रतिक्रियाएँ दे रही है |
WARN — उच्च 4xx गिनती | क्लाइंट त्रुटियाँ (खराब URL, गायब संसाधन) |
FAIL — उच्च 5xx गिनती | सर्वर त्रुटियाँ — ऑरिजिन सर्वर स्वास्थ्य जाँचें |
downstream_remote_disconnect वर्ग इंगित करता है कि प्रतिक्रिया पूर्ण होने से पहले क्लाइंट ने कनेक्शन बंद कर दिया (लॉन्ग-पोलिंग या WebSocket अपग्रेड अनुरोधों के लिए सामान्य)।
TV-3: हालिया अनुरोध नमूने
Section titled “TV-3: हालिया अनुरोध नमूने”यह क्या सिद्ध करता है: व्यक्तिगत अनुरोध सही फ़ील्ड के साथ लॉग किए जा रहे हैं।
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "start_time": "'"$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-1H +%Y-%m-%dT%H:%M:%SZ)"'", "end_time": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'", "sort": "DESCENDING", "limit": 10 }' \ "xF5XC_API_URLx/api/data/namespaces/xF5XC_NAMESPACEx/access_logs" \ | jq -r ' ["TIMESTAMP", "METHOD", "PATH", "STATUS", "SRC_IP"], (.logs[] | fromjson | [.["@timestamp"], .method, .req_path, .rsp_code, .src_ip]) | @tsv' | column -tTV-4: एक्सेस लॉग में CSD JS इंजेक्शन
Section titled “TV-4: एक्सेस लॉग में CSD JS इंजेक्शन”यह क्या सिद्ध करता है: एक्सेस लॉग पुष्टि करते हैं कि CSD JavaScript प्रतिक्रियाओं में इंजेक्ट किया जा रहा है।
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "start_time": "'"$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-1H +%Y-%m-%dT%H:%M:%SZ)"'", "end_time": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'", "sort": "DESCENDING", "limit": 20 }' \ "xF5XC_API_URLx/api/data/namespaces/xF5XC_NAMESPACEx/access_logs" \ | jq '[.logs[] | fromjson | select(.csd_js_injection == "true")] | length as $injected | {injected_count: $injected, total_sampled: 20}'| परिणाम | अर्थ |
|---|---|
PASS — injected_count > 0 | CSD JS पृष्ठ प्रतिक्रियाओं में इंजेक्ट किया जा रहा है |
FAIL — injected_count: 0 | JS इंजेक्ट नहीं — CSD-1 और LB-3 जाँचें |
TV-5: एंड-टू-एंड कनेक्टिविटी परीक्षण
Section titled “TV-5: एंड-टू-एंड कनेक्टिविटी परीक्षण”यह क्या सिद्ध करता है: एक पूरा अनुरोध क्लाइंट से DNS, LB, और ऑरिजिन सर्वर के माध्यम से प्रवाहित होता है और एक वैध प्रतिक्रिया लौटाता है।
curl -sv "http://xF5XC_DOMAINNAMEx/" 2>&1 \ | grep -E 'Connected to|< HTTP|< content-type'| परिणाम | अर्थ |
|---|---|
| PASS — कनेक्शन, HTTP 200, और content-type दिखाता है | पूर्ण स्टैक परिचालन में है |
| FAIL — कनेक्शन अस्वीकृत या DNS त्रुटि | परत 1: DNS से डीबगिंग शुरू करें |
परत 8: CSD टेलीमेट्री और डोमेन नीति
Section titled “परत 8: CSD टेलीमेट्री और डोमेन नीति”ये कमांड CSD कंसोल डैशबोर्ड, स्क्रिप्ट सूची, फ़ॉर्म फ़ील्ड, और नेटवर्क दृश्यों में प्रदर्शित समान डेटा क्वेरी करते हैं।
TEL-1: स्क्रिप्ट इन्वेंटरी
Section titled “TEL-1: स्क्रिप्ट इन्वेंटरी”यह क्या सिद्ध करता है: CSD संरक्षित डोमेन पर चल रही स्क्रिप्ट का पता लगा रहा है और उन्हें सूचीबद्ध कर रहा है।
NOW=$(date +%s)START=$(( NOW - 604800 ))
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d "{ \"startTime\": \"${START}\", \"endTime\": \"${NOW}\" }" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts" \ | jq -r ' ["SCRIPT", "RISK", "STATUS", "FIELDS", "USERS"], (.scripts[] | [ (.script_name | if length > 50 then .[:47] + "..." else . end), .risk_level, .status, (.form_fields_read // 0), (.affected_users_count // 0) ]) | @tsv' | column -t| परिणाम | अर्थ |
|---|---|
| PASS — जोखिम स्तरों के साथ स्क्रिप्ट सूचीबद्ध | CSD सक्रिय रूप से स्क्रिप्ट की निगरानी कर रहा है |
| FAIL — खाली array | समस्या निवारण: खाली स्क्रिप्ट array देखें |
TEL-2: पता लगाए गए डोमेन
Section titled “TEL-2: पता लगाए गए डोमेन”यह क्या सिद्ध करता है: CSD ने स्क्रिप्ट स्रोत डोमेन का पता लगाया है और उन्हें स्थिति के अनुसार वर्गीकृत किया है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{ summary: { action_needed: .domain_summary.actionNeededCount.count, mitigated: .domain_summary.mitigatedDomains.count, allowed: .domain_summary.allowedDomains.count, total: .domain_summary.totalDomains.count }, domains: [.domains_list[] | { domain: .domain, category: .category, status: .status, first_seen: (.firstSeenDate | tonumber | todate), latest_seen: (.latestSeenDate | tonumber | todate) }] }'| परिणाम | अर्थ |
|---|---|
PASS — total > 0 डोमेन सूचीबद्ध के साथ | CSD स्क्रिप्ट डोमेन ट्रैक कर रहा है |
WARN — action_needed > 0 | कुछ डोमेन की समीक्षा आवश्यक |
| FAIL — खाली प्रतिक्रिया | कोई टेलीमेट्री डेटा नहीं — CSD-5 जाँचें |
TEL-3: डोमेन नीति स्थिति
Section titled “TEL-3: डोमेन नीति स्थिति”यह क्या सिद्ध करता है: अनुमत बनाम शमन किए गए डोमेन का वितरण और नीति सुसंगत है या नहीं दिखाता है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{ action_needed: .domain_summary.actionNeededCount.count, mitigated: .domain_summary.mitigatedDomains.count, allowed: .domain_summary.allowedDomains.count, total: .domain_summary.totalDomains.count, domains_needing_action: [.domains_list[] | select(.status == "AN") | .domain] }'| परिणाम | अर्थ |
|---|---|
PASS — action_needed: 0 | सभी डोमेन की समीक्षा और वर्गीकरण हो चुका है |
WARN — action_needed > 0 | domains_needing_action में सूचीबद्ध डोमेन की समीक्षा आवश्यक |
TEL-4: फ़ॉर्म फ़ील्ड इन्वेंटरी
Section titled “TEL-4: फ़ॉर्म फ़ील्ड इन्वेंटरी”यह क्या सिद्ध करता है: CSD ने ऐसे फ़ॉर्म फ़ील्ड का पता लगाया है जिन्हें स्क्रिप्ट पढ़ रही हैं, संवेदनशीलता वर्गीकरण के साथ।
NOW=$(date +%s)START=$(( NOW - 604800 ))
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/formFields?startTime=${START}&endTime=${NOW}" \ | jq -r ' ["FIELD", "SENSITIVITY", "SCRIPTS"], (.form_fields[] | [ .name, .analysis, (.scripts_count // 0) ]) | @tsv' | column -t| परिणाम | अर्थ |
|---|---|
| PASS — संवेदनशीलता के साथ फ़ॉर्म फ़ील्ड सूचीबद्ध | CSD फ़ॉर्म फ़ील्ड एक्सेस ट्रैक कर रहा है |
| INFO — खाली array | कोई फ़ॉर्म फ़ील्ड पता नहीं लगा (अपेक्षित यदि साइट पर कोई फ़ॉर्म नहीं है) |
TEL-5: स्क्रिप्ट का विस्तृत विश्लेषण
Section titled “TEL-5: स्क्रिप्ट का विस्तृत विश्लेषण”यह क्या सिद्ध करता है: जोखिम, व्यवहार, और नेटवर्क इंटरैक्शन सहित किसी विशिष्ट स्क्रिप्ट के बारे में विस्तृत जानकारी।
पहले TEL-1 से एक स्क्रिप्ट ID प्राप्त करें, फिर उसके विवरण क्वेरी करें:
SCRIPT_ID="your-script-id"
# Overview (risk level, type, source domain)curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/dashboard" \ | jq '{script_name, risk_level, type, source_domain, status}'
# Behaviors over timecurl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/behaviors" \ | jq '.behaviors'
# Network interactions (domains the script communicates with)curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/networkInteractions" \ | jq '.network_interactions'TEL-6: प्रभावित उपयोगकर्ता
Section titled “TEL-6: प्रभावित उपयोगकर्ता”यह क्या सिद्ध करता है: किसी विशिष्ट स्क्रिप्ट से प्रभावित उपयोगकर्ताओं को सूचीबद्ध करता है, एक्सपोज़र के दायरे को दिखाता है।
SCRIPT_ID="your-script-id"NOW=$(date +%s)START=$(( NOW - 604800 ))
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d "{ \"startTime\": \"${START}\", \"endTime\": \"${NOW}\" }" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts/${SCRIPT_ID}/affectedUsers" \ | jq -r ' ["IP_ADDRESS", "DEVICE_ID", "GEO", "CHANNEL", "USER_AGENT"], (.affected_users[] | [ .ip_address, (.device_id | if length > 12 then .[:12] + "..." else . end), .geolocation, .channel, (.user_agent | if length > 30 then .[:27] + "..." else . end) ]) | @tsv' | column -tTEL-7: जोखिम स्तर के अनुसार स्क्रिप्ट गिनती
Section titled “TEL-7: जोखिम स्तर के अनुसार स्क्रिप्ट गिनती”यह क्या सिद्ध करता है: सभी पता लगाई गई स्क्रिप्ट में एकत्रित जोखिम वितरण।
NOW=$(date +%s)START=$(( NOW - 604800 ))
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d "{ \"startTime\": \"${START}\", \"endTime\": \"${NOW}\" }" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts" \ | jq '[.scripts[] | .risk_level] | group_by(.) | map({risk_level: .[0], count: length}) | sort_by(-.count)'| परिणाम | अर्थ |
|---|---|
PASS — सभी No Risk | कोई जोखिमपूर्ण स्क्रिप्ट पता नहीं चली |
WARN — Low Risk या High Risk मौजूद | TEL-5 में चिह्नित स्क्रिप्ट की समीक्षा करें |
TEL-8: टेलीमेट्री ताजगी
Section titled “TEL-8: टेलीमेट्री ताजगी”यह क्या सिद्ध करता है: CSD टेलीमेट्री डेटा हाल का है, सक्रिय निगरानी की पुष्टि करता है।
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{ total_domains: .domain_summary.totalDomains.count, latest_update: (.domain_summary.totalDomains.lastUpdated // "unknown"), most_recent_domain: (.domains_list | sort_by(.latestSeenDate) | last | { domain: .domain, latest_seen: (.latestSeenDate | tonumber | todate) }) }'| परिणाम | अर्थ |
|---|---|
PASS — latest_seen पिछले 24 घंटों के भीतर है | टेलीमेट्री सक्रिय रूप से डेटा एकत्र कर रही है |
WARN — latest_seen 24 घंटे से पुराना है | ट्रैफ़िक रुक गया हो सकता है या CSD प्रसंस्करण में देरी है |
पूर्ण-स्टैक डैशबोर्ड
Section titled “पूर्ण-स्टैक डैशबोर्ड”एक एकल कमांड चलाएँ जो प्रत्येक परत में सभी महत्वपूर्ण स्वास्थ्य संकेतकों की जाँच करे और एक सारांश तालिका प्रस्तुत करे:
echo "=== CSD Verification Dashboard ==="echo ""
# Layer 1: DNSDNS_A=$(dig +short xF5XC_DOMAINNAMEx A | head -1)DNS_ACME=$(dig +short _acme-challenge.xF5XC_DOMAINNAMEx CNAME | head -1)
# Layers 2-3: LB + TLSLB=$(curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http")LB_HTTPS=$(curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https")
LB_STATE=$(echo "$LB" | jq -r '.spec.state // "UNKNOWN"')CERT_STATE=$(echo "$LB_HTTPS" | jq -r '.spec.cert_state // "UNKNOWN"')CSD_ON_LB=$(echo "$LB" | jq -r 'if .spec.client_side_defense then "ENABLED" else "DISABLED" end')DOMAINS=$(echo "$LB" | jq -r '.spec.domains | join(", ")')ROUTE_POOL=$(echo "$LB" | jq -r '[.spec.default_route_pools[] | .pool.name] | join(", ")')
# Layer 6: CSD statusCSD=$(curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/status")
CSD_CONFIGURED=$(echo "$CSD" | jq -r '.isConfigured // false')CSD_ENABLED=$(echo "$CSD" | jq -r '.isEnabled // false')
# Layer 6: JS configJS_TAG=$(curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/js_configuration" \ | jq -r 'if (.scriptTag | length) > 0 then "PRESENT" else "MISSING" end')
# Layer 7: Traffic (last 24h)TRAFFIC=$(curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d "{ \"start_time\": \"$(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-24H +%Y-%m-%dT%H:%M:%SZ)\", \"end_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" }" \ "xF5XC_API_URLx/api/data/namespaces/xF5XC_NAMESPACEx/access_logs/aggregation" \ | jq -r '.total_hits // "0"')
printf "%-28s %s\n" "CHECK" "STATUS"printf "%-28s %s\n" "----------------------------" "----------------------------"printf "%-28s %s\n" "[DNS] A Record" "${DNS_A:-NOT_FOUND}"printf "%-28s %s\n" "[DNS] ACME CNAME" "${DNS_ACME:-NOT_FOUND}"printf "%-28s %s\n" "[TLS] Certificate" "$CERT_STATE"printf "%-28s %s\n" "[LB] State" "$LB_STATE"printf "%-28s %s\n" "[LB] Domains" "$DOMAINS"printf "%-28s %s\n" "[LB] Route Pool" "$ROUTE_POOL"printf "%-28s %s\n" "[LB] CSD on LB" "$CSD_ON_LB"printf "%-28s %s\n" "[CSD] Configured (tenant)" "$CSD_CONFIGURED"printf "%-28s %s\n" "[CSD] Enabled" "$CSD_ENABLED"printf "%-28s %s\n" "[CSD] JS Script Tag" "$JS_TAG"printf "%-28s %s\n" "[Traffic] Requests (24h)" "$TRAFFIC"एक्सेस लॉग फ़ील्ड संदर्भ
Section titled “एक्सेस लॉग फ़ील्ड संदर्भ”| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
@timestamp | string | अनुरोध टाइमस्टैम्प (ISO 8601)। @ उपसर्ग ध्यान दें — jq में .["@timestamp"] से एक्सेस करें |
method | string | HTTP मेथड (GET, POST, आदि) |
req_path | string | अनुरोध URI पथ |
rsp_code | string | HTTP प्रतिक्रिया स्टेटस कोड स्ट्रिंग के रूप में (जैसे, "200", "404") |
rsp_code_class | string | स्टेटस कोड वर्ग (2xx, 3xx, 4xx, 5xx, या downstream_remote_disconnect) |
src_ip | string | क्लाइंट स्रोत IP पता |
dst_ip | string | गंतव्य (VIP) IP पता |
domain | string | अनुरोध Host हेडर मान |
user_agent | string | क्लाइंट User-Agent स्ट्रिंग |
rsp_size | string | बाइट्स में प्रतिक्रिया बॉडी का आकार (स्ट्रिंग के रूप में लौटाया गया) |
req_size | string | बाइट्स में अनुरोध बॉडी का आकार (स्ट्रिंग के रूप में लौटाया गया) |
duration_with_data_tx_delay | string | सेकंड में कुल अनुरोध अवधि (स्ट्रिंग के रूप में लौटाई गई, जैसे, "0.024219") |
csd_js_injection | string | "true" जब CSD JavaScript इंजेक्ट किया गया हो (केवल सक्रिय होने पर मौजूद) |
CSD टेलीमेट्री फ़ील्ड संदर्भ
Section titled “CSD टेलीमेट्री फ़ील्ड संदर्भ”| फ़ील्ड | एंडपॉइंट | विवरण |
|---|---|---|
isConfigured | status | CSD टेनेंट स्तर पर सक्षम |
isEnabled | status | इस namespace के लिए CSD सक्रिय |
scripts[] | scripts | पता लगाई गई स्क्रिप्ट ऑब्जेक्ट की array |
.script_name | scripts | JavaScript फ़ाइल का पूरा URL |
.risk_level | scripts | जोखिम स्तर (No Risk, Low Risk, High Risk) |
.status | scripts | AN (Action Needed) या NA (No Action Needed) |
.form_fields_read | scripts | स्क्रिप्ट द्वारा पढ़े जाने वाले फ़ॉर्म फ़ील्ड की संख्या |
.affected_users_count | scripts | प्रभावित अद्वितीय उपयोगकर्ताओं/सत्रों की संख्या |
domain_summary | detected_domains | स्थिति के अनुसार गिनती: .actionNeededCount.count, .mitigatedDomains.count, .allowedDomains.count, .totalDomains.count (प्रत्येक में .count और .lastUpdated है) |
domains_list[] | detected_domains | पता लगाए गए डोमेन ऑब्जेक्ट की array, .domain, .status, .category, .firstSeenDate, .latestSeenDate (epoch सेकंड स्ट्रिंग के रूप में) के साथ |
form_fields[] | formFields | पता लगाए गए फ़ॉर्म फ़ील्ड ऑब्जेक्ट की array |
.analysis | formFields | संवेदनशीलता वर्गीकरण (Sensitive, Not Sensitive) |
समस्या निवारण
Section titled “समस्या निवारण”शून्य एक्सेस लॉग
Section titled “शून्य एक्सेस लॉग”यदि TV-1 0 लौटाता है:
-
DNS रिज़ॉल्यूशन जाँचें — सत्यापित करें कि डोमेन LB VIP पर रिज़ॉल्व होता है:
Terminal window dig +short xF5XC_DOMAINNAMEx Aयदि खाली है, DNS कॉन्फ़िगर नहीं है। API स्वचालन — चरण 4 देखें।
-
LB स्थिति जाँचें — लोड बैलेंसर
VIRTUAL_HOST_READYहोना चाहिए:Terminal window curl -s \-H "Authorization: APIToken xF5XC_API_TOKENx" \"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \| jq '.spec.state' -
एक परीक्षण अनुरोध भेजें — एंड-टू-एंड कनेक्टिविटी की पुष्टि के लिए ट्रैफ़िक उत्पन्न करें:
Terminal window curl -sv "http://xF5XC_DOMAINNAMEx/" 2>&1 | head -20एक सफल HTTP प्रतिक्रिया खोजें। केवल तभी
https://का उपयोग करें जब HTTPS LB प्रमाणपत्र वैध हो।
DNS ज़ोन पर प्रबंधित रिकॉर्ड अक्षम
Section titled “DNS ज़ोन पर प्रबंधित रिकॉर्ड अक्षम”यदि DNS-4 false लौटाता है, तो स्वचालित रिकॉर्ड निर्माण अक्षम है, भले ही F5 XC आधिकारिक DNS प्रदाता हो। यह एक सामान्य गलत कॉन्फ़िगरेशन है जिससे A रिकॉर्ड और ACME CNAME दोनों गायब हो जाते हैं, जो लोड बैलेंसर को VIRTUAL_HOST_READY तक पहुँचने और प्रमाणपत्र जारी होने से रोकता है।
प्रबंधित रिकॉर्ड सक्षम करने के लिए, allow_http_lb_managed_records: true सेट करने के लिए DNS ज़ोन कॉन्फ़िगरेशन अपडेट करें। API कॉल के लिए API स्वचालन — विकल्प A: F5 XC प्रबंधित DNS देखें।
LB VIRTUAL_HOST_PENDING_A_RECORD में अटका हुआ
Section titled “LB VIRTUAL_HOST_PENDING_A_RECORD में अटका हुआ”लोड बैलेंसर अपने VIP की ओर इंगित करने वाले DNS A रिकॉर्ड की प्रतीक्षा कर रहा है। विस्तृत समाधान चरणों के लिए LB VIRTUAL_HOST_PENDING_A_RECORD में अटका हुआ देखें।
प्रमाणपत्र PreDomainChallengePending में अटका हुआ
Section titled “प्रमाणपत्र PreDomainChallengePending में अटका हुआ”स्वचालित TLS प्रमाणपत्र के लिए ACME चैलेंज रिकॉर्ड की आवश्यकता होती है। विधि आपके DNS प्रदाता पर निर्भर करती है:
F5 XC प्रबंधित DNS: DNS ज़ोन पर allow_http_lb_managed_records सक्षम करें (DNS-4)। प्लेटफ़ॉर्म x-ves-io-managed RR सेट समूह में TXT-आधारित ACME चैलेंज रिकॉर्ड स्वतः बनाता है। यदि प्रबंधित रिकॉर्ड सक्षम करने के बाद भी प्रमाणपत्र अटका रहता है, तो एक नए प्रमाणपत्र अनुरोध को ट्रिगर करने के लिए लोड बैलेंसर को हटाएँ और पुनः बनाएँ।
बाहरी DNS: अपने DNS प्रदाता पर एक CNAME रिकॉर्ड बनाएँ:
_acme-challenge.xF5XC_DOMAINNAMEx CNAME *.autocerts.ves.volterra.ioरिकॉर्ड के अस्तित्व की पुष्टि करें:
dig +short _acme-challenge.xF5XC_DOMAINNAMEx CNAMEdig +short _acme-challenge.xF5XC_DOMAINNAMEx TXTयदि दोनों खाली हैं, तो ACME रिकॉर्ड कॉन्फ़िगर नहीं है। रिकॉर्ड स्थापित होने के बाद प्रमाणपत्र प्रावधान में 5–10 मिनट लगते हैं। विशिष्ट ACME सत्यापन त्रुटियों के लिए LB त्रुटि स्थिति जाँचें:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http" \ | jq '[.status[]? | select(.virtual_host_status != null) | .virtual_host_status.error_description]'CSD isConfigured false है
Section titled “CSD isConfigured false है”CSD को F5 XC प्रशासक द्वारा टेनेंट स्तर पर सक्षम किया जाना चाहिए। यह एक टेनेंट-व्यापी सेटिंग है जिसे namespace API के माध्यम से कॉन्फ़िगर नहीं किया जा सकता। क्लाइंट-साइड डिफेंस सक्षम करने के लिए अपने प्रशासक से संपर्क करें।
खाली स्क्रिप्ट array
Section titled “खाली स्क्रिप्ट array”यदि TEL-1 एक खाली array लौटाता है:
-
संरक्षित डोमेन जाँचें — CSD केवल पंजीकृत डोमेन पर स्क्रिप्ट की निगरानी करता है:
Terminal window curl -s \-H "Authorization: APIToken xF5XC_API_TOKENx" \"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \| jq '.items[] | {name, namespace}' -
JS इंजेक्शन सत्यापित करें — पुष्टि करें कि CSD स्क्रिप्ट टैग पृष्ठों में इंजेक्ट हो रहा है:
Terminal window curl -s "http://xF5XC_DOMAINNAMEx/" | grep -oE '(zeronaught|shape)\.com[^"]*' | head -1यदि कोई मेल नहीं, तो CSD JavaScript इंजेक्ट नहीं हो रहा। जाँचें कि LB में
client_side_defenseसक्षम है। -
प्रसंस्करण समय दें — पहली बार CSD सक्षम करने या नया संरक्षित डोमेन पंजीकृत करने के बाद, स्क्रिप्ट पहचान में 5–15 मिनट लग सकते हैं। साइट पर ट्रैफ़िक उत्पन्न करें और पुनः जाँचने से पहले प्रतीक्षा करें।
त्वरित संदर्भ
Section titled “त्वरित संदर्भ”समय सीमा प्रीसेट
Section titled “समय सीमा प्रीसेट”| अवधि | Epoch ऑफसेट | ISO 8601 (Linux) | ISO 8601 (macOS) |
|---|---|---|---|
| 1 घंटा | $(( $(date +%s) - 3600 )) | date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ | date -u -v-1H +%Y-%m-%dT%H:%M:%SZ |
| 24 घंटे | $(( $(date +%s) - 86400 )) | date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ | date -u -v-24H +%Y-%m-%dT%H:%M:%SZ |
| 7 दिन | $(( $(date +%s) - 604800 )) | date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ | date -u -v-7d +%Y-%m-%dT%H:%M:%SZ |
| 30 दिन | $(( $(date +%s) - 2592000 )) | date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ | date -u -v-30d +%Y-%m-%dT%H:%M:%SZ |
सत्यापन परत सारांश
Section titled “सत्यापन परत सारांश”| परत | परीक्षण | यह क्या कवर करता है |
|---|---|---|
| 1. DNS रिज़ॉल्यूशन | DNS-1 से DNS-4 | A रिकॉर्ड, ACME CNAME, नेमसर्वर अधिकार, प्रबंधित रिकॉर्ड |
| 2. TLS प्रमाणपत्र | TLS-1 से TLS-4 | प्रमाणपत्र स्थिति, प्रमाणपत्र विवरण, लाइव हैंडशेक, ACME लक्ष्य |
| 3. HTTP लोड बैलेंसर | LB-1 से LB-6 | स्थिति, डोमेन, CSD फ्लैग, रूट पूल, परिनियोजन, सारांश |
| 4. ऑरिजिन पूल | OP-1 से OP-4 | कॉन्फ़िग, TLS मोड, HC संबद्धता, ऑरिजिन कनेक्टिविटी |
| 5. स्वास्थ्य जाँच | HC-1 से HC-2 | HC कॉन्फ़िग, सभी HC सूची |
| 6. CSD कॉन्फ़िगरेशन | CSD-1 से CSD-5 | टेनेंट स्थिति, JS टैग, संरक्षित डोमेन, लाइव इंजेक्शन |
| 7. ट्रैफ़िक सत्यापन | TV-1 से TV-5 | अनुरोध गिनती, स्टेटस कोड, नमूने, लॉग में JS, E2E परीक्षण |
| 8. CSD टेलीमेट्री | TEL-1 से TEL-8 | स्क्रिप्ट, डोमेन, नीति, फ़ॉर्म फ़ील्ड, विस्तृत विश्लेषण, उपयोगकर्ता, जोखिम, ताजगी |
एंडपॉइंट सारांश
Section titled “एंडपॉइंट सारांश”| डायग्नोस्टिक | एंडपॉइंट | मेथड | समय प्रारूप |
|---|---|---|---|
| अनुरोध गिनती | /api/data/namespaces/\{ns\}/access_logs/aggregation | POST | ISO 8601 |
| स्टेटस कोड | /api/data/namespaces/\{ns\}/access_logs | POST | ISO 8601 |
| हालिया अनुरोध | /api/data/namespaces/\{ns\}/access_logs | POST | ISO 8601 |
| LB स्थिति | /api/config/namespaces/\{ns\}/http_loadbalancers/\{name\} | GET | कोई नहीं |
| ऑरिजिन पूल | /api/config/namespaces/\{ns\}/origin_pools/\{name\} | GET | कोई नहीं |
| स्वास्थ्य जाँच | /api/config/namespaces/\{ns\}/healthchecks/\{name\} | GET | कोई नहीं |
| DNS ज़ोन | /api/config/dns/namespaces/system/dns_zones/\{zone\} | GET | कोई नहीं |
| CSD स्थिति | /api/shape/csd/namespaces/\{ns\}/status | GET | कोई नहीं |
| JS कॉन्फ़िगरेशन | /api/shape/csd/namespaces/\{ns\}/js_configuration | GET | कोई नहीं |
| संरक्षित डोमेन | /api/shape/csd/namespaces/\{ns\}/protected_domains | GET | कोई नहीं |
| स्क्रिप्ट सूची | /api/shape/csd/namespaces/\{ns\}/scripts | POST | Epoch सेकंड |
| पता लगाए गए डोमेन | /api/shape/csd/namespaces/\{ns\}/detected_domains | GET | कोई नहीं |
| फ़ॉर्म फ़ील्ड | /api/shape/csd/namespaces/\{ns\}/formFields | GET | Epoch सेकंड (क्वेरी पैरामीटर) |
| स्क्रिप्ट विवरण | /api/shape/csd/namespaces/\{ns\}/scripts/\{id\}/dashboard | GET | कोई नहीं |
| स्क्रिप्ट व्यवहार | /api/shape/csd/namespaces/\{ns\}/scripts/\{id\}/behaviors | GET | कोई नहीं |
| स्क्रिप्ट नेटवर्क | /api/shape/csd/namespaces/\{ns\}/scripts/\{id\}/networkInteractions | GET | कोई नहीं |
| प्रभावित उपयोगकर्ता | /api/shape/csd/namespaces/\{ns\}/scripts/\{id\}/affectedUsers | POST | Epoch सेकंड |