Blog’a Dön

Fail2ban Kurulumu: Sunucuyu Saldırılara Karşı Koruma

Fail2ban nedir, nasıl kurulur? SSH kaba kuvvet saldırılarını engelleme, jail.local ayarları, Nginx korumaları, yasaklı IP yönetimi ve ufw ile kullanım.

Nodesty Ekibi4 dk okumaGüvenlik
Koyu Nodesty arka planında Fail2ban yazısı ile Jails, Bans ve SSH ifadeleri

Fail2ban, sunucunuzdaki günlük dosyalarını izleyip art arda başarısız giriş deneyen IP adreslerini güvenlik duvarında otomatik olarak bir süre engelleyen açık kaynaklı bir araçtır. İnternete açık her sunucu, kurulduktan dakikalar sonra SSH'a yönelik otomatik şifre deneme saldırılarıyla karşılaşır. Fail2ban bu saldırganları birkaç denemeden sonra kapının dışında bırakır.

Bu rehberde Fail2ban'in nasıl çalıştığını, Ubuntu, Debian ve AlmaLinux'ta kurulumunu, SSH korumasını, jail.local ayarlarını, Nginx korumalarını ve yasaklı adresleri yönetmeyi anlatıyoruz.

Fail2ban nasıl çalışır?

Fail2ban üç parçadan oluşur:

  • Filtre (filter): Günlük dosyasında başarısız bir girişi tanıyan düzenli ifadeler. Örneğin SSH için "Failed password" satırları.
  • Eylem (action): Bir adres yakalandığında yapılacak iş. Genellikle güvenlik duvarına engelleme kuralı eklemektir.
  • Jail: Bir filtreyi, bir eylemi ve kuralları (kaç denemede, ne kadar süreyle) bir araya getiren tanım. Her servis için ayrı bir jail açılır.

Bir IP adresi findtime süresi içinde maxretry kadar başarısız deneme yaparsa bantime süresince engellenir. Süre dolunca yasak kendiliğinden kalkar.

Fail2ban kurulumu

Ubuntu ve Debian:

sudo apt update
sudo apt install fail2ban
sudo systemctl enable --now fail2ban

AlmaLinux ve Rocky Linux (paket EPEL deposundadır):

sudo dnf install epel-release
sudo dnf install fail2ban
sudo systemctl enable --now fail2ban

Servisin çalıştığını kontrol edin:

sudo fail2ban-client status

Ubuntu ve Debian paketlerinde SSH jail'i varsayılan olarak açık gelir; çıktıda sshd görüyorsanız temel koruma şimdiden çalışıyordur.

jail.local ile ayarlar

Ayarları paketle gelen jail.conf dosyasına değil, kendi oluşturduğunuz /etc/fail2ban/jail.local dosyasına yazın. jail.conf güncellemelerde üzerine yazılabilir; jail.local ise korunur ve onun üzerine uygulanır.

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.7

[sshd]
enabled = true
  • bantime: Yasak süresi. 1h bir saat demektir.
  • findtime: Denemelerin sayıldığı zaman aralığı.
  • maxretry: Bu aralıkta izin verilen en fazla başarısız deneme.
  • bantime.increment: Aynı adres tekrar yakalandıkça yasak süresini katlayarak uzatır. Israrcı botlara karşı çok etkilidir.
  • ignoreip: Hiçbir zaman yasaklanmayacak adresler. 198.51.100.7 yerine kendi sabit IP adresinizi yazın; böylece kendinizi yanlışlıkla kilitlemezsiniz.

Ayarları uyguladıktan sonra servisi yeniden yükleyin:

sudo systemctl restart fail2ban

Debian 12 ve sonrası için not: Bu sürümlerde günlükler varsayılan olarak /var/log/auth.log yerine systemd günlüğünde tutulur. SSH jail'i başlamıyorsa [sshd] bölümüne backend = systemd satırını ekleyin.

SSH portunu değiştirdiyseniz jail'e bildirin, aksi hâlde Fail2ban engellemeyi yanlış porta uygular:

[sshd]
enabled = true
port = 2222

Yasaklı adresleri yönetmek

KomutNe yapar?
sudo fail2ban-client statusAçık jail'leri listeler
sudo fail2ban-client status sshdSSH jail'indeki yasaklı adresleri ve sayıları gösterir
sudo fail2ban-client set sshd banip 203.0.113.50Bir adresi elle yasaklar
sudo fail2ban-client set sshd unbanip 203.0.113.50Bir adresin yasağını kaldırır
sudo fail2ban-client unban --allBütün yasakları kaldırır

Fail2ban'in kendi günlüğü /var/log/fail2ban.log dosyasındadır; hangi adresin ne zaman ve hangi jail tarafından yasaklandığını buradan görebilirsiniz.

Nginx ve diğer servisleri korumak

Fail2ban yalnızca SSH için değildir. Paketle birlikte birçok servis için hazır filtreler gelir; bunları jail.local dosyasına ekleyerek açarsınız:

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled = true

