Takip et

SSH Güvenliğini fail2ban ile Sağlama: Debian 7 Üzerinde Kapsamlı Rehber

SSH Güvenliğini fail2ban ile Sağlama: Debian 7 Üzerinde Kapsamlı Rehber Giriş: SSH Güvenliğinin Önemi ve fail2ban’ın Rolü Günümüzün s

SSH Güvenliğini fail2ban ile Sağlama: Debian 7 Üzerinde Kapsamlı Rehber

Giriş: SSH Güvenliğinin Önemi ve fail2ban’ın Rolü

Günümüzün sürekli bağlantılı dünyasında, sunucu güvenliği kritik bir öneme sahiptir. İnternet üzerindeki her sunucu, potansiyel kötü niyetli saldırılara maruz kalma riski taşır. Bu saldırıların başında ise genellikle “brute-force” (kaba kuvvet) saldırıları gelir. Brute-force saldırıları, bir saldırganın geçerli bir kullanıcı adı ve parola kombinasyonunu bulmak için sürekli olarak farklı kombinasyonları denemesini içeren otomatikleştirilmiş girişimlerdir. Bu tür saldırılar, özellikle SSH (Secure Shell) gibi uzak erişim servislerini hedef alır, çünkü SSH bir sunucuya uzaktan güvenli bir şekilde bağlanmanın birincil yoludur. Bir SSH brute-force saldırısı başarılı olursa, saldırgan sunucunuz üzerinde tam kontrole sahip olabilir, bu da veri ihlallerine, sistem kesintilerine ve diğer ciddi güvenlik sorunlarına yol açabilir.

Debian 7, her ne kadar artık resmi olarak desteklenmeyen ve yaşam döngüsünün sonuna gelmiş eski bir işletim sistemi sürümü olsa da, bazı kurumsal veya özel sistemlerde hala kullanımda olabilir. Bu tür eski sistemlerde güvenlik güncellemelerinin eksikliği, onları daha da savunmasız hale getirir. Bu nedenle, Debian 7 gibi eski sistemlerde bile temel güvenlik önlemlerini almak hayati önem taşır. İşte tam bu noktada fail2ban gibi araçlar devreye girer. fail2ban, sunucu günlük dosyalarını (log files) izleyerek kötü niyetli aktivite kalıplarını tespit eden ve bu aktiviteleri gerçekleştiren IP adreslerini geçici veya kalıcı olarak engelleyen bir güvenlik aracıdır. Özellikle SSH brute-force saldırılarına karşı son derece etkili bir savunma mekanizması sunar. Bu kapsamlı rehberde, Debian 7 üzerinde fail2ban’ı SSH güvenliği için nasıl kuracağınızı, yapılandıracağınızı ve yöneteceğinizi adım adım inceleyeceğiz.

SSH Güvenliğinin Temel Prensipleri

fail2ban kurulumuna geçmeden önce, SSH güvenliğinizi genel olarak artıracak bazı temel prensiplere değinmek önemlidir. fail2ban tek başına sihirli bir çözüm değildir; diğer güvenlik pratikleriyle birleştirildiğinde maksimum fayda sağlar.

Varsayılan Port Değişikliği

SSH varsayılan olarak 22 numaralı portu kullanır. Saldırganlar genellikle bu varsayılan portu tarayarak zayıf hedefler ararlar. SSH portunu 1024’ten yüksek, rastgele bir port numarasına (örneğin, 2222 veya 45678) değiştirmek, otomatik botların ve basit taramaların büyük bir kısmını engellemeye yardımcı olur. Bu, “güvenlik belirsizlikle” (security through obscurity) olarak adlandırılsa da, saldırı yüzeyinizi önemli ölçüde azaltır. /etc/ssh/sshd_config dosyasındaki Port 22 satırını düzenleyerek bu değişikliği yapabilirsiniz.

Parola Yerine Anahtar Tabanlı Kimlik Doğrulama

SSH için en güvenli kimlik doğrulama yöntemlerinden biri, parola yerine SSH anahtar çiftleri (public/private key pair) kullanmaktır. Bu yöntem, bir sunucuya erişmek için karmaşık bir parola ezberleme veya girme ihtiyacını ortadan kaldırır ve brute-force saldırılarına karşı çok daha dirençlidir. Özel anahtarınızın güvenliği sizin sorumluluğunuzdadır ve bu anahtar bir parola ile korunmalıdır. sshd_config dosyasında PasswordAuthentication no ayarını yaparak parola ile girişi tamamen devre dışı bırakmak şiddetle tavsiye edilir.

