Genel olarak sızıntıyı nasıl çözebileceğinizden kısaca bahsetmiştim. Şimdi sıra geldi iptables ile sadece cloudflare üzerinden gelen trafiğin kabul edilmesini göstermeye.
#!/bin/sh
curl -s https://www.cloudflare.com/ips-v4 -o /tmp/cf_ips
curl -s https://www.cloudflare.com/ips-v6 >> /tmp/cf_ips
ufw allow from 94.55.146.204/32 comment 'Mertcan Home'
for cfip in `cat /tmp/cf_ips`; do ufw allow proto tcp from $cfip to any port 80,443 comment 'Cloudflare IP'; done
# Reload
ufw reload > /dev/null
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.
Eylül ayında, tüm web için yeni ve ücretsiz bir Web Analytics ürününü Cloudflare yetkilileri duyurmuştu ve sadece pro hesaplar kullanabiliyordu. Bugün ise, DNS ayarlarınızı değiştirmeden herkesin kullanabileceği Web Analytics uygulamasını duyurdular.
Popüler analitik araçları reklama dayalı bir iş modeli ile çalıştığını biliyoruz, bu araçları kullandığımızda kullanıcıların verilerinin reklam modellerine göre kullanılmasına göz yummuş oluyoruz, yani aslında ürün biziz. İşte bu çekincelerin olduğu günümüz şartlarında alternatif birilerinin ortaya çıkıyor olması çok güzel.
Bu noktada CloudFlare‘in geliştirdiği ücretsiz web analitik aracını kullanmaya başlayacağız. Hem ücretsiz hemde kullanıcı verilerini satmayan bir araç, yani en azından geliştiren ekip ve CEO bu şekilde söylüyor.
Nasıl Kurulur ve Kullanılır?
DNS sunucu adreslerinizi CloudFlare üzerine taşımanıza ve direk olarak DNS alt yapınızı değiştirmenize gerek yok sadece size verilen basit bir js dosyasını sitenize ekleyin yeter.
CloudFlare hesabınıza giriş yaptığınızda ana ekranda bulunan sağ menüde değişiklik olduğunu göreceksiniz, bu listenin en altında bulunan Web Analytics tıklıyorsunuz. Veya direk olarak bu linke tıklayarak kayıt oluyorsunuz.
Bu aşamada sizden web verilerinin izleneceği site adını soracak alan adınızı veya alt alan adınızı doğru bir şekilde girin. Burada önemli olan nokta URL şeklinde alan adınızın girilmeyecek olması.
Devam ettiğinizde web sitenize eklemek için bir kod verecek, verdiği bu kodu direk olarak </body> etiketinden önce ekliyoruz
Ardından istatistikler panelimizde 2-3 dakika geçtikten sonra gözükmeye başlayacak, detaylı bir şekilde analitik verilerinizi görebilirsiniz. Verileriniz anlık olarak güncellenecek ve istediğiniz gibi arama yapabileceksiniz.
Hetzner DNS hizmetini geçtiğimiz aylarda yayınlamıştı. Bölge aktarım amacıyla Bind ve AXFR kullanarak DNS yönetimini Plesk üzerinden Hetzner’a bağlayıp aktarım sağlayabilirsiniz. Bunu yapabilmek için öncelikli olarak Hetzner’ın networkü üzerinde bir sunucudan DNS isteklerini yönlendirmelisiniz.
Plesk DNS Yönetimi
Öncelikle, Hetzner DNS sunucularına bölge aktarımına izin vermelisiniz ve Plesk sunucusunda DNS şablonunuzu ayarlamalısınız.
Bunu yapmak için, Plesk sunucunuz da oturum açın ve “Tools & Settings” seçin
“General Settings” sekmesinde yer alan “DNS Template” sekmesine gidin.
Bu sayfada yer alan “Transfer Restrictions Template” seçeneğine tıklayın.
Aşağıda yer alan 3 IP adresini ekleyin;
193.47.99.3
213.133.105.6
213.239.242.238
Ardından DNS olarak Hetzner DNS sunucularını girmemiz gerekiyor, Kayıt Türü olarak “NS” ve ad sunucusu olarak Hetzner’ın 3 ad sunucusunu gireceğiz, şu şekilde gözükecek
helium.ns.hetzner.de
hydrogen.ns.hetzner.com
oxygen.ns.hetzner.com
Son olarak “DNS Template” alanında şu şekilde gözükecek.
Plesk tarafında yapacağımız ayarlar bitti, şimdi Hetzner DNS paneline uğruyoruz ve alan adımızı tanımlıyoruz. Bunun için “Add new zone” tıklayın alan adınızı yazın ve “Secondary” seçeneğini seçin. “Continue” deyip ikinci aşamaya geçin.
Sonraki sayfada verilen açılır menüden Plesk sunucunuzu seçin ve “Add Server” ile onaylayın daha sonra ve “Continue” deyip devam edin.
Bundan sonra, alanın başarıyla eklendiğini ve yeşil bir şekilde “Verified” yazdığını göreceksiniz.
Artık DNS ayarlarınızı Plesk panel üzerinden yapabilirsiniz, Hetzner DNS panelini kullanmanıza gerek yok. Eklemiş olduğunuz 3 DNS adresi de otomatik olarak Plesk üzerinde yapılan değişiklikleri çekecek ve uygulayacaktır. Alan adınızda aşağıdaki üç DNS sunucusunu kullanmanız yeterli olacaktır. Tüm verilerin doğru olduğundan emin olduktan sonra, alan adınızı kayıt şirketinizde güncelleye bilirsiniz.
Öncelikle, Hetzner Bulut Konsolu\’na giriş yapın veya kaydolun, kaydolmak isterseniz referansım dan faydalanın ve 20 Euro tutarındaki kupon hesabınıza otomatik olarak tanımlansın.
Bir proje seçin, ardından Server ve ardından Add Server ye tıklayın. Sonraki sayfada, size uygun olan konumu seçebilirsiniz ben tercihen Nuremberg seçiyorum ama diğer konumlarda hiç fena değil.
Şimdi sıra işletim sistemi tercihine geldi bunun için Plesk tarafından desteklenen resmi bir ISO\’ya ihtiyacınız olacak. En son yazılım gereksinimlerinin tümü Plesksürüm notlarında yer alıyor, kurulum için bunlardan bir tanesini seçebilirsiniz. Ben her zaman Debian 10 seçiyorum.
Ardından Type alanından sunucunun türünü seçin. Bu, Standart(CX serisi veya CPX serisi AMD) veya Özel(CCX) olabilir. Plesk donanım gereksinimlerine bağlı olarak her ikisinden birini seçebilirsiniz.
Özelleştirme ihtiyacı duymuyorsanız Volume, Network, Additional features ve SSH Key alanlarını dokunmadan olduğu gibi bırakabilirsiniz.
Name için doğrudan ana bilgisayar adını girmenizi tavsiye ederim FQDN destekli olmasına özen gösterin, örneğin: mars.mertcangokgoz.com.
Ardından Create & Buy Now tıklayın. Yaklaşık 20 saniye sonra, Hetzner\’den sunucunuzun çalışır durumda olduğunu belirten bir e-posta alacaksınız SSH bağlantı bilgileriniz yer alacak. SSH Key tanımlaması yaptıysanız bu e-postayı almayacağınızı hatırlatırım.
Plesk Kurulumu
Zaten kayıtlı bir alan alanınız varsa ve bir DNS sunucusuna bağlıysa, IP\’yi verilen alana yönlendirmelisiniz. Hetzner\’dan aldığınız e-postayı açın ve mesajda bulunan kimlik bilgileriyle verilen IP\’ye bağlanın. İlk girişte şifrenizi güvenlik sebebiyle değiştirmeniz gerekecek.
Bunları yaptıktan hemen sonra aşağıdaki işlemi gerçekleştirin.
sh <(curl https://autoinstall.plesk.com/one-click-installer || wget -O - https://autoinstall.plesk.com/one-click-installer)
Bu komut, sunucunuza Plesk\'i indirecek ve çalıştıracak. Artık setup dosyasındaki seçenekleri değiştirebilir veya sadece varsayılan ayarları kullanabilirsiniz. Kurulum sunucu özelliklerinize bağlı olarak yaklaşık 15 dakika sürecek. Kurulum tamamlandıktan sonra aşağıdaki gibi bir mesaj göreceksiniz.
Congratulations!
The installation has been finished. Plesk is now running on your server.
To complete the configuration process, browse either of URLs:
*
*
Use the username 'admin' to log in. To log in as 'admin', use the 'plesk login' command.
You can also log in as 'root' using your 'root' password.
Use the 'plesk' command to manage the server. Run 'plesk help' for more info.
Use the following commands to start and stop the Plesk web interface:
'service psa start' and 'service psa stop' respectively.
If you would like to migrate your subscriptions from other hosting panel
or older Plesk version to this server, please check out our assistance
options: https://www.plesk.com/professional-services/
The changes were applied successfully.
Şimdi, size verdiği URL ile kurulumu tamamlayın. Zaten bir lisansınız varsa, bunu tahsis edilen alana yapıştırabilirsiniz. Sadece Plesk\'i test etmek istiyorsanız, o sayfadaki Tam özellikli bir deneme lisansıyla devam et seçeneğini seçin.
Unutmayın ki Hetzner bulut sunucuları için Plesk lisansı sunmamaktadır. Robot üzerinden satın alabilir veya dışarıdan tedarik edebilirsiniz. Enter Plesk ile devam ediyorsunuz ve kurulum işleminin sonuçlanmasını bekliyoruz.
Kurulum başarılı bir şekilde tamamlandı, artık Plesk kontrol panelini istediğiniz gibi kullanmakta özgürsünüz.
Benden destek istenen bir noktada çok fazla gelen sorulardan bir tanesini yanıtlamak istiyorum. Özellikle Hetzner Cloud makinelerinde DHCP üzerinden IP aldığını ancak kuracakları uygulamaların Statik IP üzerinde çalıştığını bahsediyorlar. Normal şartlar altında MAC adresine tanımlı olduğu için IP adresleri Hetzner üzerinde değişmez.
Dedicated’de kullansanız MAC değiştirmediğiniz sürece(ki değiştirdiğiniz an makine kapatılır) aynı IP adresi alınır. ESXi gibi sanallaştırma uygulamaları kurduğunuz zaman sub mac tanımlaması yapsanız bile ana makina IP’si değişmez.
Sabitleme aşamasında /etc/network/interfaces dosyası içerisini aşağıdaki gibi değiştirmeniz gerekiyor. Bu noktada size verilen ip adresini tanımlamalısınız.
root@main:/etc/network#catinterfaces# This file describes the network interfaces available on your system# and how to activate them. For more information, see interfaces(5)# Include files from /etc/network/interfaces.d:#source /etc/network/interfaces.d/*autoeth0ifaceeth0inetstaticaddress<ip_address>netmask255.255.255.255gateway172.31.1.1pointopoint172.31.1.1dns-nameservers185.12.64.1185.12.64.2ifaceeth0inet6staticaddress<subnet>netmask64gatewayfe80::1# The loopback network interfaceautoloifaceloinetloopback
ShellScript
Ardından kayıt edip çıkış yapın, sunucuyu yeniden başlattığınızda tekrar DHCP olarak yapılandırdığını göreceksiniz bunu iptal etmek için touch /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg diyorsunuz ve içerisine aşağıdakini ekliyorsunuz.
Amazon S3 Üzerinden push CDN kullanan ve CloudFront tarafında içerik dağıtımı sağlandığında fontların dağıtımında CORS hatası alabilirsiniz. Bu olağan ve herkesin karşılaştığı bir durum olmakla birlikte sitenizin içerisinde yer alan ikonların gözükmemesine ve yazı tipi sorunlarına sebep olur.
Bu durumun çözümü CloudFront tarafında yapılmayacak olup, dosyaların sunulduğu S3 üzerinde aşağıdaki gerekli yapılandırmayı eklemeniz gerekmektedir.
Origin’e göre gerekli kural setlerini tanımlamanız bu sorununuzun ortadan kaldırılması için yeterlidir. Dosyaların alındığı ve işlem yapıldığı ana origini aşağıdaki gibi tanımlamayı unutmayın.
CloudFlare geçtiğimiz günlerde workers üzerinden zamanlanmış işleri yapmaya imkan tanıyan özelliğini Introducing Cron Triggers for Cloudflare Workers adıyla duyurdu. Bu özellik sayesinde yapılması gereken zamanlanmış işleri CloudFlare üzerinden gerçekleştirebiliyoruz.
Wordpress’te özellikle insanların başını ağrıtan dahili cronjob ile anlatacağım nasıl kullanılacağını bu özelliğin, normal şartlar altında wordpress’de sayfaya birisi girdiği anda varsa cronjob işlemleri tetiklenir, yönetici sayfası veya yazılar fark etmeksizin bu özellik çalışır.
Peki bu servis ücretli mi? Tabii ki de hayır
Ana sayfada sağda “Workers” alanına giriş yaparak bu süreci çok basit bir şekilde başlatabilirsiniz.
Hemen “Create Worker” diyoruz.
Size kocaman bir alanda solda javascript kod yazabileceğiniz bir alan sağda ise bunun ön izlemesi olacak, soldaki alana aşağıdaki kodumuzu giriyoruz, zamanlanmış görevi oluşturuyoruz. Kendinize göre bunu düzenlemeyi unutmayın.
Ardından “Save and Deploy” tuşuna basıyorsunuz ve güzelce workerınız kullanıma hazır oluyor. Ardından workerımızın alanına geri geliyoruz. Sıra zamanlanmış triggerimizi ayarlamaya geldi. Workerın altında yer alan “Triggers” alanına geçiş yapıyoruz.
“Add Cron Trigger” diyoruz ve artık normal cronjob ayarlar gibi ne kadar zaman aralıkla çalışacağını seçiyoruz, ben wordpress’te bu örneği anlattığım için 5 dakikalık aralar ile çalışmasını istiyorum.
Kaydettiğimiz andan itibaren worker belirlenen sürelerde ayağa kalkacak ve işini yapıp kapanacak. Başınıza iş olacak bütün cronjob işlerini bu şekilde yapabilirsiniz.
Wordpress WP Cron Nasıl Kapatılır?
Tüm bu işlemlerden sonra mümkünse Wordpress’in kendi özelliklerinden bir tanesi olan WP Cron kapatmanızdır. Bu sayede artık Cronjob işleri kullanıcıların sayfa gezintilerinde değil yukarıda belirlediğimiz aralıklarla çalışacak. Cron ile ilgili sorunlarınızın pek çoğunuda bu şekilde çözüme kavuşturabilirsiniz.
Django üzerinde tutulan statik dosyaları versiyonlu bir şekilde tutmak ve Amazon S3 üzerinde barındırmak isteyen arkadaşlarımız bu kodu kullanabilirler. Normalde Django versiyonlanmış Asset desteklemekte ancak direk S3 desteği bulunmamaktadır, bu iş için böyle bir kod işinizi çokça görecektir.
import hashlib
import threading
from django import template
from django.conf import settings
from django.contrib.staticfiles.storage import staticfiles_storage
class UrlCache(object):
_md5_sum = {}
_lock = threading.Lock()
@classmethod
def get_md5(cls, file):
try:
return cls._md5_sum[file]
except KeyError:
with cls._lock:
try:
md5 = cls.calc_md5(file)[:8]
value = '%s%s?v=%s' % (settings.STATIC_URL, file, md5)
except OSError:
value = settings.STATIC_URL + file
cls._md5_sum[file] = value
return value
@classmethod
def calc_md5(cls, file_path):
with staticfiles_storage.open(file_path, 'rb') as fh:
m = hashlib.md5()
while True:
data = fh.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()
@register.simple_tag
def md5url(value):
return UrlCache.get_md5(value)
Kullanabilmek amacıyla STATIC_ROOT tanımlaması yapmayı unutmayınız.
Herkesten sakladığınız ve sadece erişim isteği isteyen kullanıcıların dosyalara erişmesini sağlamak istiyorsanız ve bu isteğinizi Amazon üzerinde bulunan S3 bucketınızda yapacaksanız derdinizin çözümü burada,
AWS S3 de tutulan dosyalar private olarak geçmelidir.
Amazon S3 API anahtarınızda s3:GetObject yetkisi mutlaka bulunmalıdır.
django-storages Kullanılıyorsa ve dosyalar onun üzerinden sisteme yükleniyorsa, imza hatası alınmaması için mutlaka AWS_S3_SIGNATURE_VERSION = 's3v4' ve AWS_S3_ADDRESSING_STYLE = 'path' parametreleri settings.py dosyasına eklenmelidir.