Bağlantı noktalarını internete açmadan web sitenizi Cloudflare ile koruyun

0 Hisse senetleri
0
0
0
0

giriiş

Merhaba, web sitenizi Cloudflare ile nasıl koruyacağınızı anlatan bu eğitime hoş geldiniz. Bir web sitesinin bir sunucuda nasıl barındırılacağını, Cloudflare'in mükemmel ve ücretsiz L7 korumasıyla güvenliği koruyarak nasıl korunacağını ve bir saldırganın Cloudflare'i atlayıp sunucuya doğrudan saldırmasını önlemek için sunucu portlarının nasıl kilitleneceğini açıklıyor.

Cloudflare Hakkında

Başlamadan önce Cloudflare ve özellikleri hakkında kısa bir not:

  • Cloudflare, dünyanın en büyük ağlarından biridir. Günümüzde işletmeler, kâr amacı gütmeyen kuruluşlar, blog yazarları ve internette varlığı olan herkes, daha hızlı ve daha güvenli web siteleri ve uygulamalara sahip. DDoS saldırılarına karşı korunuyorlar ve arka uç sunucuları saldırganlardan korunuyor. Cloudflare ayrıca, web sitelerini SQL enjeksiyonu, XSS ve DDoS saldırıları gibi saldırılara karşı koruyan bir dizi güvenlik hizmeti de sunuyor.
  • Cloudflare, milyonlarca web sitesinin internet isteklerini destekliyor ve saniyede ortalama 55 milyon HTTP isteğine hizmet veriyor.
  • Cloudflare, internet güvenliği ve performansında birçok iyileştirme yapmıştır. Web sitesi sahiplerinin web sitelerini saldırılardan koruması ve performansını artırması için harika bir araçtır. En iyi yanı ise ücretsiz olmasıdır.
  • Trafiğiniz arttıkça, daha fazla özellik ve daha iyi performans için her zaman ücretli bir plana geçebilirsiniz.
Ön koşullar
  • Bir alan adı
  • Eklenmiş bir etki alanına sahip bir Cloudflare hesabı
  • Debian 12 çalıştıran bir sunucu
  • Koruma amaçlı bir web sitesi

Adım 1 – Sunucuyu güncelleyin ve NGINX'i yükleyin

Öncelikle sunucuyu güncellememiz gerekiyor, ardından NGINX deposunu ekleyip NGINX'i kurmamız gerekiyor.

apt update && apt upgrade -y
apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring -y
# Add the signing key for the nginx packages
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null
# Add the NGINX repository
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
# Pin down the NGINX repository to avoid conflicts with the default Debian repository
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
apt update
# Install NGINX
apt install nginx -y

Adım 2 – Web Sitesi Kurulumu ve Yapılandırması

NGINX'i bir web sitesine hizmet verecek şekilde yapılandırmak bu eğitimin kapsamı dışındadır, ancak bu eğitim için varsayılan ayarları kullanacağız ve sunucuyu Cloudflare ile güvence altına alacağız.

Menşei belgeniz olmalı Cloudflare Oluşturun ve listeleyin /etc/nginx/ssl, yani bkz.crt Ve cf.key Koy şunu.

Cloudflare kontrol panelinde alan adınızı seçip SSL/TLS » Origin Server » Create Certificate (Sertifika Oluştur) seçeneğine giderek bir origin sertifikası oluşturabilirsiniz.


Aşağıdaki yapılandırmayı (örneğin /etc/nginx/sites-available/default) web sitenizin ihtiyaçlarına göre uyarlayabilirsiniz.

