sysctl.conf ile Linux Çekirdeği Sertleştirme. SYN Flood Saldırılarına Karşı Koruma ve TCP Ayarlaması
Giriş
Bu eğitimde, sysctl.conf kullanarak Linux çekirdeğini güçlendirecek, sunucunuzu SYN sel saldırılarına karşı koruyacak ve TCP yığını davranışını optimize edeceksiniz. Çekirdek düzeyinde ayarlamalar, ağ tabanlı hizmet reddi (DoS) saldırılarına karşı dayanıklılığı artırır ve genel TCP performansını iyileştirir. Ayrıca, kontrollü bir ortamda bir SYN sel saldırısını simüle edecek ve koruma mekanizmalarınızın doğru çalıştığını doğrulayacaksınız.
Ön Koşullar
Hedef Kitle: Orta düzey sistem yöneticileri
Tahmini Süre: 45–60 dakika
Sistem Gereksinimleri
- İşletim Sistemi: Ubuntu 24.04 LTS (test edildi); Debian 12/13 ve diğer modern Linux dağıtımları ile uyumlu
- Çekirdek sürümü: 5.x veya daha yeni
- Minimum 1 GB RAM
- Root veya sudo ayrıcalıkları
- Test makineleri arasında ağ erişimi
Gerekli Araçlar
Aşağıdaki araçları yükleyin:
sudo apt update
sudo apt install -y hping3 net-tools procps iproute2
Kurulumu doğrulayın: hping3 --version
Beklenen çıktı: Başarılı kurulumun doğrulandığı sürüm bilgisi.
SYN sel simülasyonunu yalnızca kontrollü bir laboratuvar ortamında gerçekleştirin. Sahip olmadığınız veya test izniniz olmayan sistemlere karşı asla test yapmayın.
Adım 1: Mevcut sysctl Yapılandırmasını Yedekleyin
Değişiklik yapmadan önce bir yedek oluşturun.
sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup
Sonuç: /etc/sysctl.conf.backup adlı bir yedek dosya oluşturulur.
Adım 2: SYN Sel Koruması için Çekirdek Parametrelerini Yapılandırın
Yapılandırma dosyasını açın:
sudo nano /etc/sysctl.conf
Aşağıdaki parametreleri ekleyin veya değiştirin.
SYN Çerezlerini Etkinleştirin
net.ipv4.tcp_syncookies = 1
Amacı: SYN bekleme kuyruğu taşması olduğunda SYN çerezlerini etkinleştirir.
Değerler:
- 0 – Devre dışı
- 1 – SYN bekleme kuyruğu taşması olduğunda etkin (önerilen)
- 2 – Her zaman etkin (nadiren kullanılır)
Neden: SYN çerezleri, el sıkışma tamamlanana kadar kaynak tahsisini önleyerek bellek tükenmesini önler.
Modern dağıtımlarda bu seçenek varsayılan olarak etkindir. Aşağıdaki komutla kontrol edebilirsiniz: sysctl -a | grep net.ipv4.tcp_syncookies
SYN Bekleme Kuyruğunu Artırın
net.ipv4.tcp_max_syn_backlog = 4096
Amacı: Onay bekleyen bağlantı isteklerinin maksimum sayısı.
Neden: Daha büyük bir bekleme kuyruğu, çekirdek onları düşürmeye başlamadan önce daha fazla yarı açık bağlantıya izin verir.
SYN-ACK Yeniden Denemelerini Azaltın
net.ipv4.tcp_synack_retries = 3
Amacı: SYN-ACK paketleri için yeniden iletim sayısı.
Neden: Bunu düşürmek, kötü niyetli yarı açık bağlantılarda bekleme süresini azaltır.
TCP Time-Wait Yeniden Kullanımını Etkinleştirin
net.ipv4.tcp_tw_reuse = 1
Amacı: Yeni giden bağlantılar için TIME-WAIT soketlerinin yeniden kullanılmasına izin verir.
Değerler:
- 0 – Devre dışı
- 1 – Etkin
Neden: Yoğun yük altında soket tükenmesini azaltır.
FIN Zaman Aşımını Azaltın
net.ipv4.tcp_fin_timeout = 15
Amacı: Bir soketin FIN-WAIT-2 durumunda kalma süresi.
Neden: Eski bağlantılardan kaynaklanan kaynak kullanımını azaltır.
Ters Yol Filtrelemeyi Etkinleştirin
net.ipv4.conf.all.rp_filter = 1
Amacı: Kaynak IP adreslerini yönlendirme tablosuna karşı doğrular.
Değerler:
- 0 – Devre dışı
- 1 – Sıkı mod
- 2 – Gevşek mod
Neden: IP sahtekarlığı saldırılarını hafifletmeye yardımcı olur.
Maksimum Açık Dosya Sayısını Artırın
fs.file-max = 2097152
Amacı: Sistem genelinde maksimum dosya tanıtıcı sayısı.
Neden: Yüksek bağlantı yükü sırasında dosya tanıtıcı tükenmesini önler.
Adım 3: sysctl Değişikliklerini Uygulayın
Değişiklikleri yeniden başlatmadan uygulayın:
sudo sysctl -p
Beklenen çıktı: Her parametre yeni değeriyle görüntülenir.
Belirli bir parametreyi doğrulayın: sysctl net.ipv4.tcp_syncookies
Beklenen çıktı: net.ipv4.tcp_syncookies = 1
Sonuç: Çekirdek parametreleri aktiftir.
Adım 4: SYN Sel Saldırısını Simüle Edin
Önemli: Bunu yalnızca bir laboratuvar ortamında gerçekleştirin.
Ayrı bir test makinesinden çalıştırın:
sudo hping3 -S --flood -V <YOUR_SERVER_IP> -p 80
Açıklama:
-SSYN paketleri gönderir--floodpaketleri olabildiğince hızlı gönderir-p 80HTTP portunu hedefler
Sonuç: Sunucuya yüksek hacimli SYN paketleri gönderilir.
Adım 5: Saldırı Sırasında Sunucuyu İzleyin
Hedef sunucuda bağlantıları izleyin:
netstat -ant | grep SYN_RECV | wc -l
Sonuç: Yarı açık bağlantıların sayısını gösterir.
SYN çerezleri sayacını kontrol edin:
nstat -az | grep Syncookies
TcpExtSyncookiesSent gibi artan sayaçlar gözlemlemelisiniz. Bu, SYN çerezlerinin kullanıldığını doğrular.
Adım 6: Güçlendirme Öncesi ve Sonrası Davranışı Karşılaştırın
Güçlendirme olmadan test ederseniz:
- SYN_RECV sayısı hızla artar
- Sunucu yanıt vermeyebilir
- Bağlantı kuyruğu taşar
Güçlendirme sonrası:
- SYN çerezleri etkinleşir
- Daha az düşen bağlantı
- Sunucu yanıt vermeye devam eder
Hedef sunucuya bir web sunucusu kurun:
sudo apt install nginx
Yanıt verme yeteneğini test etmek için:
curl http://localhost
Sonuç: Simüle edilen saldırı sırasında bile sunucu normal şekilde yanıt verir.
Adım 7: TCP Performans Ayarlaması (İsteğe Bağlı İleri Düzey Optimizasyon)
sysctl yapılandırmasına ek ayarlama parametreleri ekleyin. nano /etc/sysctl.conf çalıştırın ve ekleyin:
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 2000000
Açıklama:
net.core.somaxconn– uygulamalar için maksimum dinleme kuyruğu uzunluğu.net.core.netdev_max_backlog– işleme başlamadan önce giriş tarafında kuyrukta bekleyen maksimum paket sayısı.net.ipv4.tcp_max_tw_buckets– maksimum TIME-WAIT soketleri. Bu seçenek, yüksek yük ve yeterli RAM'e sahip sunucular için geçerlidir.
Bunlar, yoğun trafik altında performansı artırır.
Değişiklikleri uygulayın:
sudo sysctl -p
Doğrulama Kontrol Listesi
sysctl -phatasız çalışırtcp_syncookies1'e eşittirSyncookiesSentsayacı saldırı sırasında artar- Sunucu yanıt vermeye devam eder
- Günlüklerde çekirdek uyarısı yok:
dmesg | grep -i syn
Değişiklikleri Geri Alma
Orijinal yapılandırmayı geri yükleyin:
sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf
sudo sysctl -p
Sonuç: Sistem orijinal çekirdek parametrelerine döner.
İsteğe bağlı olarak test araçlarını kaldırın:
sudo apt remove hping3 -y
Sorun Giderme
Syncookies Artmıyor
Kontrol edin: sysctl net.ipv4.tcp_syncookies
Değer 0 ise, yapılandırmayı yeniden uygulayın.
Sunucu Hala Bağlantıları Düşürüyor
Bekleme kuyruğunu artırın: net.ipv4.tcp_max_syn_backlog = 8192
Ardından değişiklikleri uygulayın:
sudo sysctl -p
Sonuç
Linux çekirdeğini sysctl.conf kullanarak güçlendirdiniz, SYN sel koruma mekanizmalarını etkinleştirdiniz, TCP yığını davranışını optimize ettiniz ve korumaları kontrollü saldırı simülasyonu ile doğruladınız. Bu değişiklikler, SYN sel saldırılarına karşı dayanıklılığı artırır ve genel ağ kararlılığını artırır.
Sonraki Adımlar
- Güvenlik duvarı hız sınırlaması ile birleştirin (iptables veya nftables)
- Bağlantı izleme sınırlarını uygulayın
- Saldırı tespit sistemleri (IDS) dağıtın
- Prometheus ve Grafana kullanarak metrikleri izleyin