Fail2Ban Kurulumu ve Yapılandırılması Ubuntu 20.04
Fail2Ban, sunucu üzerinde çalışan çeşitli servislerin log dosyalarını tarayan ve çok fazla parola hatası ya da brute force atağı yapan IP adreslerinin erişimini engelleyen bir log ayrıştırma programıdır. Giriş denemesi tespit edildiğinde Fail2Ban, saldırganın IP adresini geçici veya kalıcı olarak engellemek için iptables’a yeni bir kural ekleyecektir. Yapılacak olan engellemenin tetiklenme sayısını ya da süresini de ilgili yapılandırma dosyasından kolayca ayarlayabiliyoruz. Ek olarak oluşan bu ihlallerle alakalı bildirimleri dilerseniz SMTP üzerinden alabilirsiniz. Bu sayede sistem yöneticisinin ilgili log dosyalarını tek tek kontrol etmesine gerek kalmayacağı gibi gözden kaçan ataklarında otomatik olarak engellenmesi sağlanacaktır. Sunucu güvenliği için tavsiye ettiğim basit ama etkili bir open source uygulamadır. Ancak unutulmamalıdır ki Fail2Ban zayıf kimlik doğrulamanın neden olduğu riski ortadan kaldırmaz. Bu yazımda Fail2Ban kurulumu ve yapılandırılması hakkında bilgi veriyor olacağım. Aşağıdaki adımlar Ubuntu 20.04 üzerinde yapılmıştır.
Fail2ban Kurulumu
Kurulum öncesi isterler:
- Ubuntu 20.04 işletim sistemi
- root haklarına sahip bir kullanıcı
Bu araç için kurulum süreci basittir çünkü Ubuntu paketleme ekibi varsayılan depolarda Fail2Ban paketini bize sunuyor.
Öncelikle yerel paket dizinimizi güncellememiz gerekiyor ve ardından paketi indirmek ve kurmak için apt komutunu kullanabiliriz:
sudo apt-get update sudo apt-get install fail2ban
Kurulum tamamlandığında, Fail2Ban servisi otomatik olarak başlayacaktır. Servisin durumunu kontrol ederek doğrulayabilirsiniz:
sudo systemctl status fail2ban
Komut çıktısı aşağıdakine benzer olmalı:
[email protected]:~# systemctl status fail2ban ● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-12-19 16:23:30 +03; 1h 19min ago Docs: man:fail2ban(1) Main PID: 17865 (f2b/server) Tasks: 5 (limit: 4567) Memory: 11.4M CGroup: /system.slice/fail2ban.service └─17865 /usr/bin/python3 /usr/bin/fail2ban-server -xf start Dec 19 16:23:30 ubuntu-4gb-fsn1-1 systemd[1]: Starting Fail2Ban Service... Dec 19 16:23:30 ubuntu-4gb-fsn1-1 systemd[1]: Started Fail2Ban Service. Dec 19 16:23:30 ubuntu-4gb-fsn1-1 fail2ban-server[17865]: Server ready
Görüldüğü üzere Fail2Ban servisi sistemimizde çalışıyor. Kurulum bu kadar artık yapılandırma ayarlarına geçebiliriz.
Fail2Ban Yapılandırması
Fail2Ban kurulum sonrasında 2 adet varsayılan yapılandırma dosyası ile birlikte gelir. Bunlar
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/defaults-debian.conf
dosyalarıdır. Fail2Ban’a ait yeni versiyon upgrade işlemlerinde yukarıdaki iki dosyanın üzerine yazılabileceğinden dolayı yapılandırmanın bu iki dosyada yapılması tavsiye edilmez. Eğer yapılması halinde ilgili ayarlarımızın upgrade sonrası uçması anlamına gelmektedir.
Fail2ban, yapılandırma dosyalarını aşağıdaki sırayla okur. Her .local dosyası, .conf dosyasındaki ayarları geçersiz kılar:
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/*.conf
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d/*.local
Çoğu kullanıcı için, Fail2Ban’ı yapılandırmanın en kolay yolu, jail.conf’u > jail.local’a kopyalamak ve .local dosyasını değiştirmektir. Daha ileri düzey kullanıcılar sıfırdan bir .local yapılandırma dosyası oluşturabilir.
Biz de bu yüzdendir ki varsayılan jail.conf dosyasından bir .local yapılandırma dosyası oluşturuyoruz:
sudo cp /etc/fail2ban/jail.{conf,local}
Fail2ban uygulamasını yapılandırmaya başlamak için, jail.local dosyasını metin düzenleyicinizle açın (ben buradaki adımlarda nano kullanıyor olacağım.):
nano /etc/fail2ban/jail.local
Dosya içeriğinde her bir yapılandırma parametresinin ne işe yaradığını açıklayan açıklamalar içerir. Bu örnekte, temel ayarları değiştireceğiz.
Whitelist
Ban işleminden hariç tutmak istediğiniz IP adresleri, IP aralıkları veya ana bilgisayarlar ignoreip parametresine eklenebilir. Buraya yerel PC IP adresinizi ve whitelist’e eklemek istediğiniz diğer tüm makineleri eklemelisiniz.
Ignoreip ile başlayan satırın başındaki diyez (#) işaretini kaldırın ve IP adreslerinizi boşlukla ayırarak ekleyin:
ignoreip = 127.0.0.1/8 111.111.111.111 192.168.1.0/24
BAN Ayarları
Bantime, findtime ve maxretry seçeneklerinin değerleri, ban süresini ve ban koşullarını tanımlar.
bantime , IP’nin yasaklandığı süredir. Hiçbir son ek belirtilmediğinde, varsayılan olarak saniye cinsindendir. Varsayılan olarak, bant zaman değeri 10 dakikaya ayarlanmıştır. Genel olarak, çoğu kullanıcı daha uzun bir yasaklama süresi ayarlamak isteyecektir. Değeri kendi isteğinize göre değiştirebilirsiniz:
bantime = 10mNot: Eğer bir IP’yi süresiz banlamak istiyorsanız bantime parametresi karşısına negatif bir sayı girmeniz yeterli olacaktır.
findtime , bir ban işlemi olmadan önceki başarısız girişimlerin sayısı arasındaki süredir. Örneğin, Fail2ban beş hatadan sonra bir IP’yi yasaklayacak şekilde ayarlanmışsa (maxretry, aşağıya bakın), bu hatalar ayarlanmış olan findtime süresi içinde gerçekleşmelidir.
findtime = 10m
maxretry , bir IP banlanmadan önceki toplam başarısız girişimlerin sayısıdır. Varsayılan değer, çoğu kullanıcı için ideal değer olan 5 olarak ayarlanmıştır.
maxretry = 5
E-Posta Bildirimleri
Fail2ban, bir IP yasaklandığında size e-posta olarak uyarıları gönderebilir. E-postaları almak için, sunucunuzda bir SMTP kurulu olması ve aşağıda gösterildiği gibi IP’yi yalnızca %(action_mw)s olarak banlayan varsayılan eylemi değiştirmeniz gerekir:
action = %(action_mw)s
%(action_mw)s, atak yapan IP’yi yasaklar ve whois raporu içeren bir e-posta gönderir. E-postaya ilgili günlükleri dahil etmek istiyorsanız, eylemi %(action_mwl)s olarak ayarlamanız gerekmektedir.
Ayrıca alıcı ve gönderici e-posta adreslerini de ayarlayabilirsiniz:
destemail = [email protected] sender = [email protected]
Bu arada unutmadan yapılan her değişikliğin geçerli olması için Fail2Ban servisinin yeniden başlatılması gerekmektedir. Eğer yapılandırma dosyasında bir yanlışlık yapıldıysa yine servis durumuna bakarak anlayabilirsiniz:
sudo systemctl restart fail2ban sudo systemctl status fail2ban
Fail2Ban Jails
Fail2Ban, jail kavramını kullanır. Fail2Ban bir servisi tanımlar. Arama modeliyle eşleşen log girişleri sayılır ve önceden tanımlanmış bir koşul karşılandığında ilgili eylemler yürütülür.
Fail2Ban, farklı servis için hali hazırda bir dizi jail ile birlikte kurulur. Hazır gelen jail yapılandırmalarının haricinde kendi jail yapılandırma dosyanızı da oluşturabilirsiniz.
Varsayılan olarak, yalnızca ssh jail etkindir. Bir jaili etkinleştirmek için jail başlığından sonra enabled = true eklemeniz gerekir. Aşağıdaki örnek proftpd hapishanesinin nasıl etkinleştirileceğini gösterir:
[proftpd] port = ftp,ftp-data,ftps,ftps-data logpath = %(proftpd_log)s backend = %(proftpd_backend)s
Önceki bölümde konuşmuş olduğumuz ayarlar jaile göre ayarlanabilir. Örneğin:
[sshd] enabled = true maxretry = 3 findtime = 1d bantime = 4w ignoreip = 127.0.0.1/8 111.111.111.111
Filtreler /etc/fail2ban/filter.d dizininde bulunur ve jail ile aynı ada sahip bir dosyada saklanır. Düzenli ifadelerle (RegEx) ilgili deneyiminiz varsa, filtrelerde ince ayar yapabilirsiniz.
Bir yapılandırma dosyasını her düzenlediğinizde, değişikliklerin etkili olması için Fail2Ban hizmetini yeniden başlatmanız gerekir:
sudo systemctl restart fail2ban
Fail2Ban Client
Fail2ban servisi etkileşim kurmak için kullanabileceğiniz fail2ban-client adlı bir komut satırı aracıyla birlikte gelir.
Mevcut tüm seçenekleri görüntülemek için, -h seçeneğiyle komutu çağırın:
fail2ban-client -h
Bu araç, IP adreslerini yasaklamak / yasağını kaldırmak, ayarları değiştirmek, servisi yeniden başlatmak ve daha fazlası için kullanılabilir. İşte birkaç örnek:
Jail durumunu kontrol etmek için:
sudo fail2ban-client status sshd
Bir IP’nin banını kaldırmak için:
sudo fail2ban-client set sshd unbanip 111.111.111.111
Bir IP’yi banlamak için:
sudo fail2ban-client set sshd banip 111.111.111.111
Fail2Ban yapılandırmanızın hangi servisler için geçerli olduğunu öğrenmek için:
fail2ban-client status
Son olarak Fail2Ban uygulamasının iptables’a eklediği kuralları görmek için aşağıdaki komutu çalıştırabilirsiniz:
sudo iptables -nvL fail2ban-ssh ya da sudo iptables -nvL f2b-sshd