server {
listen 443 ssl;
server_name <example.com>;
access_log /var/log/nginx/host.access.log main;
ssl_certificate /etc/nginx/ssl/cf.crt;
ssl_certificate_key /etc/nginx/ssl/cf.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

Adım 2.1 – NGINX'i yeniden yükleyin

Bu noktada değişiklikleri uygulamak ve etki alanını sunucuya yönlendirmek için NGINX'i yeniden yüklüyoruz.

systemctl reload nginx

NGINX yeniden yüklendikten sonra, Cloudflare kontrol paneline bir A kaydı ekleyerek alan adınızı sunucuya yönlendirebilirsiniz. Cloudflare'in L7 korumasını etkinleştirmek için proxy durumunun "Proxy" olarak ayarlandığından emin olun, aksi takdirde sunucu internete açık olacaktır.

Adım 3 – Yolun 'ı tamamlandı

Artık yolun 'ını tamamladık. Web sitesi artık Cloudflare'in L7 korumasıyla korunuyor, ancak sunucu hâlâ internete açık ve bir saldırgan Cloudflare'i atlatıp sunucuya doğrudan saldırabilir.

Sonraki adımlarda sunucu portlarını kilitleyeceğiz ve yalnızca Cloudflare IP aralıklarının sunucuya erişmesine izin vereceğiz.

Bunu başarmak için iptables'ı kullanabiliriz, ancak bir adım daha ileri gidip sunucu portlarını kilitlemek için Hetzner Cloud Firewall'ı kullanacağız.

Adım 4 – Hetzner Bulut Güvenlik Duvarını Kurma

Bu adımda, sunucu portlarını kilitlemek ve yalnızca Cloudflare IP aralıklarının sunucuya erişmesine izin vermek için Hetzner Cloud Güvenlik Duvarını kuracağız.

Bunu, Hetzner Cloud Konsolu üzerinden, projenizi seçip "Güvenlik Duvarları" sekmesine tıklayarak yapabilirsiniz. Ancak, Cloudflare'in IP aralıkları dinamiktir ve zaman içinde değişebilir. Bu nedenle, bu süreci otomatikleştirmek için Hetzner Cloud API'sini kullanacağız.

Öncelikle Hetzner bulut konsolunda birkaç şey yapmanız gerekiyor:

  • «Güvenlik» » «API belirteçleri» bölümüne gidip «API belirteci oluştur» seçeneğine tıklayarak bir API belirteci oluşturun. Okuma ve yazma izinleri verdiğinizden emin olun.
  • Güvenlik duvarı kimliğini not edin. Güvenlik duvarı sayfasındayken URL'de bulabilirsiniz:
  • Sunucuda mutlaka güvenlik duvarı uygulandığından emin olun, aksi takdirde işe yaramaz.

Sunucunuza geri dönün ve aşağıdaki betiği bir dosyaya kaydedin (örneğin, firewall.py). Bu betik, Hetzner Bulut Güvenlik Duvarı'nda Cloudflare IP aralığını beyaz listeye ekleyecektir.

Not: Aşağıdaki komut dosyası, belirttiğiniz mevcut güvenlik duvarı kurallarının üzerine yazacaktır, bu nedenle güvenlik duvarınızın başka önemli kurallar içermediğinden emin olun. Eğer içeriyorsa, komut dosyasına bir SSH portu açmak gibi kurallar ekleyebilirsiniz.

import requests
import json
HETZNER_API_TOKEN = "YOUR_HETZNER_API_TOKEN"
HETZNER_FIREWALL_ID = "YOUR_HETZNER_FIREWALL_ID"
def get_cloudflare_ips():
response = requests.get('https://www.cloudflare.com/ips-v4')
if response.status_code == 200:
return response.text.strip().split('\n')
else:
print("Failed to retrieve Cloudflare IP ranges")
return []
def whitelist_ips_in_hetzner(ip_ranges):
headers = {
'Authorization': f'Bearer {HETZNER_API_TOKEN}',
'Content-Type': 'application/json',
}
payload = {
"rules": [
{
"direction": "in",
"source_ips": ip_ranges,
"port": "443",
"protocol": "tcp",
"description": "Accept port 443"
},
#{
# "direction": "in",
# "source_ips": ["0.0.0.0/0","::/0"],
# "port": "22",
# "protocol": "tcp",
# "description": "Accept SSH connections"
#}
]
}
response = requests.post(f'https://api.hetzner.cloud/v1/firewalls/{HETZNER_FIREWALL_ID}/actions/set_rules', headers=headers, data=json.dumps(payload))
if 200 <= response.status_code < 203:
print("IPs whitelisted successfully in Hetzner Firewall")
else:
print("Failed to whitelist IPs in Hetzner Firewall", response.json())
if __name__ == "__main__":
cloudflare_ips = get_cloudflare_ips()
whitelist_ips_in_hetzner(cloudflare_ips)

Adım 5 – Betiği çalıştırın ve otomatikleştirin

  • Python'u yükleyin

Betiği çalıştırmak için sunucuya Python yüklemeniz gerekir. Python henüz yüklü değilse, şu komutu çalıştırarak yükleyebilirsiniz:

apt install python3 -y
  • Betiği çalıştırın.

Python'u kurduktan sonra betiği şu şekilde çalıştırabilirsiniz:

python3 firewall.py

“IP'ler Hetzner Güvenlik Duvarı'nda başarıyla beyaz listeye eklendi.” gibi bir çıktı alana kadar beklemelisiniz. Aksi takdirde hata mesajını kontrol edip sorun giderme işlemi yapabilirsiniz.

  • Otomatikleştirmek

Betik başarıyla çalıştırıldıktan sonra, betiği bir cron işine ekleyerek otomatikleştirebilirsiniz; böylece betik her 24 saatte bir çalışır ve Hetzner Cloud Güvenlik Duvarını Cloudflare IP aralığıyla günceller.

Crontab -e komutunu çalıştırıp dosyaya aşağıdaki satırı ekleyerek bir cron işi ekleyebilirsiniz.

* 0 * * * /usr/bin/python3 /path/to/firewall.py

Adım 6 – Cloudflare tarafında korumayı sıkılaştırma

Cloudflare panonuza giriş yapın.

  • “SSL/TLS” sekmesine gidin

Web sitesinin her zaman HTTPS üzerinden sunulmasını ve Cloudflare ile sunucu arasındaki iletişimin şifreli ve güvenli olmasını sağlamak için:

  • "Her zaman HTTPS kullan"ı etkinleştirin – "HTTPS otomatik yeniden yazma"yı etkinleştirin – SSL/TLS şifreleme modunu "Tam (Güçlü)" olarak ayarlayın.

"Güvenlik" sekmesine gidin

Web sitesinin botlardan, hotlinklerden ve diğer saldırılardan korunmasını sağlamak için:

  • "Tarayıcı Bütünlüğü Denetimi"ni etkinleştirin - "Sıcak Bağlantı Koruması"nı etkinleştirin - "Bot Mücadele Modu"nu etkinleştirin“

Bunun tek tip bir çözüm olmadığını ve her zaman Cloudflare panonuzu takip etmeniz ve ayarları web sitenizin ihtiyaçlarına göre değiştirmeniz gerektiğini unutmayın.

  • Ayrıca web sitenizi saldırılardan daha fazla korumak için "Oran Sınırlama" özelliğini de etkinleştirebilirsiniz ve neyse ki Cloudflare bu özellik için ücretsiz bir katman sunuyor (bir kural dahil).
  • Ayrıca, statik web sitesi içeriklerini önbelleğe almak ve sunucu yükünü azaltmak için Cloudflare'in önbellekleme özelliğini de kullanabilirsiniz.

Ve bir kez daha trafiği takip etmeli ve ayarları web sitenizin ihtiyaçlarına göre değiştirmelisiniz.

Ayrıca şu betik de var: https://github.com/guided-hacking/cfautouam

Sunucu çok fazla CPU veya RAM kullandığında Cloudflare'i otomatik olarak "saldırı moduna" geçirmek için bu betiği kullanabilirsiniz. Bu, sunucuyu saldırılardan korumak için faydalı olabilir, ancak bu, bu eğitimin kapsamı dışındadır.

Sonuç

Bu eğitimde, Cloudflare'in L7 korumasıyla bir web sitesini nasıl koruyacağınızı, sunucuyu ve web sitesini internete bağlantı noktalarını açığa çıkarmadan saldırılara karşı nasıl güvence altına alacağınızı öğrendiniz. Ayrıca, Hetzner'in bulut güvenlik duvarını Cloudflare'in IP aralığıyla güncelleme sürecini otomatikleştirerek Cloudflare tarafındaki korumayı güçlendirdiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz