Cloudflare
Միացնել դոմենը, ճիշտ կարգավորել HTTPS-ը, քեշավորել, պաշտպանել և լուծել խնդիրները։
30 վայրկյանում
Cloudflare-ը կանգնած է ձեր այցելուների և ձեր սերվերի միջև։ Այն հոստինգ է անում ձեր DNS-ը, իսկ proxied գրառումների համար HTTPS-ը ավարտում է իր ամենամոտ edge կետում, քեշավորում է ֆայլերը, զտում հարձակումները և մնացածը փոխանցում ձեր origin-ին։ Ճիշտ կարգավորված՝ կայքը դառնում է ավելի արագ և շատ ավելի դժվար խափանվող։ Սխալ կարգավորված՝ ստանում եք redirect loop-եր և 52x սխալներ, ուստի ներքևի մանրամասները կարևոր են։
Ինչու եմ օգտագործում
- Cloudflare-ը օգտագործում եմ կայքերի առջև DNS-ի և հիմնական DDoS պաշտպանության համար․ դա յուրաքանչյուր սերվերի իմ անվտանգության բազային մակարդակի մասն է։
- Նրա անվճար պլանը տալիս է CDN, HTTPS edge-ում, WAF և HTTP/3, ինչը մեծ արժեք է փոքր և միջին նախագծերի համար։
- Origin IP-ն proxy-ի հետևում թաքցնելը և թրաֆիկը միայն 80 և 443 պորտերով թույլատրելը փոքրացնում է հարձակման մակերեսը։
- Իմ պլանն է բոլոր դոմենների DNS-ը պահել Cloudflare-ում, որպեսզի յուրաքանչյուր կայք կառավարվի և պաշտպանվի նույն կերպ։
Ինչպես է աշխատում
01Քայլ առ քայլ՝ դոմենի միացում
1) Ստեղծեք Cloudflare հաշիվ՝ երկգործոն նույնականացմամբ, և ավելացրեք ձեր կայքը (root դոմենը, օրինակ՝ example.com)։ Ընտրեք պլան․ սկսելու համար Free-ն բավական է։ 2) Cloudflare-ը սկանավորում է ձեր ընթացիկ DNS-ը և ներմուծում գտած գրառումները։ Զգուշորեն համեմատեք դրանք ձեր ընթացիկ zone-ի հետ, որովհետև սկանը կարող է բաց թողնել գրառումներ․ ստուգեք A, AAAA, CNAME, MX, յուրաքանչյուր TXT (SPF, DKIM selector-ներ, DMARC, հաստատումներ) և SRV։ 3) Cloudflare-ը ձեզ տալիս է երկու nameserver։ Ձեր registrar-ում առկա nameserver-ները փոխարինեք այդ երկուսով, և եթե DNSSEC-ը միացված է registrar-ում, նախ անջատեք այն (հետո կրկին միացրեք Cloudflare-ի միջոցով)։ 4) Սպասեք, մինչև zone-ը ցույց տա Active․ սովորաբար րոպեներ, մինչև 24 ժամ։ 5) Կարևոր գրառումների վրա proxy-ն միացնելուց առաջ պատրաստեք origin սերտիֆիկատը և SSL ռեժիմը (հաջորդ բաժիններ)։ 6) Ստուգեք dig-ով և curl-ով։
# Nameservers switched?
dig example.com NS +short
# Proxied records return Cloudflare IPs, not your server's
dig example.com A +short
# Response passes through Cloudflare
curl -sI https://example.com/ | grep -iE "server|cf-ray|cf-cache-status"
02Proxied (նարնջագույն ամպ) vs DNS only (մոխրագույն ամպ)
Յուրաքանչյուր A, AAAA և CNAME գրառում ունի proxy status։ Proxied նշանակում է, որ DNS-ը պատասխանում է Cloudflare-ի IP-ներով․ այցելուները միանում են Cloudflare-ին, որն էլ իր հերթին միանում է ձեր origin-ին։ Ստանում եք քեշավորում, WAF, DDoS պաշտպանություն և թաքնված origin IP։ DNS only նշանակում է, որ Cloudflare-ը պարզապես պատասխանում է ձեր իրական IP-ով, ինչպես ցանկացած DNS host, և պաշտպանությունից ոչինչ չի գործում։ Proxy արեք ձեր կայքի hostname-ները (example.com, www)։ DNS only թողեք այն, ինչ HTTP չէ կամ պետք է անմիջապես հասնի սերվերին՝ MX գրառումներում օգտագործվող mail host-երը, SSH-ի կամ տվյալների բազայի hostname-ները և ծառայությունները այն պորտերում, որոնք Cloudflare-ը proxy չի անում։ Հիշեք, որ նույն սերվերին ցույց տվող մեկ DNS-only գրառումն անգամ բացահայտում է origin IP-ն, ուստի վեբ սերվերի հասցեի համար այդպիսին մի ստեղծեք, եթե իսկապես պետք չէ։
- Proxy՝ վեբ թրաֆիկ ստանդարտ HTTP(S) պորտերով։
- DNS only՝ փոստ, SSH, FTP, խաղային կամ custom TCP/UDP ծառայություններ։
- MX գրառումները չեն կարող ցույց տալ proxied hostname։
03SSL/TLS ռեժիմներ՝ ինչու Full (strict)
Երկու կապ կա՝ այցելուից Cloudflare, և Cloudflare-ից ձեր origin։ SSL/TLS encryption mode-ը կառավարում է երկրորդը։ Off՝ ընդհանրապես HTTPS չկա։ Flexible՝ HTTPS այցելուի հետ, պարզ HTTP ձեր սերվերի հետ․ կողպեքը երևում է, բայց origin-ի հետ թրաֆիկը գաղտնագրված չէ, իսկ HTTP-ն HTTPS-ի redirect անող origin-ը անվերջ loop է ստեղծում։ Full՝ HTTPS դեպի origin, բայց սերտիֆիկատը չի ստուգվում, այնպես որ self-signed կամ ժամկետանց սերտիֆիկատն անցնում է, և man in the middle-ը նույնպես կարող է անցնել։ Full (strict)՝ HTTPS դեպի origin, և սերտիֆիկատը պետք է վավեր լինի ու համապատասխանի hostname-ին՝ թողարկված հանրային CA-ի կամ Cloudflare-ի Origin CA-ի կողմից։ Միշտ ձգտեք Full (strict)-ի։ Սերվերի վրա տեղադրեք կա՛մ Let's Encrypt սերտիֆիկատ (certbot), կա՛մ անվճար Cloudflare Origin Certificate, հետո փոխեք ռեժիմը։ Cloudflare-ն առաջարկում է նաև Automatic ռեժիմ, որն ընտրում է ձեր origin-ի աջակցած ամենաուժեղ ռեժիմը, բայց Full (strict)-ը բացահայտ սահմանելն ավելի պարզ է։
# nginx on the origin with a Cloudflare Origin Certificate
server {
listen 443 ssl;
http2 on;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/cloudflare/example.com.pem;
ssl_certificate_key /etc/ssl/cloudflare/example.com.key;
root /var/www/example/public;
}
04HTTPS ամենուր, քեշավորում և performance
SSL/TLS > Edge Certificates բաժնում միացրեք Always Use HTTPS-ը, որը յուրաքանչյուր http:// հարցում redirect է անում edge-ում, և Minimum TLS Version-ը դրեք 1.2։ HSTS-ը միացրեք միայն այն բանից հետո, երբ ամբողջ կայքը և ներառված յուրաքանչյուր subdomain աշխատում են HTTPS-ով՝ սկսելով կարճ max-age-ից․ երբ բրաուզերներն այն քեշավորեն, կհրաժարվեն պարզ HTTP-ից։ Լռելյայն Cloudflare-ը ստատիկ ֆայլերը քեշավորում է ըստ ընդլայնման (պատկերներ, CSS, JS, ֆոնտեր) և HTML չի քեշավորում։ Cache Rules-ը թույլ է տալիս դա փոխել՝ հանրային HTML-ը քեշավորել կարճ ժամանակով, bypass անել այն ամենը, ինչ ունի session cookie, /admin, /api և /checkout, և սահմանել Edge և Browser TTL-ներ։ cf-cache-status header-ը ցույց է տալիս HIT, MISS, BYPASS կամ DYNAMIC։ Deploy-ից հետո purge արեք ըստ URL-ի, կամ ավելի լավ՝ օգտագործեք տարբերակավորված ֆայլանուններ, որպեսզի purge-ը հազվադեպ պետք լինի։ HTTP/3-ն ու Brotli-ն ընթացիկ պլաններում լռելյայն միացված են։
- Երբեք մի քեշավորեք էջեր, որոնք կախված են cookie-ներից կամ login վիճակից։
- Փոփոխությունները ստուգելու համար օգտագործեք Development Mode կամ purge․ մի անջատեք քեշավորումը գլոբալ։
- Խուսափեք Rocket Loader-ից և HTML minification-ի հնարքներից, որոնք կարող են կոտրել JavaScript հավելվածները․ նախ ստուգեք։
05Անվտանգություն՝ WAF, rate limiting, DDoS, origin-ի փակում
Ցանցային և HTTP flood-երից DDoS պաշտպանությունը ավտոմատ է յուրաքանչյուր պլանում proxied թրաֆիկի համար։ Managed WAF ruleset-ը (վճարովի պլաններում՝ ավելի լայն ruleset-ներով) արգելափակում է տարածված հարձակումները, օրինակ՝ SQL injection-ի օրինաչափությունները։ Custom rule-երը թույլ են տալիս արգելափակել կամ challenge անել ըստ երկրի, path-ի, user agent-ի կամ bot score-ի, օրինակ՝ managed challenge /wp-login.php-ի կամ /admin-ի վրա սպասվող երկրներից դուրս։ Rate limiting rule-երը սահմանափակում են մեկ IP-ից հարցումների քանակը զգայուն endpoint-ների վրա, ինչպիսիք են login-ը, OTP-ն և գաղտնաբառի վերականգնումը։ Bot Fight Mode-ն ավելացնում է բոտերից հիմնական պաշտպանություն։ Proxy-ն օգնում է միայն այն դեպքում, եթե հարձակվողները չեն կարող անմիջապես հասնել origin-ին․ firewall-ով փակեք սերվերը, որպեսզի 80 և 443 պորտերն ընդունեն միայն Cloudflare-ի հրապարակված IP միջակայքերը (կամ օգտագործեք Cloudflare Tunnel, որին բաց inbound պորտեր պետք չեն), և SSH-ը սահմանափակեք բանալիներով և վստահելի IP-ներով։ Under Attack Mode-ը վթարային անջատիչ է, որը challenge է անում յուրաքանչյուր այցելուի։
# ufw: allow web traffic only from Cloudflare (ranges from cloudflare.com/ips)
for ip in $(curl -s https://www.cloudflare.com/ips-v4) $(curl -s https://www.cloudflare.com/ips-v6); do
sudo ufw allow proto tcp from "$ip" to any port 80,443
done
sudo ufw status numbered
06Այցելուի իրական IP-ն origin-ում
Proxy-ի հետևում յուրաքանչյուր հարցում ձեր սերվերին հասնում է Cloudflare-ի IP-ից։ Արդյունքում լոգերը, rate limiting-ը, fail2ban-ը և fraud-ի ստուգումները այցելուի փոխարեն տեսնում են Cloudflare-ը և կարող են նույնիսկ արգելափակել հենց Cloudflare-ին։ Cloudflare-ը սկզբնական հասցեն ուղարկում է CF-Connecting-IP header-ով (և X-Forwarded-For-ով)։ realip մոդուլով nginx-ին ասեք վստահել այդ header-ին միայն այն դեպքում, երբ հարցումը գալիս է Cloudflare-ի միջակայքերից։ Այդ ժամանակ $remote_addr-ն ամենուր դառնում է այցելուի IP-ն։ nginx-ի հետևում գտնվող Laravel կամ Node հավելվածներում կարգավորեք նաև trusted proxies, որպեսզի framework-ը կարդա client-ի ճիշտ IP-ն և scheme-ը։ Երբեք մի վստահեք header-ին կամայական աղբյուրներից, այլապես ցանկացած մեկը կարող է կեղծել իր IP-ն։
# /etc/nginx/conf.d/cloudflare-realip.conf (list all current ranges)
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 2400:cb00::/32;
# ... remaining ranges from https://www.cloudflare.com/ips/
real_ip_header CF-Connecting-IP;
0752x սխալների և redirect loop-երի լուծում
Երբ Cloudflare-ը սխալի էջ է ցույց տալիս, խնդիրը գրեթե միշտ Cloudflare-ի և ձեր origin-ի միջև է։ 521 Web server is down՝ origin-ը մերժել է կապը․ nginx-ը կանգնել է, կամ firewall-ն արգելափակում է Cloudflare-ի IP-ները։ 522 Connection timed out՝ Cloudflare-ը չի կարողացել ավարտել TCP կապը․ սերվերը ծանրաբեռնված է, DNS-ում սխալ IP է, կամ firewall-ը գցում է փաթեթները։ 524՝ կապը հաջողվել է, բայց հավելվածը պատասխանելու համար մոտ 125 վայրկյանից (proxy-ի ստանդարտ timeout) ավելի է ծախսել․ երկար աշխատանքը տեղափոխեք հերթեր (queue)։ 525 SSL handshake failed՝ origin-ը 443-ում TLS չի խոսում կամ այդ hostname-ի համար սերտիֆիկատ չունի (SNI)։ 526 Invalid SSL certificate՝ Full (strict)-ում origin-ի սերտիֆիկատը ժամկետանց է, self-signed է կամ այլ անվան համար է։ Too many redirects՝ սովորաբար Flexible ռեժիմ գումարած origin, որը HTTP-ն redirect է անում HTTPS-ի․ անցեք Full (strict)-ի։ Ստուգեք origin-ի լոգերը և origin-ը թեստավորեք ուղղակիորեն։
# Test the origin directly, bypassing Cloudflare
curl -svI https://example.com/ --resolve example.com:443:203.0.113.10 2>&1 | grep -E "HTTP/|subject|expire|issuer"
sudo systemctl status nginx
sudo tail -n 50 /var/log/nginx/error.log
Օգտագործեք, երբ
- Գրեթե ցանկացած հանրային կայք կամ API, որը շահում է անվճար DNS-ից, HTTPS-ից, CDN-ից և DDoS պաշտպանությունից։
- Մեկ VPS origin-ը ուղղակի հարձակումներից թաքցնելու համար։
- Կայքեր, որոնց այցելուները հեռու են սերվերից, որտեղ edge քեշավորումը կրճատում է latency-ն։
- Չարաշահող թրաֆիկը WAF-ով և rate limiting rule-երով արագ արգելափակելու համար։
Մի՛ օգտագործեք, երբ
- Ոչ HTTP ծառայություններ (փոստ, SSH, տվյալների բազաներ) անվճար proxy-ի վրա․ թողեք դրանք DNS only կամ օգտագործեք առանձին պրոդուկտներ։
- Երբ compliance-ի կամ data residency-ի կանոններն արգելում են, որ երրորդ կողմը TLS ավարտի, եթե չեք օգտագործում համապատասխան enterprise հնարավորությունները։
- Շատ մեծ upload-ներ կամ երկար տևող հարցումներ, որոնք դիպչում են պլանի սահմաններին (upload-ի չափ, մոտ 125 վ proxy timeout)։
Այլընտրանքներ
- AWS CloudFront + Route 53 + WAF
Լավ է AWS-ի ներսում, ավելի շատ կոնֆիգուրացիա և pay-per-use գնագոյացում։
- Fastly
Հզոր, ծրագրավորվող edge, նախատեսված ավելի մեծ թիմերի համար։
- Bunny.net
Պարզ, էժան CDN, անվտանգության ավելի քիչ գործիքներով։
- Առանց CDN
Լավ է ներքին գործիքների համար․ սերտիֆիկատներն ու DDoS-ի ռիսկը կառավարում եք ինքներդ։
Լավագույն պրակտիկաներ
- Օգտագործեք SSL ռեժիմ Full (strict)՝ սերվերի վրա Origin CA կամ Let's Encrypt սերտիֆիկատով։
- Միացրեք Always Use HTTPS և նվազագույնը TLS 1.2, HSTS ավելացրեք միայն բոլոր subdomain-ները ստուգելուց հետո։
- Origin-ը firewall-ով սահմանափակեք Cloudflare-ի IP միջակայքերով կամ օգտագործեք Cloudflare Tunnel։
- Վերականգնեք այցելուի իրական IP-ն nginx-ի realip մոդուլով և հավելվածում trusted proxies-ով։
- Գրեք բացահայտ Cache Rules և bypass արեք անհատականացված ամեն ինչ։
- Rate-limit արեք login-ի, OTP-ի և գաղտնաբառի վերականգնման endpoint-ները։
- Պաշտպանեք Cloudflare հաշիվը 2FA-ով և սահմանափակ իրավունքներով API token-ներով՝ global key-ի փոխարեն։
Տարածված սխալներ
- Օգտագործել Flexible ռեժիմը, հետո origin-ում ավելացնել HTTP-ից HTTPS redirect և ստանալ redirect loop։
- Թողնել DNS-only գրառում, որը բացահայտում է proxied վեբ սերվերի origin IP-ն։
- DNS-ը ներմուծել և բաց թողնել MX կամ DKIM գրառումները՝ nameserver-ների փոխարկումից հետո կոտրելով էլ. փոստը։
- Login արած օգտատերերի համար HTML քեշավորել, այնպես որ մի օգտատերը տեսնում է մյուսի էջը։
- Մոռանալ իրական IP-ի կարգավորումը, այնպես որ fail2ban-ն արգելափակում է Cloudflare-ի IP հասցեները։
Խորը վերլուծություն
08Ինչ է կատարվում հարցման հետ Cloudflare-ի ներսում
Երբ այցելուն միանում է proxied hostname-ին, anycast-ը նրան ուղղում է մոտակա Cloudflare data center, որտեղ TLS-ն ավարտվում է edge սերտիֆիկատով։ Հետո հարցումն անցնում է մի շարք փուլերով՝ ֆիքսված հերթականությամբ։ Առաջինը ցանցային և HTTP DDoS mitigation-ն է։ Հետո անվտանգության կանոնները. IP access rule-եր, WAF custom rule-եր, rate limiting rule-եր և managed WAF ruleset-ներ, գումարած bot ստուգումներ։ Configuration rule-երը, redirect rule-երը և URL rewrite-երը ճշգրտում են հարցումը։ Եթե route-ին կցված են Workers, դրանք աշխատում են հաջորդը և կարող են պատասխանել կամ փոփոխել հարցումը։ Միայն դրանից հետո է cache-ը փնտրում cache key-ը։ Miss-ի դեպքում Origin Rules-ը կարող է փոխել host-ը, port-ը կամ SNI-ն, և հարցումը գնում է ձեր origin, հնարավոր է՝ նախ ռեգիոնալ շերտով։ Այս հերթականությունն իմանալը բացատրում է, օրինակ, թե ինչու WAF rule-ը արգելափակում է հարցում, որն ամեն դեպքում cache hit կլիներ։
- Անվտանգությունն աշխատում է cache-ից առաջ, ուստի արգելափակված հարցումները երբեք չեն ծախսում cache կամ origin։
- Dashboard-ում օգտագործեք Trace-ը՝ տեսնելու, թե որ կանոններն են համընկել տվյալ URL-ի համար։
- Workers-ն աշխատում են cache-ից առաջ. Worker-ի ներսում օգտագործեք Cache API-ն՝ նրա արդյունքը քեշավորելու համար։
09Cache key-եր, tiered cache և origin-ի cache header-ներ
Cache key-ը որոշում է, թե ինչն է համարվում նույն օբյեկտը։ Լռելյայն այն ներառում է scheme-ը, host-ը, path-ը և ամբողջ query string-ը, ուստի ?utm_source=x-ը ստեղծում է առանձին պատճեն. Cache Rule-ը կարող է անտեսել կամ դասավորել query string-երը, կամ key-ին ավելացնել header կամ cookie։ Cloudflare-ը լռելյայն հարգում է origin-ի Cache-Control-ը քեշավորվող բովանդակության համար. s-maxage-ը և max-age-ը սահմանում են edge-ի կյանքի տևողությունը, private-ը և no-store-ը արգելում են պահելը, իսկ պատասխանի Set-Cookie-ն սովորաբար կանխում է քեշավորումը։ Cache Rule-ի Edge TTL-ը կարող է վերագրել origin-ի header-ները, ինչը հզոր է և վտանգավոր։ Tiered Cache-ը ստիպում է ցածր շերտի data center-ներին հարցնել վերին շերտին՝ ձեր origin-ի փոխարեն, ինչը բարձրացնում է hit ratio-ն և պաշտպանում փոքր VPS-ը։ Purge-ի տարբերակներն են՝ մեկ URL, ամեն ինչ, իսկ որոշ պլաններում՝ tag, prefix կամ hostname purge։
# Let the origin control edge vs browser caching
location /blog/ {
add_header Cache-Control "public, max-age=60, s-maxage=600, stale-while-revalidate=300";
}
location /account/ {
add_header Cache-Control "private, no-store";
}
# Check: curl -sI https://example.com/blog/ | grep -iE "cf-cache-status|age|cache-control"
10Origin-ի փակում. Authenticated Origin Pulls և Tunnel
Firewall-ով միայն Cloudflare-ի IP range-երը թույլատրելը կանգնեցնում է պատահական scanner-ներին, բայց ցանկացած Cloudflare հաճախորդի տրաֆիկ նույնպես գալիս է այդ range-երից։ Կան երկու ավելի ուժեղ տարբերակ։ Authenticated Origin Pulls-ը օգտագործում է mutual TLS. Cloudflare-ը ձեր origin-ին միանալիս ներկայացնում է client սերտիֆիկատ, իսկ nginx-ը մերժում է ցանկացած TLS կապ առանց դրա։ Zone-level pull-երը օգտագործում են Cloudflare-ի թողարկած սերտիֆիկատ, per-hostname pull-երը թույլ են տալիս վերբեռնել ձերը, ինչն ավելի խիստ է, քանի որ այն օգտագործում է միայն ձեր zone-ը։ Cloudflare Tunnel-ը գնում է ավելի հեռու. փոքր daemon՝ cloudflared, աշխատում է ձեր սերվերում և բացում է ելքային կապեր դեպի Cloudflare, ուստի սերվերին ընդհանրապես պետք չեն հրապարակային մուտքային web port-եր։ Tunnel-ն աշխատում է նաև ներքին գործիքների համար՝ Cloudflare Access-ի հետ միասին, որը login է դնում հավելվածի առջև։ Գինը ևս մեկ agent է, որը պետք է մոնիթորինգ անել և թարմացնել։
# nginx: accept only connections that present Cloudflare's client cert
ssl_client_certificate /etc/ssl/cloudflare/authenticated_origin_pull_ca.pem;
ssl_verify_client on;
# Or: no open ports, with Cloudflare Tunnel
cloudflared tunnel login
cloudflared tunnel create web-prod
cloudflared tunnel route dns web-prod app.example.com
cloudflared tunnel run web-prod
11Սահմանափակումներ և edge case-եր, որոնք պետք է հաշվի առնել
Պլատֆորմի մի քանի սահմանափակում ձևավորում է ճարտարապետությունը։ Proxy-ով վերբեռնումների request body-ի չափը սահմանափակված է ըստ պլանի (100 MB Free և Pro պլաններում), ուստի մեծ վերբեռնումները պետք է գնան ուղիղ object storage՝ presigned URL-ներով։ Proxy read timeout-ը 524 է տալիս, երբ origin-ը չափազանց երկար լռում է. ընթացիկ փաստաթղթերը նշում են մոտ երկու րոպե լռելյայն արժեք, որը կարելի է բարձրացնել միայն Enterprise-ում, ուստի երկար հաշվետվություններն ու import-ները պետք է լինեն background job-երում՝ polling-ով կամ webhook-ներով։ WebSocket-ները աջակցվում են, բայց երկարակյաց կապերը կարող են reset լինել Cloudflare-ի սպասարկման ժամանակ, ուստի client-ները պետք է վերամիանան։ Proxy են արվում միայն որոշակի port-եր (HTTPS-ի համար, օրինակ, 443, 2053, 2083, 2087, 2096 և 8443)։ Անվճար Universal սերտիֆիկատը ծածկում է apex-ը և subdomain-ի մեկ մակարդակ, ուստի ավելի խորը անունները, ինչպես a.b.example.com, պահանջում են advanced սերտիֆիկատ։ Դիզայնի վրա կանգ առնելուց առաջ ստուգեք պլանի ընթացիկ սահմանափակումները։
Իրական իրավիճակներ
Login-ը credential-stuffing հարձակման տակ է
Խնդիր
Րոպեում հազարավոր login փորձեր են գալիս փոփոխվող IP-ներից։ Հավելվածը դանդաղում է, իսկ իրական օգտատերերը արգելափակվում են հավելվածի սեփական lockout կանոններով։
Ինչպես լուծել
Login path-ի վրա ավելացրեք rate limiting rule, օրինակ՝ POST /login, հաշվելով ըստ IP-ի՝ րոպեում ցածր շեմով, և պատասխանեք managed challenge-ով, ոչ թե կոշտ block-ով, որպեսզի իրական օգտատերերը կարողանան անցնել։ Ավելացրեք WAF custom rule, որը challenge է անում login path-ի այն հարցումները, որոնք ունեն ցածր bot score կամ գալիս են այն երկրներից, որոնց չեք սպասարկում։ Հաստատեք, որ origin-ը տեսնում է իրական IP-ները realip մոդուլով, որպեսզի հավելվածի մակարդակի limit-երը թիրախավորեն հարձակվողներին, ոչ թե Cloudflare-ին։ Հավելվածում account lockout-ի փոխարեն նախընտրեք աստիճանական ուշացումներ և խրախուսեք two-factor authentication։ Հետևեք Security Events-ին՝ շեմերը կարգավորելու համար։
Հաշվետվության export-ը ձախողվում է 524-ով
Խնդիր
Ադմինները export են անում մեծ CSV։ Մոտ երկու րոպե անց Cloudflare-ը ցույց է տալիս 524 էջ, թեև origin-ի log-երը ցույց են տալիս, որ job-ը վերջում ավարտվում է։
Ինչպես լուծել
Origin-ը պատասխան չի ուղարկել proxy read timeout-ից առաջ։ Այն բարձրացնել հնարավոր է միայն Enterprise-ում, ուստի փոխեք դիզայնը. export հարցումը ստեղծում է հերթագրված job և վերադարձնում 202 Accepted՝ job ID-ով։ Worker-ը կառուցում է ֆայլը և վերբեռնում object storage։ Frontend-ը polling է անում status endpoint-ը կամ ստանում է ծանուցում, հետո ներբեռնում է signed URL-ից։ Որպես կարճաժամկետ լուծում կարող եք ադմինի hostname-ը թողնել DNS only, բայց կկորցնեք պաշտպանությունը, ուստի սահմանափակեք այն ըստ IP-ի կամ դրեք Cloudflare Access-ի հետևում։
Օգտատերերը տեսնում են միմյանց dashboard-ները
Խնդիր
Այն բանից հետո, երբ ինչ-որ մեկն ավելացրեց «Cache Everything» կանոն՝ կայքն արագացնելու համար, հաճախորդը հաղորդում է, որ իր account էջում տեսնում է մեկ այլ հաճախորդի անունը։
Ինչպես լուծել
Վերաբերվեք սրան որպես տվյալների արտահոսքի։ Անմիջապես հեռացրեք կամ նեղացրեք կանոնը և purge արեք ամեն ինչ։ Հետո քեշավորումը նախագծեք բացահայտ. Cache Rule, որը քեշավորում է միայն հրապարակային path-երը, և bypass, երբ առկա է session cookie կամ path-ը /account, /admin, /api կամ /checkout է։ Origin-ում անհատականացված պատասխանների վրա ուղարկեք Cache-Control: private, no-store, որպեսզի նույնիսկ լայն կանոնը դրանք չպահի, եթե հարգում է origin-ի header-ները։ curl-ով ստուգեք, որ private էջերում cf-cache-status-ը ցույց է տալիս BYPASS կամ DYNAMIC։ Վերանայեք log-երը՝ պարզելու, թե որ օգտատերերն են տուժել։
Արագ ուղեցույց
- Պատասխանը մատուցվո՞ւմ է Cloudflare-ով
curl -sI https://example.com/ | grep -iE "server|cf-ray"- Cache hit է՞ր
curl -sI https://example.com/app.css | grep -i cf-cache-status- Շրջանցել Cloudflare-ը՝ origin-ը թեստավորելու համար
curl -svI https://example.com/ --resolve example.com:443:203.0.113.10- Cloudflare-ի ընթացիկ IPv4 range-երը
curl -s https://www.cloudflare.com/ips-v4- Որ data center-ն ինձ սպասարկեց
curl -s https://example.com/cdn-cgi/trace- Purge անել մեկ URL API-ով
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" --data '{"files":["https://example.com/app.css"]}'- Խորհուրդ տրվող SSL/TLS ռեժիմ
SSL/TLS > Overview > Full (strict)- Իրական IP header nginx-ի համար
real_ip_header CF-Connecting-IP;- Բացել լոկալ ծառայությունը առանց բաց port-երի
cloudflared tunnel run web-prod
Իմ իրական նախագծերում
- Իմ կառավարած կայքերից մի քանիսում DNS-ի համար օգտագործվում է Cloudflare, և «Cloudflare-ն առջևում՝ DNS-ի և հիմնական DDoS պաշտպանության համար» իմ սերվերային անվտանգության բազային մակարդակի մասն է։
- Իմ բազային մակարդակը նաև բաց է պահում միայն 22, 80 և 443 պորտերը և ամենուր HTTPS՝ ավտոմատ թարմացվող սերտիֆիկատներով, ինչը լավ համադրվում է proxy-ի հետ։
- Իմ համախմբման պլանը բոլոր դոմենների DNS-ը տեղափոխում է Cloudflare՝ թրաֆիկը DNS-ով փոխարկելով միայն նոր սերվերը ստուգելուց հետո։
Հարցեր և պատասխաններ
Q1Ո՞րն է տարբերությունը Flexible-ի, Full-ի և Full (strict)-ի միջև։
Երեքն էլ այցելուի և Cloudflare-ի միջև օգտագործում են HTTPS։ Flexible-ը հետո origin-ի հետ խոսում է պարզ HTTP-ով, այնպես որ երկրորդ հատվածում տվյալները գաղտնագրված չեն, և redirect loop-երը հաճախ են։ Full-ն origin-ի հետ օգտագործում է HTTPS, բայց ընդունում է ցանկացած սերտիֆիկատ, ներառյալ self-signed կամ ժամկետանց, այսինքն՝ գաղտնագրում է, բայց սերվերը չի նույնականացնում։ Full (strict)-ը գաղտնագրում է և սերտիֆիկատը ստուգում հանրային CA-ի կամ Cloudflare-ի Origin CA-ի դեմ, ինչպես նաև ստուգում է hostname-ը։ Միայն Full (strict)-ն է տալիս իրական end-to-end անվտանգություն։ Ես սերվերի վրա տեղադրում եմ Origin Certificate կամ Let's Encrypt սերտիֆիկատ և առաջին օրվանից դնում Full (strict)։
Q2Cloudflare-ի հետևում գտնվող կայքը ցույց է տալիս 522 սխալ։ Ինչպե՞ս կանես debug։
522-ը նշանակում է, որ Cloudflare-ը ժամանակին չի կարողացել TCP կապ բացել origin-ի հետ, ուստի նայում եմ դեպի սերվեր տանող ճանապարհին, ոչ թե հավելվածին։ Նախ հաստատում եմ, որ DNS գրառումը ցույց է տալիս origin-ի ճիշտ IP-ն։ Հետո ստուգում եմ, որ սերվերն աշխատում է և ծանրաբեռնված չէ, որ nginx-ը լսում է 80 և 443 պորտերը, և որ firewall-ը՝ և՛ ufw-ն, և՛ պրովայդերի firewall-ը, թույլատրում է Cloudflare-ի IP միջակայքերը։ Origin-ը ստուգում եմ ուղղակիորեն curl --resolve-ով։ Ստուգում եմ նաև fail2ban-ը կամ rate limit-երը, որոնք կարող էին արգելափակել Cloudflare-ի IP-ները, որովհետև իրական IP-ն չի վերականգնվել։ Origin-ի լոգերը հաստատում են՝ հարցումներն ընդհանրապես հասնո՞ւմ են, թե ոչ։
Q3Ինչո՞ւ եմ Cloudflare-ը միացնելուց հետո ստանում «too many redirects»։
Գրեթե միշտ դա Flexible SSL ռեժիմն է՝ համակցված origin-ում HTTPS redirect-ի հետ։ Այցելուն խնդրում է HTTPS, Cloudflare-ն այն փոխանցում է որպես պարզ HTTP, origin-ը redirect է անում HTTPS-ի, Cloudflare-ը կրկին փոխանցում է որպես HTTP, և loop-ը երբեք չի ավարտվում։ Լուծումը origin-ում սերտիֆիկատ տեղադրելն ու ռեժիմը Full (strict)-ի փոխելն է։ Այլ պատճառներ են Cloudflare-ի և հավելվածի միջև հակասող redirect կանոնները կամ հավելվածը, որը չի վստահում X-Forwarded-Proto-ին և կարծում է, որ յուրաքանչյուր հարցում HTTP է։ Այդ դեպքում կարգավորեք trusted proxies, որպեսզի framework-ը տեսնի սկզբնական scheme-ը։
Q4Ինչպե՞ս տեսնել այցելուի իրական IP-ն Cloudflare-ի հետևում։
Cloudflare-ն ավելացնում է CF-Connecting-IP header-ը՝ client-ի սկզբնական հասցեով։ nginx-ում օգտագործում եմ realip մոդուլը՝ set_real_ip_from Cloudflare-ի յուրաքանչյուր IP միջակայքի համար և real_ip_header CF-Connecting-IP, այնպես որ $remote_addr-ը լոգերում և սահմանափակումներում այցելուն է։ Կարևոր է header-ին վստահել միայն Cloudflare-ի միջակայքերից, այլապես ցանկացած մեկը կարող է կեղծել իր IP-ն՝ ինքն ուղարկելով header-ը։ Հավելվածում կարգավորում եմ trusted proxies, որպեսզի այն կարդա client-ի ճիշտ IP-ն և scheme-ը։ Առանց դրա rate limiting-ը և fail2ban-ը տեսնում են միայն Cloudflare-ը և կարող են արգելափակել օրինական թրաֆիկը կամ հենց Cloudflare-ին։
Q5Ի՞նչ պետք է և ինչ չպետք է քեշավորել edge-ում։
Ստատիկ, տարբերակավորված ռեսուրսները, ինչպիսիք են JavaScript-ը, CSS-ը, ֆոնտերը և պատկերները, կարելի է քեշավորել երկար ժամանակով, իդեալում՝ hash-ով ֆայլանուններով, որպեսզի deploy-ը փոխի URL-ը։ Հանրային HTML-ը, որը նույնն է յուրաքանչյուր այցելուի համար, օրինակ՝ մարքեթինգային էջերը կամ բլոգի գրառումները, կարելի է կարճ քեշավորել՝ հրապարակման ժամանակ purge-ով։ Անհատականացված ամեն ինչ պետք է շրջանցի քեշը՝ login արած օգտատերերի էջերը, զամբյուղները, checkout-ը, հաշվի էջերը, ադմին բաժինները և API պատասխանների մեծ մասը։ Գրում եմ Cache Rules, որոնք bypass են անում, երբ session cookie կա, և ստուգում cf-cache-status-ը՝ վարքագիծը հաստատելու համար։ Մասնավոր էջը մեկ անգամ քեշավորելն արդեն կարող է մի օգտատիրոջ տվյալները բացահայտել հաջորդ այցելուին։
Q6Cloudflare-ը պաշտպանո՞ւմ է իմ սերվերը, եթե origin IP-ն հայտնի է։
Միայն մասամբ։ Cloudflare-ը պաշտպանում է այն թրաֆիկը, որն անցնում է իր proxy-ով։ Եթե հարձակվողները գիտեն origin IP-ն, կարող են հարցումներ ուղարկել ուղիղ սերվերին և շրջանցել WAF-ը, rate limit-երը և DDoS պաշտպանությունը։ IP-ն արտահոսում է հին DNS պատմության, DNS-only գրառումների, նույն սերվերից ուղարկված նամակների header-ների կամ certificate transparency-ի և սկանավորման համակցության միջոցով։ Այդ պատճառով փակում եմ origin-ը՝ firewall-ը 80 և 443 պորտերն ընդունում է միայն Cloudflare-ի միջակայքերից, կամ օգտագործում եմ Cloudflare Tunnel՝ առանց բաց վեբ պորտերի։ Եթե IP-ն նախկինում բացահայտված է եղել, փակելուց հետո նոր IP-ի տեղափոխվելն արժե դիտարկել։
Սենիոր մակարդակի հարցեր
S1Ինչպե՞ս ապահով կդնեք բարձր տրաֆիկով Laravel կամ Next.js կայքը Cloudflare-ի հետևում։
Սկսում եմ ճշտությունից. Full (strict)՝ origin սերտիֆիկատով, իրական IP-ի վերականգնում nginx-ում և trusted proxy-ներ framework-ում, որպեսզի session-ները, rate limit-ները և HTTPS-ի հայտնաբերումն աշխատեն։ Origin-ը փակում եմ firewall կանոններով և Authenticated Origin Pulls-ով, կամ օգտագործում եմ Tunnel։ Հետո քեշավորումը՝ նախագծված. hash-ով static ֆայլերը քեշավորվում են մեկ տարով, հրապարակային էջերը՝ կարճ ժամանակով stale-while-revalidate-ով և purge-ով deploy-ի կամ հրապարակման ժամանակ, իսկ session cookie ունեցող ցանկացած հարցման համար՝ բացահայտ bypass։ Անվտանգություն. managed WAF, rate limit-ներ authentication endpoint-ների վրա և custom rule-եր ադմին path-երի համար։ Գինն այն է, որ cache կանոնները դառնում են հավելվածի վարքագծի մաս, ուստի դրանք ապրում են version control-ում Terraform-ի կամ API-ի միջոցով, ոչ միայն dashboard-ում։
S2Որո՞նք են մեկ CDN provider-ից կախվածության ռիսկերը, և ինչպե՞ս կնվազեցնեք դրանք։
Provider-ի outage-ը, account-ի խնդիրը կամ վատ գլոբալ կոնֆիգուրացիայի push-ը կարող են միանգամից անջատել դրա հետևում գտնվող բոլոր կայքերը, իսկ Workers-ի, կանոնների և Tunnel-ի նման ֆունկցիաները ստեղծում են lock-in։ Փոքր և միջին նախագծերի մեծ մասի համար օգուտը գերազանցում է սրան, բայց ես նվազեցնում եմ blast radius-ը. պահում եմ փաստաթղթավորված եղանակ record-ները DNS only դարձնելու և ուղիղ ամրացված origin-ից մատուցելու համար, origin-ի TLS-ը պահում եմ վավեր՝ CDN-ից անկախ, և պարբերաբար export եմ անում zone-ը և կանոնները։ Infrastructure as code-ը կոնֆիգուրացիան դարձնում է վերարտադրելի։ Մեծ բիզնեսները գնում են ավելի հեռու՝ multi-CDN DNS steering-ի կամ secondary DNS provider-ի հետևում, բայց դա կրկնապատկում է կոնֆիգուրացիան, մոնիթորինգը և արժեքը, ուստի պետք է հստակ հասանելիության պահանջ։
S3Ե՞րբ է Cache Everything-ը HTML-ով լավ գաղափար։
Երբ էջերը նույնն են բոլոր այցելուների համար և փոխվում են հայտնի իրադարձությամբ. բլոգներ, փաստաթղթեր, մարքեթինգային էջեր և կատալոգի էջեր առանց անհատական գների։ Այդ դեպքում HTML-ը edge-ում քեշավորելը վերացնում է origin-ի բեռի մեծ մասը և ամբողջ աշխարհում տալիս ցածր TTFB։ Պետք է երեք պաշտպանիչ միջոց. bypass կանոն session cookie-ների, ադմինի, API-ի, cart-ի և checkout-ի path-երի համար, կարճ edge TTL կամ իրադարձությամբ purge, որպեսզի թարմացումները արագ երևան, և origin-ի header-ներ, որոնք private պատասխանները նշում են private, no-store՝ որպես պաշտպանության երկրորդ գիծ։ Անհատականացված հատվածները կարող են բեռնվել փոքր API կանչերով։ Վատ գաղափար է, երբ բովանդակությունը կախված է cookie-ներից, աշխարհագրությունից, A/B թեստերից կամ authorization-ից, եթե միայն cache key-ը բացահայտ չի ներառում այդ չափումները։
Բառարան
- Proxied record
- DNS record նարնջագույն ամպով. այցելուները միանում են Cloudflare-ին, որը տրաֆիկը փոխանցում է ձեր origin։
- Edge certificate
- Սերտիֆիկատը, որը Cloudflare-ը ցույց է տալիս այցելուներին. առանձին է ձեր սերվերի origin սերտիֆիկատից։
- Origin CA certificate
- Cloudflare-ի անվճար սերտիֆիկատ, որին վստահում է միայն Cloudflare-ը. օգտագործվում է edge-ից origin կապի համար։
- Cache key
- Հարցման մասերի հավաքածու (host, path, query, երբեմն header-ներ), որը նույնականացնում է մեկ քեշավորված օբյեկտ։
- Tiered Cache
- Edge-երը origin-ից առաջ հարցնում են ռեգիոնալ վերին շերտին՝ նվազեցնելով origin-ի բեռը և բարձրացնելով hit ratio-ն։
- WAF
- Web Application Firewall. կանոններ, որոնք ստուգում են HTTP հարցումները և արգելափակում կամ challenge անում վնասակար pattern-ները։
- Managed challenge
- Cloudflare-ն ինքն է որոշում՝ այցելուին ցույց տալ անտեսանելի ստուգում, թե ինտերակտիվ challenge։
- Authenticated Origin Pulls
- Mutual TLS, որտեղ Cloudflare-ը ներկայացնում է client սերտիֆիկատ, որպեսզի origin-ը ընդունի միայն Cloudflare-ի կապերը։
- Cloudflare Tunnel
- Միայն ելքային կապ ձեր սերվերի cloudflared agent-ից, ուստի մուտքային web port-եր պետք չեն։
- cf-ray
- Cloudflare-ով անցնող յուրաքանչյուր հարցման եզակի ID. օգտակար է log-եր կարդալիս կամ support-ին դիմելիս։
Շարունակեք սովորել
Պրոդուկտի գաղափար ունե՞ք։Եկեք ստեղծենք այն։
Պատմեք ձեր գաղափարի, պրոդուկտի կամ թիմի մասին։ Սովորաբար պատասխանում եմ մեկ աշխատանքային օրվա ընթացքում։