Operasyonel Rehber · Çevre Güvenliği

Tehdit IP Listesini Güvenlik Duvarında Engelleme

iptables, nftables, OpenBSD pf, Mikrotik RouterOS, Fortinet FortiGate, Palo Alto PAN-OS, Cisco ASA ve Cloudflare üzerinde SiberAnaliz IP listesini dinamik nesne olarak yükleyip ölçeklenebilir, sayaçlı ve log'lanabilir engelleme kuralı bağlama rehberi.

1. Kavram: kötücül IP engellemenin yeri

Tehdit göstergesi olarak yayımlanan bir IPv4 veya IPv6 adresi; saldırgan altyapısının — C2 sunucusu, brute-force kaynağı, exploit barındırma noktası, açık proxy veya phishing kit hosting'i — gözlemlenmiş bir ağ kimliğidir. Bu adresin kuruma erişememesini sağlamak, klasik perimeter savunmasının tanımına en yakın işlemdir.

Pratikte tehdit IP'sini engellemek üç bağlamda gerekir: (a) inbound yönde, saldırganın kuruma erişimini önlemek; (b) outbound yönde, enfekte istemcinin C2'ye sızıntı yapmasını önlemek; (c) doğu–batı yönde, lateral movement aşamasında. Çoğu modern firewall bu üç bağlamı tek bir adres grubu üzerinden işleyebilir; kural setini sadeleştirir.

"Kötü amaçlı IP nasıl engellenir?" sorusunun cevabı tek bir komut değil, bir liste yönetimi disiplinidir: kaynaktan veri çek, doğrula, statik nesne olarak yükle, kural objesine bağla, sayaç ve log üret. Bu rehber bu döngüyü dört farklı işletim sistemi ve dört kurumsal cihaz için ayrı ayrı örnekler.

2. Engelleme katmanları

İdeal bir mimari aynı IP göstergesini birden çok katmanda engeller. Tekrar değil derinlik: bir katman düşerse diğeri devreye girer.

  • 1 Perimeter firewall (FortiGate, Palo Alto, Cisco ASA, pfSense): kurum sınırında ilk drop noktası. En yüksek hacim burada süzülmelidir.
  • 2 Cloud WAF / CDN (Cloudflare, AWS WAF, Akamai): Kuruma yönelik web trafiğinde IP rep listesi kullanılarak istek bot+rule motoruna girmeden reddedilir.
  • 3 Host firewall / EDR (CrowdStrike, Defender, Wazuh): İstemci ve sunucu seviyesinde, dahili lateral akışı yakalar.
  • 4 DNS katmanı: DNS sinkholing çözümü ile entegre edildiğinde IP listesi domain listesi ile tamamlanır.

3. Linux iptables + ipset

Klasik Linux yönlendiricilerde iptables tek başına yüz binlerce IP'lik bir listeye karşı performans gösteremez (zincir derinliği O(n) tarama). Çözüm ipset: hash tabanlı, O(1) bakışlı bir IP kümesi nesnesidir ve iptables içinden -m set --match-set ile referans alınır.

# ipset kümesini oluştur ve listeyi yükle
sudo ipset create siberanaliz-ip hash:ip family inet maxelem 200000 -exist

# SiberAnaliz CSV'sinden IP'leri çek ve kümeye yükle
curl -fsSL "https://siberanaliz.com/export.csv?type=ip" \
  | awk -F',' 'NR>1 {gsub(/"/, "", $2); print $2}' \
  | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' \
  | while read -r ip; do sudo ipset add siberanaliz-ip "$ip" -exist; done

# iptables kuralını bağla (inbound + outbound)
sudo iptables -I INPUT  1 -m set --match-set siberanaliz-ip src -j DROP
sudo iptables -I OUTPUT 1 -m set --match-set siberanaliz-ip dst -j DROP
sudo iptables -I FORWARD 1 -m set --match-set siberanaliz-ip src -j DROP
sudo iptables -I FORWARD 1 -m set --match-set siberanaliz-ip dst -j DROP

# Kalıcı kayıt
sudo ipset save > /etc/ipset.conf
sudo iptables-save > /etc/iptables/rules.v4

Liste senkronizasyonu için saatlik script:

# /usr/local/bin/siberanaliz-ipset-sync.sh
#!/usr/bin/env bash
set -euo pipefail

SRC="https://siberanaliz.com/export.csv?type=ip"
SET="siberanaliz-ip"
TMP_SET="${SET}-tmp"

ipset create "$TMP_SET" hash:ip family inet maxelem 200000 -exist
ipset flush  "$TMP_SET"

curl -fsSL --retry 3 "$SRC" \
  | awk -F',' 'NR>1 {gsub(/"/, "", $2); print $2}' \
  | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' \
  | while read -r ip; do ipset add "$TMP_SET" "$ip" -exist; done

# atomik takas — kural objesi referansını değiştirmeden listeyi yeniler
ipset swap "$TMP_SET" "$SET"
ipset destroy "$TMP_SET"

Atomik swap stratejisi sayesinde iptables kuralı tek bir nano-saniye bile boşlukta kalmaz; üretimde yapı bu şekilde kurulmalıdır.

4. nftables alternatifi

Modern Linux dağıtımlarında iptables yerine nftables standart hale geldi. nftables yerel sets kavramına sahiptir; ipset gibi ayrı bir paket gerekmez.

# /etc/nftables.d/siberanaliz.nft
table inet filter {
    set siberanaliz_ip {
        type ipv4_addr
        flags interval
        auto-merge
        elements = {
            # SiberAnaliz CSV'sinden script ile doldurulur
        }
    }

    chain input {
        type filter hook input priority 0; policy accept;
        ip saddr @siberanaliz_ip counter drop \
            comment "SiberAnaliz: inbound block"
    }

    chain output {
        type filter hook output priority 0; policy accept;
        ip daddr @siberanaliz_ip counter drop \
            comment "SiberAnaliz: outbound block"
    }
}
# Atomik set güncellemesi (kuralı dokunmadan)
nft flush set inet filter siberanaliz_ip

curl -fsSL "https://siberanaliz.com/export.csv?type=ip" \
  | awk -F',' 'NR>1 {gsub(/"/, "", $2); printf "%s%s", sep, $2; sep=", "}' \
  | xargs -I{} nft add element inet filter siberanaliz_ip "{ {} }"

5. OpenBSD pf

OpenBSD ve türevlerinde pf'in persist table özelliği, ipset/nftables sets ile kavramsal olarak eşdeğerdir.

# /etc/pf.conf
table <siberanaliz> persist file "/etc/pf.siberanaliz.list"

block in  quick from <siberanaliz> label "siberanaliz_in"
block out quick to   <siberanaliz> label "siberanaliz_out"
# Liste yenileme:
curl -fsSL "https://siberanaliz.com/export.csv?type=ip" \
  | awk -F',' 'NR>1 {gsub(/"/, "", $2); print $2}' \
  | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' \
  > /etc/pf.siberanaliz.list

pfctl -t siberanaliz -T replace -f /etc/pf.siberanaliz.list
pfctl -t siberanaliz -T show | wc -l

6. Mikrotik RouterOS

Mikrotik'te address-list nesnesi tek bir kural ile binlerce IP'yi kapsar. fetch komutu ile uzak listeden çekme yerine bash/script ile push tarzı kullanmak daha güvenilirdir.

# RouterOS terminal komutları
/ip firewall address-list remove [find list=siberanaliz]
/ip firewall address-list add list=siberanaliz address=203.0.113.10 comment="SiberAnaliz"
/ip firewall address-list add list=siberanaliz address=198.51.100.42 comment="SiberAnaliz"

# Filter kuralı:
/ip firewall filter add chain=forward action=drop \
    src-address-list=siberanaliz log=yes log-prefix="SIB-IN" comment="SiberAnaliz IN"
/ip firewall filter add chain=forward action=drop \
    dst-address-list=siberanaliz log=yes log-prefix="SIB-OUT" comment="SiberAnaliz OUT"

Otomasyon için Mikrotik API üzerinden push veya basitçe RouterOS'un /import komutuna besleyen uzaktan komut dosyası kullanılır.

7. Fortinet FortiGate Address Group

