Suricata’yı Debian 11 Üzerinde Bir Saldırı Önleme Sistemi (IPS) Olarak Yapılandırma
Giriş
Günümüzün hızla dijitalleşen dünyasında siber güvenlik tehditleri, bireylerden büyük kurumsal yapılara kadar her ölçekteki organizasyon için ciddi bir endişe kaynağı haline gelmiştir. Gelişmiş kalıcı tehditler (APT’ler), fidye yazılımları, oltalama saldırıları ve sıfırıncı gün açıkları gibi tehditler, geleneksel güvenlik önlemlerini yetersiz kılabilmektedir. Bu noktada, ağ tabanlı güvenlik çözümleri, özellikle de Saldırı Tespit Sistemleri (IDS) ve Saldırı Önleme Sistemleri (IPS), hayati bir rol oynamaktadır. Suricata, açık kaynaklı, yüksek performanslı ve çok iş parçacıklı bir ağ tehdit algılama motoru olarak hem IDS hem de IPS yetenekleri sunar. Bu makale, Suricata’yı Debian 11 işletim sistemi üzerinde bir Saldırı Önleme Sistemi (IPS) olarak nasıl yapılandıracağınızı adım adım açıklamaktadır. Debian 11’in kararlılığı ve güvenilirliği, Suricata gibi kritik bir güvenlik bileşenini barındırmak için ideal bir platform sunar. Amacımız, ağınızı bilinen ve bilinmeyen tehditlere karşı aktif olarak koruyacak sağlam bir IPS çözümü oluşturmaktır.
Suricata Nedir?
Suricata, OISF (Open Information Security Foundation) tarafından geliştirilen, açık kaynaklı, yüksek performanslı bir ağ tehdit algılama ve önleme motorudur. Geleneksel IDS/IPS sistemlerinden farklı olarak, Suricata, çoklu iş parçacıklı (multi-threaded) mimarisi sayesinde modern çok çekirdekli işlemcilerin gücünden tam olarak faydalanabilir. Bu, onu yüksek bant genişliğine sahip ağ ortamlarında bile etkili kılar.
Suricata’nın temel özellikleri şunlardır:
* IDS/IPS Yetenekleri: Ağ trafiğini analiz ederek kötü amaçlı etkinlikleri tespit edebilir (IDS) ve bu etkinlikleri aktif olarak engelleyebilir (IPS).
* NSM (Network Security Monitoring) Yetenekleri: Ağ trafiği, DNS sorguları, HTTP istekleri, TLS el sıkışmaları ve dosya aktarımları gibi çeşitli ağ olaylarını detaylı bir şekilde günlüğe kaydederek kapsamlı ağ güvenlik izlemesi sağlar.
* Esnek Kural Motoru: Snort kurallarıyla uyumludur ve aynı zamanda kendi gelişmiş kural diliyle daha karmaşık desen eşleştirmeleri ve protokol analizleri yapabilir.
* Protokol Ayrıştırma: HTTP, TLS, FTP, SMB, DNS gibi birçok uygulama katmanı protokolünü derinlemesine analiz edebilir.
* Dosya Çıkarma: Ağ üzerinden aktarılan dosyaları algılayabilir ve depolayabilir, bu da kötü amaçlı yazılım analizi için faydalıdır.
* Donanım Hızlandırma Desteği: DPDK (Data Plane Development Kit) ve PF_RING gibi teknolojilerle entegre olarak yüksek paket işleme hızlarına ulaşabilir.
* Çeşitli Çıktı Formatları: Eve JSON, unified2, pcap ve alert.log gibi çeşitli formatlarda günlük ve uyarı çıktıları üretebilir, bu da SIEM (Security Information and Event Management) sistemleriyle entegrasyonu kolaylaştırır.
Suricata, özellikle ağ geçitlerinde veya kritik ağ segmentlerinde konumlandırılarak, dışarıdan gelen tehditleri veya içeriden kaynaklanan anormallikleri tespit edip önlemede güçlü bir araçtır.
IDS ve IPS Arasındaki Fark Nedir?
Siber güvenlik dünyasında sıklıkla karşılaşılan iki temel kavram olan IDS ve IPS, ağ güvenliğini sağlamak için farklı yaklaşımlar sunar. Suricata her iki modu da desteklediği için, bu farkı anlamak önemlidir.
Intrusion Detection System (IDS)
Bir IDS, ağ trafiğini pasif olarak dinleyerek potansiyel kötü amaçlı etkinlikleri veya güvenlik politikası ihlallerini tespit etmeye odaklanır.
* Pasif İzleme: IDS, ağ trafiğini kopyalayarak (örneğin, SPAN/Mirror portları veya ağ TAP’leri aracılığıyla) analiz eder ve orijinal trafik akışını etkilemez.
* Uyarı Verme: Bir tehdit algıladığında, IDS bir uyarı (alert) oluşturur ve bunu güvenlik yöneticisine veya bir SIEM sistemine gönderir.
* Müdahale Yok: IDS, tehdidi engelleme veya durdurma yeteneğine sahip değildir. Sadece durumu bildirir.
* Avantajları: Ağ performansını etkilemez, yanlış pozitiflerin (false positives) kritik iş süreçlerini kesintiye uğratma riski yoktur.
* Dezavantajları: Tehditler gerçek zamanlı olarak engellenemez, manuel müdahale gerektirir, saldırı gerçekleştikten sonra bilgi sağlar.
Intrusion Prevention System (IPS)
Bir IPS, ağ trafiğini aktif olarak denetleyerek potansiyel kötü amaçlı etkinlikleri tespit eder ve bunları gerçek zamanlı olarak engeller.
* Aktif Müdahale: IPS, ağ trafiğini “inline” (satır içi) modda, yani trafiğin akış yolu üzerinde konumlandırılır. Tüm trafik IPS üzerinden geçer.
* Engelleme Yeteneği: Bir tehdit algıladığında, IPS paketi düşürebilir, bağlantıyı sıfırlayabilir veya trafiği başka bir yere yönlendirebilir.
* Avantajları: Gerçek zamanlı koruma sağlar, saldırıları daha etkili bir şekilde önler, manuel müdahale ihtiyacını azaltır.
* Dezavantajları: Ağ performansını etkileyebilir (gecikme ekleyebilir), yanlış pozitifler kritik iş süreçlerini kesintiye uğratabilir (örneğin, meşru trafiği engelleyebilir), doğru yapılandırma ve izleme gerektirir.
Suricata’yı bir IPS olarak yapılandırmak, ağınız için proaktif bir güvenlik katmanı eklemek anlamına gelir. Bu, özellikle kritik sunucuları veya hassas ağ segmentlerini korumak istediğinizde tercih edilen bir yaklaşımdır.
Ön Koşullar ve Sistem Gereksinimleri
Suricata’yı Debian 11 üzerinde bir IPS olarak yapılandırmadan önce, belirli ön koşulları karşılamanız ve sisteminizin belirli gereksinimleri karşıladığından emin olmanız gerekir.
Donanım Gereksinimleri
* İşlemci (CPU): Suricata, çok iş parçacıklı yapısı sayesinde birden fazla çekirdekten faydalanır. Ağ trafiğinizin yoğunluğuna bağlı olarak en az 2-4 CPU çekirdeği önerilir. Daha yüksek trafik hacimleri için daha fazla çekirdek veya daha yüksek saat hızına sahip işlemciler gerekebilir.
* Bellek (RAM): Kural setinin büyüklüğü ve işlenen trafik miktarı RAM tüketimini etkiler. Minimum 4 GB RAM önerilir, ancak 8 GB veya daha fazlası daha iyi performans ve kararlılık sağlayacaktır. Özellikle büyük kural setleri kullanılıyorsa daha fazla RAM kritik öneme sahiptir.
* Depolama (Disk): İşletim sistemi, Suricata yazılımı, kural setleri ve günlük dosyaları için yeterli depolama alanı gereklidir. Minimum 20 GB disk alanı önerilir. Günlük dosyalarının hızla büyüyebileceğini unutmayın, bu nedenle ayrı bir disk bölümü veya daha büyük bir disk alanı düşünmek akıllıca olabilir. Hızlı diskler (SSD), özellikle günlük yazma işlemleri için performansı artırır.
* Ağ Kartları (NICs): IPS modunda Suricata, ağ trafiği akışının içinde yer alır.
* Tek Ağ Kartı (NFQUEUE Modu İçin): Eğer Suricata’yı aynı ağ kartı üzerinde iptables ve NFQUEUE kullanarak bir IPS olarak yapılandıracaksanız, tek bir fiziksel ağ kartı yeterli olabilir. Ancak bu, trafiğin işletim sistemi çekirdeği üzerinden geçişi nedeniyle ek gecikmeye neden olabilir.
* İki Ağ Kartı (Inline/Köprü Modu İçin): En yaygın ve performanslı IPS yapılandırması, iki ağ kartı kullanmaktır. Bu kartlardan biri “WAN” (veya “dış”) tarafına, diğeri “LAN” (veya “iç”) tarafına bakacak şekilde yapılandırılır ve Suricata bu iki kart arasında bir köprü görevi görür. Bu mod, ağ trafiğini daha doğrudan işler.
Yazılım Ön Koşulları
* Debian 11 (Bullseye): Güncel ve kararlı bir Debian 11 kurulumu.
* Root veya Sudo Yetkileri: Kurulum ve yapılandırma işlemleri için root kullanıcısı veya sudo yetkilerine sahip bir kullanıcı hesabı gereklidir.
* İnternet Bağlantısı: Gerekli paketleri indirmek ve Suricata kural setlerini güncellemek için aktif bir internet bağlantısı.
* Temel Linux Bilgisi: Komut satırı kullanımı, dosya sistemi navigasyonu ve metin düzenleyiciler (nano, vim) hakkında temel bilgi.
Bu ön koşulları sağladıktan sonra, Suricata’nın kurulumuna ve IPS olarak yapılandırmasına geçebiliriz.
Kurulum Adımları
Suricata’yı Debian 11 üzerine kurmanın birkaç yolu vardır. En güncel sürümü ve tüm IPS özelliklerini kullanmak için genellikle kaynaktan derleme yöntemi tercih edilir.
1. Sistemi Güncelleme
Herhangi bir kuruluma başlamadan önce sisteminizin güncel olduğundan emin olun:
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo reboot # Gerekirse sistemi yeniden başlatın
2. Gerekli Bağımlılıkları Kurma
Suricata’yı kaynaktan derlemek için birçok geliştirme paketine ve kütüphaneye ihtiyacınız olacaktır.
sudo apt install -y build-essential autoconf automake libtool pkg-config \
libcap-ng-dev libnetfilter-queue-dev libyaml-dev \
libpcre2-dev libhiredis-dev libluajit-5.1-dev \
libnfnetlink-dev libnss3-dev liblz4-dev libhtp-dev \
libjansson-dev rustc cargo python3-pip \
libmagic-dev libgeoip-dev libmaxminddb-dev \
libevent-dev libsndfile-dev libunwind-dev \
liblzma-dev libzstd-dev libbpf-dev
python3-pip ile suricata-update için gerekli olan pyyaml ve requests gibi Python kütüphanelerini kuracağız:
sudo pip3 install pyyaml requests
3. Suricata Kaynak Kodunu İndirme
En güncel kararlı sürümü Suricata’nın resmi web sitesinden veya GitHub deposundan indirebilirsiniz.
cd /opt
sudo wget https://www.openinfosecfoundation.org/download/suricata-6.0.10.tar.gz # En güncel sürümü kontrol edin
sudo tar -xvzf suricata-6.0.10.tar.gz
cd suricata-6.0.10
4. Suricata’yı Derleme ve Kurma
Şimdi Suricata’yı NFQUEUE desteği ile derleyeceğiz. NFQUEUE, iptables ile entegre olarak IPS modunu etkinleştirmek için kullanılır.
sudo ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
--enable-nfqueue --enable-lua --enable-geoip \
--enable-rust --enable-tls-shared --enable-tcp-stream \
--enable-ipfw --enable-app-layer-log \
--with-libhtp-includes=/usr/include/libhtp \
--with-libhtp-libraries=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install
Kurulum tamamlandıktan sonra, dinamik bağlantı önbelleğini güncelleyin:
sudo ldconfig
5. Suricata Yapılandırma Dosyalarını ve Kural Setlerini Hazırlama
Kurulum, örnek yapılandırma dosyasını /etc/suricata dizinine kopyalamaz. Bunu manuel olarak yapmalıyız:
sudo mkdir -p /etc/suricata
sudo cp suricata.yaml /etc/suricata/
sudo cp classification.config /etc/suricata/
sudo cp reference.config /etc/suricata/
Suricata’nın log dosyalarını yazacağı dizini oluşturun ve gerekli izinleri verin:
sudo mkdir -p /var/log/suricata
sudo chown -R suricata:suricata /var/log/suricata # Suricata kullanıcısı ve grubu yoksa oluşturun.
Suricata için bir kullanıcı ve grup oluşturun (eğer otomatik olarak oluşturulmadıysa):
sudo groupadd suricata
sudo useradd -r -g suricata -s /sbin/nologin -c "Suricata User" suricata
Bu kullanıcıyı adm grubuna eklemek, bazı sistem günlüklerine erişmesini sağlayabilir:
sudo usermod -a -G adm suricata
6. suricata-update Kurulumu ve Kural Setlerini İndirme
suricata-update aracı, Suricata kural setlerini yönetmek ve güncellemek için kullanılır.
sudo /usr/bin/suricata-update # Bu komut, PATH'e eklenmediği için tam yolu kullanın.
Bu komut, varsayılan olarak ET Open kural setini indirir ve /etc/suricata/rules dizinine yerleştirir. İlk çalıştırmada biraz zaman alabilir.
Kural setlerini indirdikten sonra, suricata.yaml dosyasında bu kuralları kullanmak üzere yapılandırmamız gerekir. /etc/suricata/suricata.yaml dosyasını bir metin düzenleyici ile açın:
sudo nano /etc/suricata/suricata.yaml
Aşağıdaki bölümü bulun ve suricata.rules satırının etkin olduğundan emin olun (başındaki # işaretini kaldırın):
# Rule files
rule-files:
- suricata.rules
Ayrıca, default-log-dir ayarının doğru olduğundan emin olun:
default-log-dir: /var/log/suricata
Kaydedip çıkın (Ctrl+O, Enter, Ctrl+X).
7. Systemd Servisi Oluşturma
Suricata’yı bir systemd servisi olarak yönetmek için bir servis dosyası oluşturalım:
sudo nano /etc/systemd/system/suricata.service
İçine aşağıdaki içeriği yapıştırın:
[Unit]
Description=Suricata Intrusion Detection and Prevention System
After=network.target
[Service]
Type=forking
PIDFile=/var/run/suricata.pid
ExecStartPre=/usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -D --check-conf
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -D -q 0 # -q 0 NFQUEUE 0'ı dinle
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
PrivateTmp=true
Restart=on-failure
[Install]
WantedBy=multi-user.target
Kaydedip çıkın. Ardından systemd’yi yeniden yükleyin ve Suricata servisini etkinleştirin:
sudo systemctl daemon-reload
sudo systemctl enable suricata
IPS Modu İçin Ağ Yapılandırması
Suricata’yı IPS olarak çalıştırmak için iki ana yöntem vardır: NFQUEUE kullanarak tek ağ kartı üzerinde veya Inline (Köprü Modu) kullanarak iki ağ kartı üzerinde.
1. NFQUEUE Kullanarak IPS (Tek Ağ Kartı)
Bu yöntem, iptables güvenlik duvarı kurallarını kullanarak ağ trafiğini Suricata’ya yönlendirir ve Suricata’nın işlediği trafiği geri alır. Bu, genellikle tek bir ağ arayüzüne sahip makinelerde kullanılır ve sanal makineler için ideal olabilir.
1.1 IP Yönlendirmeyi Etkinleştirme
IPS olarak çalışacak sistemin paketleri yönlendirebilmesi gerekir:
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
Bu ayarların kalıcı olması için /etc/sysctl.conf dosyasına ekleyin:
sudo nano /etc/sysctl.conf
Aşağıdaki satırları ekleyin veya mevcutsa yorum işaretini kaldırın:
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
Kaydedip çıkın ve değişiklikleri uygulayın:
sudo sysctl -p
1.2 iptables Kurallarını Yapılandırma
Tüm gelen ve giden trafiği Suricata’nın işleyeceği NFQUEUE kuyruğuna yönlendirmek için iptables kuralları eklemeniz gerekir. Suricata’yı başlatırken -q 0 parametresi ile 0 numaralı kuyruğu dinlemesini sağladık.
# Mevcut iptables kurallarını temizle (dikkatli olun, bu ağ bağlantınızı kesintiye uğratabilir!)
sudo iptables -F
sudo iptables -X
sudo iptables -Z
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
Tüm gelen, giden ve yönlendirilen IPv4 trafiğini NFQUEUE'ye yönlendir
sudo iptables -I INPUT -j NFQUEUE --queue-num 0
sudo iptables -I FORWARD -j NFQUEUE --queue-num 0
sudo iptables -I OUTPUT -j NFQUEUE --queue-num 0
IPv6 için de benzer kurallar
sudo ip6tables -F
sudo ip6tables -X
sudo sudo ip6tables -Z
sudo ip6tables -P INPUT ACCEPT
sudo ip6tables -P FORWARD ACCEPT
sudo ip6tables -P OUTPUT ACCEPT
sudo ip6tables -I INPUT -j NFQUEUE --queue-num 0
sudo ip6tables -I FORWARD -j NFQUEUE --queue-num 0
sudo ip6tables -I OUTPUT -j NFQUEUE --queue-num 0
Bu kurallar, tüm trafiği Suricata’ya gönderecektir. Eğer Suricata çalışmıyorsa veya paketleri doğru şekilde işlemezse, ağ bağlantınız kesilecektir. Bu nedenle, bu kuralları kalıcı hale getirmeden önce Suricata’nın doğru çalıştığından emin olun.
1.3 suricata.yaml İçinde NFQUEUE Ayarları
suricata.yaml dosyasını açın:
sudo nano /etc/suricata/suricata.yaml
nfqueue bölümünü bulun ve aşağıdaki gibi yapılandırın:
nfqueue:
mode: autofp
queue-num: 0
queue-size: 4096
# If you want to run multiple instances of Suricata, each instance must
# listen on a unique queue-id range. For example:
# instance 1: queue-id: 0
# instance 2: queue-id: 1
# instance 3: queue-id: 2
# For a single instance, queue-id: 0 is sufficient.
queue-num: 0 ayarı, Suricata’nın iptables kurallarında belirttiğimiz 0 numaralı kuyruğu dinlemesini sağlar.
2. Inline (Köprü Modu) Kullanarak IPS (İki Ağ Kartı)
Bu yöntem, Suricata’yı iki ağ kartı arasına bir “köprü” olarak yerleştirir. Trafik, bir ağ kartından girer, Suricata tarafından işlenir ve diğer ağ kartından çıkar. Bu, genellikle daha yüksek performans ve daha az gecikme sunar.
2.1 Ağ Kartlarını Köprü Moduna Getirme
Varsayılan olarak, iki ağ kartınızın eth0 ve eth1 (veya benzeri isimler) olduğunu varsayalım. Bu kartları bir köprüye (br0) eklememiz gerekiyor.
Öncelikle bridge-utils paketini kurun:
sudo apt install -y bridge-utils
Ardından /etc/network/interfaces dosyasını düzenleyin:
sudo nano /etc/network/interfaces
Mevcut içeriği yedekledikten sonra, aşağıdaki gibi yapılandırın (IP adreslerini ve ağ geçidini kendi ağınıza göre ayarlayın):
# /etc/network/interfaces
Bu dosya, sistemin ağ arayüzlerini yapılandırır.
Daha fazla bilgi için interfaces(5) man sayfasına bakın.
Loopback arayüzü
auto lo
iface lo inet loopback
Mevcut arayüzleri devre dışı bırak
(eth0 ve eth1'in IP almasını engeller)
Eğer bu arayüzler DHCP ile IP alıyorsa,
aşağıdaki satırları ekleyerek DHCP'yi kapatın
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
Köprü arayüzü
auto br0
iface br0 inet static
address 192.168.1.100 # Suricata IPS'in kendi yönetim IP'si
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
bridge_ports eth0 eth1 # Köprüye eklenecek fiziksel ağ kartları
bridge_fd 0 # Forwarding gecikmesi (0 = hemen ilet)
bridge_stp off # Spanning Tree Protocol'ü kapat
bridge_waitmax 0 # Köprünün hazır olmasını bekleme süresi (0 = bekleme)
Bu yapılandırmada, eth0 ve eth1 fiziksel arayüzleri köprüye eklenir ve br0 arayüzü üzerinden IP adresi alır. Suricata, bu br0 arayüzü üzerinden veya doğrudan eth0 ve eth1 üzerinden trafiği izleyebilir. En iyi uygulama, Suricata’nın doğrudan fiziksel arayüzleri af-packet modunda kullanmasıdır.
Değişiklikleri kaydettikten sonra ağı yeniden başlatın veya sistemi yeniden başlatın:
sudo systemctl restart networking
sudo reboot # Genellikle yeniden başlatma önerilir
2.2 suricata.yaml İçinde AF_PACKET Ayarları
suricata.yaml dosyasını açın:
sudo nano /etc/suricata/suricata.yaml
af-packet bölümünü bulun ve aşağıdaki gibi yapılandırın. eth0 ve eth1 yerine kendi ağ kartı isimlerinizi yazın.
af-packet:
- interface: eth0 # Dışa bakan arayüz (WAN)
# If copy-mode is set to 'tap', Suricata will only log alerts.
# If copy-mode is set to 'ips', Suricata will actively drop/reject packets.
copy-mode: ips
# If the interface is part of a bridge, set this to yes.
# If not part of a bridge, set to no.
# In this inline setup, it's generally 'no' as Suricata handles bridging.
# Ancak, Suricata'nın köprü modunda çalışması için iki arayüzü de belirtmek gerekir.
# Suricata 6.x ve sonrası için, tek bir af-packet bloğu altında
# birden fazla arayüzü "cluster-id" ile gruplamak daha yaygındır.
# Aşağıdaki örnekte, her arayüz için ayrı bir blok kullanıyoruz.
- interface: eth1 # İçe bakan arayüz (LAN)
copy-mode: ips
# cluster-id ve cluster-type, birden fazla arayüzü aynı IPS mantığına bağlamak için kullanılır.
# Örneğin:
# cluster-id: 99
# cluster-type: cluster_flow
Eğer Suricata’nın kendisinin bir köprü gibi davranmasını istiyorsanız, suricata.yaml içinde af-packet modunda tpacket-v3 ve cluster-type: cluster_flow kullanmanız önerilir.
af-packet:
- interface: eth0
threads: 1
defrag: yes
cluster-id: 99
cluster-type: cluster_flow
copy-mode: ips
# BPF filtreleri burada uygulanabilir
# BPF: !ip6 and not (vlan) # IPv6 ve VLAN trafiğini hariç tut
- interface: eth1
threads: 1
defrag: yes
cluster-id: 99
cluster-type: cluster_flow
copy-mode: ips
Bu yapılandırma, eth0 ve eth1 arayüzlerini aynı cluster-id altında gruplandırarak, Suricata’nın bu iki arayüz arasında akan trafiği tek bir IPS mantığıyla işlemesini sağlar. copy-mode: ips ise Suricata’nın engelleme modunda çalışacağını belirtir.
Önemli: home-net ve external-net ayarlarını kendi ağınıza göre yapılandırın. Bu, Suricata’nın hangi IP adreslerinin dahili (güvenilen) ve harici (güvenilmeyen) olduğunu bilmesi için kritik öneme sahiptir.
vars:
# Suricata'nın yerel ağ olarak kabul edeceği IP adresleri
home-net: "[192.168.1.0/24,10.0.0.0/8,172.16.0.0/12]"
# Suricata'nın harici ağ olarak kabul edeceği IP adresleri
external-net: "any" # veya "[!$HOME_NET]"
Kural Yönetimi ve Güncelleme
Suricata’nın etkin bir IPS olabilmesi için güncel ve kapsamlı kural setlerine sahip olması gerekir. suricata-update aracı bu süreci basitleştirir.
1. suricata-update Kullanımı
Varsayılan olarak ET Open (Emerging Threats Open) kural setini kullanır. Diğer kural setlerini de etkinleştirebilirsiniz.
* Mevcut Kaynakları Listeleme:
sudo suricata-update list-sources
* Yeni Bir Kaynak Etkinleştirme (Örnek: Proofpoint ET Pro – ücretli abonelik gerektirir):
sudo suricata-update enable-source et/pro
Eğer bir ET Pro abonesiyseniz, abonelik kodunuzu /etc/suricata/suricata-update.yaml dosyasına eklemeniz gerekebilir.
* Kuralları Güncelleme:
sudo suricata-update
Bu komut, yapılandırılmış tüm kaynaklardan en son kuralları indirir ve /etc/suricata/rules/suricata.rules dosyasını oluşturur.
2. Otomatik Kural Güncelleme
Kuralların düzenli olarak güncellenmesi için bir cron işi ayarlayabilirsiniz.
sudo crontab -e
Aşağıdaki satırı ekleyin (örneğin, her gece saat 3’te güncelleme yapar ve Suricata servisini yeniden başlatır):
0 3 * /usr/bin/suricata-update && systemctl restart suricata
Bu, Suricata’nın her zaman en güncel tehdit istihbaratıyla çalışmasını sağlar.
Suricata’yı Çalıştırma ve Test Etme
Yapılandırma tamamlandıktan sonra Suricata’yı başlatabilir ve IPS modunun düzgün çalışıp çalışmadığını test edebilirsiniz.
1. Yapılandırma Dosyasını Doğrulama
Suricata’yı başlatmadan önce yapılandırma dosyanızın sözdizimsel olarak doğru olduğundan emin olun:
sudo suricata -T -c /etc/suricata/suricata.yaml -i # NFQUEUE için arayüz adı gerekmez
Veya NFQUEUE için:
sudo suricata -T -c /etc/suricata/suricata.yaml --nfqueue
Eğer bir hata varsa, Suricata size hangi satırda olduğunu söyleyecektir. Hata yoksa “Configuration provided was successfully loaded” mesajını görürsünüz.
2. Servis Olarak Başlatma
sudo systemctl start suricata
sudo systemctl status suricata
Durum active (running) olmalı ve herhangi bir hata mesajı olmamalıdır.
3. Test Etme
IPS modunun çalıştığını doğrulamak için çeşitli testler yapabilirsiniz.
3.1 EICAR Testi
EICAR (European Institute for Computer Antivirus Research) testi, antivirüs yazılımlarını test etmek için kullanılan zararsız bir test dosyasıdır. Suricata’da genellikle EICAR imzalarını içeren kurallar bulunur.
IPS modunda, EICAR dosyasını indirmeye çalıştığınızda Suricata’nın bağlantıyı kesmesi veya paketi düşürmesi beklenir.
Bir istemci makineden (Suricata IPS’in koruduğu ağda), bir web tarayıcısı ile EICAR test dosyasına erişmeye çalışın:
http://www.eicar.org/download/eicar.com
Eğer Suricata doğru çalışıyorsa, indirme işlemi başarısız olmalı veya bir hata mesajı almalısınız.
3.2 Günlükleri Kontrol Etme
Suricata’nın günlük dosyalarını kontrol edin:
sudo tail -f /var/log/suricata/fast.log
sudo tail -f /var/log/suricata/alert.log
sudo tail -f /var/log/suricata/eve.json # JSON formatındaki olay günlükleri
EICAR testi sırasında alert.log veya eve.json içinde EICAR ile ilgili bir uyarı görmelisiniz. Örneğin:
[] [1:2000000:2] EICAR Test File [] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 192.168.1.10:54321 -> 93.184.216.34:80
Eğer NFQUEUE kullanıyorsanız, iptables sayacını kontrol edebilirsiniz:
sudo iptables -L -v -n
NFQUEUE zincirinde paket ve bayt sayılarının arttığını görmelisiniz, bu da trafiğin Suricata tarafından işlendiğini gösterir.
3.3 Basit Bir Bloklama Kuralı Oluşturma (Opsiyonel)
Özel bir test kuralı oluşturarak IPS işlevselliğini daha net görebilirsiniz.
/etc/suricata/rules/local.rules adında yeni bir dosya oluşturun:
sudo nano /etc/suricata/rules/local.rules
İçine aşağıdaki kuralı ekleyin (örneğin, belirli bir IP’den gelen tüm ICMP trafiğini engeller):
drop icmp any any -> $HOME_NET any (msg:"TEST: ICMP from specific IP blocked"; sid:2000001; rev:1;)
Bu kuralı aktif hale getirmek için suricata.yaml dosyasını düzenleyin ve rule-files bölümüne local.rules dosyasını ekleyin:
rule-files:
- suricata.rules
- local.rules
Suricata servisini yeniden başlatın:
sudo systemctl restart suricata
Ardından, kuralda belirttiğiniz IP adresinden Suricata’nın koruduğu bir makineye ping atmayı deneyin. ping komutunun başarısız olması ve Suricata günlüklerinde bir uyarı görmeniz gerekir.
Performans İzleme ve Optimizasyon
IPS modunda çalışan Suricata, ağ trafiğini doğrudan işlediği için performans kritik öneme sahiptir. Yetersiz yapılandırma, ağ gecikmesine veya paket kaybına neden olabilir.
1. Performans Metriklerini İzleme
* CPU ve Bellek Kullanımı: top, htop, glances gibi araçlarla Suricata sürecinin CPU ve RAM kullanımını düzenli olarak izleyin.
* Ağ Gecikmesi: ping veya traceroute gibi araçlarla ağ gecikmesini izleyin. Suricata’nın eklediği gecikme kabul edilebilir sınırlar içinde olmalıdır.
* Suricata İstatistikleri: Suricata, kendi iç istatistiklerini stats.log dosyasına yazar. Bu dosya, işlenen paket sayısı, düşürülen paket sayısı, kural eşleşmeleri gibi değerli bilgiler içerir.
sudo tail -f /var/log/suricata/stats.log
2. Optimizasyon Stratejileri
* Çalışma Modu (runmode): suricata.yaml dosyasındaki runmode ayarı önemlidir.
* autofp: Suricata’nın trafik yoğunluğuna göre iş parçacığı sayısını otomatik olarak ayarlamasını sağlar. Genellikle iyi bir başlangıç noktasıdır.
* workers: Manuel olarak iş parçacığı sayısını (worker-threads) belirlemenize olanak tanır. Genellikle CPU çekirdek sayısına eşit veya biraz daha az ayarlanır.
runmode: workers
worker-threads: 4 # CPU çekirdek sayınıza göre ayarlayın
* Kural Seti Optimizasyonu:
* Gereksiz Kuralları Devre Dışı Bırakma: Kullandığınız kural setleri binlerce kural içerebilir. Ağınız için alakasız olan veya çok fazla yanlış pozitif üreten kuralları devre dışı bırakmak performansı artırır. suricata-update ile disable.conf dosyasını kullanarak kuralları devre dışı bırakabilirsiniz.
* Özel Kurallar: Kendi yazdığınız kuralların performans dostu olduğundan emin olun. Çok karmaşık regex desenlerinden veya geniş kapsamlı any any kurallarından kaçının.
* detect-engine Ayarları: suricata.yaml içindeki detect-engine bölümü, kural eşleştirme motorunun nasıl çalıştığını kontrol eder.
* profile: low, medium, high gibi profiller seçilebilir. low daha az kaynak kullanırken, high daha detaylı analiz yapar ancak daha fazla kaynak tüketir.
* memcap: Her bir iş parçacığı için ayrılan bellek miktarını sınırlar.
* Donanım Hızlandırma: Yüksek trafik hacimleri için DPDK veya PF_RING gibi özel ağ sürücüleri ve kütüphaneleri kullanarak paket işleme performansını önemli ölçüde artırabilirsiniz. Bu, daha ileri düzey bir konudur ve ayrı bir yapılandırma gerektirir.
* Akış ve Host Önbelleği: flow-settings ve host-cache ayarları, Suricata’nın ağ akışlarını ve host bilgilerini nasıl önbelleğe aldığını kontrol eder. Bu ayarların doğru yapılandırılması, tekrar eden trafik analizini hızlandırabilir.
Sorun Giderme (Troubleshooting)
Suricata IPS yapılandırması sırasında veya sonrasında sorunlarla karşılaşmak olasıdır. İşte bazı yaygın sorunlar ve çözümleri:
1. Suricata Başlamıyor veya Hata Veriyor
* suricata -T: Yapılandırma dosyasını doğrulayın. Çıktıdaki hata mesajlarını dikkatlice okuyun.
* systemctl status suricata: Servis durumunu kontrol edin. Hata mesajları genellikle burada listelenir.
* sudo journalctl -u suricata: Suricata servisinin ayrıntılı günlüklerini görüntüleyin.
* sudo tail -f /var/log/suricata/suricata.log: Suricata’nın kendi uygulama günlüklerini kontrol edin. Bağlantı sorunları, kural yükleme hataları veya bellek sorunları burada görünebilir.
2. Trafik Engellenmiyor veya Hiç Trafik Geçmiyor
* Ağ Kartı Modu:
* NFQUEUE: iptables kurallarının doğru ayarlandığından ve trafiği NFQUEUE‘ye yönlendirdiğinden emin olun. sudo iptables -L -v -n komutuyla paket sayacını kontrol edin. NFQUEUE zincirinde paket sayısı artmıyorsa, trafik NFQUEUE‘ye ulaşmıyor demektir.
* Köprü Modu: Ağ kartlarının köprüye doğru şekilde eklendiğinden (/etc/network/interfaces) ve af-packet modunun suricata.yaml içinde doğru yapılandırıldığından emin olun. copy-mode: ips ayarının etkin olduğundan emin olun.
* home-net ve external-net: Bu ayarların suricata.yaml içinde ağ topolojinize uygun şekilde yapılandırıldığından emin olun. Yanlış yapılandırma, Suricata’nın trafiği yanlış yorumlamasına neden olabilir.
* Kural Eksikliği/Yanlışlığı: Engellemek istediğiniz trafiği yakalayan bir kuralın etkin olduğundan ve doğru yazıldığından emin olun. Test için basit bir drop kuralı kullanın.
* Suricata’nın Kendisi: Suricata’nın IPS modunda çalıştığından emin olun. Loglarda herhangi bir engelleme (drop) uyarısı görüyor musunuz?
3. Performans Sorunları (Gecikme, Paket Kaybı)
* Kaynak Kullanımı: CPU ve RAM kullanımını izleyin. Yüksek kullanım, sistem kaynaklarının yetersiz olduğunu gösterebilir.
* runmode Ayarı: autofp veya workers modlarını deneyin ve worker-threads sayısını CPU çekirdek sayınıza göre ayarlayın.
* Kural Optimizasyonu: Çok sayıda kural kullanıyorsanız, alakasız kuralları devre dışı bırakın.
* Donanım: Daha hızlı ağ kartları, daha fazla RAM veya daha güçlü bir CPU düşünün.
4. Diğer Sorunlar
* AppArmor/SELinux: Debian 11’de AppArmor varsayılan olarak etkindir. Bazen Suricata’nın belirli dosyalara veya ağ kaynaklarına erişimini kısıtlayabilir. sudo aa-status ile AppArmor durumunu kontrol edin. Gerekirse geçici olarak devre dışı bırakmayı deneyin veya Suricata için özel bir AppArmor profili oluşturun.
* Zaman Senkronizasyonu: NTP (Network Time Protocol) ile sistem saatinin senkronize olduğundan emin olun. Yanlış zaman damgaları, günlük analizi ve korelasyonu zorlaştırabilir.
Sonuç ve Özet
Suricata’yı Debian 11 üzerinde bir Saldırı Önleme Sistemi (IPS) olarak yapılandırmak, ağ güvenliğinizi önemli ölçüde artıracak güçlü bir adımdır. Bu makalede ele alınan adımlar, Suricata’nın kurulumundan, IPS modunda ağ yapılandırmasına, kural yönetimine ve sorun gidermeye kadar kapsamlı bir rehber sunmaktadır.
Suricata, çok iş parçacıklı mimarisi ve zengin kural motoru sayesinde modern ağ tehditlerine karşı gerçek zamanlı koruma sağlayabilir. IPS modu, saldırıları tespit etmekle kalmayıp aynı zamanda aktif olarak engelleyerek, ağınızın savunma mekanizmasını bir adım öteye taşır. İster NFQUEUE ile tek bir ağ kartı üzerinde, ister af-packet ile iki ağ kartı arasında bir köprü olarak yapılandırın, Suricata ağ trafiğinizi derinlemesine analiz ederek kötü amaçlı etkinlikleri durdurabilir.
Unutulmamalıdır ki, bir IPS sisteminin etkinliği, doğru yapılandırma, güncel kural setleri ve sürekli izleme ile doğrudan ilişkilidir. Yanlış pozitifleri en aza indirmek ve performans darboğazlarını önlemek için kural setlerinizi optimize etmek ve sistem kaynaklarınızı dikkatle yönetmek hayati öneme sahiptir. Suricata’nın ürettiği zengin günlük verileri (eve.json), bir SIEM sistemiyle entegre edilerek daha kapsamlı güvenlik analizi ve olay korelasyonu için kullanılabilir.
Bu rehber, Suricata’nın IPS yeteneklerinden tam olarak faydalanmanız için sağlam bir temel sağlamaktadır. Siber güvenlik yolculuğunuzda Suricata, ağınızı daha dirençli ve güvende tutmak için vazgeçilmez bir araç olacaktır.