Malware ve Rootkit Tarama: rkhunter ve ClamAV Rehberi
Linux sunucunuzu malware ve rootkit'lere karşı koruyun. rkhunter ve ClamAV kurulumu, tarama yapılandırması, sonuç yorumlama ve zamanlanmış tarama rehberi.
Fail2Ban ile SSH brute-force saldırılarına karşı sunucunuzu koruyun. Kurulum, jail.local yapılandırması, Nginx/Apache jail'leri, IP beyaz listesi ve e-posta bildirimleri.
SSH brute-force saldırıları, internet üzerindeki her sunucunun karşılaştığı en yaygın tehditlerden biridir. Fail2Ban, başarısız giriş denemelerini izleyerek saldırganların IP adreslerini otomatik olarak engelleyen güçlü bir araçtır. Bu rehberde Fail2Ban'ı kurarak SSH, Nginx ve Apache için kapsamlı koruma yapılandıracaksınız.
Fail2Ban, log dosyalarını izleyen ve belirli bir süre içinde çok fazla başarısız giriş denemesi yapan IP adreslerini iptables/nftables kuralları ile engelleyen bir güvenlik aracıdır. Python ile yazılmış olup çok sayıda servis için hazır filtreler içerir.
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
# CentOS/AlmaLinux/Rocky Linux
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
# Fail2Ban servisini başlat
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# Durumu kontrol et
sudo systemctl status fail2ban
Fail2Ban'ın ana yapılandırma dosyası jail.conf'tur. Ancak bu dosyayı doğrudan düzenlemeyin — güncellemeler sırasında üzerine yazılabilir. Bunun yerine jail.local dosyası oluşturun:
# jail.conf'u kopyala
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Yapılandırmayı düzenle
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
# Engelleme süresi (saniye) — 1 saat
bantime = 3600
# Deneme penceresi (saniye) — 10 dakika
findtime = 600
# Maksimum başarısız deneme sayısı
maxretry = 5
# Backend (auto, pyinotify, gamin, polling, systemd)
backend = auto
# DNS çözümleme (warn, no, yes)
usedns = warn
# Log seviyesi (CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG)
loglevel = INFO
# Log hedefi
logtarget = /var/log/fail2ban.log
# E-posta bildirimi
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
# Eylem — engelle ve e-posta gönder
action = %(action_mwl)s
# Yalnızca engelle (e-posta yok):
# action = %(action_)s
# Beyaz liste — bu IP'ler asla engellenmez
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# /etc/fail2ban/jail.local içinde
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
# Ubuntu 20.04+ için:
# logpath = %(sshd_log)s
maxretry = 3
bantime = 86400 # 24 saat
findtime = 600
# Systemd journal kullanıyorsanız:
# backend = systemd
SSH için maxretry = 3 ve bantime = 86400 (24 saat) değerleri önerilir. Bu, saldırganların günde yalnızca 3 deneme yapmasına izin verir.
# Nginx HTTP kimlik doğrulama hatası
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
# Nginx rate limiting ihlali
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 600
# Nginx kötü bot engelleme
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 86400
# Nginx 404 flood koruması
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 60
bantime = 3600
sudo nano /etc/fail2ban/filter.d/nginx-404.conf
[Definition]
failregex = ^<HOST> .* "(GET|POST|HEAD) .* HTTP/.*" 404
ignoreregex =
# Apache kimlik doğrulama hatası
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600
# Apache kötü bot
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log
maxretry = 2
bantime = 86400
# Apache nuke/scan
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache2/error.log
maxretry = 6
bantime = 3600
# Apache overflow
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache2/error.log
maxretry = 2
bantime = 3600
# jail.local içinde DEFAULT bölümüne ekle
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# Birden fazla IP veya subnet ekleyebilirsiniz
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 203.0.113.1
# Yapılandırmayı yeniden yükle
sudo fail2ban-client reload
# Beyaz listeyi doğrula
sudo fail2ban-client get sshd ignoreip
# Tüm jail'lerin durumunu görüntüle
sudo fail2ban-client status
# Belirli bir jail'in durumunu görüntüle
sudo fail2ban-client status sshd
# Engellenen IP'leri listele
sudo fail2ban-client status sshd | grep "Banned IP"
# Tüm engellenen IP'leri göster
sudo iptables -L f2b-sshd -n --line-numbers
# Log dosyasını izle
sudo tail -f /var/log/fail2ban.log
# Son engelleme olaylarını filtrele
sudo grep "Ban" /var/log/fail2ban.log | tail -20
# IP'yi manuel olarak engelle
sudo fail2ban-client set sshd banip 1.2.3.4
# IP'nin engelini kaldır
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Tüm engelleri kaldır (dikkatli kullanın!)
sudo fail2ban-client unban --all
# Belirli bir jail'i yeniden başlat
sudo fail2ban-client restart sshd
# Postfix veya sendmail kur
sudo apt install postfix -y
# jail.local içinde e-posta ayarları
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@yourdomain.com
mta = sendmail
# Eylem seçenekleri:
# action_ = yalnızca engelle
# action_mw = engelle + e-posta
# action_mwl = engelle + e-posta + whois + log satırları
action = %(action_mwl)s
# Servis durumu
sudo systemctl status fail2ban
# Yapılandırmayı test et
sudo fail2ban-client -t
# Tüm jail'leri listele
sudo fail2ban-client status
# Fail2Ban'ı yeniden başlat
sudo systemctl restart fail2ban
# Yapılandırmayı yeniden yükle (servis yeniden başlatmadan)
sudo fail2ban-client reload
Varsayılan olarak Fail2Ban, sunucu yeniden başlatıldığında engelleri sıfırlar. Kalıcı engelleme için:
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# Kalıcı engelleme (-1 = sonsuza kadar)
bantime = -1
# Veya çok uzun süre:
bantime = 604800 # 7 gün
Çok agresif ayarlar (düşük maxretry, uzun bantime) meşru kullanıcıları da engelleyebilir. SSH için maxretry=3-5 ve bantime=3600-86400 dengeli bir yaklaşımdır.
Fail2Ban, sunucu güvenliğinin vazgeçilmez bir parçasıdır. SSH, Nginx ve Apache için doğru yapılandırıldığında brute-force saldırılarını büyük ölçüde azaltır. Düzenli olarak log dosyalarını izleyin ve yanlış pozitif engellemeleri beyaz listeye ekleyin.
Kendi IP adresinizi beyaz listeye eklemeyi unutmuş olabilirsiniz. Sunucuya konsol erişimi ile bağlanın ve 'sudo fail2ban-client set sshd unbanip SIZIN_IP' komutunu çalıştırın. Ardından jail.local dosyasına ignoreip satırına IP'nizi ekleyin.
Evet. jail.local dosyasında 'banaction = ufw' ayarını yaparak Fail2Ban'ın UFW kuralları oluşturmasını sağlayabilirsiniz. Varsayılan olarak iptables kullanır, ancak UFW ile de sorunsuz çalışır.
SSH için 3-5 deneme önerilir. Web servisleri için 5-10 deneme daha uygun olabilir. Çok düşük değerler meşru kullanıcıları engelleyebilir, çok yüksek değerler ise saldırılara karşı yetersiz koruma sağlar.
Varsayılan log dosyası /var/log/fail2ban.log'dur. 'sudo tail -f /var/log/fail2ban.log' komutu ile gerçek zamanlı izleyebilirsiniz. Systemd kullanan sistemlerde 'sudo journalctl -u fail2ban -f' komutunu da kullanabilirsiniz.
Fail2Ban brute-force saldırılarına karşı etkilidir ancak tek başına yeterli değildir. SSH anahtar tabanlı kimlik doğrulama, güçlü şifreler ve firewall kuralları ile birlikte kullanılmalıdır. Dağıtık saldırılara (farklı IP'lerden az sayıda deneme) karşı sınırlı koruma sağlar.
Linux sunucunuzu malware ve rootkit'lere karşı koruyun. rkhunter ve ClamAV kurulumu, tarama yapılandırması, sonuç yorumlama ve zamanlanmış tarama rehberi.
WireGuard VPN sunucusu kurun: anahtar üretimi, sunucu ve istemci yapılandırması, IP yönlendirme, firewall kuralları ve Windows/Linux/Android istemci kurulumu.
Zero Trust ağ güvenliği ilkeleri ve pratik uygulama: asla güvenme her zaman doğrula, mikro-segmentasyon, kimlik tabanlı erişim ve mevcut araçlarla uygulama rehberi.