Root Girişini Devre Dışı Bırakma

root kullanıcısı, Linux sistemlerinde en yüksek ayrıcalıklara sahip kullanıcıdır. Bu nedenle, root hesabına yönelik brute-force saldırıları oldukça yaygındır. root kullanıcısının doğrudan SSH ile giriş yapmasını engellemek, sisteminizin güvenliğini önemli ölçüde artırır. Bunun yerine, normal bir kullanıcı ile giriş yapıp daha sonra sudo veya su komutlarını kullanarak yönetici ayrıcalıkları elde edebilirsiniz. Bu ayar /etc/ssh/sshd_config dosyasında PermitRootLogin no olarak yapılır.

Güçlü Parola Politikaları

Eğer parola tabanlı kimlik doğrulamayı tamamen devre dışı bırakamıyorsanız veya diğer kullanıcılar için parola kullanmaya devam ediyorsanız, güçlü parola politikaları uygulamak zorunludur. Parolalar uzun, karmaşık olmalı ve büyük/küçük harfler, sayılar ve özel karakterler içermelidir. Ayrıca, düzenli parola değişiklikleri ve eski parolaların tekrar kullanılmaması gibi politikalar da önemlidir.

Firewall Kullanımı (iptables)

fail2ban, kötü niyetli IP adreslerini engellemek için genellikle bir firewall (güvenlik duvarı) ile entegre çalışır. Debian 7 üzerinde varsayılan olarak iptables güvenlik duvarı mevcuttur. fail2ban, tespit ettiği IP’leri iptables kurallarına ekleyerek engeller. Ancak, fail2ban’dan bağımsız olarak, sunucunuzda sadece gerekli portların dışarıdan erişilebilir olmasını sağlayacak temel iptables kuralları oluşturmak iyi bir pratiktir. Örneğin, SSH portunuzu sadece belirli IP adreslerine veya ağlara açmak, saldırı yüzeyinizi daha da daraltır.

fail2ban Nedir ve Nasıl Çalışır?

fail2ban, sunucunuzun güvenlik günlüklerini (log dosyaları) sürekli olarak izleyen ve belirli “kötü niyetli” aktivite kalıplarını tespit ettiğinde bu aktiviteleri gerçekleştiren IP adreslerini otomatik olarak engelleyen bir intrusion prevention system (IPS) çerçevesidir. Temel amacı, brute-force saldırıları, dizin taramaları, web uygulama istismarları gibi tekrarlayan saldırıları önlemektir.

Tanım ve Amaç

fail2ban, Python ile yazılmış hafif ve esnek bir araçtır. Çeşitli servislerin (SSH, Apache, Nginx, FTP, Postfix vb.) günlük dosyalarını analiz eder. Belirli bir süre içinde belirli bir IP adresinden gelen başarısız giriş denemeleri veya diğer şüpheli aktiviteler belirli bir eşiği aştığında, fail2ban bu IP adresini geçici olarak engeller. Engelleme, genellikle sistemin güvenlik duvarı (Debian’da iptables) aracılığıyla yapılır.

Log Dosyalarını İzleme Prensibi

fail2ban’ın çalışma prensibi oldukça basittir:
1. Günlük Dosyası İzleme: fail2ban, yapılandırıldığı servislerin günlük dosyalarını (örneğin, SSH için /var/log/auth.log) gerçek zamanlı olarak izler.
2. Desen Eşleştirme (Regex): Bu günlük dosyalarında, başarısız giriş denemeleri veya diğer şüpheli eylemleri gösteren belirli metin desenlerini (düzenli ifadeler – regex) arar.
3. Sayım ve Eşik Değerleri: Belirli bir IP adresinden gelen eşleşen desenlerin sayısını belirli bir zaman dilimi içinde takip eder.
4. Engelleme (Ban): Eğer bu sayı, yapılandırılmış bir eşik değerini (maxretry) aşarsa, fail2ban o IP adresini belirli bir süre (bantime) boyunca engeller.
5. Engellemeyi Kaldırma (Unban): Engelleme süresi sona erdiğinde, fail2ban otomatik olarak IP adresinin engellemesini kaldırır.

Jail, Filter, Action Kavramları

fail2ban’ın temel işleyişini anlamak için üç ana kavramı bilmek gerekir:

