Amazon AWS‘nin ücretsiz olduğunu guyan bir takım geliştiriciler ve sistem yöneticileri ilk seneyi ücretsiz kullanarak Amazon alt yapısına ve onun eko sistemine giriş yaparlar. Bu tür hesapları kullanan arkadaşlar bilerek veya bilmeyerek yüksek ücretler ödeyebiliyor, kimi zamanda hesaplarının çalınması ile bir takım hoş olmayan sonuçlar doğabiliyor.
Herkese açık git repolarına erişim anahtarlarını atmak gibi hataya düşenlerde ayrıca olabiliyor. Allahtan bu noktada github gibi web siteleri otomatik olarak Amazona durumu raporluyor ve erişim anahtarı anında kapatılıyor.
Yapacaklarımız ile hesabınızın saldırıya uğramasını en aza indirebilir, gerektiği gibi hesabınızı koruyabilirsiniz.
Ne Yapmalısınız?
Amazon AWS hesabınıza root olarak erişseniz bile, yeni bir IAM kullanıcısı oluşturun bu kullanıcıda ödeme yetkileri olmasın, Ödeme yetkileri olan ana root hesabınızı kullanmayın.
Kullandığınız hesapların parolaları 16 karakterden uzun olsun
IAM kullanıcıları için parola kullanım süresini ve güçlü parola ilkesini etkinleştirmeyi unutmayın.
Hesabınızda MFA etkinleştirin ve IAM kullanıcıları için zorunlu kılın
Gerekmedikçe AWS API anahtarı oluşturmayın. Kullanmadığınız API anahtarlarını devre dışı bırakın veya silin.
Halka açık bir şekilde API anahtarınızı paylaşmayın, kaynak kodunuz içinde API anahtarınızı bulundurmayın.
Amazon kaynaklarınıza erişebilmek için IAM kullanıcılarınızı kullanın.
Güvenlik politikalarında asla bütün portlar için izin oluşturmayın, ihtiyacınız olmayan portu aktif etmeyin. AWS üzerinde mümkünse WAF ve Bastion host kullanın
Ek güvenlik katmanı olması amacıyla NACL‘leri aktif edin ve kullanın
Erişim loglarını CloudTrail servisi ile izleyin, API istekleride buna dahil. Ayrıca CloudWatch ile şüpheli aktiviteleri raporlayabilirsiniz.
SNS kullanarak faturalandırma bildirimi ayarlayın ve kaynakları mutlaka izleyin, istenmeyen ücretlerin önüne geçin.
Makinelerin erişimleri için Amazon VPN kullanın, dışarı hiç bir makineyi açmayın
VPC ile makineleri bir birine bağladığınızda ek koruma amacıyla yeni subnet oluşturup NAT ayarlamaları yapın.
EC2 üzerinde kullandığınız servislerde dışarıya erişimi olan uygulama sunucularına mutlaka Antivirüs yazılımları kurun
AWS CloudWatch kullanarak EC2 makinelerindeki sistem loglarını mutlaka izleyin.
AWS API anahtarınızı e-posta ile kesinlikle göndermeyin, gönderirsenizde anahtarınızı güvenliğe almak için değiştirin.
API anahtarınızı yıllık olarak mutlaka değiştirin.
Merkezi log yönetimi oldukça zahmetli ve bir o kadarda önemli bir konudur, bu noktada mümkün olduğunca az kurulum yaparak çok iş yapmamız önemlidir. AWS alt yapısını kullanıyorsanız CloudWatch gibi güzel bir nimet dururken başka servisler kullanmak yersiz kalır.
Agent kurulumu
Şimdi sistemdeki logların aktarımı sırasında bir agent gerekiyor bize, EC2 kurulumu sırasında bu işi otomatik yapabilirsiniz veya daha sonradan sisteme dahil edebilirsiniz bu opsiyonu size AWS sunuyor.
Güvenlik yapılandırmaları tamamen size kalmış durumda, agentimizi sistemimize çekelim.
Logların CloudWatch üzerine aktarılması için /var/awslogs/etc/awslogs.conf dosyasını aşağıdaki gibi düzenleyip çıkın, size gerekli olan logları almayı unutmayın.
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: UnwantedUser-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")
Plaintext
Cloudflare 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)
Nginx
Daha 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")
Plaintext
Wordpress 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")
Plaintext
Cloudflare’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.
Vakti zamanın’da CloudFlare kullanan bir web sitesinin yanlış yönlendirmeden doğan sızıntıyı, CloudFlare arkasında Sunucu IP’lerini açığa çıkarmak adlı makalemde açıklamış. Genel olarak sızıntıyı nasıl çözebileceğinizden kısaca bahsetmiştim.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp -s 94.55.146.204 --dport 22 -j ACCEPT
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -s $i --dport https -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -s $i --dport https -j ACCEPT; done
iptables -A INPUT -p tcp --dport https -j DROP
ip6tables -A INPUT -p tcp --dport https -j DROP
Bu işlemleri yaptığınız andan itibaren makina sadece SSH bağlantısıyla size yanıt verecek onun dışında dışarıya sadece CloudFlare ile çıkış sağlanacak böylelikle IP aralıklarını tarayan botlara vb uygulamalara yanıt verilmeyeceği içinde leak imkanı kalmayacak. OSINT teknikleri ile bulunması zorlaşmış olacak.
Bunun dışında geçmişte kullanılan IP adreslerini tutan oldukça fazla yer olduğu için bu işlemlerden sonra IP değişikliği yapmanızı şiddetle öneriyorum.
Amazon S3’te blog yayınlarımda kullanılan tüm görselleri barındırıyordum.Amazon S3 bant genişliği paraya mal olduğu için başkalarının görsellerimi kullanarak bana yüksek ücretler ödetebileceklerini biliyordum. Bu durumdan kurtulmak için ise hotlink koruması yapmamız gerekiyordu. Normal şartlar altında S3 kullanan kişi aynı zamanda Amazon CloudFront kullandığı için işi bir noktada basitleşiyor lakin gerek duymayan ve statik içerikleri tutup insanlara servis etmek isteyenler ve direk S3 bucketlerini CDN olarak kullanmak isteyenler için aşağıdaki yöntem işe oldukça fazla yarayacaktır.
Amazon AWS hesabınıza girip menüden S3 seçin hemen ardından oluşturduğunuz Bucket tıklayın ve Permission altında bulunan Bucket Policy alanına aşağıdaki json dosyasını ekleyip gereken yerlerde değişikliklerinizi yapın.
Şimdi burada yaptığımızı ufaktan söyleyeyim. Sadece bizim domaimizde gözükmesini istedik. S3 bucket içerisindeki tüm dosyalara aynı işlemi uygulamasını istedik. "Resource": "arn:aws:s3:::mertcangokgoz/*" Burada S3 de oluşturmuş olduğumuz bucket adını girdik ve bu bucket için izin verilen domainleri belirledik.
Kayıt ettikten sonra buckete erişmeye çalıştığınızda Access Denied hatası almanız gerekiyor. Sadece sizin domaininizde gözükmesi lazım. Artık S3 bant genişliğinizi çalan birini düşünmeden geceleri rahatça uyuyabilirsiniz.
Yakın zamanda Wordpress üzerine geçtiğimi biliyorsunuz. CDN kullanımı yapıyordum lakin astarı yüzünden pahalı olmaya başlayıp çok fazla para istedikleri için bende bunu bir şekilde kurtarmalıyım diye düşünüp. Hemen Amazon hesabımın başına geçtim ve bir S3 bucket oluşturdum. Daha sonra dosyaları taşıyıp daha sonradan yüklenecekleri de otomatik yüklenmesi ve organize edilmesi için uğraşacağız.
1. Eski Dosyaların Amazon S3 Üzerine Aktarılması
Bu işlemi yapmak için sunucumuza amazonun ufak bir toolu olan bir aracı kuracağız. Bu araç bize her türlü esnekliği sağlayacak ve dosyalarımız üzerinde sahiplik ve upload işleirni yapabileceğiz.
pip install awscli
Şimdi kurulum tamamlandıktan sonra bir sonraki adım olarak aws configure komutunu veriyorsunuz ve gerekli ayarlamaları yapıyoruz. bu aşamada bize api anahtarı ve kullanacağımız lokasyon gerekecek
AWS Access Key ID [None]: AKIAI44QH8DHBEXAMPLE
AWS Secret Access Key [None]: je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: text
Bu işlemi tamamladığımızda direk olarak senkronizasyon işlemlerine başlayacağız. Sunucumuzda bulunan tüm dosya işlemleri aktaracağız. Bunu yapmak için çok basit olacak burada önemli olan nokta bucket isminizi verecek olmanız ben mertcangokgoz adlı bucketi kullanacağım için onu giriyorum.
Senkronizasyon komutum böyle bir şeye benziyordu. Sizinki, URL yapısına bağlı olarak değişebilir. Genel görüntüleme için ACL yapısını ayarlamanın kritik olduğunu unutmayın. Mevcut dosyalar için değişiklik yapacaksanız dikkatli olunuz direk olarak geçiş yapmayın. Komutun beklediğim şekilde çalıştığından emin olmak için birkaç dosyadan birkaç test yaptım. Sorunsuz çalıştığını fark ettiğim için tüm dosyaları taşıdım.
2. Wordpress Makale İçerisindeki Eski Medyaların Taşınma İşlemi
En zor kısım işte burası mevcut dosyalarınızı direk olarak değiştirebilecek bir eklenti bulunmuyor. Bunu yapabilmek için SQL üzerinde oynamalar yapmamız gerekecek. Burada iki adet sıkıntı karşımıza çıkabilir. Yapıya göre post_content içerisinde ki yapı değiştiğinden dolayı geçmişte eklemiş olduğunuz bir kaç yazınızdan yapıya bakmanızı öneririm. Buna göre tüm içeriklerdeki değişiklikleri şekillendirmek kolaylaşacak
Benim bulunduğum yapıda her ne hikmetse direk olarak /wp-content/uploads/ şeklinde bir yapı ile kayıtlıydı bunları değiştirmek için direk aşağıdaki komutu kullanmayı planladım.
UPDATE tkmyuwul_posts SET post_content = replace(post_content, '/wp-content/uploads/', 'https://s3-eu-central-1.amazonaws.com/mertcangokgoz/wp-content/uploads/');
Lakin bu durumda eğer kod blokları arasında örnekler yaptıysam ve bunun içerisinde yukarıdaki gibi bir URL bilgisi geçiyorsa onunda link ile değişeceğini bildiğimden dolayı bunu yapmaktan vazgeçtim. Kodu aşağıdaki gibi yeniden şekillendirdim. Böylelikle sadece görseller içerisinde değişiklik yapmasını sağlamış olacaktım.
UPDATE tkmyuwul_posts SET post_content = replace(post_content, '
Yaklaşık olarak benim bugüne kadar eklemiş olduğum içerikler içerisinde 301 adet değişmesi gereken alan olduğunu görmüştüm. Bu komut ilede bunların gerçekten uygulandığını anlamış oldum tabi 299 adeti düzeltilmişti. Geriye kan 2 taneside benim daha önceden eklediğim içerik olduğu için istediğim url yapısı zaten onlarda mevcutmuştu.
Bu işlemleri tamamladığımızda kontrol amacı ile içeriklerimize baktığımızda çalıştığını gördük. Yani geçişimiz sırasında bir sorun ile karşılaşmayacağız. Eski içerikler içerisinde ki görsellere de baktığımızda işlem tamamlanmış olacak.
3. Web Sunucu Yönlendirmeleri
Herşeyi güzelce yaptık ama eski assetler ve google tarafından bir takım istekler gelmeye devam edecek bunları direk olarak hiçbir şekilde değiştiremeyeceğimiz içinde aşağıdaki gibi web sunucusu tarafında yönlendirme yapmamız gerekecek.
NGINX kullandığım için şu şekilde bir düzenlemeye gittim.
Yerinde test yapmak için bir kez, her şey beklendiği gibi çalıştığından emin olmak için eski yüklemeleri genel dizinin dışına taşıdım, daha sonra çalıştığını gördükten hemen sonra dosyaları web sunucusundan sildim.
Apache kullanan arkadaşlarıda unutmadım.
# rewrite missing images to load from AWS S3
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png|ico)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule wp-content/uploads/(.*) [L]
Son olarak sonradan yükleceğiniz içeriklerin S3 servisine yüklenmesini sağlayacak olan eklentiyi Wordpress in resmi deposundan indirip sisteminize dahil etmeniz gerekmektedir. Bu işlem için WP Offload S3 Lite kullanabilirsiniz. Böylelikle yeni yükledikleriniz de otomatik olarak yüklenecek ve servis edilmeye başlayacak. Kullanacağınız URL yapısını da eklenti üzerinden görüp gerekli adımları atabilirsiniz.
4. Ücretlendirme
S3 gibi storage sağlayıcıları gibi pek çok servis bulunuyor. Hem kullanım kolaylığı hemde ücret açısından yormadığı için kullanmayı tercih ediyoruz.
Uzun zaman önce yazmış olduğum bir makalede kısaca CloudFlare arkasında bulunan sunucuları DNS üzerinden nasıl yakalayabileceğinizi anlatmıştım.
Siber istihbarat toplarken kullandığımız siteler ancak burada bu tarz bir işleme girişmemiştim. Şimdi durum şundan ibaret bu site ilahi bir güç ile çalışmıyor tamamen akademik amaçlar için bilgi topluyor bunuda dünya üzerindeki ip adreslerini periyodik olarak tarayarak yapıyor.
Censys, araştırmacıların Internet’i oluşturan ana bilgisayarlar ve ağlar hakkında soru sormalarını sağlayan bir arama motorudur. Censys, IPv4 adres alanının günlük ZMap ve ZGrab taramaları yoluyla ana bilgisayarlar ve web siteleri hakkında veri toplar ve ana bilgisayarların ve web sitelerinin nasıl yapılandırıldığına dair bir veri tabanını oluşturur. Araştırmacılar bu veri ile bir arama motoru, rapor hazırlama ve SQL arama motoru aracılığıyla etkileşim halinde olabilirler.
Şimdi Durum bu iken yapılacaklar basit ve hatta CloudFlare kullanıyorsanız Origin IP adresinizi ne şekilde koruyabileceğinizi anlatan çokta güzel bir makale bulunmaktadır.
Bunlardan ilki anlaşılabileceği gibi sadece CloudFlare IP aralıklarından gelen trafiklere izin vermektir. Ana IP adresinizi kesinlikle public olarak herkese açmayacaksınız. Zaten korunmanın asıl amacıda budur. Bunu yapmak için güvenlik duvarı ayarlarından aşağıdaki örnekte bulunduğu gibi ekleme yapmanızdır.
sudo ufw allow from 103.21.244.0/22 to any port 443
sudo ufw allow from 103.22.200.0/22 to any port 443
sudo ufw allow from 103.31.4.0/22 to any port 443
sudo ufw allow from 104.16.0.0/12 to any port 443
sudo ufw allow from 108.162.192.0/18 to any port 443
sudo ufw allow from 131.0.72.0/22 to any port 443
sudo ufw allow from 141.101.64.0/18 to any port 443
sudo ufw allow from 162.158.0.0/15 to any port 443
sudo ufw allow from 172.64.0.0/13 to any port 443
sudo ufw allow from 173.245.48.0/20 to any port 443
sudo ufw allow from 188.114.96.0/20 to any port 443
sudo ufw allow from 190.93.240.0/20 to any port 443
sudo ufw allow from 197.234.240.0/22 to any port 443
sudo ufw allow from 198.41.128.0/17 to any port 443
sudo ufw allow from 2400:cb00::/32 to any port 443
sudo ufw allow from 2405:8100::/32 to any port 443
sudo ufw allow from 2405:b500::/32 to any port 443
sudo ufw allow from 2606:4700::/32 to any port 443
sudo ufw allow from 2803:f800::/32 to any port 443
sudo ufw allow from 2c0f:f248::/32 to any port 443
sudo ufw allow from 2a06:98c0::/29 to any port 443
İkinci olarak Asla ve asla aynı sunucu üzerinde mail server yapılandırıp kullanmayacak olmanızdır. En çok yapılan yanlışlardan biridir. DNS taraması ile kolay bir şekilde Origin IP adresinize erişilebilir.
Bu tarz yöntemlerden kurtulmak için mail hizmeti veren yerleri tercih edebilirsiniz MX kaydı edinerek hem istediğiniz kişiye mail atabilir hemde mail alabilirsiniz. Bu servislerden bir kaçı
G Suite
Yandex Kurumsal
Zoho Mail
Üçüncü olarakta Web sunucunuzun ve web uygulamanızın bilinen tüm bilgi açıklama güvenlik açıklarına karşı düzeltildiğinden emin olun.
Mümkünse CloudFlare kullanımından hemen önce sağlayıcınızdan yeni IP adresi tahsis etmesini isteyin. Çünkü DNS kayıtları kamuya açık bir şekilde yayınlanır ve geçmiş kayıtların arşivlendiği birçok web sitesi bulunmaktadır. Bu geçmiş DNS kayıtları, CloudFlare’ye kaydolmadan önce ki kullandığınız Origin IP adresinizi kayıt eder.
Ayrıca Saldırgan, web sunucunuzu rasgele bir adrese bağlanmasını sağlayabilirse(ki genelde başarabilir), kaynak IP’yi görecektir. Kullanıcının belirli bir URL’den bir fotoğraf yüklemesine izin veren “URL’den yükle” gibi özellikler bulunuyorsa, indirmeyi yapan sunucunun web sitesi kaynak sunucusu olmadığı şekilde tekrar yapılandırılmalıdır.
Saldırgan girilen URL’yi seçebilirse, özellikle kendisine bağlananları izlemek için bir web sitesi oluşturabilir veya kullanıcıların IP adreslerini monitörlemek için kullanabilirler. Ayrıca mümkünse kullandığınız tüm subdomainleri CloudFlare arkasına alarak güvenli hale getirin.
Şubat ayında blogumu statik bir şekilde github pages getirmiştim hatta bunu nasıl yaptığımı da sırasıyla anlatmıştım. Ancak Github Pages de kullandığım SSL konusu bazı arkadaşların dikkatini çekmiş custom domain de SSL kullanmamdan dolayı, aslında bunu yapabileceğiniz 1 adet firma bulunuyor oda Cloudflare bu hizmeti özellikle sağlıyorlar ve bilindiği gibi uzun zamandır da ücretsiz SSL vermekteler. Uzatmanın anlamı yok yapacaklarımız aslında çok kısa bize gerekenler ise şu şekilde;
Hali hazırda oluşturulmuş 1 adet Github pages
Cloudflare üzerinde oluşturulmuş 1 adet ücretsiz hesap
İngilizce okuyabilme ve regexp konusunda az buçuk bilgiye sahip olma
Sabır ve okuduğunu anlama
Cloudflare hesabınıza giriş yaptığınız andan itibaren size neler yapabileceğinizi ve bu sistemin ne kadar güzel olduğunu anlatan bir takım görseller karşınıza çıkacak bu özelliklerden biz sitemiz için 3 tanesini kullanacağız bunlar
Universal SSL
CDN
Cache
Ayrıca bu sistemlere bağlı olarak kullanılacak bir takım ek özelliklerimiz de bulunuyor. Bu makaledeki gereken her şeyi yapan kişilerin web sitesi 1 saniyenin altında açılacaktır. (Sitenin tamamen statik olması gerekmektedir. Dinamik içerikli sitelere uygulandığı taktirde siteleriniz haliyle sağlıklı çalışmaz)
Universal SSL içerisinde Cloudflarenin bize sunduğu SPDY/HTTP-2 desteği ve tüm sayfaları 301 ile https şeklinde yönlendirmeyi
CDN özelliği ile sitemiz üzerinde bulunan tüm içeriği dağıtık yapıda dünyanın her yerine dağıtmayı
Cache özelliği ile de içeriğimizi kullanıcılara normalinden hızlı bir şekilde sunmayı amaçlıyoruz.
İlk önce oluşturduğunuz hesap ile Cloudflare sistemine giriş yapıyorsunuz. Yukarıda hiçte alışık olmadığınız yönlendirme yerleri geliyor. Zamanla alışacağınızı düşünerek pas geçiyor ve gereken ayarlarımızın yapılacağı yere geliyorum.
DNS alanına tıklıyorsunuz. karşınıza DNS bilgilerinizi girmenizi istediği yerler geliyor buradan siteniz için kullandığınız github.io ile biten domaini ekliyorsunuz şu şekilde olmalı
Türü
Ad
Değeri
TTL
Durum
CNAME
siteadiniz.com
kullaniciadi.github.io
Otomatik
Aktif
CNAME
www
kullaniciadi.github.io
Otomatik
Aktif
Ayarlamalarınızı yukarıdakini referans alarak yapıyorsunuz ek olarak sisteminizde mail vs kullanıyorsanız yada kullanacaksanız herhangi bir firmadan MX hizmeti alabilirsiniz ve tekrar bu DNS sayfasına ekleme yaparak kullanabilirsiniz anında aktif olacak daha sonra Cloudflarenin size sunmuş olduğu nameserverları domain adresinizi aldığınız firmanın paneline giriyorsunuz ve aktif olmasını bekliyorsunuz bu işlem firmadan firmaya göre değişmekte olup genelde 24 saatte tamamen aktarılmaktadır. Ancak cloudflare hızlı olduğu için genelde bu 6 saate düşüyor firmanız işgüzarlık yapmaz ise kullanıcılarınız’a bir sıkıntı yapmadan yeni nameserver ile yayına geçebilirsiniz.
Ayarlarınız aktif olduktan sonra yani yaklaşık 5 dakika sonra üst menüde bulunan Crypto sekmesine geçiyorsunuz burada kullanacağımız SSL yi ayarlayacağız SSL seçimini yaparken Full yerine Full(strict) seçeneğini kesinlikle seçmeyiniz
Adı
Değeri
SSL
FULL
HTTP Strict Transport Security (HSTS)
ON
Authenticated Origin Pulls
ON
HTTP Strict Transport Security (HSTS) ayarları ise aşağıdaki gibi değiştirilmesi gerekmektedir.
Status: ON
Max-Age: 6 months (recommended)
Include subdomains: On
Preload: On
No-sniff: On
Ayarlamalar neticesinde SSL sertifikanız Cloudflare tarafından oluşturulacak ve kullanıma başlayacaksınız SSL nin imzalanması yaklaşık bi 12-24 saat alabiliyor https niye çalışmıyor diye paniklemeyin.
Ardından Speed sekmesine geçiyorsunuz burada yapacaklarınız oldukça önemli çünkü sitenizde kullanacağınız JS kodları buna göre düzenlenecek misal adsense kullanıyorsanız özellikle buraların ayarlanması gerekiyor aksi taktirde reklamlarınız gözükmeyecek
Adı
Değeri
Auto Minify
Hepsi Seçili
Rocket Loader™
OFF
Ardından Cache sekmesine geçiyoruz buradaki ayarları da aşağıdaki tabloya göre yapıyorsunuz dikkat edilmesi gereken özellikle bir nokta var burada çok agresif bir cache işlemi uygulayacağız sitenizde yapacağınız değişiklikler gözükmeyebilir. Anasayfa otomatik olarak cachesi temizlense bile diğer sayfalarda yapacaklarınız değişmez bu yüzden cacheyi el ile temizlemeniz gerekebilir.
Adı
Değeri
Caching Level
No Query String
Browser Cache Expiration
1 Year
Always Online™
ON
Şimdi sıra bu yaptıklarımızı kalıcı bir şekilde kullandığımız domaine uygulamada peki yapacaklarımız neler
Tüm domaindeki içerik için Cache özelliğinin aktif edilmesi
Tüm domain için kalıcı olarak Always Online özelliğinin aktif edilmesi
Tüm http:// linklerinin https:// kalıcı bir şekilde yönlendirilmesini sağlama
Hemen Page Rules kısmına geçiş yapıyorsunuz 3 tane hakkınız bulunuyor bunu güzel bir şekilde değerlendirmemiz gerekiyor ilk olarak benim yaptıklarım şu şekilde
Domain
Özellik
https://mertcangokgoz.com/*
Always Online: ON, Cache Level: Cache Everything
https://*.mertcangokgoz.com/*
Always Use HTTPS
Bu işlemlerden sonra ücretsiz bir şekilde web sitenizi barındırırken aynı zamanda da ücretsiz bir şekilde SSL sahibi olacaksınız ve web siteniz oldukça hızlı açılmaya başlayacak
DNS sistemindeki güvenlik eksikliklerini tamamlamak amacıyla geliştirilmeye başlanan DNSSEC sayısal verinin imza ile tamamlanmasını sağlayan bir teknolojidir. DNSSEC sadece isim sunucusunda kullanılan İP adresini doğrulamaya yarar.
Verinin güvenliğini sağlamak için aktif etmenizde fayda var.Aynı zamanda Ortadaki adam(MITM Attack) saldırılarına ve önbellek zehirleme(Arp Spoofing) saldırılarına karşıda koruma sağlamaktadır. Ancak unutulmaması gerekiyor herhangi bir Ddos(Denial-of-service attack) ve veri değişiminde gizliliği garanti etmez phishing saldırılarına karşı koruma sağlamaz web site verilerini şifrelemez. SSL ile birlikte aktif edildiği taktirde oldukça güvenli bir sistem haline geldiği görülmüştür.
Geçtiğimiz günlerde ise Cloudflare bu teknolojiyi sistemlerinde aktif ettiklerini duyurdu.Bizde elimizi çabuk tutup bu teknolojiden faydalanalım peki ne yapmamız gerekiyor ?
Öncelikli olarak Cloudflare sitesine üye olmuş olmanız ve hali hazırda kullanıyor olmanız ve NS bilgilerinizin cloudflarenin belirlemiş olduğu adreslerin olması gerekiyor. Bu aşamadan sonrası ise oldukça basit cloudflare her zaman ki gibi bize kullanıcı arayüzü konusundada yardım sağlıyor. Sisteme giriş yaptığınızda yukarıdaki seçeneklerden DNS seçiyorsunuz.
Bu seçenek altında siteniz ile ilgili capsulleme yaptığınız DNS bilgileri bulunuyor bu alan altında en alta geliyorsunuz. DNSSEC diye bir yer geldiğini göreceksiniz. Buradan Setup DNSSEC diyorsunuz ve kuruluma geçiyorsunuz sistem otomatik olduğu için sizin yerinize Key bilgilerinizi oluşturuyor.
Burada size birkaç bilgi gerekiyor Domain kayıt ettiğiniz yerinde DNSSEC desteklemesi gerekiyor namecheap gibi bir yerden aldıysanız eğer böyle bir imkanınız olmayacak o yüzden baştan kayıp ediyorsunuz.
Yukarıdaki bilgileri ben domain adresimi kayıt ettiğim firmanın sitesine giderek ekleme yapıyorum.Her zaman ki gibi name.com dan aldığım için DNSSEC desteğimizin olduğunu nameserver panelinde görüyoruz. “Edit Nameserver” bölümüne giriş yapıyorsunuz en aşağıda şu şekilde bir bölüm göreceksiniz.Diğer domain sağlayıcılarında yapılacak adımlar için Tıklayınız
DNSSEC yönetim sayfasına geçiş yapıyoruz buraya cloudflarenin bize vermiş olduğu DS kayıtlarını tanımlamamız gerekiyor. Bu işlemleri yanlış yaparsanız domain adresinize erişemezsiniz tekrar doğru kayıtları girdiğinizde erişim tekrar geleceğini unutmayınız. Burada dikkat etmeniz gereken nokta Digest Type kısmını cloudflare şifreleme algoritmasını yazarak vermiş bu algoritma name.com sistemlerinde 2 numaraya denk geliyor. İki olarak düzenlediğinizde hata almayacaksnız aksi taktirde “syntax error” şeklinde hatalar alabiliriniz.
Kayıtlarımızı doğru bir şekilde girdikten sonra DNSSEC artık aktif hale geldi bundan sonra veri bütünlüğünüz sağlanmış olacak ama unutmayın SSL ile birleştirdiğinizde daha güvenli bir platform elde edeceksiniz.
İşlem tamamlandıktan sonra DNSSEC sisteminin aktif olup olmadığını kontrol etmek için aşağıdaki sitelerden bir tanesini kullanabilirsiniz.
CloudFlare kullanara bilindiği üzere sitenizi koruma altına alabilirsiniz ip adresinizi gizleyebilir ve gelecek olan saldırılardan bir nebzede olsa korunabilirsiniz. Ddos ve Botnet saldırılarına ise pro paket sayesinde korunabilirsiniz.
Cloudflare aslında ip kapsüllemek için ideal bir platform sitenizin ip adresini gizlemeniz güvenliğiniz açısından büyük önem taşıyor.Ancak hatalarınız sonucu ip adresiniz tekrardan bulunabilir. Cloudflare işte bu noktada işinize asla yaramayacaktır. Sitemin ip adresi nasıl bulunuyor yada bulunabiliyor mu gibi düşünceleriniz varsa bu uygulaması kullanabilirsiniz.Başarı oranı %80 dir.
sudo su
cd /usr/local/bin
wget https://downloads.mertcangokgoz.com/cloudflare.sh
chmod +x cloudflare.sh
./cloudflare.sh
Komutu verdiğimizde seçimli bir ekran gelecek buradan istediğiniz yöntemi seçerek ipleri bulabilirsiniz.Eğer ip adresiniz çözümlenebiliyorsa gereken adımları bu yünde atabilirsiniz ve saldırganları durdurabilirsiniz.
Site adresini girdiğinizde ve seçimi yaptığınızda eğer ip bulunabiliyorsa. Bulunan ip adresini gösterecektir. Bulunamıyor ise sitenizin ip adresini güzel bir şekilde gizlemişsiniz demektir.
windows ve linux sistem yönetimi, network ve ağ güvenliği, siber güvenlik, yazılım ve gündemdeki diğer teknolojik konular hakkında blog yazıları