Skip to content
Bloga Dön
Minecraft-XDP-eBPF: Java Sunucuları için DDoS Koruması

Minecraft-XDP-eBPF: Java Sunucuları için DDoS Koruması

Alexandru Maftei
Alexandru Maftei
@ice
Updated
7 görüntüleme
TL;DR:Minecraft-XDP-eBPF, Java sunucularını Layer 7 DDoS saldırılarından koruyan çekirdek düzeyinde bir güvenlik duvarıdır. Ağ sürücüsü seviyesinde zararlı paketleri sunucu yazılımına ulaşmadan önce bırakır. Ücretsiz, açık kaynaktır ve minimum ek yükle sıfır kopyalama koruması sağlar.
👉 Açık kaynak Minecraft projesi

Outfluencer/Minecraft-XDP-eBPF

Sunucunuzu layer 7 DDoS saldırılarından koruyan ilk ve tek genel açık Minecraft XDP Filtresi

⭐ 169 yıldız💻 C📋 BSD-3-Clause
GitHub'da Görüntüle ↗

Eğer bir kamu Minecraft sunucusu işletiyorsanız bu hissi bilirsiniz: birisi çöp trafiğin bir yığınını yolluyor ve aniden herkes rubber-banding yaşıyor. Layer 7 DDoS saldırıları (uygulama düzeyindeki tür) ucuz, başlatması kolay ve geleneksel güvenlik duvarlarıyla savunması inanılmaz derecede zor. Minecraft-XDP-eBPF bunu zararlı paketleri sunucu yazılımına ulaşmadan önce - doğrudan çekirdek seviyesinde - bırakarak çözüyor.

Bu Proje Ne Yapar

Minecraft-XDP-eBPF, ağ sürücüsü seviyesinde Minecraft trafiğini incelemek için C dilinde yazılmış bir XDP (eXpress Data Path) güvenlik duvarıdır. Eğer bu korkutucu görünüyorsa şöyle düşünün: çöp paketlerin tümü Java sunucunuza kadar gitmek yerine, bu araç ağ kartında onları ele alarak "hayır" der ve sunucu kaynaklarını tüketmeden önce bırakır.

Proje birçok insanın saldırıların kullandığını fark etmediği şeyi yönetir: hatalı oluşturulmuş Minecraft protokol paketleri. El sıkışmaları, durum pinglerini ve giriş isteklerini analiz eder, ardından Minecraft protokol belirtimini ihlal eden veya şüpheli görünen her şeyi bırakır. Şu noktada - geçersiz VarInt'ler, anlamsız paket sekansları, hatalı bağlantı denemeleri - hepsi gitmiş olur.

Şu anda IPv4'te Minecraft 1.8 ile 26.1.2 arasını destekler, varsayılan port 25565'tir (tabii ki). Yerleşik SYN hız sınırlaması da var, bağlantıları varsayılan olarak IP başına 3 saniyede 10 SYN ile sınırlıyor. Bütün bu filtreleme sunucu kodunuzun paketlerin varlığından bilmesi bile gerçekleşmeden oluyor.


Buna Neden İhtiyaç Duyarsınız

Bir kamu sunucusu işletiyorsanız ve rastgele saldırılardan ezilmekten kurtulmak istiyorsanız buna ihtiyacınız var. Layer 7 DDoS'un insanlar düşündüğünden çok daha yaygın olduğu halde, sadece upstream ISP'nizi kullanaraktan savunması zor olan bir şeydir. Onlar bant genişliğine bakıyor; siz sunucunuzu duyarlı tutmaya bakıyorsunuz.

Bu senaryoyu düşünün: birisi (ya da botnet) sunucunuzun IP'sini bulur ve saniye başına binlerce sahte Minecraft giriş denemesi göndermeye başlar. Sunucunuzun şimdi bu paketleri ayrıştırmak, reddetmek ve temizlemek için CPU döngüsü harcaması gerekiyor. Gerçek oyuncularınız lag yaşıyor çünkü sunucu çöp içinde boğuluyor. Bu araçla, sahte paketler sunucunuza hiç ulaşmaz.