* Jail (Hücre/Kafes): Bir jail, belirli bir servisi (örneğin SSH) korumak için fail2ban’ın yapılandırma birimidir. Her jail, hangi günlük dosyasının izleneceğini, hangi filtrenin kullanılacağını, hangi IP adreslerinin engelleneceğini ve ne kadar süreyle engelleneceğini tanımlar. Örneğin, SSH için [sshd] adında bir jail olur.

* Filter (Filtre): Bir filtre, belirli bir servisin günlük dosyalarındaki kötü niyetli aktivite desenlerini tanımlayan düzenli ifadeler (regex) koleksiyonudur. fail2ban, /etc/fail2ban/filter.d/ dizininde önceden tanımlanmış birçok filtre ile gelir (örneğin, sshd.conf, apache-auth.conf). Bu filtreler, başarısız giriş denemeleri gibi olayları günlük dosyalarında nasıl tanıyacağını fail2ban’a öğretir.

* Action (Aksiyon): Bir aksiyon, bir IP adresi engellendiğinde veya engellemesi kaldırıldığında fail2ban tarafından gerçekleştirilecek eylemleri tanımlar. En yaygın aksiyon, iptables kuralları aracılığıyla IP adresini engellemektir. Diğer aksiyonlar arasında e-posta bildirimi göndermek, whois sorgusu yapmak veya farklı güvenlik duvarı komutları çalıştırmak yer alabilir. Aksiyonlar /etc/fail2ban/action.d/ dizininde bulunur.

İşleyiş Akışı

1. fail2ban servisi başlar ve yapılandırılan tüm jail’leri etkinleştirir.
2. Her jail, kendi logpath (günlük dosyası yolu) üzerinde tanımlı filter (filtre) ile eşleşen desenleri sürekli olarak arar.
3. Bir IP adresinden gelen eşleşen desen sayısı findtime (tespit süresi) içinde maxretry (maksimum deneme) değerini aşarsa, fail2ban bu IP adresini “kötü niyetli” olarak işaretler.
4. fail2ban, jail için tanımlanan action (aksiyon) komutunu çalıştırarak IP adresini engeller (örneğin, iptables kuralı ekler).
5. bantime (engelleme süresi) sona erdiğinde, fail2ban otomatik olarak IP adresinin engellemesini kaldıran aksiyon komutunu çalıştırır.

Debian 7 Üzerine fail2ban Kurulumu

Debian 7 (Wheezy) üzerinde fail2ban kurulumu oldukça basittir, çünkü fail2ban depolarında mevcuttur.

Sistem Güncellemesi

Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin paket listesini güncellemek ve mevcut paketleri yükseltmek iyi bir alışkanlıktır. Bu, bağımlılık sorunlarını önlemeye yardımcı olur ve en güncel paketleri kullanmanızı sağlar.

sudo apt-get update
sudo apt-get upgrade

sudo komutu, yönetici ayrıcalıklarıyla komutları çalıştırmanızı sağlar. Eğer sudo yüklü değilse veya root kullanıcısı olarak işlem yapıyorsanız su - komutuyla root yetkisine geçebilirsiniz.

Kurulum Komutu

Sistem güncellendikten sonra, fail2ban’ı aşağıdaki komutla kurabilirsiniz:

sudo apt-get install fail2ban

Kurulum sırasında, fail2ban gerekli bağımlılıkları da otomatik olarak yükleyecektir. İşlem tamamlandığında, fail2ban servisi genellikle otomatik olarak başlar.

Servis Durumu Kontrolü

fail2ban servisinin başarılı bir şekilde çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

sudo service fail2ban status

veya

sudo /etc/init.d/fail2ban status

Çıktıda fail2ban is running gibi bir ifade görmelisiniz. Eğer çalışmıyorsa, sudo service fail2ban start komutuyla başlatmayı deneyebilirsiniz.

fail2ban Temel Yapılandırması

fail2ban’ın ana yapılandırma dosyası /etc/fail2ban/jail.conf‘tur. Ancak, bu dosyayı doğrudan düzenlemek yerine, /etc/fail2ban/jail.local adında özel bir dosya oluşturup düzenlemek en iyi pratiktir. Bunun nedeni, jail.conf dosyasının paket güncellemeleri sırasında üzerine yazılabilmesidir, bu da yaptığınız değişikliklerin kaybolmasına neden olabilir. jail.local dosyası ise jail.conf dosyasındaki ayarları geçersiz kılar ve güncellemelerden etkilenmez.

