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.