Fail2ban günlükleri okur, düzenli ifadeye uyan eşleşmeleri sayar ve sayaç tavana ulaştığında bir güvenlik duvarı kuralı ekler. Tüm fayda yapılandırmadadır — kurulumdan sonra yalnızca tek bir jail etkindir, o da SSH içindir.

Ayarlar nereye yazılır

/etc/fail2ban/jail.conf dosyasına dokunulmaz — paket güncellemesinde üzerine yazılır. Kendi değerleriniz /etc/fail2ban/jail.local dosyasına gider ve bu dosya yalnızca değiştirdiğiniz şeyleri içermelidir.

[DEFAULT]
bantime  = 24h
findtime = 1h
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.25

ignoreip, ilk yazılan satırdır. O olmadan er ya da geç kendi adresinizi engellersiniz ve sonra içeri ancak barındırma panelindeki konsoldan girilir.

Bantime hakkında

On dakikalık varsayılan değer pratikte anlamsızdır: otomatik parola deneyicisi geri döner ve devam eder. Bir gün makul bir alt sınırdır. Kademeli artış daha da iyidir:

bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 30d

Böylece geri dönen giderek daha uzun engeller alır, gerçek bir kullanıcının tek bir başarısız oturum açması ise ağır cezalandırılmaz.

Açmaya değer jailler

sshd zaten çalışıyor. Parolayla oturum açmayı tamamen kapattıysanız jail büyük fayda sağlamaz, ama zararı da olmaz.

Web sunucusunun kimlik doğrulaması. Sunucu üzerinden parolayla korunan bir şey varsa:

[nginx-http-auth]
enabled = true

[apache-auth]
enabled = true

Uygulamanızın oturum açma formu. Burada hazır filtre yoktur — sitenin parola formu, uygulamanın kendi günlüğüne kendi biçiminde yazar. Filtreyi /etc/fail2ban/filter.d/ içine kendiniz yazarsınız ve en çok fayda sağlayan jail tam da budur, çünkü parolalar tam orada deneniyor.

Postfix ve Dovecot, sunucu posta hizmeti veriyorsa. Posta portları en az SSH kadar deneme saldırısına maruz kalır.

recidive — Fail2ban’in kendi günlüğünü okuyan ve birkaç kez engellenmiş adreslere uzun engeller veren bir jail:

[recidive]
enabled  = true
bantime  = 4w
findtime = 1d
maxretry = 3

Gerçekten çalıştığını doğrulayın

sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Son komut en önemlisidir ve fazlasıyla nadir kullanılır. Filtrenin günlükteki kaç satırla gerçekten eşleştiğini gösterir. Sıfır eşleşme, jail’in çalıştığı ama hiçbir şey yapmadığı anlamına gelir — ya günlüğün yolu yanlıştır ya da biçim uymuyordur.

Bu aynı zamanda Fail2ban’in çalışıyor görünüp kimseyi engellememesinin en sık nedenidir: Debian 12 ve Ubuntu 24.04 üzerinde /var/log/auth.log artık varsayılan olarak yoktur. Çözüm ya rsyslog kurmak ya da jail’i günlüğe yönlendirmektir:

[sshd]
backend = systemd

Kendi engelinizi kaldırma

sudo fail2ban-client set sshd unbanip 203.0.113.25
sudo fail2ban-client unban --all

Bunu, dışarıda kaldığınız anda değil, önceden bilmekte fayda var.

Fail2ban’in yapamadıkları

Tek bir adresten gelen sıklıkla çalışır. Dağıtık bir saldırı — bin adres, her biri tek deneme — doğrudan geçer, çünkü hiçbir sayaç tavanına ulaşmaz. Bu, yapılandırma hatası değil, ilkesel bir sınırdır.

Uygulamadaki bir açığı da durdurmaz. Bir eklentideki deliği kullanan istek ilk seferde başarılı olur ve arkasında tek bir başarısız oturum açma bırakmaz. Fail2ban arka plan gürültüsünü kaldırır; zamanında yapılan güncellemelerin yerini tutmaz.

Pratik değeri zaman içindeki sayılarda görülür: şu anda kaç adres engelli, hangi jail en sık tetikleniyor, sayı aniden değişti mi. Artık hiçbir şey yakalamayan bir jail, bir günlüğün yer değiştirdiğinin işaretidir — ve bu ancak biri baktığında fark edilir. Bunun tek bir sayfada nasıl göründüğünü aşağıdaki gösterim gösteriyor.