Yapılandırma Dosyaları

* /etc/fail2ban/jail.conf: fail2ban’ın varsayılan yapılandırma dosyasıdır. Tüm varsayılan ayarları ve servisler için jail tanımlarını içerir. Bu dosyayı doğrudan düzenlemeyin.
* /etc/fail2ban/jail.local: Özel yapılandırma ayarlarınızı ve jail tanımlarınızı ekleyeceğiniz dosyadır. Bu dosya, jail.conf dosyasındaki ilgili ayarları geçersiz kılar.

jail.local Oluşturma ve Düzenleme

Öncelikle, jail.conf dosyasının bir kopyasını alarak jail.local dosyasını oluşturalım:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Şimdi bu dosyayı bir metin düzenleyici ile açın (örneğin nano):

sudo nano /etc/fail2ban/jail.local

Bu dosya içinde, fail2ban’ın genel davranışını ve SSH için özel ayarları yapılandıracağız.

[DEFAULT] Bölümü

jail.local dosyasının başında, tüm jail’ler için geçerli olacak varsayılan ayarları içeren [DEFAULT] bölümü bulunur. Bu bölümde aşağıdaki parametreleri ayarlayabiliriz:

* ignoreip: Engellenmesini istemediğiniz IP adreslerini veya IP aralıklarını (beyaz liste) virgülle ayırarak buraya ekleyin. Kendi IP adresinizi buraya eklemek, yanlışlıkla kendinizi engellemenizi önler.

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42

(Örnek: 127.0.0.1/8 yerel ağ, 192.168.1.0/24 yerel ağınız, 203.0.113.42 kendi statik IP’niz)

* bantime: Bir IP adresinin ne kadar süreyle engelleneceğini saniye cinsinden belirtir. Varsayılan olarak 10 dakika (600 saniye) olabilir. Daha uzun bir süre (örneğin, 1 saat = 3600 saniye veya 1 gün = 86400 saniye) belirleyebilirsiniz.

bantime = 3600

* findtime: Belirli bir IP adresinden gelen başarısız denemelerin kaç saniye içinde gerçekleşirse maxretry sayısına dahil edileceğini belirler. Örneğin, 10 dakika (600 saniye) içinde 5 başarısız deneme olursa engelle.

findtime = 600

* maxretry: Bir IP adresinin engellenmeden önce kaç başarısız deneme yapmasına izin verileceğini belirler. Varsayılan olarak 5 olabilir.

maxretry = 5

* destemail: Engelleme olayları hakkında bildirim almak istediğiniz e-posta adresini belirtir.

destemail = admin@example.com

* sendername: E-posta bildirimlerinin gönderileceği adı belirtir.

sendername = Fail2Ban

* mta: E-posta göndermek için kullanılacak posta aktarım aracısını (Mail Transfer Agent) belirtir. Genellikle sendmail veya postfix kullanılır. Debian 7’de varsayılan olarak sendmail olabilir.

mta = sendmail

* action: Engelleme gerçekleştiğinde hangi aksiyonun alınacağını tanımlar. %(action_mwl)s gibi değerler, IP’yi engellemenin yanı sıra e-posta gönderme ve WHOIS bilgisi ekleme gibi ek eylemleri de tetikler.

action = %(action_mwl)s

Buradaki action_mwl şu anlama gelir:
* m: e-posta gönder (mail)
* w: engellenen IP hakkında WHOIS sorgusu yap (whois)
* l: fail2ban günlük dosyasına detaylı bilgi yaz (log)
Varsayılan olarak sadece engelleme (iptables) istiyorsanız action = %(action_)s kullanabilirsiniz.

[ssh] veya [sshd] Bölümü

jail.local dosyasında, SSH için özel bir jail yapılandırması bulacaksınız. Debian 7’de bu genellikle [ssh] veya [sshd] olarak adlandırılır. Bu bölümü bularak veya oluşturarak SSH korumasını etkinleştirebilirsiniz.

[sshd]
enabled = true
port = ssh,sftp
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 6h

Açıklamaları:

