Giriş: Bro (Şimdiki Adıyla Zeek) Nedir ve Neden Önemlidir?
Ağ güvenliği ve izlemesi, günümüzün dijital dünyasında kritik bir öneme sahiptir. Bu alanda öne çıkan güçlü araçlardan biri de Bro olarak bilinen, şimdiki adıyla Zeek’tir. Zeek, ağ trafiğini derinlemesine analiz eden, yüksek performanslı, açık kaynaklı bir ağ güvenlik monitörüdür (NSM). Geleneksel IDS/IPS sistemlerinin ötesine geçerek, ağınızdaki her türlü etkinliği (bağlantılar, DNS sorguları, HTTP istekleri, SSL/TLS el sıkışmaları vb.) kapsamlı bir şekilde kaydeder ve bu verilerden güvenlik analistleri için anlamlı bilgiler çıkarır.
Zeek’in temel gücü, ağ trafiğini anlamlı olaylara dönüştürme yeteneğinde yatar. Bu olaylar, özel bir betik dili (Zeek Script Language) kullanılarak karmaşık analizler ve kural tabanlı tespitler için işlenebilir. Bu sayede, kötü amaçlı yazılım aktiviteleri, politika ihlalleri, veri sızıntıları ve diğer şüpheli davranışlar gibi tehditler proaktif bir şekilde tespit edilebilir. Ubuntu 16.04, Zeek’in kurulumu için o dönemde yaygın olarak kullanılan ve birçok sunucu ortamında hala mevcut olan sağlam bir işletim sistemidir. Bu rehberde, Zeek’i (eski adıyla Bro) Ubuntu 16.04 sisteminize kaynak koddan derleyerek nasıl kuracağınızı adım adım öğreneceksiniz.
Ön Gereksinimler ve Sistem Hazırlığı
Zeek kurulumuna başlamadan önce sisteminizin güncel olduğundan ve gerekli bağımlılıkların yüklü olduğundan emin olmalısınız. Bu adımlar, derleme sürecinin sorunsuz ilerlemesi için hayati öneme sahiptir.
Sistem Güncellemesi
İlk olarak, Ubuntu sisteminizin paket listesini güncelleyin ve mevcut tüm paketleri en son sürümlerine yükseltin:
sudo apt update
sudo apt upgrade -y
Gerekli Bağımlılıkların Kurulumu
Zeek’i kaynak koddan derlemek için çeşitli geliştirme araçlarına ve kütüphanelere ihtiyacımız olacak. Aşağıdaki komut, Zeek’in başarılı bir şekilde derlenmesi için gereken tüm bağımlılıkları yükleyecektir:
sudo apt install -y git cmake make gcc g++ libpcap-dev libssl-dev libjson-c-dev bison flex libgeoip-dev swig python-dev curl
git: Zeek kaynak kodunu GitHub’dan klonlamak için.cmake: Derleme yapılandırmasını yönetmek için.make: Kaynak kodu derlemek için.gcc,g++: C/C++ derleyicileri.libpcap-dev: Ağ paketlerini yakalamak için.libssl-dev: SSL/TLS desteği için.libjson-c-dev: JSON desteği için.bison,flex: Zeek betik dilini ayrıştırmak için.libgeoip-dev: Coğrafi konum verilerini kullanmak için (IP adreslerinden ülke bilgisi gibi).swig: Zeek’in Python gibi diğer dillerle entegrasyonu için.python-dev: Python entegrasyonu için gerekli Python geliştirme dosyaları.
Sistem Kaynakları
Zeek, özellikle yüksek trafikli ağlarda çalışırken önemli miktarda CPU, RAM ve disk alanı tüketebilir. Kurulum yapacağınız sunucunun yeterli kaynaklara sahip olduğundan emin olun:
- CPU: Özellikle yüksek hızda çalışan ağlar için birden fazla çekirdekli güçlü bir işlemci önerilir.
- RAM: Ağ trafiğinin hacmine bağlı olarak 8GB veya daha fazla RAM idealdir. Küçük ortamlar için 4GB yeterli olabilir.
- Disk Alanı: Zeek, tüm ağ etkinliklerini logladığı için kısa sürede çok fazla disk alanı kullanabilir. En az 50GB boş alan bulundurmanız, uzun vadede logları saklamak için ise daha fazla alan ayırmanız önerilir.
Bro/Zeek Kaynak Kodunu İndirme ve Derleme
Gerekli tüm bağımlılıklar yüklendikten sonra, Zeek’in kaynak kodunu indirip derleme işlemine geçebiliriz.
Zeek Kaynak Kodunu İndirme
Zeek’in en güncel kararlı sürümünü GitHub deposundan klonlayarak edinebiliriz. Genellikle /opt veya /usr/local/src gibi bir dizin bu tür kaynak kodları için tercih edilir. Biz /opt dizinini kullanalım:
cd /opt
sudo git clone --recursive https://github.com/zeek/zeek
cd zeek
--recursive bayrağı, Zeek’in ihtiyaç duyduğu tüm alt modülleri de klonlamasını sağlar.
Derleme ve Kurulum
Kaynak kodu indirdikten sonra, cmake ile derleme yapılandırmasını oluşturmalı, ardından make ile derlemeli ve son olarak make install ile sistemi kurmalıyız.
sudo mkdir build
cd build
sudo cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/zeek -DBROKER_DISABLE_TESTS=ON -DBUILD_SHARED_LIBS=ON
sudo make -j$(nproc)
sudo make install
sudo mkdir build && cd build: Derleme dosyalarını ayrı bir dizinde tutmak iyi bir uygulamadır.sudo cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/zeek -DBROKER_DISABLE_TESTS=ON -DBUILD_SHARED_LIBS=ON:..:cmake‘e üst dizindeki (/opt/zeek)CMakeLists.txtdosyasını kullanmasını söyler.-DCMAKE_INSTALL_PREFIX=/usr/local/zeek: Zeek’in kurulacağı dizini belirtir. Bu, Zeek dosyalarını sistem PATH’inden ayrı tutmak için iyi bir yöntemdir.-DBROKER_DISABLE_TESTS=ON: Broker bileşeninin testlerini devre dışı bırakır, derleme süresini kısaltır.-DBUILD_SHARED_LIBS=ON: Paylaşımlı kütüphaneler oluşturulmasını sağlar, bu bazı eklentiler için gerekli olabilir.
sudo make -j$(nproc):makekomutu, kaynak kodu derler.-j$(nproc)parametresi, sisteminizdeki CPU çekirdeği sayısı kadar paralel derleme işlemi başlatarak derleme süresini hızlandırır.sudo make install: Derlenmiş dosyalarıCMAKE_INSTALL_PREFIXile belirtilen/usr/local/zeekdizinine kopyalar.
PATH Ortam Değişkenini Ayarlama
Zeek komutlarını (zeekctl, zeek vb.) her yerden çalıştırabilmek için Zeek’in bin dizinini sistem PATH’ine eklememiz gerekir. Bunu kalıcı hale getirmek için kullanıcı profil dosyanıza ekleyebilirsiniz:
echo 'export PATH=/usr/local/zeek/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
Bu komutlar, Zeek’in bin dizinini ~/.bashrc dosyanıza ekler ve ardından bu dosyayı yeniden yükleyerek değişiklikleri mevcut oturumunuza uygular. Yeni bir terminal açtığınızda veya oturum açtığınızda PATH otomatik olarak ayarlanmış olacaktır.
Bro/Zeek Yapılandırması
Zeek’i başarıyla kurduktan sonra, onu ağınızı izlemek için yapılandırmanız gerekir. Temel yapılandırma dosyaları /usr/local/zeek/etc/ dizininde bulunur.
Ağ Arayüzü Ayarları (node.cfg)
Zeek’in hangi ağ arayüzünü dinlemesi gerektiğini belirtmelisiniz. Bu, node.cfg dosyasında yapılır.
sudo nano /usr/local/zeek/etc/node.cfg
Dosyanın içeriği aşağıdaki gibi görünmelidir. Kendi ağ arayüzünüze göre interface değerini düzenleyin. Ubuntu 16.04’te bu genellikle eth0 veya ens33 gibi bir isim olabilir. Ağ arayüzünüzü ip a veya ifconfig komutuyla öğrenebilirsiniz.
[zeek]
type=standalone
host=localhost
interface=eth0 # Kendi ağ arayüzünüzü buraya yazın (örneğin: ens33, enp0s3)
Ctrl+X, Y ve Enter tuşlarına basarak dosyayı kaydedip kapatın.
Zeekctl Ayarları (zeekctl.cfg)
zeekctl.cfg dosyası, Zeek kontrol komut dosyasının davranışını yapılandırır. Log dizini, e-posta bildirimleri gibi ayarları buradan yapabilirsiniz.
sudo nano /usr/local/zeek/etc/zeekctl.cfg
Aşağıdaki satırları kontrol edin ve gerektiğinde düzenleyin:
- Log Dizini: Zeek’in log dosyalarını nereye yazacağını belirtir. Genellikle
/usr/local/zeek/logsveya daha standart bir konum olan/var/log/zeektercih edilir. Eğer/var/log/zeekkullanacaksanız, bu dizini oluşturmanız ve Zeek kullanıcısına yazma izni vermeniz gerekebilir.
# Log directory
@redef Zeek::LogDir = "/usr/local/zeek/logs";
Veya daha standart bir konum için:
@redef Zeek::LogDir = "/var/log/zeek";
Eğer /var/log/zeek kullanmaya karar verirseniz:
sudo mkdir -p /var/log/zeek
sudo chown -R zeek:zeek /var/log/zeek # Zeek'i hangi kullanıcı ile çalıştırıyorsanız o kullanıcıya yetki verin. Genellikle root ile çalışır.
Bu rehberde root ile çalıştığımızı varsayarsak, /usr/local/zeek/logs varsayılan dizin yeterli olacaktır.
- E-posta Bildirimleri: Zeek, belirli olaylar için e-posta bildirimleri gönderebilir. Bu özelliği kullanmak isterseniz
email_alarms_tosatırını kendi e-posta adresinizle güncelleyebilirsiniz.
# Email addresses for alarms
email_alarms_to = you@example.com
Ayarları kaydettikten sonra dosyayı kapatın.
Bro/Zeek’i Çalıştırma ve Test Etme
Yapılandırma tamamlandıktan sonra Zeek’i başlatabilir ve düzgün çalışıp çalışmadığını kontrol edebiliriz.
Zeek’i Başlatma
Zeek’i başlatmak için zeekctl komutunu kullanırız. İlk çalıştırmada, Zeek’in dağıtımını (deploy) yapmanız gerekir:
sudo zeekctl deploy
Bu komut, Zeek yapılandırmasını derler ve Zeek süreçlerini başlatmak için gerekli dosyaları oluşturur. Daha sonra Zeek’i başlatabilirsiniz:
sudo zeekctl start
Eğer her şey yolundaysa, Zeek ağınızı izlemeye başlayacaktır.
Durumu Kontrol Etme
Zeek’in durumunu kontrol etmek için aşağıdaki komutu kullanın:
sudo zeekctl status
Çıktıda zeek sürecinin running olduğunu görmelisiniz.
Logları Kontrol Etme
Zeek, ağ trafiğini analiz ettikçe çeşitli log dosyaları oluşturur. Bu loglar varsayılan olarak /usr/local/zeek/logs/current/ dizininde bulunur. current sembolik bir bağlantıdır ve en son log dizinine işaret eder.
ls -l /usr/local/zeek/logs/current/
Burada conn.log, http.log, dns.log gibi dosyaları görmelisiniz. Bu dosyalar, Zeek’in ağ trafiğini başarıyla yakalayıp analiz ettiğinin bir göstergesidir. Log dosyalarının içeriğini görüntülemek için tail -f komutunu kullanabilirsiniz:
tail -f /usr/local/zeek/logs/current/conn.log
Şimdi başka bir terminalden veya aynı makineden internete yönelik basit bir trafik oluşturun (örneğin, ping google.com, curl example.com, web tarayıcınızdan bir siteye gidin). Log dosyasında yeni kayıtların belirdiğini görmelisiniz.
Zeek’i Durdurma
Zeek’i durdurmak için:
sudo zeekctl stop
Ek Bilgiler ve İpuçları
İzleme Modu (Promiscuous Mode)
Zeek’in ağdaki tüm trafiği görebilmesi için ağ arayüzünün “promiscuous mode” (izleme modu) açık olması gerekir. Genellikle Zeek, bu modu otomatik olarak açmaya çalışır. Ancak bazı durumlarda manuel olarak ayarlamanız gerekebilir. Arayüzünüzün izleme modunda olup olmadığını kontrol etmek için:
ip link show eth0 # veya kendi arayüz adınız
Çıktıda PROMISC bayrağını görmelisiniz. Eğer görmüyorsanız, manuel olarak açmayı deneyebilirsiniz:
sudo ip link set dev eth0 promisc on
Performans Optimizasyonu
- NIC Offloading: Ağ kartınızın donanım boşaltma (checksum offloading, large receive offloading vb.) özelliklerini kapatmak, Zeek’in daha doğru ve eksiksiz paket yakalamasına yardımcı olabilir. Bu ayarlar genellikle
ethtoolile yapılır. - BPF Filtreleri: Sadece belirli bir trafiği izlemek istiyorsanız, Zeek’i Berkeley Packet Filter (BPF) filtreleriyle yapılandırabilirsiniz. Bu, gereksiz trafiği atarak Zeek’in kaynak kullanımını azaltır. Örneğin, sadece HTTP trafiğini izlemek için
node.cfgdosyanızapcap_filter = "port 80"ekleyebilirsiniz. - Donanım: Yüksek hızlı (10Gbps+) ağlar için özel ağ kartları (örneğin, Intel X520/X540 serisi) ve yeterli CPU/RAM önemlidir.
Güncelleme
Zeek’i yeni bir sürüme güncellemek için, kaynak kodu klonladığınız dizine gidip git pull yaparak en son değişiklikleri çekebilir, ardından yukarıdaki derleme ve kurulum adımlarını tekrarlayabilirsiniz:
cd /opt/zeek
sudo git pull --recursive
cd build
sudo cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/zeek -DBROKER_DISABLE_TESTS=ON -DBUILD_SHARED_LIBS=ON
sudo make -j$(nproc)
sudo make install
sudo zeekctl deploy
sudo zeekctl restart
Log Yönetimi ve Entegrasyon
Zeek’in ürettiği loglar oldukça hacimli olabilir. Bu logları etkili bir şekilde yönetmek için:
- Log Rotation:
logrotategibi araçlarla Zeek loglarını düzenli olarak sıkıştırıp arşivleyebilir veya silebilirsiniz. Zeek’in kendi loglama mekanizması da vardır, ancak ek bir yönetim faydalı olabilir. - SIEM Entegrasyonu: Zeek logları genellikle JSON veya TSV (Tab Separated Values) formatında üretilir. Bu formatlar, Splunk, ELK Stack (Elasticsearch, Logstash, Kibana) veya diğer SIEM (Security Information and Event Management) çözümlerine kolayca entegre edilebilir. Bu, Zeek verilerini diğer güvenlik olaylarıyla korele etmenizi sağlar.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Ubuntu 16.04 işletim sistemi üzerinde Zeek’i (eski adıyla Bro) kaynak koddan nasıl kuracağınızı, temel yapılandırmaları nasıl yapacağınızı ve sistemi nasıl test edeceğinizi adım adım öğrendiniz. Zeek, ağ güvenliği izlemesi ve analizi için inanılmaz derecede güçlü ve esnek bir araçtır. Kurulumun ardından, Zeek’in geniş betik kütüphanesini ve özelleştirme yeteneklerini keşfetmek, ağınızdaki tehditleri daha etkin bir şekilde tespit etmenizi sağlayacaktır.
SSS (Sıkça Sorulan Sorular)
Bro ve Zeek arasındaki fark nedir?
Bro, 2018 yılında “Zeek” olarak yeniden markalandırıldı. İsim değişikliğinin nedeni, markanın daha geniş bir kitleye ulaşmasını sağlamak ve ismin olumsuz çağrışımlarını gidermekti. Temelde aynı yazılımdır; Zeek, Bro’nun devamı ve daha gelişmiş sürümüdür.
Zeek’i neden Ubuntu 16.04’e kurmalıyım? Daha yeni sürümler varken?
Ubuntu 16.04, artık EOL (End-of-Life) olmasına rağmen, bazı eski sistemlerde, özel projelerde veya belirli uyumluluk gereksinimleri olan ortamlarda hala kullanılıyor olabilir. Bu rehber, bu tür senaryolarda Zeek kurulumuna ihtiyaç duyan kullanıcılar için hazırlanmıştır. Yeni kurulumlar için her zaman daha güncel ve desteklenen bir işletim sistemi (örneğin Ubuntu 20.04 veya 22.04) kullanmanız önerilir.
Kurulumdan sonra Zeek çalışmıyor veya log üretmiyor, ne yapmalıyım?
Şu adımları kontrol edin:
sudo zeekctl statuskomutuyla Zeek süreçlerinin çalışıp çalışmadığını kontrol edin./usr/local/zeek/etc/node.cfgdosyasındakiinterfaceayarının doğru olduğundan ve Zeek’in dinlemesi gereken ağ arayüzünü gösterdiğinden emin olun.- Ağ arayüzünün izleme modunda (promiscuous mode) olduğundan emin olun (
sudo ip link set dev eth0 promisc on). /usr/local/zeek/logs/current/reporter.logvestderr.logdosyalarını kontrol ederek hata mesajları arayın.- Yeterli disk alanı olup olmadığını kontrol edin.
- Selinux veya AppArmor gibi güvenlik modüllerinin Zeek’i engellemediğinden emin olun. Gerekirse geçici olarak devre dışı bırakıp tekrar deneyin.
Zeek’in logları nerede depolanır?
Varsayılan olarak, Zeek logları /usr/local/zeek/logs/ dizininde, her dağıtım için tarih-saat damgalı bir alt dizinde (örn. 2023-10-27_15-30-00/) saklanır. /usr/local/zeek/logs/current sembolik bağlantısı her zaman en son log dizinine işaret eder. Bu konum /usr/local/zeek/etc/zeekctl.cfg dosyasındaki @redef Zeek::LogDir ayarı ile değiştirilebilir.
Daha fazla ağ trafiği izlemek için Zeek performansını nasıl artırabilirim?
Performansı artırmak için şunları yapabilirsiniz:
- Daha güçlü CPU ve daha fazla RAM’e sahip bir sunucu kullanın.
- Özel ağ kartları (örneğin, Intel X520/X540) kullanın ve NIC offloading özelliklerini devre dışı bırakın.
- BPF filtreleri kullanarak sadece ilgilendiğiniz trafiği izleyin.
- Yüksek trafikli ağlar için Zeek’i kümelenmiş bir ortamda (cluster) birden fazla Zeek düğümü ile çalıştırın.
- Logları hızlı yazma yeteneğine sahip SSD/NVMe diskler kullanın.