FortiGate'de yöntem üç adımdır: (1) her IP için bir firewall address objesi, (2) bunları toplayan bir firewall addrgrp, (3) bu grubu hedef alan bir policy ile drop. External Connectors üzerinden Threat Feed objesi de yaygın bir kalıptır.

# FortiOS CLI - manuel objeler
config firewall address
    edit "sib-203.0.113.10"
        set subnet 203.0.113.10 255.255.255.255
    next
    edit "sib-198.51.100.42"
        set subnet 198.51.100.42 255.255.255.255
    next
end

config firewall addrgrp
    edit "siberanaliz-ip-grp"
        set member "sib-203.0.113.10" "sib-198.51.100.42"
    next
end

config firewall policy
    edit 0
        set name "SIB-Block-Outbound"
        set srcintf "internal"
        set dstintf "wan1"
        set srcaddr "all"
        set dstaddr "siberanaliz-ip-grp"
        set action deny
        set service "ALL"
        set logtraffic all
    next
end
# FortiOS - External Threat Feed (tercih edilen otomasyon yolu)
config system external-resource
    edit "siberanaliz-feed"
        set type address
        set resource "https://siberanaliz.com/export.csv?type=ip"
        set refresh-rate 60
    next
end

FortiOS sürümüne bağlı olarak External Threat Feed yalnızca düz IP listesi (satır başına bir IP) bekleyebilir. Bu durumda CSV ham hâliyle yerine kendi sunucunuzdan üretilmiş ön işlenmiş bir endpoint sunmanız gerekir.

8. Palo Alto External Dynamic List

PAN-OS'ta tehdit IP listesi yönetiminin standart adı External Dynamic List (EDL)'dir. EDL; bir URL'den düzenli aralıklarla çekilen IP, domain veya URL listesidir ve güvenlik politikalarında kaynak/hedef objesi olarak doğrudan kullanılır.

# PAN-OS CLI
configure
set external-list type ip siberanaliz-ip \
    url "https://siberanaliz.com/export.csv?type=ip" \
    recurring hourly

set rulebase security rules SIB-EDL-Drop \
    from any to any \
    source any destination [ siberanaliz-ip ] \
    application any service application-default \
    action drop log-end yes
commit

PAN-OS'un EDL motoru CSV başlık satırını kabul etmez; ham IP listesi sunmak gerekir. SiberAnaliz tarafında satır içerikleri tırnak içinde olduğundan, ara bir nginx proxy_pass üzerinde sub_filter veya küçük bir CGI dönüştürücü gerekebilir.

9. Cisco ASA Object Group

Cisco ASA'da kavramın adı Network Object Group'tur. Tek bir ACL satırına bağlı, içeriği serbestçe güncellenebilir bir IP nesnesi sağlar.

! ASA CLI
object-group network siberanaliz-ip
 description SiberAnaliz threat indicators
 network-object host 203.0.113.10
 network-object host 198.51.100.42

access-list OUTBOUND-ACL deny ip any object-group siberanaliz-ip log
access-list INBOUND-ACL  deny ip object-group siberanaliz-ip any log

access-group OUTBOUND-ACL out interface outside
access-group INBOUND-ACL  in  interface outside

ASA tarafında otomatik güncelleme için bir merkezî yönetim platformu (CSM, Cisco Defense Orchestrator) veya REST API üzerinden config push akışı tercih edilir; doğrudan device'a SSH ile push üretimde önerilmez.

10. Cloudflare API ile WAF engelleme

Web uygulamaları için CDN/WAF katmanı, perimeter firewall'dan önce gelir. Cloudflare'de IP Lists nesnesi oluşturup bir WAF Custom Rule ile reddedilebilir. API ile programatik yönetim:

# 1) IP Listesi oluştur (hesap seviyesi)
curl -fsSL -X POST \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" \
  "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/rules/lists" \
  -d '{"name":"siberanaliz_ip","description":"SiberAnaliz IP block","kind":"ip"}'

# 2) Listeye IP'leri ekle
curl -fsSL -X POST \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" \
  "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/rules/lists/$LIST_ID/items" \
  -d '[
        {"ip":"203.0.113.10"},
        {"ip":"198.51.100.42"}
      ]'