* enabled = true: Bu jail’i etkinleştirir. Varsayılan olarak false olabilir, bu yüzden true olarak değiştirmelisiniz.
* port: SSH servisinin çalıştığı portu belirtir. Varsayılan olarak ssh (yani 22) veya sftp olabilir. Eğer SSH portunuzu değiştirdiyseniz (örneğin 2222), buraya port = 2222 yazmalısınız. Birden fazla port için port = 22,2222 şeklinde virgülle ayırabilirsiniz.
* filter: Bu jail için kullanılacak filtre dosyasını belirtir. SSH için genellikle /etc/fail2ban/filter.d/sshd.conf dosyasını temsil eden sshd filtresi kullanılır.
* logpath: SSH servisinin günlük dosyalarının konumunu belirtir. Debian tabanlı sistemlerde SSH günlükleri genellikle /var/log/auth.log dosyasında bulunur.
* maxretry: Bu jail için özel maxretry değeri. [DEFAULT] bölümündeki değeri geçersiz kılar. SSH için daha düşük bir değer (örneğin 3) daha güvenli olabilir.
* bantime: Bu jail için özel bantime değeri. [DEFAULT] bölümündeki değeri geçersiz kılar. Örneğin, 6 saat (6h) veya kalıcı engelleme için -1 (ancak kalıcı engelleme dikkatli kullanılmalıdır).

Yapılandırma değişikliklerini kaydettikten sonra (nano’da Ctrl+O, Enter, Ctrl+X), fail2ban servisini yeniden başlatmanız gerekir ki değişiklikler uygulansın:

sudo service fail2ban restart

SSH Filtreleri ve Aksiyonları

fail2ban’ın gücü, günlük dosyalarındaki desenleri ne kadar iyi tanıyabildiğinde ve bu desenlere göre ne kadar etkili aksiyonlar alabildiğinde yatar.

Filtreler (Filters)

Filtreler, fail2ban’ın günlük dosyalarında aradığı desenleri (düzenli ifadeler veya regex) tanımlayan dosyalardır. Bu dosyalar /etc/fail2ban/filter.d/ dizininde bulunur. SSH için kullanılan filtre genellikle sshd.conf‘tur.

/etc/fail2ban/filter.d/sshd.conf İncelemesi

Bu dosyayı açıp incelediğinizde, [Definition] bölümünde failregex ve ignoreregex adında iki ana bölüm göreceksiniz.

* failregex: Bu bölüm, başarısız giriş denemeleri veya diğer kötü niyetli aktiviteleri gösteren günlük kaydı satırlarını eşleştirmek için kullanılan bir veya daha fazla düzenli ifade içerir. Örneğin, SSH için failregex şunları içerebilir:

^%(__prefix_line)s(?:(?:error: PAM: )?[aA]uthentication failure|Failed password) for (?:invalid user )? from \s*$
    ^%(__prefix_line)s(?:(?:error: PAM: )?[aA]uthentication failure|Failed password) for  from (?: port \d+)? ssh\d(?: : (?:SSH|Bad)? authentication attempt(?: from \S+)?| \[preauth\])?\s$

Bu ifadeler, /var/log/auth.log dosyasındaki “Failed password for invalid user from X.X.X.X” veya “Authentication failure for Y.Y.Y.Y” gibi satırları yakalamak üzere tasarlanmıştır.

* ignoreregex: Bu bölüm, fail2ban’ın göz ardı etmesi gereken günlük kaydı satırlarını tanımlayan düzenli ifadeler içerir. Örneğin, belirli bir tür hatanın saldırı olmadığını biliyorsanız, bu hatayı ignoreregex‘e ekleyerek fail2ban’ın yanlış engelleme yapmasını önleyebilirsiniz. SSH filtresinde genellikle bir ignoreregex bulunmaz, ancak özel durumlar için eklenebilir.

Debian 7’de fail2ban ile gelen sshd.conf filtresi, çoğu SSH brute-force saldırısını tespit etmek için yeterince kapsamlıdır. Ancak, özel bir SSH yapılandırmanız varsa veya belirli bir saldırı türünü hedeflemek istiyorsanız, kendi filtrenizi oluşturabilir veya mevcut filtreyi düzenleyebilirsiniz.

Aksiyonlar (Actions)

Aksiyonlar, bir IP adresi engellendiğinde fail2ban’ın ne yapacağını tanımlayan betiklerdir. Bu betikler /etc/fail2ban/action.d/ dizininde bulunur.

iptables-multiport.conf (Yaygın Kullanılan Aksiyon)