[recidive]
enabled = true
  • nginx-http-auth: Nginx'in parola korumalı sayfalarına yapılan başarısız girişleri yakalar.
  • nginx-botsearch: Var olmayan yönetim panellerini ve bilinen açıkları tarayan botları yakalar.
  • recidive: Fail2ban'in kendi günlüğünü izler ve farklı jail'lerde tekrar tekrar yasaklanan adresleri çok daha uzun süre engeller.

Nginx kurulumunu ve yapılandırmasını Nginx kurulumu rehberimizde anlattık. WordPress, Postfix, Dovecot ve MariaDB gibi servisler için de hazır filtreler vardır; /etc/fail2ban/filter.d/ klasöründe listeyi görebilirsiniz.

ufw ile birlikte kullanmak

Fail2ban varsayılan olarak doğrudan iptables ya da nftables kuralları ekler ve ufw ile sorunsuz çalışır. Yasakların ufw kuralı olarak görünmesini isterseniz [DEFAULT] bölümüne şunu ekleyin:

banaction = ufw

Bundan sonra yasaklı adresleri sudo ufw status çıktısında da görürsünüz. Güvenlik duvarı ve portların nasıl çalıştığını Port nedir? yazımızda anlattık.

Fail2ban'in sınırları

Fail2ban güçlü bir ek katmandır, ama her şeyi çözmez:

  • Asıl koruma güçlü kimlik doğrulamadır. SSH'ta şifreli girişi kapatıp yalnızca anahtarla girişe izin verin; bunu SSH nedir? yazımızda adım adım anlattık.
  • Dağıtık saldırıları yavaşlatır ama durduramaz. Her biri yalnızca birkaç deneme yapan binlerce farklı adres Fail2ban'in eşiğinin altında kalabilir.
  • DDoS koruması değildir. Bağlantınızı trafikle dolduran saldırılara karşı ağ düzeyinde koruma gerekir; farkı DDoS nedir? yazımızda anlattık.

Nodesty sunucularında güvenlik

Nodesty AMD Ryzen 9 9950X VDS ve AMD EPYC 7763 VDS paketlerinde tam root erişimiyle Fail2ban'i dakikalar içinde kurabilirsiniz. Fail2ban sunucunuzun içindeki giriş denemelerini durdururken, L3–L7 nShield DDoS koruması ağ düzeyindeki saldırıları sunucunuza ulaşmadan süzer. Bir yasak yüzünden SSH erişiminizi kaybederseniz panelinizdeki web konsolu üzerinden sunucunuza her zaman ulaşabilirsiniz.

Sıkça Sorulan Sorular

SSH anahtarı kullanıyorsam Fail2ban'e gerek var mı?

Anahtarla giriş, şifre deneme saldırılarını zaten etkisiz kılar; asıl koruma budur. Fail2ban yine de faydalıdır; günlüklerdeki gürültüyü azaltır, sunucunun her denemeye cevap vermek için harcadığı kaynağı düşürür ve Nginx ya da diğer servisler gibi anahtar kullanılamayan yerlerde de koruma sağlar.

Fail2ban DDoS saldırılarını engeller mi?

Hayır. Fail2ban, günlük dosyalarını okuyup belirli IP adreslerini engeller; binlerce farklı adresten gelen ve bağlantınızı dolduran bir DDoS saldırısına karşı tasarlanmamıştır. Bu tür saldırılara karşı ağ düzeyinde, sunucunun önünde çalışan bir DDoS koruması gerekir.

Kendimi yanlışlıkla yasakladım, ne yapmalıyım?

Başka bir IP adresinden, örneğin telefonunuzun mobil bağlantısından ya da sağlayıcınızın web konsolundan sunucuya bağlanın ve sudo fail2ban-client set sshd unbanip IP-adresiniz komutunu çalıştırın. Bunun tekrarlanmaması için kendi sabit IP adresinizi ignoreip satırına ekleyin.

Yasak ne kadar sürer?

Varsayılan yasak süresi bantime ayarıyla belirlenir ve genellikle 10 dakikadır. Bu rehberdeki gibi 1 saat iyi bir başlangıçtır. bantime.increment ayarını açarsanız tekrar tekrar yakalanan adreslerin yasak süresi her seferinde katlanarak uzar.

Fail2ban ile ufw birlikte kullanılabilir mi?

Evet. Fail2ban varsayılan olarak iptables ya da nftables kurallarıyla engelleme yapar ve ufw ile çakışmaz. İsterseniz banaction = ufw ayarıyla yasakların ufw kuralı olarak eklenmesini sağlayabilir, böylece yasaklı adresleri ufw status çıktısında görebilirsiniz.

jail.conf dosyasını mı düzenlemeliyim?

Hayır. jail.conf paket güncellemelerinde üzerine yazılabilir. Kendi ayarlarınızı her zaman jail.local dosyasına ya da jail.d klasöründeki ayrı bir dosyaya yazın; Fail2ban bu dosyalardaki ayarları jail.conf'un üzerine uygular.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································