# 3) Zone üstünde WAF custom rule:
# expression: (ip.src in $siberanaliz_ip)
# action: block

Cloudflare WAF kuralı CSV/JSON beslemesini doğrudan tüketmez. SiberAnaliz /export.json uç noktası bir cron script tarafından okunur, JSON parse edilir ve liste artırımlı güncellenir (POST + DELETE).

Performans ve ölçek notları

Üretim ortamında engelleme listesinin büyüklüğü cihazın CPU ve bellek bütçesini doğrudan etkiler. iptables klasik zincirde her paket için n kural taraması yapar; ipset/nftables sets hash tabanlı olduğu için 100 binin üzerinde girdide bile sabit zamanlı bakış sağlar. Bu nedenle SiberAnaliz tarzı tek koleksiyon listeleri her zaman set/object-group nesnesi üzerinden yönetilir; ayrı ayrı satır olarak yazılmaz.

Aynı şekilde FortiGate'in firewall address nesne tablosunda yüksek sayıda obje yaratmak yerine, External Threat Feed kullanımı tercih edilir. FortiOS Threat Feed'i kendi içinde optimize bir veri yapısına yükler ve policy lookup süresine ek yük getirmez. Palo Alto'da EDL benzer şekilde tek bir nesne olarak değerlendirilir; binlerce IP içeren bir EDL ile tek tek address objeleri performans olarak karşılaştırılamaz.

Liste yenileme sıklığı pratik bir denge konusudur. Üst sınırı kaynağa (siberanaliz.com) saygı belirler — saatte birden sık çekim önerilmez. Alt sınırı ise tehdit istihbaratının değer süresi belirler: 24 saatten daha geç güncellenen bir liste, hızlı dönen phishing kampanyalarını kaçırır. Saatlik tetikleme, çoğu kurumsal ihtiyaç için en uygun ortalamadır.

Engelleme öncesi doğrulama

Üretim cihazına yeni bir tehdit listesi basılmadan önce iki doğrulama adımı zorunludur. Birincisi yanlış pozitif taraması: gelen listenin kurumsal CIDR aralıkları (RFC 1918), ortak servis sağlayıcı IP'leri, kritik SaaS arka uçları ve devlet kurumlarına ait bilinen aralıklarla kesişip kesişmediği kontrol edilir. İkincisi kontrollü dağıtım: yeni liste önce tek bir test güvenlik duvarına basılır, NetFlow ve drop sayaçları 30–60 dakika izlenir; anomali yoksa üretime yayılır.

Operasyonel deneyim, listenin doğrudan üretime basılması durumunda beklenmedik bir iş kesintisinin (örneğin müşteri ortamından gelen meşru bir trafiğin yanlış sınıflandırılmış bir IP üzerinden engellenmesi) ortaya çıkma ihtimalinin azımsanmayacak ölçüde olduğunu gösterir. Beyaz liste disiplini bu nedenle entegrasyonun ayrılmaz bir parçasıdır; tek seferlik değil, sürekli güncellenen bir nesnedir.

Kontrol Listesi

  • 1 Engelleme katmanı kararı verildi (perimeter / WAF / EDR / DNS).
  • 2 Cihazın liste boyutu üst sınırı (object-group, EDL, set) doğrulandı.
  • 3 Atomik liste güncellemesi (ipset swap, nft flush+add) test edildi; trafik kesintisi yaşanmıyor.
  • 4 Beyaz liste: kurumsal SaaS, ortak ve devlet IP aralıkları engelleme kuralından önce accept edilmiş.
  • 5 Drop / Deny kuralı için log/counter aktif; SIEM'e akıyor.
  • 6 Hem inbound hem outbound yönde simetrik kural yazıldı.
  • 7 IPv6 listesi (/export.csv?type=ip6) ayrı bir nesneye yüklendi; IPv4 ile karıştırılmadı.

SiberAnaliz Verisi ile Hızlı Başlangıç

SiberAnaliz /export.csv uç noktasından IPv4 ve IPv6 göstergelerini doğrudan indirebilir, gösterge bağlamını IPv4 sayfası üzerinden inceleyebilirsiniz.