En yaygın ve varsayılan aksiyonlardan biri iptables-multiport.conf‘tur. Bu aksiyon, Linux çekirdeğinin güvenlik duvarı olan iptables‘ı kullanarak belirtilen portlar üzerindeki trafiği engeller.

* actionstart: Jail başladığında çalıştırılan komutlar (örneğin, iptables zinciri oluşturma).
* actionstop: Jail durduğunda çalıştırılan komutlar (örneğin, iptables zincirini kaldırma).
* actionban: Bir IP adresi engellendiğinde çalıştırılan komutlar (örneğin, iptables kuralı ekleyerek IP’den gelen trafiği DROP etme).
* actionunban: Bir IP adresinin engellemesi kaldırıldığında çalıştırılan komutlar (örneğin, iptables kuralını kaldırma).

jail.local dosyasında action = %(action_mwl)s gibi bir ifade kullandığınızda, fail2ban varsayılan iptables aksiyonunu (genellikle iptables-multiport) kullanır ve ek olarak e-posta gönderme (mail-whois-lines.conf) gibi diğer aksiyonları da tetikler.

action = %(action_mwl)s Gibi Kombinasyonlar

* action = %(action_)s: Sadece IP’yi engeller (varsayılan aksiyon).
* action = %(action_mw)s: IP’yi engeller ve e-posta ile bildirim gönderir, e-postaya WHOIS bilgisi ekler.
* action = %(action_mwl)s: IP’yi engeller, e-posta ile bildirim gönderir, WHOIS bilgisi ekler ve fail2ban loglarına daha fazla detay yazar.

Bu kombinasyonlar, fail2ban’ın esnekliğini gösterir. İhtiyaçlarınıza göre farklı aksiyonları birleştirebilir veya kendi özel aksiyon betiklerinizi oluşturabilirsiniz.

Gelişmiş fail2ban Yapılandırma İpuçları

fail2ban’ı sadece SSH için değil, aynı zamanda sunucunuzdaki diğer servisler için de daha etkili ve özel hale getirmek mümkündür.

Beyaz Liste (Whitelist) Oluşturma (ignoreip)

Kendi ofisinizin, evinizin veya güvenilir yönetim IP adreslerinizin yanlışlıkla engellenmesini önlemek için ignoreip ayarını dikkatlice kullanmalısınız. jail.local dosyasındaki [DEFAULT] bölümüne veya belirli bir jail’in içine ekleyebilirsiniz.

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42/32

Birden fazla IP adresi veya IP bloğu virgülle ayrılır. CIDR notasyonu (örneğin /24 veya /32) kullanmak önemlidir.

Birden Fazla SSH Portu Kullanımı

Eğer birden fazla SSH portu kullanıyorsanız (örneğin, 22 ve 2222), bunları port ayarına virgülle ayırarak ekleyebilirsiniz:

[sshd]
enabled = true
port = ssh,2222

Veya port = 22,2222

logpath = /var/log/auth.log

fail2ban bu portların her ikisini de izleyecektir.

Özel Log Dosyaları İçin Filtre Oluşturma

Bazı uygulamalar veya servisler standart log dosyaları yerine kendi özel log dosyalarına kayıt yapabilir. Bu durumda, fail2ban’ın bu logları da izlemesini sağlamak için özel filtreler ve jail’ler oluşturmanız gerekebilir.

1. Yeni bir filtre dosyası oluşturun: /etc/fail2ban/filter.d/mywebapp.conf gibi.
2. Bu dosyanın içine, uygulamanızın başarısız giriş denemelerini veya kötü niyetli aktiviteleri gösteren günlük satırlarını eşleştiren failregex ifadelerini ekleyin.
3. jail.local dosyasında yeni bir jail tanımlayın:

[mywebapp]
    enabled = true
    port = http,https
    filter = mywebapp
    logpath = /var/log/mywebapp/access.log
    maxretry = 3
    bantime = 1h

port ayarı, ilgili servisin kullandığı portları içermelidir (örneğin, web uygulamaları için http,https).

E-posta Bildirimlerini Yapılandırma

E-posta bildirimleri, sunucunuzda bir saldırı olduğunda anında haberdar olmanızı sağlar. [DEFAULT] bölümünde destemail, sendername ve mta ayarlarını doğru yapılandırdığınızdan emin olun. Sunucunuzun e-posta gönderebilmesi için bir MTA (örneğin Postfix veya Exim) kurulu ve düzgün yapılandırılmış olması gerekir. Debian 7’de sendmail genellikle varsayılan olarak bulunur, ancak doğru çalıştığından emin olmak için test etmelisiniz.