Buradaki asıl kazanç sıfır kopyalama bırakmasıdır. Zararlı trafik çekirdek bellek ayırmadan bile XDP katmanında (XDP_DROP) bırakılır. Bu sadece hızlı değil, bu "mikrosaniye hakkında konuşuyoruz" hızlı.

Eğer arkadaşlarınızla küçük bir survival sunucusu işletiyorsanız, buna muhtemelen ihtiyacınız yok. Eğer bir şeyi kamu sunucusu olarak ya da rekabetçi olarak işletiyorsanız - özellikle insanların sizi taciz etmek isteyebileceği bir PvP sunucusu - düşünmeye değer.


Çalıştırmaya Başlayın

Kurulumun birkaç bölümü var, ama çok karmaşık değil. Kök erişimi olan bir Linux sistemi (araç sadece Linux) gerekli.

Önce ön koşulları kurun. Ubuntu ya da Debian'daysa:

bash
sudo apt update
sudo apt install -y gcc-multilib wget gnupg software-properties-common git libbpf-dev

Sonra LLVM/Clang'ı alın. Proje son bir versiyona ihtiyaç duyar (CI LLVM 21 ile test ediyor):

bash
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo./llvm.sh 21 all

Ayrıca Rust araç zincirinin yüklü olması gerekiyor. Her şeyi edindikten sonra, depoyu klonlayın ve build scriptini çalıştırın:

bash
git clone https://github.com/Outfluencer/Minecraft-XDP-eBPF.git
cd Minecraft-XDP-eBPF./build.sh

Bundan sonra başarıyla derlenirse, `target/release/xdp-loader` konumunda bir ikili dosyanız var. Güvenlik duvarını ağ arayüzünüze yüklemek için:

bash
sudo./target/release/xdp-loader eth0

(eth0 yerine gerçek ağ arayüzünüzü yazın. Eğer bilmiyorsanız, `ip link show` size söyleyecek.)

Ve bu kadar. Güvenlik duvarı şimdi aktif ve trafiği filtreliyor. Ne yaptığını izlemek ister misiniz? Prometheus metrikleri uç noktası ekleyin:

bash
sudo./target/release/xdp-loader eth0 --metrics-addr 0.0.0.0:1999

Sonra paket sayılarını, bırakmaları ve diğer eğlenceli istatistikleri görmek için `http://sunucu-ip'niz:1999/metrics` ulaşın.


Önemli Özellikler

Derinlemesine Paket İncelemesi

Araç sadece paket başlıklarına bakmaz, fiilen Minecraft protokolüne kazır. VarInt kodlamasını doğrular (bu saldırı araçlarının çoğu yanlış yapar), paket yapısını kontrol eder ve sıra kurallarını uygular. Minecraft protokolü için sözdizimsel olarak geçersiz paketler hemen bırakılır.

Bağlantı Azaltma

Varsayılan olarak, yeni TCP bağlantılarını kaynak IP başına 3 saniyede 10 SYN ile sınırlar. Eğer gerçek yasal trafiğiniz ezilirse (belki sunucular arasında geçiş yapıyorsunuz ve ani artış) `build.rs` dosyasında bunu inceleyebilirsiniz, ama varsayılan çoğu kurulum için makuldür.

Sıfır Kopyalama Bırakması

Dürüst olmak gerekirse en harika bölüm bu. XDP, çekirdek'in normal ağ yığını dahil olmadan önce sürücü seviyesinde çalışır. Zararlı paketler çekirdek belleğine kopyalanmadan bırakılır. Sunucunuz bunun yüzünden uyanmaz. Bunun gerçek bir performans iyileştirmesi, sadece teorik değil.


Sorun Alanları ve Bunlardan Kaçınma

Bunu kök olarak ya da uygun eBPF izinleriyle çalıştırmanız gerekiyor. İzin hataları alırsanız `sudo` kullanıyor olduğunuzu kontrol edin. Orada sürpriz yok ama en yaygın sorun bu.

