CloudFlare Firewall kısa süre önce, ücretsiz hesaplar da dahil olmak üzere tüm hesaplar için detaylı kural oluşturmayı aktif etti ve komplex güvenlik duvarı kuralları ekleme imkânı sağladı. Bu kurallar ile WordPress kurulumunuzu hem bilinen hem de açıklanmayan ve bilinmeyen güvenlik açıkları için korumaya alabilirsiniz.
Genel Cloudflare Firewall Kuralları
Burada yer alan bazı kurallar öncelikli olarak Wordpress kullanan web sitelerinin güvenliği için geliştirilmiştir, kuralların bazılarını cloudflare firewall üzerinde değiştirerek başka sistemler içinde istediğiniz gibi kullanabilirsiniz.
Genel olarak botlar ve otomatize saldırı yapanları engelleyecek ve sitenize gelen kötü trafiği filtreleyeceği için google analitik gibi araçlar üzerinde trafik düşüşleri görebilirsiniz lütfen panik yapmayınız.
Security Menüsü altında yer alan WAF sekmesine tıklayın “Create a Firewall rule” deyip aşağıdaki eklemeleri teker teker yapınız. Kural isimlerini ben kendime göre düzenledim.
- Rule Name: General Content Protection
- Rule Action: Block
(cf.threat_score gt 14) or
(not http.request.version in {"HTTP/1.0" "HTTP/1.1" "HTTP/1.2" "HTTP/2" "HTTP/3" "SPDY/3.1"}) or
(http.host eq "mertcangokgoz.com" and not cf.edge.server_port in {80 443}) or
(http.request.uri.path contains "/phpunit") or
(http.request.uri contains "<?php") or
(http.cookie contains "<?php") or
(http.request.full_uri contains "passwd") or
(http.request.uri contains "/dfs/") or
(http.request.uri contains "/autodiscover/") or
(http.request.uri contains "/wpad.") or
(http.request.uri contains "wallet.dat") or
(http.request.uri contains "/.env") or
(http.request.uri contains "../") or
(http.request.full_uri contains "webconfig.txt") or
(http.request.full_uri contains "vuln.") or
(http.request.uri contains ".sql") or
(http.request.uri contains ".bak") or
(http.request.uri contains ".cfg") or
(http.request.uri contains ".env") or
(http.request.uri contains ".ini") or
(http.request.uri contains ".log") or
(http.request.uri.query contains "bin.com/") or
(http.request.uri.query contains "bin.net/") or
(raw.http.request.uri.query contains "?%00") or
(http.request.uri.query contains "eval(") or
(http.request.uri.query contains "base64") or
(http.request.uri.query contains "var_dump") or
(http.request.uri.query contains "<script") or
(http.request.uri.query contains "%3Cscript") or
(http.cookie contains "<script") or
(http.referer contains "<script") or
(upper(http.request.uri.query) contains " UNION ALL ") or
(upper(http.request.uri.query)contains " SELECT ") or
(raw.http.request.uri contains "../") or
(raw.http.request.uri contains "..%2F") or
(http.request.uri.path contains ".js.map") or
(http.request.uri.query contains "$_GLOBALS[") or
(http.request.uri.query contains "$_REQUEST[") or
(http.request.uri.query contains "$_POST[")
Plaintext- Rule Name: Unwanted User-Agents
- Rule Action: Block
(lower(http.user_agent) contains "?%00") or
(lower(http.user_agent) contains "$[") or
(lower(http.user_agent) contains "${") or
(lower(http.user_agent) contains "absinthe") or
(lower(http.user_agent) contains "appinsights") or
(lower(http.user_agent) contains "mj12bot") or
(lower(http.user_agent) contains "semrushbot") or
(lower(http.user_agent) contains "dotbot") or
(lower(http.user_agent) contains "whatcms") or
(lower(http.user_agent) contains "rogerbot") or
(lower(http.user_agent) contains "trendictionbot") or
(lower(http.user_agent) contains "blexbot") or
(lower(http.user_agent) contains "linkfluence") or
(lower(http.user_agent) contains "magpie-crawler") or
(lower(http.user_agent) contains "mediatoolkitbot") or
(lower(http.user_agent) contains "aspiegelbot") or
(lower(http.user_agent) contains "domainstatsbot") or
(lower(http.user_agent) contains "coccocbot") or
(lower(http.user_agent) contains "commix") or
(lower(http.user_agent) contains "crimscanner") or
(lower(http.user_agent) contains "davclnt") or
(lower(http.user_agent) contains "datacha0s") or
(lower(http.user_agent) contains "dirbuster") or
(lower(http.user_agent) contains "cincraw") or
(lower(http.user_agent) contains "nimbostratus") or
(lower(http.user_agent) contains "httrack") or
(lower(http.user_agent) contains "serpstatbot") or
(lower(http.user_agent) contains "omgili") or
(lower(http.user_agent) contains "grapeshotcrawler") or
(lower(http.user_agent) contains "megaindex") or
(lower(http.user_agent) contains "petalbot") or
(lower(http.user_agent) contains "semanticbot") or
(lower(http.user_agent) contains "cocolyzebot") or
(lower(http.user_agent) contains "domcopbot") or
(lower(http.user_agent) contains "traackr") or
(lower(http.user_agent) contains "bomborabot") or
(lower(http.user_agent) contains "linguee") or
(lower(http.user_agent) contains "webtechbot") or
(lower(http.user_agent) contains "domainstatsbot") or
(lower(http.user_agent) contains "clickagy") or
(lower(http.user_agent) contains "sqlmap") or
(lower(http.user_agent) contains "internet-structure-research-project-bot") or
(lower(http.user_agent) contains "seekport") or
(lower(http.user_agent) contains "awariosmartbot") or
(lower(http.user_agent) contains "onalyticabot") or
(lower(http.user_agent) contains "buck") or
(lower(http.user_agent) contains "riddler") or
(lower(http.user_agent) contains "sbl-bot") or
(lower(http.user_agent) contains "df bot 1.0") or
(lower(http.user_agent) contains "pubmatic crawler bot") or
(lower(http.user_agent) contains "restsharp") or
(lower(http.user_agent) contains "bvbot") or
(lower(http.user_agent) contains "sogou") or
(lower(http.user_agent) contains "barkrowler") or
(lower(http.user_agent) contains "admantx") or
(lower(http.user_agent) contains "adbeat") or
(lower(http.user_agent) contains "embed.ly") or
(lower(http.user_agent) contains "semantic-visions") or
(lower(http.user_agent) contains "voluumdsp") or
(lower(http.user_agent) contains "wc-test-dev-bot") or
(lower(http.user_agent) contains "gulperbot") or
(lower(http.user_agent) contains "360Spider") or
(lower(http.user_agent) contains "/bin/bash") or
(lower(http.user_agent) contains "[email protected]") or
(lower(http.user_agent) contains "eval(") or
(lower(http.user_agent) contains "env:") or
(lower(http.user_agent) contains "fhscan") or
(lower(http.user_agent) contains "floodgate") or
(lower(http.user_agent) contains "go-http-client/") or
(lower(http.user_agent) contains "nikto") or
(lower(http.user_agent) contains "python") or
(lower(http.user_agent) contains "masscan") or
(lower(http.user_agent) contains "mail.ru") or
(lower(http.user_agent) contains "scrapy") or
(lower(http.user_agent) contains "webdav-miniredir") or
(lower(http.user_agent) contains "winhttp.winhttprequest") or
(lower(http.user_agent) contains "zmeu") or
(lower(http.user_agent) contains "fuzz") or
(lower(http.user_agent) contains "wp_is_mobile") or
(lower(http.user_agent) contains "sqlninja") or
(lower(http.user_agent) contains "yaanibot")
PlaintextCloudflare Firewall üzerinde ASN engelleme işlemi istenmeyen sonuçlara sebebiyet verebilir bu sebeple kullanırken çok dikkat etmenizde fayda var.
- Rule Name: Unwanted ASN
- Rule Action: Block
(ip.geoip.asnum eq 16276) or
(ip.geoip.asnum eq 14618) or
(ip.geoip.asnum eq 16509) or
(ip.geoip.asnum eq 24940) or
(ip.geoip.asnum eq 37153) or
(ip.geoip.asnum eq 32244) or
(ip.geoip.asnum eq 22611) or
(ip.geoip.asnum eq 54641) or
(ip.geoip.asnum eq 47583) or
(ip.geoip.asnum eq 55293)
NginxDaha geniş kapsamlı bir ASN engelleme listesi yapacaksanız bad-asn-list kullanmanızı şiddetle öneririm.
- Rule Name: Block Scanners
- Rule Action: Block
(http.user_agent contains "Acunetix") or
(lower(http.user_agent) contains "apache") or
(http.user_agent contains "BackDoorBot") or
(http.user_agent contains "cobion") or
(http.user_agent contains "masscan") or
(http.user_agent contains "FHscan") or
(http.user_agent contains "scanbot") or
(http.user_agent contains "Gscan") or
(http.user_agent contains "Researchscan") or
(http.user_agent contains "WPScan") or
(http.user_agent contains "ScanAlert") or
(http.user_agent contains "Wprecon") or
(lower(http.user_agent) contains "virusdie") or
(http.user_agent contains "VoidEYE") or
(http.user_agent contains "WebShag") or
(http.user_agent contains "Zeus") or
(http.user_agent contains "zgrab") or
(lower(http.user_agent) contains "zmap") or
(lower(http.user_agent) contains "nmap") or
(lower(http.user_agent) contains "fimap") or
(http.user_agent contains "ZmEu") or
(http.user_agent contains "ZumBot") or
(http.user_agent contains "Zyborg")
PlaintextWordpress için CloudFlare Kuralları
Genel kuralları ekledikten hemen sonra web sitenizde wordpress kullanıyorsanız aşağıdaki kuralları cloudflare firewall üzerinde ekleyerek ek güvenlik atmanı oluşturabilirsiniz.
- Rule Name: Wordpress Stufs
- Rule Action: Block
(http.request.uri.query contains "author_name=") or
(http.request.uri.query contains "author=" and not http.request.uri.path contains "/wp-admin/export.php") or
(http.request.uri contains "wp-config.") or
(http.request.uri contains "setup-config.") or
(http.request.uri.path eq "/wp-comments-post.php" and http.request.method eq "POST" and not http.referer contains "mertcangokgoz.com") or
(http.request.uri.path contains "/xmlrpc.php")
Plaintext- Rule Name: Wordpress İmportant Areas
- Rule Action: Block
((http.request.uri.path contains "/wp-admin/" and not http.request.uri.path contains "/wp-admin/admin-ajax.php" and not http.request.uri.path contains "/wp-admin/theme-editor.php"))
Plaintext- Rule Name: Login Protection
- Rule Action: Captcha
(not ip.src in {1.1.1.1/32} and http.request.uri.path contains "/wp-login.php")
Plaintext- Rule Name: Hotlink Protection
- Rule Action: Block
Bu kuralı kullanırken dikkatli olun bütün site içeriğini yanlışlıkla engelleyebilirsiniz.
not (http.referer contains "mertcangokgoz.com" or http.referer eq "cdn.mertcangokgoz.com" or http.referer eq "www.cloudflare.com")
Plaintext- Rule Name: Port Block
- Rule Action: Block
(http.host eq "mertcangokgoz.com") and not cf.edge.server_port in {80 443}
Plaintext- Rule Name: Wordpress Admin IP Whitelist
- Rule Action: Block
(not ip.src in {1.1.1.1/32} and lower(http.request.uri.path) contains "/wp-admin" and lower(http.request.uri.path) contains "/wp-login.php")
PlaintextCloudflare’nin ayrıca ön tanımlı olarak yayınladığı kurallardan faydalanmak isterseniz Common use cases for firewall rules içeriğine göz atabilirsiniz.,
Cloudflare Firewall Üzerinde Page Rules Kullanımı
Bunların hemen ardından “CloudFlare Page rules” kısmını kullanıp birkaç değişiklik yapacağız. Bu yapacağımız değişikliğin ana amacı Layer 7 saldırılarına karşı web sitesine yük binmemesini sağlanmasıdır. Gelen saldırılar önbellek üzerinden yayınlanacak ve yükü dağıtmış olacağız.
Wordpress sitenizin admin alanı için yani wp-admin için aşağıdaki gibi ayarlamayı ihmal etmeyin.
Layer 4 Saldırıları için Cloudflare Firewall Ayarları
Cloudflare’nin otomatik DDoS koruma sistemleri, trafiği sürekli olarak analiz eder, ağ ve uygulama katmanlarındaki saldırıları azaltmak için gerçek zamanlı imzalar oluşturur. Ücretsiz paket dahil tüm hesaplarda ön tanımlı olarak Layer 4 DDoS koruması aktiftir.
Ek ayarlar yapmak amacıyla sol menüde yer alan “Security> DDoS” sekmesinde yer alan “Network-layer DDoS attack protection” seçeneği ön tanımlı olarak aktiftir.
Layer 7 Saldırıları için Cloudflare Firewall Ayarları
Site geneli Layer 7 yani HTTP GET ve türevi saldırılar için cloudflare üzerinde aşağıdaki ayarların yapılması ve site geneli cache ayarlanması yeterlidir, sunucu üzerinde CPU kullanımı yükselmediği sürece genel olarak HTTP saldırılarından etkilenmeyeceksiniz.
Kaynak Sunucu İçin Ek Güvenlik Önlemleri
Ayrıca kaynak sunucunuzu güvenli hale getirmek için aşağıdaki makalelerden faydalanabilirsiniz.