action parametresini %(action_mwl)s olarak ayarladığınızda, fail2ban engelleme olayları hakkında size e-posta gönderecektir.

fail2ban’ı Diğer Servisler İçin Kullanma

fail2ban sadece SSH için değil, birçok farklı servis için kullanılabilir. jail.local dosyasında, Apache, Nginx, Postfix, Dovecot, FTP (vsftpd, proftpd), MySQL gibi servisler için önceden tanımlanmış jail’ler bulacaksınız. İhtiyacınız olanları enabled = true yaparak ve port, logpath gibi ayarları kontrol ederek etkinleştirebilirsiniz.

Örneğin, Apache web sunucunuzdaki brute-force saldırılarını engellemek için:

[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 6
bantime = 1h

fail2ban Yönetimi ve İzlemesi

fail2ban’ı doğru bir şekilde yapılandırmak kadar, çalışmasını izlemek ve gerektiğinde yönetmek de önemlidir.

fail2ban Servisini Yeniden Başlatma

Herhangi bir yapılandırma değişikliğinden sonra, fail2ban servisinin bu değişiklikleri uygulayabilmesi için yeniden başlatılması gerekir:

sudo service fail2ban restart

fail2ban Durumunu Kontrol Etme (fail2ban-client status)

fail2ban servisinin genel durumunu ve hangi jail’lerin etkin olduğunu görmek için fail2ban-client status komutunu kullanın:

sudo fail2ban-client status

Bu komut, çalışan jail’lerin bir listesini gösterecektir:

Status
|- Number of jail:      1
- Jail list:   sshd

Jail Durumunu Kontrol Etme (fail2ban-client status sshd)

Belirli bir jail'in (örneğin sshd jail'inin) durumunu, engellenen IP adreslerini ve engelleme sayılarını görmek için:

sudo fail2ban-client status sshd

Çıktı aşağıdaki gibi olabilir:

Status for jail sshd
|- filter
|  |- currently failed: 0
|  |- total failed:     12
|  - file list:        /var/log/auth.log
- actions
   |- currently banned: 1
   |- total banned:     3
   - banned IP list:   192.0.2.10

Bu çıktı, sshd jail'i için şu anda bir IP'nin engellendiğini ve toplamda üç IP'nin engellendiğini gösterir.

Engellenen IP Adreslerini Görüntüleme (iptables komutları)

fail2ban, IP adreslerini engellemek için iptables kurallarını kullanır. iptables kurallarını doğrudan kontrol ederek engellenen IP'leri görebilirsiniz:

sudo iptables -L -n

veya sadece fail2ban ile ilgili kuralları görmek için:

sudo iptables -L fail2ban-sshd -n

Bu komutlar, fail2ban-sshd zincirindeki DROP kurallarını gösterecektir.

Manuel IP Engelleme/Engellemeyi Kaldırma

Bazı durumlarda, belirli bir IP adresini manuel olarak engellemeniz veya engellemesini kaldırmanız gerekebilir.

* IP Engelleme:

sudo fail2ban-client set sshd banip 203.0.113.50

Bu komut, 203.0.113.50 IP adresini sshd jail'i için hemen engeller.

* IP Engellemesini Kaldırma:

sudo fail2ban-client set sshd unbanip 203.0.113.50

Bu komut, 203.0.113.50 IP adresinin sshd jail'inden engellemesini kaldırır.

Log Dosyalarını İzleme (/var/log/fail2ban.log)

fail2ban'ın kendi günlük dosyası /var/log/fail2ban.log konumunda bulunur. Bu dosya, fail2ban'ın ne zaman bir IP'yi engellediğini, engellemeyi kaldırdığını veya diğer önemli olayları kaydettiği yerdir. Sorun giderme veya fail2ban'ın etkinliğini izlemek için bu dosyayı düzenli olarak kontrol etmek önemlidir:

sudo tail -f /var/log/fail2ban.log

Bu komut, günlük dosyasının sonunu sürekli olarak izlemenizi sağlar, böylece fail2ban aktivitesini gerçek zamanlı olarak görebilirsiniz.

Debian 7 ve Güvenlik Güncellemeleri Hakkında Not