Eğer `build.rs`'deki yapılandırmayı ayarlıyorsanız (portları, azaltma oranlarını vs. değiştiriyorsanız), hatırlamanız gereken düzenleme sonrası yeniden derlemeniz gerekir. Sadece ikiliye tekrar çalışmayın ve yapılandırmanın değişikliği almasını beklemeyin. Almayacak. Bir kez bu hatayı yaptım ve on dakika port yapılandırmasının hiçbir etkisi olmadığını merak ettim (aslında, ben değil, sadece... varsayısal olarak konuşuyorsam).

Diğer sorun: eğer harita yapılandırması değişirse - CPU başına haritaları etkinleştirdiğiniz ya da veri yapısı boyutlarını karıştırdığınız - bazen BPF dosya sistemi yeniden başlatmada kafası karışır. Çözüm nükleer ama işe yarıyor:

bash
sudo rm -r /sys/fs/bpf

Bu BPF dosya sistemini siler. Yükleyiciyi yeniden başlattığınızda, taze haritalar oluşturur. Yalnızca harita oluşturma hakkında hata alıyorsanız bunu yapın; bunu düzenli olarak yapmanız gereken bir şey değil.

Ayrıca, kullanıcı uzayı programının eBPF haritalarını yönetmek için çalışmaya devam etmesi gerekir. Yükleyici işlemini öldürürseniz, güvenlik duvarı hemen kaldırılır. Muhtemelen çökmesi durumunda yeniden başlattığından emin olmak için bunu systemd ya da başka bir denetçinin altında çalıştırmak isteyeceksiniz.


Alternatifler Neler

Bu tam olarak ne yapıyor konusunda çok sayıda araç yok. Çoğu insan ya ISP'lerinin DDoS korumasına güvenirler, Cloudflare gibi ticari bir hizmet kullanırlar ya da zaman zaman vurulacağını kabul ederler.

Cloudflare'nin Minecraft'a özel bir hizmeti var trafiğinizi proxy'ler, ama bunun için para ödersiniz ve sunucu IP'niz bir proxy'nin arkasında gizlenir. Bu araç kendi kendine barındırılır ve ücretsizdir (BSD lisanslanmıştır, bu yüzden açık kaynaktır). Farklı değiş-tokuşlar.

Bazı insanlar sunucu yazılımında ya da güvenlik duvarında temel hız sınırlaması kullanırlar, ama bu paketler sunucunuza ulaştıktan sonra olur. Bu araç onları sürücü seviyesinde durdurur, bu da daha hızlı ve verimlidir.

Eğer sunucu barındırmaya az yeni başladıysanız, barındırıcının yerleşik DDoS korumasını önce kontrol edin. Ama bare metal üzerinde çalıştırıyorsanız ya da daha fazla kontrol gerekiyorsa, Minecraft-XDP-eBPF sunduğu şeyler açısından gerçekten benzersizdir.


Yayına Alınmadan Önce

Yapabilirse aşamalı bir ortamda test edin. Bunu üretim dışı bir sunucuda ya da test VPS'sinde çalıştırın, yanlışlıkla yasal trafiği filtrelemediğinden emin olun (olmamalı, ama yapılandırma hataları oluyor). Ayrıca gerçek oyuncular için açmadan önce belirli Minecraft sunucu versiyonunuzla çalıştığını doğrulayın.

Eğer bir survival sunucusu koruyorsanız, düşük risklidir. Eğer yasal oyuncuların zaten sinir bozucu olduğu rekabetçi bir PvP ya da çatışma sunucusu çalıştırıyorsanız, giriş paketlerini yanlışlıkla engelleyen bir yapılandırma hata felaketi olabilir.

Proje GitHub'da 169 yıldıza sahip ve aktif olarak sürdürülüyor. Son sürüm varint okuma yöntemini iyileştirdi, bu tam olarak güvenlik aracında görmek istediğiniz sıkıcı ama kritik şey. Bu sağlam çalışma.

Bu Prometheus metrikleri dışa aktarmasını kurun. Bunu izleyin. Paket bırakma oranlarınıza göz tutun - bir şey tuhaf görünüyorsa, erkenden fark edeceksiniz. Ve eğer DDoS'dan gerçekten endişeli ve yasal bir kamu sunucusu çalıştırıyorsanız, bu araç zaman ayırmaya değer.

About the author
Alexandru Maftei
Alexandru MafteiLead Writer

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Share with your friends!