Ubuntu 22.04 Üzerine Endlessh Tarpit Kurulumu: SSH Saldırılarını Etkisiz Hale Getirme
Giriş: Endlessh Tarpit Nedir ve Neden İhtiyaç Duyulur?
Günümüzün dijital dünyasında sunucu güvenliği, her sistem yöneticisi ve kuruluş için hayati bir öneme sahiptir. İnternet’e açık her sunucu, sürekli olarak kötü niyetli aktörler tarafından taranmakta ve zafiyetler aranmaktadır. Bu saldırıların en yaygın biçimlerinden biri, SSH (Secure Shell) hizmetine yönelik kaba kuvvet (brute-force) saldırılarıdır. Saldırganlar, sunucunuzun SSH portuna binlerce, hatta milyonlarca farklı kullanıcı adı ve şifre kombinasyonu deneyerek erişim sağlamaya çalışır. Bu tür saldırılar, sadece sunucu kaynaklarını tüketmekle kalmaz, aynı zamanda güvenlik riskini artırır ve sistem yöneticileri için sürekli bir endişe kaynağı oluşturur.
Geleneksel güvenlik önlemleri arasında güçlü şifreler kullanmak, SSH anahtarı tabanlı kimlik doğrulamasına geçmek, port numarasını değiştirmek ve Fail2Ban gibi araçlarla başarısız giriş denemelerini engelleyerek IP adreslerini yasaklamak bulunur. Ancak bu önlemlerin bile belirli sınırlılıkları vardır. Örneğin, Fail2Ban bir saldırganı belirli bir süre için yasaklasa da, saldırgan yeni IP adresleriyle geri dönebilir veya yasaklama süresi dolduktan sonra tekrar denemelere başlayabilir. İşte tam bu noktada “tarpit” (katran çukuru) konsepti devreye girer.
Bir tarpit, kötü niyetli bağlantıları yavaşlatmak, kaynaklarını tüketmek ve onları caydırmak için tasarlanmış bir güvenlik mekanizmasıdır. Saldırganlar bir tarpit’e bağlandığında, bağlantıları kasıtlı olarak yavaşlatılır ve zaman aşımına uğramadan önce gereksiz veri alışverişiyle meşgul edilirler. Bu, saldırganın tarama veya kaba kuvvet saldırısı girişimlerini son derece verimsiz hale getirir, değerli zamanlarını ve kaynaklarını boşa harcamalarına neden olur.
Endlessh, özellikle SSH kaba kuvvet saldırıları için tasarlanmış basit ama etkili bir tarpit çözümüdür. Bir saldırgan Endlessh tarafından dinlenen bir porta bağlandığında, Endlessh onlara sürekli olarak bir SSH banner’ı gönderir ve bağlantıyı asla kapatmaz. Bu, saldırganın istemcisinin bağlantının kesilmesini beklemesine neden olur ve genellikle zaman aşımına uğramadan önce onlarca saniye veya dakika boyunca beklemek zorunda kalır. Bu durum, otomatik saldırı araçlarının işini yavaşlatır ve saldırganların diğer hedeflere yönelmesine neden olabilir. Endlessh, çok düşük sistem kaynakları tüketirken binlerce eş zamanlı bağlantıyı işleyebilir, bu da onu sunucular için ideal bir ön güvenlik katmanı yapar.
Bu makalede, Ubuntu 22.04 işletim sistemi üzerinde Endlessh tarpit’ini adım adım nasıl kuracağınızı, yapılandıracağınızı ve gerçek SSH hizmetinizle entegre ederek sunucunuzun güvenliğini nasıl artıracağınızı detaylı bir şekilde inceleyeceğiz.
Ön Gereksinimler ve Sistem Hazırlığı
Endlessh kurulumuna başlamadan önce, bazı temel ön gereksinimlerin karşılandığından ve sisteminizin hazır olduğundan emin olmalıyız. Bu adımlar, kurulum sürecinin sorunsuz ilerlemesini sağlayacaktır.
1. Ubuntu 22.04 Sunucusu
Kurulumu yapacağınız bir Ubuntu 22.04 (Jammy Jellyfish) sunucusuna ihtiyacınız var. Bu sunucu fiziksel, sanal veya bulut tabanlı olabilir.
2. Root veya Sudo Yetkileri
Kurulum ve yapılandırma işlemleri için root kullanıcısı olarak oturum açmış olmanız veya sudo yetkilerine sahip bir kullanıcı hesabınızın olması gerekmektedir. Makale boyunca sudo komutunu kullanarak yetkilendirme yapacağız.
3. Temel Ağ Bilgisi
SSH portları, TCP/IP ve güvenlik duvarı kuralları hakkında temel bilgiye sahip olmak, yapılandırma adımlarını anlamanıza yardımcı olacaktır.
4. Sistem Güncellemesi
Kuruluma başlamadan önce sistem paket listesini güncellemeli ve mevcut paketleri yükseltmelisiniz. Bu, olası bağımlılık sorunlarını önler ve en güncel güvenlik yamalarına sahip olmanızı sağlar.
sudo apt update
sudo apt upgrade -y
5. Güvenlik Duvarı (UFW) Kontrolü
Ubuntu’da varsayılan güvenlik duvarı UFW (Uncomplicated Firewall) genellikle etkindir. Endlessh’in ve gerçek SSH hizmetinizin düzgün çalışması için ilgili portların açık olduğundan emin olmalıyız. Kurulumdan sonra bu kuralları detaylıca yapılandıracağız, ancak şimdilik UFW’nin durumunu kontrol edebiliriz:
sudo ufw status
Eğer UFW etkin değilse veya hiç yapılandırılmadıysa, ilerleyen adımlarda gerekli portları açtıktan sonra etkinleştireceğiz.
Endlessh Kurulumu
Endlessh’i Ubuntu 22.04 sisteminize kurmanın iki ana yöntemi vardır: kaynaktan derleme veya önceden derlenmiş ikiliden kurulum. Kaynaktan derleme, en güncel sürüme sahip olmanızı ve özel optimizasyonlar yapmanızı sağlarken, önceden derlenmiş ikili daha hızlı bir kurulum sunar. Güvenlik ve güncellik açısından kaynaktan derleme yöntemini tercih ediyoruz.
Yöntem 1: Kaynaktan Derleme (Önerilen)
Bu yöntem, Endlessh’in kaynak kodunu GitHub deposundan indirip sisteminizde derleyerek yüklemeyi içerir. Bu, en güncel sürümü kullanmanızı sağlar ve daha fazla esneklik sunar.
1. Gerekli Bağımlılıkların Yüklenmesi
Endlessh’i derlemek için bazı geliştirme araçlarına ve kütüphanelerine ihtiyacımız var. Bu bağımlılıkları aşağıdaki komutla yükleyebilirsiniz:
sudo apt install -y build-essential git cmake pkg-config libssl-dev
* build-essential: Derleme için temel paketleri (gcc, g++ vb.) içerir.
* git: Endlessh kaynak kodunu GitHub’dan klonlamak için.
* cmake: Derleme sürecini yönetmek için.
* pkg-config: Derleme sırasında kütüphanelerin bulunmasına yardımcı olur.
* libssl-dev: OpenSSL kütüphanesinin geliştirme dosyaları, Endlessh SSL/TLS desteği için gereklidir.
2. Endlessh Deposunun Klonlanması
Şimdi Endlessh’in GitHub deposunu yerel sisteminize klonlayın:
git clone https://github.com/skeeto/endlessh.git
cd endlessh
3. Derleme ve Yükleme Adımları
Klonladığınız dizine girdikten sonra, Endlessh’i derlemek ve yüklemek için aşağıdaki komutları sırasıyla çalıştırın:
mkdir build
cd build
cmake ..
make
sudo make install
* mkdir build: Derleme dosyalarını ayrı bir dizinde tutmak için build adında bir dizin oluştururuz.
* cd build: build dizinine geçiş yaparız.
* cmake ..: CMake’i kullanarak derleme yapılandırmasını oluştururuz. .. üst dizindeki CMakeLists.txt dosyasını belirtir.
* make: Kaynak kodunu derler ve çalıştırılabilir endlessh ikilisini oluşturur.
* sudo make install: Derlenmiş endlessh ikilisini ve yapılandırma dosyasını sisteminize yükler. Varsayılan olarak, ikili /usr/local/bin dizinine, örnek yapılandırma dosyası ise /usr/local/share/doc/endlessh/config.toml.example konumuna kopyalanır.
Kurulumun başarılı olup olmadığını kontrol etmek için:
endlessh --version
Bu komut Endlessh’in sürüm numarasını göstermelidir.
Yöntem 2: Önceden Derlenmiş İkiliden Kurulum (Daha Hızlı)
Eğer derleme yapmak istemiyorsanız veya daha hızlı bir kurulum arıyorsanız, Endlessh’in GitHub Releases sayfasından önceden derlenmiş bir ikiliyi indirebilirsiniz.
1. En Son Sürümü İndirme
Endlessh GitHub Releases sayfasına gidin (https://github.com/skeeto/endlessh/releases). En son sürümü bulun ve “Assets” bölümünden Linux için uygun olan .tar.gz veya .zip dosyasını indirin. Genellikle endlessh-linux-amd64.tar.gz gibi bir dosya olacaktır.
İndirmek için wget veya curl kullanabilirsiniz:
# Örnek olarak v1.0 sürümünü indiriyoruz, en son sürümü kontrol edin
wget https://github.com/skeeto/endlessh/releases/download/v1.0/endlessh-linux-amd64.tar.gz
2. İndirilen Dosyayı Açma ve Kopyalama
İndirdiğiniz arşivi açın ve endlessh ikilisini sistem PATH’inde bulunan bir dizine (örneğin /usr/local/bin) kopyalayın:
tar -xvf endlessh-linux-amd64.tar.gz
sudo cp endlessh-linux-amd64/endlessh /usr/local/bin/
sudo chmod +x /usr/local/bin/endlessh
Bu yöntemle örnek yapılandırma dosyası otomatik olarak yüklenmez. Manuel olarak oluşturmanız gerekecektir.
Endlessh Yapılandırması
Endlessh’in davranışını kontrol etmek için bir yapılandırma dosyası kullanırız. Bu dosya genellikle config.toml olarak adlandırılır ve TOML (Tom’s Obvious, Minimal Language) formatındadır.
1. Yapılandırma Dosyası Oluşturma
Endlessh’in yapılandırma dosyasını /etc/endlessh/config.toml yolunda tutmak iyi bir uygulamadır. İlk olarak bu dizini oluşturalım:
sudo mkdir -p /etc/endlessh
Ardından, örnek yapılandırma dosyasını kopyalayabilir veya sıfırdan oluşturabiliriz. Eğer kaynaktan derleme yaptıysanız, örnek dosya /usr/local/share/doc/endlessh/config.toml.example konumunda bulunur. Kopyalayalım:
sudo cp /usr/local/share/doc/endlessh/config.toml.example /etc/endlessh/config.toml
Eğer önceden derlenmiş ikiliyi kullandıysanız veya örnek dosyayı bulamıyorsanız, nano veya vi gibi bir metin düzenleyici ile /etc/endlessh/config.toml dosyasını oluşturup aşağıdaki içeriği yapıştırabilirsiniz.
2. config.toml Dosyasını Düzenleme
Şimdi yapılandırma dosyasını düzenleyelim:
sudo nano /etc/endlessh/config.toml
İşte temel Endlessh yapılandırma parametreleri ve önerilen değerler:
# Endlessh'in dinleyeceği port. Varsayılan SSH portu (22) olarak ayarlanmalıdır.
Gerçek SSH servisini başka bir porta taşıyacağız.
listen_port = 22
Gerçek SSH servisinin çalıştığı port. Endlessh buraya proxy yapmaz,
sadece banner'ı gönderir. Bu parametre bilgilendirme amaçlıdır.
Bu portu daha sonra /etc/ssh/sshd_config dosyasında değiştireceğiz.
ssh_port = 22222 # Gerçek SSH portunuzu buraya yazın
Her bayt gönderimi arasındaki gecikme (milisananiye).
Bu değeri artırmak, saldırganın bağlantısını daha da yavaşlatır.
delay = 1000 # 1 saniye gecikme
Aynı anda kabul edilecek maksimum bağlantı sayısı.
Çok düşük ayarlamak, meşru trafiği etkileyebilir, çok yüksek ayarlamak kaynak tüketimini artırabilir.
max_clients = 4000
Bir istemciden gelen maksimum bağlantı sayısı.
Bir saldırganın birden fazla bağlantı açmasını sınırlamak için.
max_connections_per_client = 100
Toplamda kabul edilecek maksimum bağlantı sayısı.
max_clients'tan daha büyük veya eşit olmalıdır.
max_connections = 4000
Gönderilecek SSH banner'ının maksimum uzunluğu.
Saldırganın istemcisinin tamponunu doldurmak için yeterince büyük olmalıdır.
Varsayılan 32KB genellikle yeterlidir.
max_banner_size = 32768
Bağlantı başına gönderilecek maksimum banner byte'ı.
Eğer 0 olarak ayarlanırsa, banner sonsuz sayıda gönderilir.
Bu, tarpit'in temel özelliğidir.
max_reads = 0
Bağlantı başına maksimum yazma işlemi.
Eğer 0 olarak ayarlanırsa, Endlessh sürekli banner göndermeye devam eder.
max_writes = 0
Günlük seviyesi (0: Hata, 1: Uyarı, 2: Bilgi, 3: Hata Ayıklama).
Başlangıçta 2 (Bilgi) olarak ayarlamak iyi bir fikirdir.
log_level = 2
Endlessh'in dinleyeceği IP adresi. Varsayılan 0.0.0.0 (tüm arayüzler).
bind_address = "0.0.0.0"
Bağlantı kesildiğinde veya zaman aşımına uğradığında bağlantı başına ek gecikme.
sleep_multiplier = 0
Özel bir banner mesajı kullanmak isterseniz (isteğe bağlı).
bannermotd = "Welcome to the Abyss."
Önemli Yapılandırma Notları:
* listen_port = 22: Bu, Endlessh’in dinleyeceği porttur. SSH’e yönelik kaba kuvvet saldırılarının çoğu varsayılan 22 numaralı porta yapılır, bu nedenle Endlessh’i bu porta yerleştirmek en etkili yöntemdir.
* delay: Bu değeri 1000 (1 saniye) veya daha yüksek bir değere ayarlamak, saldırganın bağlantısını önemli ölçüde yavaşlatacaktır. Aşırı yüksek değerler, Endlessh’in kendi kaynak tüketimini artırabilir, bu yüzden dengeyi bulmak önemlidir.
* max_reads = 0 ve max_writes = 0: Bu değerler Endlessh’in “sonsuz” bir tarpit gibi davranmasını sağlar, yani bağlantıyı asla kapatmaz ve sürekli banner göndermeye devam eder. Bu, saldırganın istemcisinin sonsuza kadar beklemesine neden olur.
* log_level = 2: Başlangıçta bilgi seviyesinde günlük tutmak, Endlessh’in nasıl çalıştığını ve hangi bağlantıları yakaladığını anlamanıza yardımcı olacaktır.
Yapılandırma dosyasını kaydettikten sonra kapatın.
Endlessh’i Bir Sistem Servisi Olarak Çalıştırma
Endlessh’in sistem yeniden başlatıldığında otomatik olarak başlaması ve arka planda sürekli çalışması için bir systemd servisi olarak yapılandırmamız gerekiyor.
1. systemd Servis Dosyası Oluşturma
Aşağıdaki komutla endlessh.service dosyasını oluşturun:
sudo nano /etc/systemd/system/endlessh.service
Dosyanın içine aşağıdaki içeriği yapıştırın:
[Unit]
Description=Endlessh SSH Tarpit
After=network.target
[Service]
ExecStart=/usr/local/bin/endlessh -c /etc/endlessh/config.toml
User=nobody
Group=nogroup
WorkingDirectory=/var/empty
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
* Description: Servisin kısa açıklaması.
* After=network.target: Endlessh’in ağ servisi başladıktan sonra başlamasını sağlar.
* ExecStart: Endlessh ikilisinin yolu ve yapılandırma dosyasının yolu.
* User=nobody, Group=nogroup: Endlessh’in düşük ayrıcalıklı bir kullanıcı altında çalışmasını sağlar. Bu, güvenlik için iyi bir uygulamadır.
* WorkingDirectory=/var/empty: Çalışma dizini olarak boş bir dizin kullanır.
* Restart=always: Servisin herhangi bir nedenle durması durumunda otomatik olarak yeniden başlatılmasını sağlar.
* RestartSec=5s: Yeniden başlatmalar arasında 5 saniye bekleme süresi.
* WantedBy=multi-user.target: Çok kullanıcılı sistem hedefine ulaşıldığında Endlessh’in başlamasını sağlar, yani sistem açıldığında otomatik olarak çalışır.
Dosyayı kaydedip kapatın.
2. Servisi Etkinleştirme ve Başlatma
systemd‘ye yeni servisi tanıtmak ve Endlessh’i başlatmak için aşağıdaki komutları kullanın:
sudo systemctl daemon-reload # systemd yapılandırmasını yeniden yükle
sudo systemctl enable endlessh # Servisi sistem başlangıcında otomatik çalışacak şekilde etkinleştir
sudo systemctl start endlessh # Servisi şimdi başlat
3. Servis Durumunu Kontrol Etme
Endlessh servisinin başarıyla çalışıp çalışmadığını kontrol etmek için:
sudo systemctl status endlessh
Çıktıda Active: active (running) ifadesini görmelisiniz. Ayrıca, günlükleri kontrol ederek Endlessh’in bağlantıları dinlemeye başlayıp başlamadığını görebilirsiniz:
sudo journalctl -u endlessh.service -f
Gerçek SSH Servisini Başka Bir Porta Taşıma
Endlessh’i varsayılan SSH portu olan 22’ye yerleştirdiğimize göre, gerçek SSH hizmetimizi başka bir porta taşımamız gerekiyor. Bu, Endlessh’in saldırganları meşgul ederken sizin sunucunuza güvenli bir şekilde erişmenizi sağlayacaktır.
1. sshd_config Dosyasını Düzenleme
SSH sunucu yapılandırma dosyası /etc/ssh/sshd_config konumundadır. Bu dosyayı düzenleyelim:
sudo nano /etc/ssh/sshd_config
Dosyanın içinde Port 22 satırını bulun. Bu satır genellikle yorum satırı olarak (başında # işaretiyle) bulunur. Eğer yorum satırı değilse, mevcut Port 22 satırını değiştirin. Eğer yorum satırı ise, # işaretini kaldırın ve port numarasını Endlessh’in dinlediği 22 numaralı porttan farklı, yüksek bir port numarasıyla değiştirin (örneğin, 22222 veya 50000’lerin üzerinde bir port).
# Port 22 # Bu satırı yorumdan çıkarın veya değiştirin
Port 22222 # Yeni SSH portunuz
Seçtiğiniz port numarasının 1024’ten büyük ve başka bir servis tarafından kullanılmayan bir port olduğundan emin olun.
Diğer önemli güvenlik ayarlarını da gözden geçirebilirsiniz:
* PermitRootLogin no: Root kullanıcısının doğrudan SSH ile giriş yapmasını engeller.
* PasswordAuthentication no: Şifre ile kimlik doğrulamayı devre dışı bırakır ve yalnızca SSH anahtarlarına izin verir (şiddetle tavsiye edilir).
* AllowUsers your_username: Sadece belirli kullanıcıların SSH ile bağlanmasına izin verir.
Değişiklikleri kaydettikten sonra dosyayı kapatın.
2. SSH Servisini Yeniden Başlatma
Yapılan değişikliklerin etkili olması için SSH servisini yeniden başlatmanız gerekir:
sudo systemctl restart sshd
Bu adım sırasında mevcut SSH oturumunuz kesilebilir, bu yüzden dikkatli olun ve yeni porta bağlanabileceğinizden emin olmadan oturumu kapatmayın.
Güvenlik Duvarı Yapılandırması (UFW)
Endlessh ve gerçek SSH hizmetiniz için güvenlik duvarı kurallarını doğru bir şekilde yapılandırmak hayati önem taşır. Ubuntu’da UFW (Uncomplicated Firewall) kullanacağız.
1. UFW Durumunu Kontrol Etme
Öncelikle UFW’nin durumunu kontrol edin:
sudo ufw status verbose
Eğer UFW etkin değilse (Status: inactive), önce temel kuralları ekleyip sonra etkinleştireceğiz.
2. Endlessh ve Yeni SSH Portuna İzin Verme
* Endlessh Portu (22): Endlessh’in dinleyeceği port olan 22’ye gelen bağlantılara izin verin.
sudo ufw allow 22/tcp comment 'Allow Endlessh Tarpit'
* Yeni SSH Portu (örneğin 22222): Gerçek SSH hizmetinizin dinleyeceği yeni porta izin verin.
sudo ufw allow 22222/tcp comment 'Allow real SSH access'
* Diğer Gerekli Portlar: Eğer sunucunuzda başka servisler (HTTP, HTTPS, DNS vb.) çalışıyorsa, onlar için de izin kuralları eklemeyi unutmayın. Örneğin:
sudo ufw allow http comment 'Allow HTTP'
sudo ufw allow https comment 'Allow HTTPS'
3. Eski SSH Portunu Kapatma (Gerekiyorsa)
Eğer daha önce 22 numaralı porta SSH için bir izin kuralı eklediyseniz ve artık Endlessh’in dışında SSH erişimi için kullanmıyorsanız, bu kuralı kaldırabilirsiniz. Ancak Endlessh zaten bu portu dinleyeceği için, bu kuralın olması bir sorun teşkil etmez.
4. UFW’yi Etkinleştirme (Eğer Etkin Değilse)
Eğer UFW etkin değilse, tüm kuralları ekledikten sonra etkinleştirin:
sudo ufw enable
Bu komut, bağlantınızı kesebileceği için bir uyarı gösterecektir. y tuşuna basarak onaylayın.
5. UFW Durumunu Yeniden Kontrol Etme
UFW’nin doğru kurallarla etkin olduğunu doğrulamak için tekrar kontrol edin:
sudo ufw status verbose
Çıktıda 22/tcp (Endlessh) ve 22222/tcp (gerçek SSH) için izin kurallarını görmelisiniz.
Test ve Doğrulama
Kurulum ve yapılandırma adımlarını tamamladıktan sonra, Endlessh’in ve gerçek SSH hizmetinizin beklendiği gibi çalıştığından emin olmalıyız.
1. Endlessh’in Çalıştığını Kontrol Etme
Endlessh’in 22 numaralı portu dinleyip dinlemediğini kontrol edin:
sudo netstat -tulnp | grep 22
Çıktıda, endlessh sürecinin 0.0.0.0:22 (veya sunucunuzun IP adresi:22) üzerinde dinlediğini görmelisiniz. Ayrıca, sshd sürecinin de yeni portunuzda (örneğin 22222) dinlediğini kontrol edin.
2. SSH İstemcisi ile Endlessh Portuna Bağlanmayı Deneme
Yerel makinenizden veya başka bir sunucudan, Endlessh’in dinlediği 22 numaralı porta bağlanmayı deneyin:
ssh -p 22 your_username@your_server_ip
Bu komut, bağlantının çok yavaş olduğunu ve hiçbir zaman kimlik doğrulama istemi gelmediğini göstermelidir. Bağlantı, Endlessh’in delay ayarına göre saniyelerce veya dakikalarca takılı kalacaktır. Bir süre sonra bağlantıyı Ctrl+C ile kesebilirsiniz. Bu davranış, Endlessh’in başarılı bir şekilde çalıştığını gösterir.
Endlessh’in günlüklerini izleyerek bu bağlantı girişimlerini görebilirsiniz:
sudo journalctl -u endlessh.service -f
Burada, Endlessh’in gelen bağlantıları kaydettiğini ve onlara banner gönderdiğini gösteren girdiler görmelisiniz.
3. SSH İstemcisi ile Gerçek SSH Portuna Bağlanmayı Deneme
Şimdi gerçek SSH portunuza bağlanmayı deneyin:
ssh -p 22222 your_username@your_server_ip
(Port numarasını kendi belirlediğiniz port ile değiştirin.)
Bu bağlantı normal bir SSH bağlantısı gibi hızlı bir şekilde kurulmalı ve kimlik doğrulama istemi (şifre veya anahtar) gelmelidir. Başarılı bir şekilde giriş yapabiliyorsanız, gerçek SSH hizmetiniz de doğru bir şekilde çalışıyor demektir.
4. Sunucu Yeniden Başlatma Testi
Sistemin yeniden başlatılmasından sonra Endlessh ve SSH hizmetlerinin otomatik olarak başlayıp başlamadığını kontrol etmek için sunucuyu yeniden başlatın:
sudo reboot
Yeniden başlatmanın ardından, yukarıdaki netstat ve systemctl status komutlarını kullanarak servislerin durumunu tekrar kontrol edin.
Gelişmiş Yapılandırma ve İpuçları
Endlessh’i daha da optimize etmek ve güvenlik stratejinizi geliştirmek için bazı ek yapılandırma seçeneklerini ve ipuçlarını değerlendirebilirsiniz.
1. config.toml Parametrelerini İnceleme
config.toml dosyasında bulunan diğer parametreleri de kendi ihtiyaçlarınıza göre ayarlayabilirsiniz:
* max_connections_per_client: Bir IP adresinden gelen maksimum eş zamanlı bağlantı sayısını sınırlar. Çok agresif saldırganları engellemek için faydalıdır.
* sleep_multiplier: Bir bağlantı kesildikten veya zaman aşımına uğradıktan sonra Endlessh’in o istemci için ek bir gecikme süresi eklemesini sağlar. Bu, aynı saldırganın sürekli yeniden bağlanmasını daha da yavaşlatabilir.
* bannermotd: Endlessh’in gönderdiği SSH banner’ını özelleştirmenize olanak tanır. Örneğin, “Welcome to the Abyss.” gibi bir mesaj ayarlayarak saldırganlara mizahi bir karşılama yapabilirsiniz.
# ... diğer ayarlar ...
max_connections_per_client = 50
sleep_multiplier = 1000 # Bağlantı kesildikten sonra 1 saniye ek gecikme
bannermotd = "The End is Never the End."
...
2. Fail2Ban ile Entegrasyon
Endlessh, doğrudan bir IP yasaklama mekanizmasına sahip değildir. Ancak, Endlessh’in günlüklerini Fail2Ban ile entegre ederek, belirli bir eşiği aşan IP adreslerini otomatik olarak yasaklayabilirsiniz. Bu, Endlessh’in yavaşlatma etkisini, saldırganları tamamen engelleme yeteneğiyle birleştirir.
Adımlar:
* Fail2Ban Kurulumu: Eğer kurulu değilse, Fail2Ban’ı yükleyin:
sudo apt install fail2ban
* Endlessh Log Formatı: Endlessh, bağlantıları journalctl veya kendi log dosyasına yazar. journalctl kullanıyorsanız, Fail2Ban bunu doğrudan izleyebilir.
* Fail2Ban Filtresi Oluşturma: /etc/fail2ban/filter.d/endlessh.conf adında bir dosya oluşturun:
[Definition]
failregex = ^.*endlessh\[\d+\]: Accepted connection from :\d+$
ignoreregex =
Bu regex, Endlessh’in “Accepted connection from X.X.X.X” günlüklerini yakalar.
* Fail2Ban Jail Oluşturma: /etc/fail2ban/jail.local dosyasını düzenleyin veya oluşturun ve aşağıdaki bölümü ekleyin:
[endlessh]
enabled = true
port = 22
filter = endlessh
logpath = /var/log/syslog # Veya journalctl kullanıyorsanız, backend = systemd
maxretry = 5 # Kaç bağlantı denemesi sonrası yasaklanacak
bantime = 3600 # Yasaklama süresi (saniye)
Eğer Endlessh günlüklerini journalctl üzerinden alıyorsanız, logpath yerine backend = systemd kullanmak daha doğru olabilir.
* Fail2Ban’ı Yeniden Başlatma:
sudo systemctl restart fail2ban
Bu yapılandırma ile, Endlessh’e belirli sayıda bağlantı denemesi yapan IP adresleri Fail2Ban tarafından otomatik olarak güvenlik duvarında yasaklanacaktır.
3. IP Beyaz Listeleme
Belirli IP adreslerinden gelen bağlantıların Endlessh tarafından işlenmesini istemiyorsanız (örneğin, kendi ofis IP’niz), güvenlik duvarı kurallarında bu IP’leri doğrudan gerçek SSH portunuza yönlendirebilirsiniz.
Örneğin, 192.168.1.100 adresinden gelen bağlantıların doğrudan 22222 portuna gitmesini istiyorsanız:
sudo ufw allow from 192.168.1.100 to any port 22222 proto tcp comment 'Allow trusted IP to real SSH'
Bu kural, daha genel allow 22/tcp kuralından önce gelmelidir.
4. Kaynak Tüketimi İzleme
Endlessh’in çok düşük kaynak tüketimine sahip olmasıyla bilinse de, binlerce eş zamanlı bağlantı durumunda CPU ve bellek kullanımını izlemek iyi bir uygulamadır.
top
htop
gibi araçlarla Endlessh sürecini gözlemleyebilirsiniz. Gerekirse max_clients veya delay gibi parametreleri ayarlayarak kaynak tüketimini dengeleyebilirsiniz.
Sonuç ve Özet
Bu makalede, Ubuntu 22.04 sunucunuzda Endlessh tarpit’ini nasıl kuracağınızı ve yapılandıracağınızı ayrıntılı olarak ele aldık. Endlessh, SSH kaba kuvvet saldırılarına karşı pasif ama son derece etkili bir savunma mekanizması sunar. Saldırganları varsayılan SSH portu olan 22’de meşgul ederek, onların kaynaklarını tüketir ve sunucunuzun gerçek SSH hizmetine olan ilgilerini azaltır.
Adım adım kurulum sürecinde şunları yaptık:
1. Ön Gereksinimleri kontrol ettik ve sistemi hazırladık.
2. Endlessh’i kaynaktan derleyerek veya önceden derlenmiş ikili kullanarak kurduk. Kaynaktan derleme, en güncel ve optimize edilmiş sürümü elde etmemizi sağladı.
3. config.toml dosyasını düzenleyerek Endlessh’in davranışını yapılandırdık, özellikle listen_port ve delay parametrelerine odaklandık.
4. Endlessh’i bir systemd servisi olarak kurarak, sistem başlangıcında otomatik olarak çalışmasını ve arka planda sürekli aktif kalmasını sağladık.
5. Gerçek SSH servisimizi varsayılan 22 numaralı porttan başka bir porta taşıyarak (örneğin 22222), Endlessh’in 22 numaralı portu devralmasını sağladık.
6. UFW güvenlik duvarını Endlessh ve yeni SSH portumuz için uygun şekilde yapılandırdık.
7. Kurulumun doğruluğunu test ederek, Endlessh’in saldırganları yavaşlattığını ve gerçek SSH hizmetimize güvenli bir şekilde erişebildiğimizi onayladık.
8. Son olarak, Fail2Ban entegrasyonu ve gelişmiş yapılandırma seçenekleri gibi ek ipuçları sunduk.
Endlessh, düşük kaynak tüketimiyle yüksek performans sunan, kurulumu ve yönetimi kolay bir araçtır. Onu güvenlik stratejinize dahil etmek, SSH kaba kuvvet saldırılarının neden olduğu gürültüyü ve potansiyel riskleri önemli ölçüde azaltmanıza yardımcı olacaktır. Ancak unutulmamalıdır ki Endlessh, tek başına bir güvenlik çözümü değildir. Güçlü şifreler, SSH anahtarları, düzenli güncellemeler ve diğer güvenlik uygulamalarıyla birlikte kullanıldığında en yüksek faydayı sağlayacaktır. Sunucunuzun güvenliğini sürekli olarak gözden geçirmek ve güncel tehditlere karşı hazırlıklı olmak her zaman en iyi yaklaşımdır.