Bu makale Debian 7 (Wheezy) üzerinde fail2ban'ın nasıl kullanılacağını detaylandırsa da, Debian 7'nin 2018 yılında resmi olarak "End-of-Life" (EOL - Yaşam Döngüsü Sonu) durumuna geldiğini unutmamak kritik önem taşır. Bu, Debian projesinin artık Debian 7 için güvenlik güncellemeleri veya hata düzeltmeleri sağlamadığı anlamına gelir.

EOL bir işletim sistemi kullanmanın ciddi güvenlik riskleri vardır:

* Bilinen Güvenlik Açıkları: Debian 7'de ve üzerindeki yazılımlarda (SSH, web sunucusu, veritabanı vb.) bilinen birçok güvenlik açığı bulunmaktadır ve bunlar artık yamalanmayacaktır.
* Saldırı Yüzeyi: Güncellenmeyen yazılımlar, saldırganlar için kolay hedefler haline gelir. fail2ban gibi araçlar brute-force saldırılarına karşı koruma sağlasa da, yazılımdaki diğer istismar edilebilir zafiyetlere karşı koruma sağlamaz.
* Yazılım Bağımlılıkları: Yeni yazılımlar veya kütüphaneler genellikle eski işletim sistemi sürümlerini desteklemez, bu da sistemin işlevselliğini ve genişletilebilirliğini sınırlar.

Tavsiye: Mümkün olan en kısa sürede sisteminizi daha yeni ve desteklenen bir Debian sürümüne (örneğin Debian 11 "Bullseye" veya daha yenisi) yükseltmeniz şiddetle tavsiye edilir. Yükseltme mümkün değilse, sunucunuzu internete açık tutmaktan kaçınmalı ve erişimi kesinlikle gerekli olan IP adresleriyle sınırlamalısınız.

fail2ban, EOL bir sistemde bile SSH brute-force saldırılarına karşı ek bir savunma katmanı sunarak faydalı olabilir. Ancak, bu tek başına yeterli değildir ve yukarıda belirtilen temel güvenlik prensiplerini ve bir an önce yükseltme tavsiyesini göz ardı etmemelisiniz. fail2ban, güvenlik stratejinizin sadece bir parçasıdır, tamamı değildir.

Sonuç

SSH, uzak sunucu yönetimi için vazgeçilmez bir araçtır, ancak aynı zamanda sürekli brute-force saldırılarının hedefi haline gelmektedir. Debian 7 gibi eski bir işletim sistemi üzerinde bile, fail2ban gibi güçlü bir araç kullanarak SSH bağlantılarınızı bu tür saldırılara karşı önemli ölçüde güçlendirebilirsiniz.

Bu rehberde, fail2ban'ın ne olduğunu, nasıl çalıştığını, Debian 7'ye nasıl kurulacağını, SSH için temel ve gelişmiş yapılandırma adımlarını, filtre ve aksiyon mekanizmalarını ve fail2ban'ı nasıl yöneteceğinizi ve izleyeceğinizi detaylı bir şekilde ele aldık. jail.local dosyasını düzenleyerek bantime, findtime, maxretry gibi parametreleri ihtiyaçlarınıza göre ayarlamak, ignoreip ile beyaz liste oluşturmak ve fail2ban'ı diğer servisler için de etkinleştirmek, sunucunuzun genel güvenlik duruşunu önemli ölçüde artıracaktır.

Ancak, fail2ban'ın tek başına bir güvenlik çözümü olmadığını unutmamak gerekir. SSH portunu değiştirmek, anahtar tabanlı kimlik doğrulama kullanmak, root girişini devre dışı bırakmak ve güçlü parola politikaları uygulamak gibi temel SSH güvenlik prensipleriyle birleştirildiğinde maksimum fayda sağlar. Ayrıca, Debian 7'nin yaşam döngüsünün sonuna geldiği gerçeğini göz önünde bulundurarak, mümkün olan en kısa sürede daha güncel ve desteklenen bir işletim sistemi sürümüne geçiş yapma gerekliliğini tekrar vurgulamak önemlidir.

Siber güvenlik, sürekli bir süreçtir. Sunucularınızı düzenli olarak izlemek, fail2ban günlüklerini kontrol etmek ve güvenlik önlemlerinizi güncel tutmak, potansiyel tehditlere karşı proaktif olmanızı sağlayacaktır. fail2ban, bu sürekli güvenlik mücadelesinde sizin için değerli bir müttefik olacaktır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.