isitdns? wiki/Security/Cloudflare hardening reference
Security

Cloudflare hardening reference

Settings#

SettingWhat it doesPlanDoc
API tokensScoped credential; use it in place of the Global API Key. Service Key authentication reaches end of life 2026-09-30 (deprecation notice)FCreate API tokens
DNSSECSigns the zone; Cloudflare's default is algorithm 13, ECDSA P-256 (RFC 6605)FDNSSEC
CAA recordsRestricts which CAs can issue a certificate for the zone (RFC 8659 section 3)FCAA records
Proxied A/AAAA/CNAMEHides the origin IP; TLS terminates at the edgeFProxy status
SSL/TLS mode: Full (strict)Only mode that validates the origin certificateFSSL modes
Minimum TLS versionZone-wide floor on the TLS version accepted; raise to 1.2F zone-wide / P per-hostnameMinimum TLS
HSTSBrowser-enforced HTTPS on repeat visitsFHSTS
Always Use HTTPSRedirects HTTP requests to HTTPS at the edgeFAlways Use HTTPS
TLS 1.3Current TLS version; no reason to leave it offFSSL modes
Email auth (SPF/DKIM/DMARC)Must stay DNS-only; a domain that never sends mail should publish null SPF, null DKIM, and a DMARC reject policyFFull setup guide
2FASecurity keys (WebAuthn) are phishing-resistant; TOTP is acceptable, email-only is weakestF2FA
Zone HoldBlocks a zone from being added to another Cloudflare account without authorizationP, Enterprise onlyZone Holds
Free Managed Ruleset (WAF)Baseline managed WAF rules; the only managed ruleset on FreeFWAF managed rules
Rate Limiting RulesThrottles one abuse-prone endpoint on FreeF limited / P more rulesRate limiting rules
Bot Fight ModeChallenges traffic matching known-bot patterns; on/off only, not customizableFBot Fight Mode
API rate limit1,200 requests per 5 minutes per user, cumulative across dashboard, API key, and tokensFAPI limits

Verify from outside#

Asks a signed zone for its public keys.

 dig @1.1.1.1 +dnssec isitdns.net DNSKEY
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> @1.1.1.1 +dnssec isitdns.net DNSKEY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6561
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
;; QUESTION SECTION:
;isitdns.net. IN DNSKEY
;; ANSWER SECTION:
isitdns.net. 3185 IN DNSKEY 256 3 13 oJMRESz5E4gYzS/q6XDrvU1qMPYIjCWzJaOau8XNEZeqCYKD5ar0IRd8 KqXXFJkqmVfRvMGPmM1x8fGAa2XhSA==
isitdns.net. 3185 IN DNSKEY 257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+ KkxLbxILfDLUT0rAK9iUzy1L53eKGQ==
isitdns.net. 3185 IN RRSIG DNSKEY 13 2 3600 20261028172448 20260828172448 2371 isitdns.net. dtPWRV1FNeaOSdirI52faTzB7rskfmfA5VH3JSjB3KYfFmHtUxAAFyW6 NwAsS4hApjUKD29/lDWjaCk5XVeL8w==
;; Query time: 31 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Mon Sep 14 17:42:31 CDT 2026
;; MSG SIZE rcvd: 307

GO NOERROR, the DNSKEY set, and an RRSIG over it

NO GO NOERROR with no answer, which means the zone is not signed

what each part of this output means →

The ad flag means the resolver validated the chain (RFC 4035 section 3.2.3), not that your path to the resolver is trusted: an on-path attacker on plain UDP/53 can strip or forge it. Query over DoT or DoH to a known validating resolver instead.

Check the DS record the parent TLD serves:

dig @1.1.1.1 +short isitdns.net DS
2371 13 2 2DF8E1D4E0855DF60F2A8B51C914F2F2866ED1E3344F74F9682DAC4D 42D18802

Keytag, algorithm, digest type, digest hash. No DS here means an insecure delegation: validating resolvers accept the zone unsigned (RFC 4035 section 5.2). A DS that matches no DNSKEY is what makes them SERVFAIL the zone (dnssec-troubleshooting).

Check CAA, including what Cloudflare auto-injects for Universal SSL:

dig @1.1.1.1 +short isitdns.net CAA
0 issue "comodoca.com"
0 issue "digicert.com; cansignhttpexchanges=yes"
0 issue "letsencrypt.org"
0 issue "pki.goog; cansignhttpexchanges=yes"
0 issue "sectigo.com"
0 issue "ssl.com"
0 issuewild "comodoca.com"
0 issuewild "digicert.com; cansignhttpexchanges=yes"
0 issuewild "letsencrypt.org"
0 issuewild "pki.goog; cansignhttpexchanges=yes"
0 issuewild "sectigo.com"
0 issuewild "ssl.com"

Cloudflare auto-injects records for the CAs backing Universal SSL once the zone holds at least one CAA record of its own; a zone with none permits any CA (RFC 8659 section 3). The injected records appear in dig output but not in the dashboard, so the live response is the only complete list.

See also#