Linux’ta ClamAV Nasıl Kurulur: Eksiksiz Teknik Kılavuz
ClamAV, virüsleri, truva atlarını, rootkit’leri, kötü amaçlı yazılımları ve diğer kötü niyetli tehditleri tespit eden, Cisco Talos tarafından sürdürülen açık kaynaklı, çapraz platform bir antivirüs motorudur. Sürekli güncellenen bir veritabanı (/var/lib/clamav/) tarafından desteklenen imza tabanlı bir tespit modeli kullanarak çalışır ve Linux sunucuları, posta ağ geçitleri ve web barındırma ortamları için fiili standart antivirüs çözümüdür.
Bu kılavuz, tam kurulum yaşam döngüsünü kapsar: sistem hazırlığı, büyük dağıtımlarda paket kurulumu, freshclam ile virüs veritabanı yönetimi, daemon yapılandırması, tarama stratejileri, karantina yönetimi, cron otomasyonu ve clamonacc aracılığıyla gerçek zamanlı tarama — çoğu öğreticinin atladığı üretim düzeyindeki tuzaklar dahil.
ClamAV’ın Linux Sunucularında Önemi
Linux sistemleri kötü amaçlı yazılımlara karşı bağışık değildir. Linux’u hedef alan açıklar Windows tehditlerinden daha az yaygın olsa da, web uygulamaları, posta aktarıcıları veya dosya paylaşım hizmetleri çalıştıran sunucular, Linux ana bilgisayarının kendisi birincil hedef olmasa bile kötü amaçlı yazılım dağıtımı için aktif vektörlerdir. Ele geçirilmiş bir VPS Hosting ortamı, son kullanıcılara sessizce virüslü dosyalar dağıtabilir, spam veritabanları tarafından kara listeye alınmaya yol açabilir veya daha büyük bir saldırı zincirinde pivot noktası olarak kullanılabilir.
ClamAV bunu şunları sağlayarak ele alır:
- İsteğe bağlı tarama — zamanlanmış veya tetiklenmiş analiz için
- Daemon modunda tarama (
clamd) — yüksek verimli, düşük gecikmeli kontroller için - Posta ağ geçidi entegrasyonu —
clamsmtp,amavisd-newveyaMilteraracılığıyla - Gerçek zamanlı dosya sistemi izleme —
clamonaccaracılığıyla (Linux kernelfanotify) - Bytecode imzaları — statik örüntü eşleştirmenin ötesinde buluşsal tespit için
Adım 1: Sisteminizi Hazırlayın ve Güncelleyin
Herhangi bir paket kurmadan önce, paket dizininizi senkronize edin ve bekleyen güvenlik yamalarını uygulayın. Güncel olmayan sistem kitaplıklarını bir güvenlik aracıyla birlikte çalıştırmak sahte bir koruma hissi yaratır.
Debian/Ubuntu için:
sudo apt update && sudo apt upgrade -yCentOS/RHEL 7 için:
sudo yum update -yRocky Linux / AlmaLinux / RHEL 8+ için:
sudo dnf update -yFedora için:
sudo dnf update -yclamonacc (gerçek zamanlı tarama), kararlı fanotify desteği için kernel 5.1+ gerektirdiğinden, kernel ve glibc sürümlerinizin güncel olduğunu doğrulayın.
Adım 2: ClamAV’ı Kurun
ClamAV, tüm büyük dağıtımların varsayılan depolarında mevcuttur. Temel ayrım, yalnızca tarayıcıyı (clamav) mı yoksa arka plan daemon’ını da (clamav-daemon / clamd) mı kurduğunuzdur; bu, herhangi bir üretim sunucusu için kesinlikle önerilir.
Debian/Ubuntu için:
sudo apt install clamav clamav-daemon -yclamav—clamscanvefreshclam‘ı kurarclamav-daemon— virüs veritabanını bellekte yüklü tutan ve tarama başına yükü önemli ölçüde azaltan kalıcı tarama daemon’ıclamd‘ı kurar
CentOS/RHEL 7 için (EPEL gerektirir):
sudo yum install epel-release -y
sudo yum install clamav clamav-update clamav-scanner-systemd clamd -yRocky Linux / AlmaLinux / RHEL 8+ için (EPEL gerektirir):
sudo dnf install epel-release -y
sudo dnf install clamav clamav-update clamd -yFedora için:
sudo dnf install clamav clamav-update clamd -yKurulum sonrası doğrulanacak ikili konumlar:
| İkili | Yol | Amaç |
|---|---|---|
clamscan | /usr/bin/clamscan | İsteğe bağlı CLI tarayıcı |
clamd | /usr/sbin/clamd | Arka plan tarama daemon’ı |
freshclam | /usr/bin/freshclam | Virüs veritabanı güncelleyici |
clamdscan | /usr/bin/clamdscan | clamd‘a yetki devreden istemci |
clamonacc | /usr/sbin/clamonacc | Gerçek zamanlı erişim anında tarayıcı |
Adım 3: Virüs İmza Veritabanını Güncelleyin
ClamAV’ın tespit kapasitesi tamamen imza veritabanının güncelliğine bağlıdır. Veritabanı /var/lib/clamav/ konumunda bulunur ve birkaç dosyadan oluşur: main.cvd, daily.cvd (veya .cld) ve bytecode.cvd.
İlk Güncellemeden Önce Daemon’ı Durdurun (Debian/Ubuntu)
Debian/Ubuntu sistemlerinde, clamav-freshclam.service kurulumdan sonra otomatik olarak çalışır ve veritabanı dizinini kilitler. Bu servis etkinken freshclam‘ı manuel olarak çalıştırmaya çalışırsanız, bir kilit çakışmasıyla karşılaşırsınız. Önce durdurun:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclamCentOS/RHEL/Rocky/Alma’da:
sudo freshclamBaşarılı bir güncellemede beklenen çıktı:
ClamAV update process started at ...
daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
main.cvd is up to date
bytecode.cvd is up to dateOtomatik Veritabanı Güncellemelerini Yapılandırın
freshclam, /etc/clamav/freshclam.conf tarafından kontrol edilir. Gözden geçirilecek temel yönergeler:
sudo nano /etc/clamav/freshclam.confKritik parametreler:
Checks 24— günlük güncelleme kontrolü sayısı (bazı dağıtımlarda varsayılan: 12)DatabaseMirror database.clamav.net— resmi ayna; özel bir ayna kullanmadıkça değiştirmeyinNotifyClamd /etc/clamav/clamd.conf— bir güncellemeden sonrafreshclam‘ınclamd‘a sinyal göndermesini sağlar, böylece daemon yeniden başlatılmadan imzaları yeniden yükler
Adım 4: ClamAV Daemon’ını Yapılandırın ve Başlatın
clamd daemon’ı, tam virüs veritabanını RAM’de tutar (veritabanı sürümüne bağlı olarak genellikle 500 MB–1,2 GB). Bu, clamscan‘ın saniyeler süren başlangıç maliyetini ortadan kaldırır ve sık veya eşzamanlı taramalar gerçekleştiren herhangi bir ortam için vazgeçilmez kılar.
Debian/Ubuntu
sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon
sudo systemctl status clamav-daemonCentOS/RHEL 7
RHEL 7’de, servis birimi clamd@scan olarak adlandırılır ve /etc/clamd.d/scan.conf yapılandırma dosyasına başvurur:
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scanRocky Linux / AlmaLinux / RHEL 8+
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scanTemel clamd.conf Parametreleri
Daemon yapılandırması, Debian/Ubuntu’da /etc/clamav/clamd.conf veya RHEL ailesinde /etc/clamd.d/scan.conf konumunda bulunur. Bu yönergeleri gözden geçirin:
sudo nano /etc/clamav/clamd.confÖnemli ayarlar:
LocalSocket /run/clamav/clamd.ctl—clamdscantarafından kullanılan Unix soket yolu; istemci yapılandırmanızla eşleştiğinden emin olunMaxFileSize 100M— taranacak maksimum dosya boyutu; büyük ekler işleyen posta sunucuları için artırınMaxScanSize 400M— sıkıştırma açıldıktan sonra dosya başına taranan maksimum veriStreamMaxLength 100M— milter/akış tabanlı tarama için geçerlidirUser clamav— daemon,clamavkullanıcısı olarak çalışır; bu kullanıcının taramayı planladığınız dizinlere okuma erişimi olduğundan emin olunLogFile /var/log/clamav/clamd.log— denetim izleri için kalıcı günlüğü etkinleştirin
Kritik tuzak: clamd kullanıcı clamav olarak çalışıyorsa ve /home/user/uploads/‘ı tarıyorsanız, clamav kullanıcısının o yola okuma izinleri olmalıdır. Bunu unutmak sessiz tarama hatalarına yol açar — clamd, temiz/virüslü kararı döndürmek yerine günlüğünde “Erişim reddedildi” hataları bildirir.
Adım 5: clamscan ve clamdscan ile Tarama Çalıştırma
clamscan ile İsteğe Bağlı Tarama
clamscan bağımsız tarayıcıdır. Her çağrıda veritabanını diskten yükler, bu da onu daha yavaş ama daemon’dan bağımsız kılar.
Belirli bir dizini özyinelemeli olarak tarayın:
clamscan -r /path/to/directoryYalnızca virüslü dosyaları tarayın ve görüntüleyin:
clamscan -r --infected /path/to/directoryAyrıntılı çıktıyla tarayın ve sonuçları kaydedin:
sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/htmlVirüslü dosyaları karantina dizinine taşıyın:
sudo clamscan -r --move=/var/quarantine /path/to/directoryVirüslü dosyaları otomatik olarak kaldırın (üretimde dikkatli kullanın):
sudo clamscan -r --remove /path/to/directoryTüm dosya sistemini tarayın (büyük disklerde önemli çalışma süresi bekleyin):
sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" //sys, /proc ve /dev‘ı hariç tutmak zorunludur — bu sahte dosya sistemlerini taramak yanlış hatalara ve takılmalara neden olabilir.
clamdscan ile Yüksek Performanslı Tarama
clamd çalışırken, clamscan yerine clamdscan kullanın. Tarama isteklerini Unix soketi üzerinden zaten yüklenmiş daemon’a gönderir ve tekrarlanan veya toplu taramalar için çok daha hızlı hale getirir.
clamdscan --fdpass /path/to/directory--fdpass bayrağı, dosya tanımlayıcısını doğrudan clamd‘a iletir ve daemon kullanıcısının hedef yolu doğrudan okuyamadığı durumlarda ortaya çıkan izin sorunlarını atlar.
clamdscan ile çok iş parçacıklı tarama:
clamdscan --multiscan --fdpass /var/www/html--multiscan, clamd‘a iş parçacığı havuzunu kullanarak dosyaları paralel olarak taramasını söyler ve çok çekirdekli sistemlerde duvar saati süresini önemli ölçüde azaltır.
clamscan ile clamdscan: Performans Karşılaştırması
| Özellik | `clamscan` | `clamdscan` |
|---|---|---|
| Tarama başına veritabanı yükleme | Evet (yavaş başlangıç) | Hayır (daemon DB’yi RAM’de tutar) |
| Tipik başlangıç süresi | 5–30 saniye | 1 saniyenin altında |
clamd çalışması gerekir | Hayır | Evet |
| Paralel tarama | Hayır | Evet (--multiscan) |
| En iyi kullanım durumu | Tek seferlik manuel taramalar | Otomatik, sık veya toplu taramalar |
| İzin modeli | Çağıran kullanıcı olarak çalışır | clamav kullanıcısı olarak çalışır (--fdpass kullanın) |
Adım 6: Cron ile Taramayı Otomatikleştirin
Sürekli koruma için, cron kullanarak düzenli taramalar zamanlayın. Aşağıdaki örnek, web kökünü her gün sabah 02:00’de tarar ve sonuçları zaman damgasıyla kaydeder.
sudo crontab -eAşağıdaki girişi ekleyin:
0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/htmlE-posta uyarılı üretim düzeyinde cron:
0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.comBu, boş olmayan çıktıyı doğrudan bir posta alıcısına yönlendirir ve yalnızca bir şey bulunduğunda veya bir hata oluştuğunda uyarı almanızı sağlar. Sunucuda mailutils veya postfix‘ın yapılandırıldığından emin olun.
Sınırsız disk büyümesini önlemek için tarama günlüklerini döndürün:
sudo nano /etc/logrotate.d/clamav-scan/var/log/clamav/daily_scan_*.log {
weekly
rotate 4
compress
missingok
notifempty
}Adım 7: clamonacc ile Gerçek Zamanlı Erişim Anında Tarama
clamonacc, ClamAV 0.102’de kararlı bir özellik olarak tanıtılan ClamAV’ın erişim anında tarama bileşenidir. Dosya açma ve kapatma olaylarını yakalamak için Linux kernel’inin fanotify alt sistemine bağlanır ve dosyalara erişilmeden önce tarar.
Gereksinimler:
- Linux kernel 5.1 veya üzeri (
FAN_OPEN_EXEC_PERMilefanotifyiçin) - ClamAV 0.102+
clamdçalışıyor olmalıdır- Root ayrıcalıkları
clamd.conf‘da Erişim Anında Taramayı Etkinleştirin
sudo nano /etc/clamav/clamd.confEkleyin veya yorumu kaldırın:
OnAccessIncludePath /home
OnAccessIncludePath /var/www/html
OnAccessPrevention yes
OnAccessExcludeUname clamavOnAccessPrevention yes— virüslü dosyalara gerçek zamanlı erişimi engeller (engelleme modu); yalnızca tespit modu içinnoolarak ayarlayınOnAccessExcludeUname clamav—clamd‘ın kendisinin özyinelemeli tarama döngülerini tetiklemesini önler
clamonacc‘ı Başlatın
sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonizeSystemd servisi olarak çalıştırmak için bir birim dosyası oluşturun:
sudo nano /etc/systemd/system/clamonacc.service[Unit]
Description=ClamAV On-Access Scanner
Requires=clamav-daemon.service
After=clamav-daemon.service
[Service]
Type=simple
ExecStart=/usr/sbin/clamonacc --log=/var/log/clamav/clamonacc.log --foreground
Restart=on-failure
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now clamonaccBilinen tuzak: Yüksek verimli sunucularda (örn. yoğun dosya yükleme uç noktaları), OnAccessPrevention yes ölçülebilir I/O gecikmesi yaratabilir. Üretimde engelleme modunu etkinleştirmeden önce iş yükünüzü kıyaslayın. OnAccessIncludePath‘ı / gibi geniş dizinler yerine mümkün olan en dar yola kapsamayı düşünün.
Adım 8: ClamAV’ı Posta Sunucularıyla Entegre Etme
ClamAV’ın en yaygın üretim kullanım durumu posta ağ geçidi taramasıdır. VPS Hosting veya Dedicated Servers altyapınızda bir posta sunucusu çalıştırıyorsanız, ClamAV’ı MTA’nızla entegre etmek kritik bir güvenlik katmanıdır.
Yaygın entegrasyon yığınları:
- Postfix + amavisd-new + ClamAV —
amavisd-new, Postfix ile ClamAV arasında içerik filtresi olarak görev yapar ve SpamAssassin’i de yönetir - Postfix + clamsmtp — hafif milter tarzı proxy
- Exim + ClamAV — yerel Exim
av_scanneryönergesi, soket üzerinden doğrudanclamd‘ı destekler
Örnek: clamd entegrasyonu /etc/exim4/exim4.conf‘da:
av_scanner = clamd:/run/clamav/clamd.ctlBu tek yönerge, tüm mesaj içeriğini teslimattan önce çalışan clamd örneğinden geçirir. Posta altyapınızın tam olarak korunduğundan emin olmak için bunu uygun Email Hosting yapılandırmasıyla eşleştirin.
Yaygın ClamAV Sorunlarını Giderme
freshclam “başka bir işlem tarafından kilitlendi” Hatasıyla Başarısız Oluyor
sudo systemctl stop clamav-freshclam
sudo rm -f /var/lock/clamav/freshclam.lock
sudo freshclam
sudo systemctl start clamav-freshclamclamd Başlatılamıyor: “HATA: Yapılandırma dosyası açılamıyor/ayrıştırılamıyor”
Yapılandırma dosyası yolunu ve sözdizimini doğrulayın:
sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50Yüksek Bellek Kullanımı
clamd genellikle tam veritabanı yüklüyken 500 MB–1,2 GB RAM tüketir. Bellek kısıtlı sistemlerde şunları düşünün:
- Eşzamanlılığı sınırlamak için
clamd.conf‘daMaxThreads 2ayarını yapın - Seyrek taramalar için daemon olmadan
clamscankullanın - Yeterli RAM’e sahip bir plana yükseltin —
clamd‘ı bir web yığınıyla birlikte çalıştırmak için en az 2 GB RAM’e sahip bir VPS Hosting planı pratik minimumdur
Tarama Dosyalar için “Erişim reddedildi” Döndürüyor
clamd daemon’ı clamav kullanıcısı olarak çalışır. Okuma erişimi verin:
sudo setfacl -R -m u:clamav:rX /path/to/scanVeya çağıran kullanıcının bağlamından dosya tanımlayıcıları iletmek için clamdscan --fdpass kullanın.
Yanlış Pozitifler
ClamAV zaman zaman meşru dosyaları, özellikle sıkıştırılmış arşivleri veya belirli PHP çerçevelerini işaretler. Bilinen güvenli bir dosyayı karma ile beyaz listeye eklemek için:
sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp.fp dosyalarını değiştirdikten sonra clamd‘ı yeniden başlatın.
Paylaşımlı Hosting, VPS ve Dedicated Server’da ClamAV
Dağıtım modeli, ClamAV’ın nasıl yapılandırılması gerektiğini önemli ölçüde etkiler:
| Ortam | Önerilen Mod | Notlar |
|---|---|---|
| Shared Web Hosting | Cron aracılığıyla isteğe bağlı clamscan | Root erişimi yok; daemon modu kullanılamaz |
| VPS (2–4 GB RAM) | clamd daemon + cron clamdscan | Performansı bellek kısıtlamalarıyla dengeleyin |
| Dedicated Server | clamd + clamonacc + posta entegrasyonu | Tam özellik seti; kaynak ödünleşimi yok |
| GPU/Yüksek hesaplama düğümü | Yalnızca clamd daemon | Veri hatlarında clamonacc I/O yükünden kaçının |
Maksimum verim ve güvenlik araçları üzerinde tam kontrol gerektiren ortamlar için, Dedicated Servers, kaynak çekişmesi olmadan clamd, clamonacc ve posta taramasını eş zamanlı çalıştırmak için gereken donanım kapasitesini sağlar.
Teknik Karar Matrisi ve Temel Çıkarımlar
ClamAV’ı dağıtmadan önce aşağıdakilerin her birini doğrulayın:
- Kernel sürümü —
uname -rçalıştırın;clamonaccgerekiyorsa 5.1+ olduğunu doğrulayın - Mevcut RAM —
clamd1–1,5 GB gerektirir; daemon’ı etkinleştirmeden önce buna göre planlayın freshclamotomasyonu —clamav-freshclam.service‘ın etkin olduğunu vefreshclam.conf‘daNotifyClamd‘ın ayarlandığını doğrulayın- Soket izinleri —
clamavkullanıcısının tüm tarama hedeflerini okuyabildiğini doğrulayın; ACL’lerin pratik olmadığı durumlardaclamdscanile--fdpasskullanın - Hariç tutma yolları — özyinelemeli taramalardan her zaman
/proc,/sys,/dev‘ı hariç tutun - Günlük döndürme — günlük cron işlerini etkinleştirmeden önce tüm ClamAV günlük dosyaları için
logrotateuygulayın OnAccessPrevention— üretim sistemlerinde engelleme moduna (yes) geçmeden önce yalnızca tespit modunda (no) test edin- Posta entegrasyonu — bir posta sunucusu çalıştırıyorsanız, yalnızca periyodik dosya taramaları değil,
amavisd-newveya yerel MTAav_scanneryönergesi aracılığıyla entegre edin - Karantina dizini —
--movekullanmadan önce uygun sahiplikle/var/quarantine‘ı önceden oluşturun;clamscanbunu otomatik olarak oluşturmaz - Yanlış pozitif yönetimi — bir
.fpbeyaz liste dosyası tutun ve gerileme için her veritabanı güncellemesinden sonra tarama günlüklerini gözden geçirin
Sıkça Sorulan Sorular
ClamAV varsayılan olarak Linux’ta gerçek zamanlı koruma sağlar mı?
Hayır. Kurulumdan sonra ClamAV yalnızca isteğe bağlı modda çalışır. Gerçek zamanlı koruma, clamd.conf‘da clamonacc ile OnAccessIncludePath ve OnAccessPrevention yönergelerinin açıkça etkinleştirilmesini ve fanotify‘ı destekleyen bir kernel (5.1+) gerektirir.
clamscan ile clamdscan arasındaki fark nedir?
clamscan, her çağrıda virüs veritabanını diskten yükleyen bağımsız bir ikilidir ve 5–30 saniyelik başlangıç gecikmesine neden olur. clamdscan, veritabanını RAM’de tutan zaten çalışan clamd daemon’ına tarama işleri gönderen ince bir istemcidir — bu da onu tekrarlanan veya otomatik taramalar için önemli ölçüde daha hızlı kılar.
ClamAV’ın daemon’ı ne kadar RAM gerektirir?
Mevcut tam veritabanıyla (main + daily + bytecode) clamd genellikle 700 MB ile 1,2 GB arasında yerleşik bellek gerektirir. Toplam RAM’i 2 GB’ın altında olan sistemlerde, daemon’ı bir web sunucusu veya veritabanıyla birlikte çalıştırmak bellek baskısına neden olabilir. Bellek kısıtlı örneklerde daemon olmadan clamscan kullanın.
ClamAV sıkıştırılmış arşivleri ve e-posta eklerini tarayabilir mi?
Evet. ClamAV, ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB ve diğer birçok arşiv formatını, ayrıca OLE2 belgelerini (Microsoft Office), PDF dosyalarını ve ELF/PE yürütülebilir dosyalarını yerel olarak açar ve tarar. clamd.conf‘daki MaxScanSize ve MaxFileSize yönergeleri, arşiv taraması için derinlik ve boyut sınırlarını kontrol eder.
Neden freshclam kurulumdan hemen sonra “başka bir işlem tarafından kilitlendi” bildiriyor?
Debian/Ubuntu’da, clamav-freshclam systemd servisi paket kurulumundan sonra otomatik olarak başlar ve veritabanı dizini üzerinde özel bir kilit tutar. Bu servis etkinken freshclam‘ı manuel olarak çalıştırmak bir kilit çakışmasına neden olur. Servisi sudo systemctl stop clamav-freshclam ile durdurun, manuel güncellemeyi çalıştırın, ardından servisi yeniden başlatın.
