OSSEC ile Linux Üzerinde Saldırı Tespit Sistemi Kurulumu
Sunucularınızda neler olduğunu bilmeden güvenlik sağlayamazsınız. Log dosyaları binlerce satır içeriyor, her gece manuel inceleme yapmak mümkün değil ve bir saldırı gerçekleştiğinde çoğu zaman çok geç kalınıyor. İşte tam bu noktada OSSEC devreye giriyor. Açık kaynaklı, güçlü ve ücretsiz bir Host-based Intrusion Detection System (HIDS) olan OSSEC, log analizi, dosya bütünlüğü kontrolü, rootkit tespiti ve gerçek zamanlı uyarı gibi kritik özellikleri tek çatı altında topluyor. Bu yazıda OSSEC’i sıfırdan kurarak production ortamında nasıl kullanabileceğinizi, gerçek saldırı senaryolarına karşı nasıl yapılandırabileceğinizi adım adım anlatacağım.
OSSEC Nedir ve Neden Kullanmalısınız?
OSSEC, temel olarak iki modda çalışır. Agent modu ve Agentless (serverless) modu. Çoğu kurumsal ortamda merkezi bir OSSEC Manager kurulur, izlemek istediğiniz her sunucuya da agent yüklenir. Manager tüm logları toplar, analiz eder ve anormal bir durum tespit ettiğinde sizi uyarır.
OSSEC’in öne çıkan özellikleri şunlardır:
- Log Analizi: Syslog, Apache, Nginx, SSH, Windows Event Log gibi onlarca kaynaktan log toplar
- File Integrity Monitoring (FIM): Kritik dosyalarda yapılan değişiklikleri anında tespit eder
- Rootkit Detection: Sistemde gizli process veya dosya olup olmadığını kontrol eder
- Active Response: Saldırı tespit edildiğinde otomatik olarak IP engelleyebilir
- Policy Auditing: Sistem konfigürasyonunu güvenlik standartlarına göre denetler
Alternatif olarak Wazuh da var tabii, OSSEC’in fork’u ve biraz daha modern arayüze sahip. Ama temel mekanizma aynı, OSSEC’i öğrenirseniz Wazuh’a geçiş de çok kolay oluyor.
Ortam Hazırlığı ve Kurulum Planı
Bu yazıda şu senaryoyu kullanacağız:
- Manager (Sunucu): Ubuntu 22.04 LTS, IP: 192.168.1.10
- Agent 1: Ubuntu 22.04 LTS web sunucusu, IP: 192.168.1.20
- Agent 2: CentOS 7 uygulama sunucusu, IP: 192.168.1.30
Önce Manager’ı kuracağız, ardından her iki agent’ı ekleyeceğiz. Son olarak da gerçek dünya senaryoları için özel kurallar yazacağız.
OSSEC Manager Kurulumu
Bağımlılıkların Yüklenmesi
# Ubuntu/Debian için gerekli paketler
apt-get update && apt-get upgrade -y
apt-get install -y build-essential libssl-dev libpcre2-dev
zlib1g-dev libsystemd-dev gcc make wget curl
# SELinux veya AppArmor durumunu kontrol edin
aa-status
OSSEC İndirme ve Derleme
# En güncel stabil sürümü indirin (bu yazı yazıldığında 3.7.0)
cd /opt
wget https://github.com/ossec/ossec-hids/archive/refs/tags/3.7.0.tar.gz
tar -xzf 3.7.0.tar.gz
cd ossec-hids-3.7.0
# Kurulum scriptini çalıştırın
./install.sh
Kurulum scripti size birkaç soru soracak. Önemli seçimler şunlar:
- Installation type:
serverseçin (Manager için) - Installation directory:
/var/ossecvarsayılanı iyidir - Email notifications: Şimdilik
ydeyin ve bir e-posta adresi girin - Enable syslog:
y - Enable active response:
y
Manager Servisini Başlatma
# Servisi başlat
/var/ossec/bin/ossec-control start
# Durum kontrolü
/var/ossec/bin/ossec-control status
# Çıktı şuna benzemelidir:
# ossec-monitord is running...
# ossec-logcollector is running...
# ossec-remoted is running...
# ossec-syscheckd is running...
# ossec-analysisd is running...
# ossec-maild is running...
# ossec-execd is running...
Manager Firewall Kuralları
OSSEC Agent-Manager iletişimi UDP 1514 portunu kullanır. Syslog için ise UDP 514 gerekebilir.
# UFW ile
ufw allow 1514/udp
ufw allow 514/udp
ufw allow 1515/tcp # Agent registration için
# iptables ile
iptables -A INPUT -p udp --dport 1514 -j ACCEPT
iptables -A INPUT -p tcp --dport 1515 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
OSSEC Agent Kurulumu
Agent kurulumu Manager ile benzer, sadece kurulum tipinde farklılık var.
# Agent sunucusuna bağlanın (192.168.1.20)
cd /opt
wget https://github.com/ossec/ossec-hids/archive/refs/tags/3.7.0.tar.gz
tar -xzf 3.7.0.tar.gz
cd ossec-hids-3.7.0
./install.sh
# Bu sefer installation type olarak "agent" seçin
# Manager IP'si sorulduğunda 192.168.1.10 girin
Agent Kayıt İşlemi
Agent ile Manager arasındaki iletişimi güvenli hale getirmek için kayıt yapılması gerekiyor. Bu işlemi Manager tarafında yapıyoruz.
# Manager üzerinde agent yönetim aracını çalıştırın
/var/ossec/bin/manage_agents
# Menüden "A" seçin (Add an agent)
# Agent için bir isim verin: webserver-01
# Agent IP'sini girin: 192.168.1.20
# Otomatik atanan ID'yi not alın (örneğin 001)
# Ardından "E" seçin (Extract key for an agent)
# 001 numaralı agent için anahtarı kopyalayın
Şimdi Agent sunucusuna geçin ve anahtarı içe aktarın:
# Agent sunucusunda
/var/ossec/bin/manage_agents
# "I" seçin (Import key from the server)
# Manager'dan kopyaladığınız anahtarı yapıştırın
# Onaylayın
# Agent servisini başlatın
/var/ossec/bin/ossec-control start
# Manager'da bağlantıyı doğrulayın
/var/ossec/bin/agent_control -la
# Çıktıda agent'ın "Active" olduğunu görmeli siniz
OSSEC Konfigürasyon Dosyası Detayları
OSSEC’in kalbi /var/ossec/etc/ossec.conf dosyasıdır. Bu XML dosyasında her şeyi kontrol edebilirsiniz.
E-posta Uyarıları Yapılandırma
<ossec_config>
<global>
<email_notification>yes</email_notification>
<email_to>[email protected]</email_to>
<smtp_server>mail.sirket.com</smtp_server>
<email_from>[email protected]</email_from>
<email_maxperhour>20</email_maxperhour>
<!-- Sadece level 7 ve üzeri alertler için mail gönder -->
<email_alert_level>7</email_alert_level>
</global>
Dosya Bütünlüğü İzleme (FIM) Yapılandırması
FIM, OSSEC’in en güçlü özelliklerinden biri. Kritik dosyalar üzerinde yapılan her değişikliği anında yakalıyor.
<syscheck>
<!-- Kontrol sıklığı: 43200 saniye = 12 saat -->
<frequency>43200</frequency>
<!-- Gerçek zamanlı izleme (inotify kullanır) -->
<directories check_all="yes" realtime="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes" realtime="yes">/bin,/sbin</directories>
<!-- Web sunucusu için kritik dizinler -->
<directories check_all="yes" realtime="yes">/var/www/html</directories>
<!-- İzlemeden hariç tutulacaklar -->
<ignore>/etc/mtab</ignore>
<ignore>/etc/hosts.deny</ignore>
<ignore>/etc/mail/statistics</ignore>
<ignore type="sregex">.log$|.tmp$|.swp$</ignore>
<!-- Alert seviyesi ayarı -->
<alert_new_files>yes</alert_new_files>
</syscheck>
Log Kaynakları Ekleme
<localfile>
<log_format>syslog</log_format>
<location>/var/log/auth.log</location>
</localfile>
<localfile>
<log_format>apache</log_format>
<location>/var/log/apache2/access.log</location>
</localfile>
<localfile>
<log_format>apache</log_format>
<location>/var/log/nginx/access.log</location>
</localfile>
<!-- Docker log'ları için -->
<localfile>
<log_format>syslog</log_format>
<location>/var/log/docker.log</location>
</localfile>
Özel Kural Yazımı
OSSEC varsayılan kurallar ile gelir ama kendi ortamınıza özel kurallar yazmanız gerekecek. Kurallar /var/ossec/rules/ dizininde bulunur. Özel kurallarınızı /var/ossec/rules/local_rules.xml dosyasına yazın. Böylece OSSEC güncellemelerinde kaybolmazlar.
Brute Force SSH Saldırısı Tespiti
<!-- /var/ossec/rules/local_rules.xml -->
<group name="local,sshd,">
<!-- 5 dakika içinde 10 başarısız SSH denemesi -->
<rule id="100001" level="10" frequency="10" timeframe="300">
<if_matched_sid>5760</if_matched_sid>
<same_source_ip />
<description>SSH brute force saldirisi tespit edildi - Cok fazla basarisiz giris denemesi</description>
<group>authentication_failures,pci_dss_11.4,gdpr_IV_35.7.d,</group>
</rule>
<!-- Root ile SSH girisi denemesi -->
<rule id="100002" level="12">
<if_sid>5760</if_sid>
<match>invalid user root</match>
<description>Root ile SSH giris denemesi engellendi</description>
<group>authentication_failed,pci_dss_10.2.4,</group>
</rule>
</group>
Web Uygulaması Saldırı Tespiti
<group name="local,web,apache,nginx,">
<!-- SQL Injection tespiti -->
<rule id="100010" level="10">
<if_group>web|accesslog</if_group>
<url_match>union.*select|select.*from|insert.*into|drop.*table</url_match>
<description>Potansiyel SQL Injection girisimi tespit edildi</description>
<group>attack,sql_injection,pci_dss_6.5.1,</group>
</rule>
<!-- Dizin gezinme saldirisi -->
<rule id="100011" level="8">
<if_group>web|accesslog</if_group>
<url_match>../../|..\..\</url_match>
<description>Dizin gecis saldirisi (Path Traversal) tespit edildi</description>
<group>attack,web_attack,</group>
</rule>
<!-- WordPress xmlrpc.php brute force -->
<rule id="100012" level="9" frequency="20" timeframe="60">
<if_group>web|accesslog</if_group>
<url_match>xmlrpc.php</url_match>
<same_source_ip />
<description>WordPress xmlrpc.php brute force saldirisi</description>
<group>attack,wordpress,</group>
</rule>
</group>
Kuralları yazdıktan sonra OSSEC’i yeniden yükleyin:
/var/ossec/bin/ossec-control reload
# veya
/var/ossec/bin/ossec-analysisd -t # Kural sözdizimi kontrolü
Active Response Yapılandırması
OSSEC sadece uyarı vermekle kalmaz, saldırıya otomatik tepki de verebilir. En yaygın kullanım senaryosu şüpheli IP’leri otomatik olarak engellemektir.
<!-- ossec.conf içinde -->
<active-response>
<!-- Brute force saldırısında IP engelle -->
<command>firewall-drop</command>
<location>local</location>
<rules_id>100001,5720</rules_id>
<timeout>3600</timeout> <!-- 1 saat engelle -->
</active-response>
<active-response>
<!-- Agent üzerinde de uygula -->
<command>firewall-drop</command>
<location>defined-agent</location>
<agent_id>001</agent_id>
<rules_id>100001</rules_id>
<timeout>1800</timeout>
</active-response>
Whitelist eklemek çok önemli, yoksa kendi IP’nizi engelleyebilirsiniz:
<global>
<white_list>127.0.0.1</white_list>
<white_list>192.168.1.0/24</white_list> <!-- İç ağınız -->
<white_list>10.0.0.1</white_list> <!-- VPN Gateway -->
</global>
Gerçek Dünya Senaryosu: Web Sunucusu Saldırı Tespiti
Bir sabah Nginx access loglarınızda şüpheli aktivite fark ediyorsunuz. OSSEC bunu nasıl yakalar, görelim.
Saldırgan 192.168.1.100 IP’sinden sisteminize SQL injection deniyor. OSSEC analizi şöyle çalışır:
# Manuel log analizi ile OSSEC'in yakalamasını test edin
# Test amaçlı bir log girdisi oluşturun
echo '192.168.1.100 - - [10/Jan/2024:14:23:01 +0300] "GET /index.php?id=1 UNION SELECT username,password FROM users-- HTTP/1.1" 200 512' >> /var/log/nginx/access.log
# OSSEC'in bunu yakalayıp yakalamadığını kontrol edin
tail -f /var/ossec/logs/alerts/alerts.log
# Alert çıktısı şuna benzemelidir:
# ** Alert 1704885781.52341: mail - local,web,attack,sql_injection
# 2024 Jan 10 14:23:01 webserver-01->/var/log/nginx/access.log
# Rule: 100010 (level 10) -> 'Potansiyel SQL Injection girisimi tespit edildi'
# Src IP: 192.168.1.100
# Jan 10 14:23:01 192.168.1.100 - - GET /index.php?id=1 UNION SELECT...
Active response devredeyse bu IP otomatik olarak engellenmiş olacak. Kontrol edelim:
# iptables üzerinde engellenen IP'leri görün
iptables -L INPUT -n | grep 192.168.1.100
# OSSEC active response logları
cat /var/ossec/logs/active-responses.log
OSSEC Loglarını ve Alertleri Yönetme
Günlük iş akışınızda alertleri nasıl takip edeceğinizi bilmek önemli.
# Bugünkü tüm alertleri listele
cat /var/ossec/logs/alerts/alerts.log | grep "^** Alert" | wc -l
# Level 10 ve üzeri kritik alertler
grep -A 5 "level 1[0-9]" /var/ossec/logs/alerts/alerts.log
# Belirli bir IP'den gelen alertler
grep "Src IP: 192.168.1.100" /var/ossec/logs/alerts/alerts.log
# Son 24 saatin alert özetini çıkar
/var/ossec/bin/ossec-reportd
# Gerçek zamanlı alert izleme
tail -f /var/ossec/logs/alerts/alerts.log | grep -E "Rule:|Src IP:|description"
Alert Arşivleme
Production’da alert loglarınızı düzenli olarak arşivlemeniz gerekir. Basit bir cron job ile bunu otomatik hale getirebilirsiniz:
# /etc/cron.d/ossec-archive dosyası oluşturun
cat > /etc/cron.d/ossec-archive << 'EOF'
# Her gün gece 01:00'de logları sıkıştır ve arşivle
0 1 * * * root find /var/ossec/logs/alerts/ -name "*.log" -mtime +7 -exec gzip {} ;
0 2 * * * root find /var/ossec/logs/alerts/ -name "*.gz" -mtime +30 -exec mv {} /backup/ossec/ ;
EOF
OSSEC’i Grafana ile Görselleştirme
Alertleri görsel olarak takip etmek istiyorsanız, OSSEC loglarını Elasticsearch’e göndererek Kibana veya Grafana ile görselleştirebilirsiniz. Hızlı bir çözüm olarak Filebeat kullanabilirsiniz.
# Filebeat kurulumu
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.0-amd64.deb
dpkg -i filebeat-8.11.0-amd64.deb
# Filebeat konfigürasyonu
cat > /etc/filebeat/filebeat.yml << 'EOF'
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/ossec/logs/alerts/alerts.log
fields:
logtype: ossec
fields_under_root: true
output.elasticsearch:
hosts: ["localhost:9200"]
index: "ossec-alerts-%{+yyyy.MM.dd}"
EOF
systemctl enable filebeat
systemctl start filebeat
Performans Optimizasyonu
OSSEC büyük ortamlarda kaynak tüketebilir. Birkaç optimizasyon önerisi:
- scan_on_start: İlk başlangıçta tam tarama yapar, bunu
noolarak ayarlamak başlangıç süresini kısaltır - max_agents: Varsayılan 256’dır, büyük ortamlar için artırılabilir ama RAM gereksinimini de artırır
- FIM frekansı: Çok kritik olmayan dizinler için sıklığı 86400 saniye (24 saat) yapabilirsiniz
- Queue size:
/var/ossec/etc/internal_options.confiçindeanalysisd.queue_sizedeğerini artırmak yoğun ortamlarda faydalı olur
# OSSEC'in kaynak kullanımını izle
ps aux | grep ossec
top -p $(pgrep -d',' -f ossec)
# Queue doluluk durumunu kontrol et
cat /var/ossec/var/run/ossec-analysisd.state | grep msg_queue
Yaygın Sorunlar ve Çözümleri
Kurulum sonrası karşılaşabileceğiniz tipik problemler:
- Agent Manager’a bağlanamıyor: Firewall kurallarını ve UDP 1514 portunu kontrol edin.
tcpdump -i any port 1514ile trafiği izleyin - FIM çok fazla alert üretiyor: Exclude listesine geçici dosya dizinlerini ekleyin, özellikle
/tmpve/var/tmp - E-posta gelmiyor: SMTP ayarlarını kontrol edin,
sendmailveyapostfix‘in kurulu olduğundan emin olun - Agent “Never connected” görünüyor: Anahtar senkronizasyonunu tekrar yapın, zaman farkı olup olmadığını kontrol edin (NTP)
- ossec-analysisd başlamıyor:
/var/ossec/logs/ossec.logdosyasına bakın, çoğunlukla kural dosyalarında XML hatası vardır
# Tüm OSSEC loglarını canlı izle
tail -f /var/ossec/logs/ossec.log
# Konfigürasyon dosyası doğrulama
/var/ossec/bin/ossec-logtest
# Test logu göndererek kural testi yap
echo "Jan 10 15:30:00 server sshd[1234]: Failed password for invalid user admin from 10.0.0.1 port 22 ssh2" | /var/ossec/bin/ossec-logtest
Sonuç
OSSEC, doğru yapılandırıldığında ortamınızın güvenlik gözü haline gelir. Burada anlattıklarım temel bir kurulum ve yapılandırma için yeterli ama OSSEC’in yetenekleri çok daha geniş. PCI-DSS ve GDPR uyumluluk raporları üretebilir, Windows ortamlarını izleyebilir, Docker container loglarını analiz edebilir ve çok daha fazlasını yapabilirsiniz.
Başlangıç için tavsiyem: Önce sadece Manager ve bir test agent kurun. İlk hafta varsayılan kurallarla çalışın ve hangi alertlerin gerçekten önemli olduğunu anlayın. Sonra yavaş yavaş özel kurallar ekleyin ve false positive’leri azaltmaya odaklanın. Active response’u ise her şey stabil olduktan sonra devreye alın, yoksa kendi kendinizi kilitleyebilirsiniz.
Güvenlik bir ürün değil, süreçtir. OSSEC bu sürecin görünürlük ayağını güçlü biçimde karşılıyor. Bir sonraki yazıda OSSEC alertlerini Slack’e entegre etmeyi ve özel dashboard oluşturmayı ele alacağım.
