IPv6, modern ağ altyapısının kaçınılmaz bir parçası haline geldi. Ancak pek çok sistem yöneticisi, IPv4 güvenlik duvarı kurallarını titizlikle yapılandırırken IPv6 tarafını ya unutuyor ya da erteliyor. Bu durum ciddi güvenlik açıkları doğurabilir. CSF (ConfigServer Security & Firewall) kullanıyorsanız, IPv6 desteğini doğru yapılandırmak hem zorunlu hem de düşündüğünüzden çok daha kritik.
Bu yazıda CSF ile IPv6 güvenlik duvarı yapılandırmasını baştan sona ele alacağız. Temel ayarlardan gelişmiş kural yönetimine, gerçek dünya senaryolarından performans optimizasyonuna kadar her şeyi pratikte göreceğiz.
CSF ve IPv6: Neden Önemli?
CSF, arka planda iptables (IPv4) ve ip6tables (IPv6) kullanır. IPv4 kurallarınız mükemmel olsa bile, sunucunuzda IPv6 etkin durumdaysa ve ip6tables kuralları eksikse, saldırganlar IPv6 üzerinden sistemlerinize ulaşabilir.
Bunu bir ev güvenlik sistemiyle kıyaslayalım. Ön kapınıza üç kilit taktınız, alarm kurdunuz. Ama arka kapıyı açık bıraktınız. IPv6 güvenliğini ihmal etmek tam olarak bu.
Özellikle şu senaryolarda IPv6 güvenlik duvarı kritik önem taşır:
- Dual-stack sunucular: Hem IPv4 hem IPv6 adresi olan sistemler
- Konteyner ortamları: Docker ve Kubernetes genellikle IPv6 yönetimine özel dikkat ister
- CDN arkasındaki sunucular: CDN sağlayıcısı IPv6 trafiği yönlendirebilir
- Bulut sağlayıcıları: AWS, Azure, GCP otomatik IPv6 ataması yapabilir
CSF Kurulumu ve IPv6 Ön Hazırlık
CSF zaten kuruluysa bu bölümü atlayabilirsiniz. Temiz bir kurulum için:
cd /usr/src
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
Kurulumdan sonra IPv6 desteğinin sisteminizde aktif olup olmadığını kontrol edin:
# IPv6 modülünü kontrol et
lsmod | grep ipv6
# Mevcut IPv6 adreslerini listele
ip -6 addr show
# ip6tables'ın çalışıp çalışmadığını kontrol et
ip6tables -L -n --line-numbers
Eğer ip6tables komutu bulunamazsa:
# Debian/Ubuntu
apt-get install iptables ip6tables
# CentOS/RHEL/AlmaLinux
yum install iptables-ipv6
CSF Yapılandırma Dosyasında IPv6 Ayarları
CSF’nin ana yapılandırma dosyası /etc/csf/csf.conf içindeki IPv6 ile ilgili parametreler şunlardır:
IPV6: Ana IPv6 etkinleştirme parametresi. 1 olarak ayarlanmalı
IPV6_ICMP_TYPES: İzin verilecek ICMPv6 mesaj tiplerini tanımlar
IPV6_SPI: Durum bilgisi (stateful) paket incelemesini etkinleştirir
TCP6_IN / TCP6_OUT: IPv6 için gelen/giden TCP portları
UDP6_IN / UDP6_OUT: IPv6 için gelen/giden UDP portları
Şimdi bu ayarları pratikte yapalım:
# Önce yapılandırma dosyasını yedekleyin
cp /etc/csf/csf.conf /etc/csf/csf.conf.backup
# IPv6'yı etkinleştirin
sed -i 's/^IPV6 = "0"/IPV6 = "1"/' /etc/csf/csf.conf
# Değişikliği doğrulayın
grep "^IPV6 " /etc/csf/csf.conf
Ardından csf.conf dosyasını bir metin editörüyle açıp IPv6 bölümünü düzenleyin:
nano /etc/csf/csf.conf
Kritik IPv6 parametrelerini şu şekilde ayarlayın:
# IPv6 desteğini etkinleştir
IPV6 = "1"
# IPv6 için izin verilen gelen TCP portları (IPv4 ile aynı tutabilirsiniz)
TCP6_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"
# IPv6 için izin verilen giden TCP portları
TCP6_OUT = "20,21,22,25,53,80,110,143,443,465,587,993,995"
# IPv6 için UDP portları
UDP6_IN = "20,21,53"
UDP6_OUT = "20,21,53,113,123"
# ICMPv6 türleri (bu değerleri silmeyin, IPv6 için kritik)
IPV6_ICMP_TYPES = "1,2,3,4,8,133,134,135,136,137,141,142,148,149,151,152,153"
ICMPv6 Kuralları: IPv4’ten Farklı Yaklaşım
IPv4’te ICMP’yi tamamen kapatmak mümkündü, hatta bazı güvenlik rehberleri bunu öneriyordu. IPv6’da bu yaklaşım işe yaramaz. ICMPv6 yalnızca ping için değil, Neighbor Discovery Protocol (NDP) gibi kritik fonksiyonlar için de kullanılır. NDP’yi bloke ederseniz IPv6 bağlantınız tamamen kesilir.
CSF, ICMPv6 kurallarını otomatik yönetir ancak hangi tiplerin neden gerekli olduğunu bilmek önemli:
- Tip 1 (Destination Unreachable): Bağlantı hata yönetimi için şart
- Tip 2 (Packet Too Big): MTU keşfi için gerekli, engellenirse fragmantasyon sorunları çıkar
- Tip 133 (Router Solicitation): İstemcinin yönlendirici araması
- Tip 134 (Router Advertisement): Yönlendirici bilgisi dağıtımı
- Tip 135 (Neighbor Solicitation): ARP’nin IPv6 karşılığı
- Tip 136 (Neighbor Advertisement): Komşu cihaz yanıtı
Bu nedenle IPV6_ICMP_TYPES parametresini asla boş bırakmayın.
IPv6 Allow ve Deny Listesi Yönetimi
CSF’nin allow ve deny listeleri IPv6 adreslerini de destekler. Syntax IPv4 ile benzerdir ancak IPv6 adresleme kurallarına dikkat etmek gerekir.
# Belirli bir IPv6 adresini izin listesine ekle
csf -a 2001:db8::1 "Guvenilir IPv6 host"
# IPv6 subnet'ini izin listesine ekle
csf -a 2001:db8::/32 "Ofis IPv6 subnet"
# IPv6 adresini engelle
csf -d 2001:db8:bad::/48 "Kotu IPv6 subnet"
# Mevcut IPv6 kurallarını listele
csf -g 2001:db8::1
csf.allow ve csf.deny dosyalarını doğrudan da düzenleyebilirsiniz:
# IPv6 allow listesi
echo "2001:db8::100 # Guvenilir yonetim sunucusu" >> /etc/csf/csf.allow
# IPv6 deny listesi
echo "2001:db8:cafe::/48 # Supheli aktivite" >> /etc/csf/csf.deny
Özel IPv6 Firewall Kuralları: csf6.pignore ve csfpre.sh
Bazı senaryolarda CSF’nin standart IPv6 kurallarının ötesine geçmeniz gerekir. CSF, özel ip6tables kuralları eklemenize olanak tanır.
csfpre.sh dosyası, CSF kuralları yüklenmeden önce çalışır. IPv6’ya özel kurallarınızı buraya ekleyebilirsiniz:
nano /etc/csf/csfpre.sh
#!/bin/bash
# CSF oncesi ozel IPv6 kurallari
# Link-local adreslerden gelen trafiği kısıtla (yalnızca NDP için izin ver)
ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
ip6tables -A INPUT -s fe80::/10 -j DROP
# IPv6 Teredo tunelleme trafiğini engelle (güvenlik riski)
ip6tables -A INPUT -p udp --dport 3544 -j DROP
# 6to4 relay trafiğini engelle
ip6tables -A INPUT -s 2002::/16 -j DROP
# Loopback IPv6 trafiğine her zaman izin ver
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
csfpost.sh dosyası CSF kuralları yüklendikten sonra çalışır, ek kurallar için kullanılır:
nano /etc/csf/csfpost.sh
#!/bin/bash
# CSF sonrasi ozel IPv6 kurallari
# Rate limiting - IPv6 SSH brute force koruması
ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH6
ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update
--seconds 60 --hitcount 4 --name SSH6 -j DROP
# IPv6 HTTP flood koruması
ip6tables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
# Geçersiz paketleri düşür
ip6tables -A INPUT -m state --state INVALID -j DROP
Dosyaları çalıştırılabilir yapın:
chmod +x /etc/csf/csfpre.sh
chmod +x /etc/csf/csfpost.sh
Gerçek Dünya Senaryosu 1: Web Sunucusu IPv6 Yapılandırması
Diyelim ki bir cPanel/WHM sunucusu işletiyorsunuz ve müşterileriniz IPv6 üzerinden web sitelerine erişmek istiyor. Aynı zamanda yönetim paneline yalnızca belirli IPv6 adreslerinden erişim olmasını istiyorsunuz.
# csf.conf içindeki web sunucusu için IPv6 ayarları
TCP6_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087"
TCP6_OUT = "20,21,22,25,53,80,110,143,443,465,587,993,995"
UDP6_IN = "53"
UDP6_OUT = "53,123"
Yönetim paneline IPv6 kısıtlaması eklemek için:
# WHM portunu yalnızca belirli IPv6 subnet'inden eriştirilebilir yap
echo "tcp6|in|d=2087|s=2001:db8:office::/48" >> /etc/csf/csf.allow
# Diğer tüm IPv6 adreslerinden WHM erişimini engelle
echo "tcp6|in|d=2087|s=::/0" >> /etc/csf/csf.deny
Sonra CSF’yi yeniden başlatın:
csf -r
Gerçek Dünya Senaryosu 2: Mail Sunucusu IPv6 Ayarları
Mail sunucuları IPv6 söz konusu olduğunda özel dikkat gerektirir. Özellikle PTR (reverse DNS) kaydı olmayan IPv6 adreslerinden gelen mailleri büyük provider’lar reddeder. Sunucunuzun IPv6 üzerinden mail göndermesini istemiyorsanız:
# /etc/csf/csf.conf içinde
# Giden SMTP'yi IPv6 üzerinden kapat
TCP6_OUT = "20,21,22,53,80,110,143,443,465,587,993,995"
# 25 portunu TCP6_OUT listesinden çıkardık
# Sadece PTR kaydı olan IPv6'lardan gelen maili kabul et
# Bu CSF'nin doğrudan yapamayacağı bir şey, Postfix tarafında yapılır
Mail sunucusu için IPv6 PTR kaydı kontrolünü csfpre.sh’a ekleyebilirsiniz:
# IPv6 üzerinden gelen SMTP bağlantılarında PTR kontrolü
# Not: Bu kural Postfix'in kendi PTR kontrolüne ek olarak ağ katmanında çalışır
ip6tables -N CHECK_PTR6
ip6tables -A INPUT -p tcp --dport 25 -m state --state NEW -j CHECK_PTR6
Gerçek Dünya Senaryosu 3: Brute Force Saldırılarına Karşı IPv6 Koruma
LFD (Login Failure Daemon) CSF’nin bir parçasıdır ve IPv6 saldırılarını da izler. Ancak IPv6’da bir saldırgan her bağlantı denemesinde farklı bir adres kullanabilir çünkü ellerinde /64 veya daha büyük bir subnet olabilir.
Bu senaryoya karşı subnet bazlı engelleme yapmanız gerekir:
# csf.conf içinde IPv6 subnet engelleme ayarı
LF_IPSET = "1" # ipset kullanımını etkinleştir (performans için)
# IPv6 için blok boyutunu belirle
# /128 yerine /64 bloklayın (tek IP değil, subnet)
LFD’yi IPv6 için özelleştirmek amacıyla /etc/csf/csf.conf içinde:
# IPv6 brute force tespiti
LF_TRIGGER = "10" # 10 başarısız denemeden sonra blokla
LF_TRIGGER_PERM = "1" # Kalıcı engelle
LF_ACCOUNT_FORKS = "5" # Fork limiti
# IPv6 için özel eşik değerleri (opsiyonel)
LF_SSH = "5" # SSH için başarısız deneme limiti
LF_FTPD = "10" # FTP için başarısız deneme limiti
IPv6 Güvenlik Duvarı Kurallarını Test Etme
Yapılandırmayı tamamladıktan sonra test etmek zorunludur. Kuralların beklendiği gibi çalıştığını doğrulayın:
# Mevcut ip6tables kurallarını görüntüle
ip6tables -L -n -v --line-numbers
# Belirli bir zinciri görüntüle
ip6tables -L INPUT -n -v
# CSF'nin IPv6 durumunu kontrol et
csf -l | grep "ip6"
# IPv6 bağlantı testleri için (başka bir sunucudan)
# ping6 komutuyla ICMPv6 testi
ping6 -c 4 2001:db8::1
# IPv6 üzerinden port testi
nc -6 -zv 2001:db8::1 80
nc -6 -zv 2001:db8::1 443
# nmap ile IPv6 port taraması
nmap -6 2001:db8::1
CSF’nin kural sayısını kontrol etmek için:
# Toplam ip6tables kural sayısı
ip6tables -L | wc -l
# CSF'nin aktif IPv6 kurallarını say
ip6tables -L -n | grep -c ACCEPT
ip6tables -L -n | grep -c DROP
IPv6 Firewall Log Yönetimi
IPv6 trafiğini loglamak sorun giderme ve güvenlik analizi için kritiktir:
# csf.conf içinde loglama ayarları
VERBOSE = "2" # Detaylı loglama
LOGDROPPED = "1" # Düşürülen paketleri logla
LOGFLOOD = "1" # Flood saldırılarını logla
# IPv6 log izleme komutu
tail -f /var/log/lfd.log | grep -i "ipv6|ip6|:::"
# Engellenen IPv6 adreslerini görüntüle
grep "BLOCK|DROP" /var/log/lfd.log | grep ":" | tail -50
# IPv6 bağlantı istatistikleri
ip6tables -L INPUT -n -v | sort -rn -k 2 | head -20
Düzenli log rotasyonu için:
# /etc/logrotate.d/csf dosyası
cat > /etc/logrotate.d/csf << 'EOF'
/var/log/lfd.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
postrotate
kill -HUP $(cat /var/run/lfd.pid 2>/dev/null) 2>/dev/null || true
endscript
}
EOF
Yaygın IPv6 CSF Sorunları ve Çözümleri
Sorun 1: IPv6 etkinleştirdikten sonra bağlantı kesildi
Büyük ihtimalle ICMPv6 kuralları eksik. Kontrol edin:
# ICMPv6 kurallarını görüntüle
ip6tables -L INPUT -n | grep icmp6
# NDP için kritik ICMPv6 tiplerinin izinli olduğunu doğrula
ip6tables -L INPUT -n | grep "ipv6-icmp"
# Sorun devam ederse CSF'yi durdur ve manuel test yap
csf -x # CSF'yi devre dışı bırak
ping6 sunucu_ipv6_adresi # Test et
csf -e # CSF'yi yeniden etkinleştir
Sorun 2: IPv6 deny listesi çalışmıyor
# Deny listesini yenile
csf -r
# Manuel olarak kontrol et
ip6tables -L -n | grep "2001:db8"
# csf.deny dosyasının formatını kontrol et
cat /etc/csf/csf.deny | grep ":"
Sorun 3: LFD IPv6 adreslerini bloklayamıyor
# LFD log dosyasını kontrol et
tail -100 /var/log/lfd.log
# ip6tables modüllerinin yüklü olduğunu doğrula
lsmod | grep "ip6"
modprobe ip6_tables
modprobe ip6table_filter
# CSF'yi yeniden başlat
csf -r && service lfd restart
CSF IPv6 Performans Optimizasyonu
Büyük sunucularda binlerce IPv6 kural performansı olumsuz etkileyebilir. ipset kullanarak bunu optimize edebilirsiniz:
# csf.conf içinde ipset etkinleştirme
LF_IPSET = "1"
# ipset'in kurulu olduğunu doğrula
ipset --version
# Gerekirse kur
apt-get install ipset # Debian/Ubuntu
yum install ipset # CentOS/RHEL
# Mevcut ipset listelerini görüntüle
ipset list | grep "csf"
ipset kullanıldığında, CSF binlerce IP’yi ayrı ayrı iptables kuralı olarak eklemek yerine tek bir küme olarak işler. Bu, özellikle aktif saldırı sırasında engelleme listesi büyüdüğünde büyük fark yaratır.
Rutin IPv6 Bakım Görevleri
Günlük yönetim için hazır tutmanız gereken komutlar:
#!/bin/bash
# IPv6 CSF durum kontrol scripti - /usr/local/sbin/check_ipv6_csf.sh
echo "=== IPv6 Firewall Durumu ==="
echo "Aktif ip6tables kural sayisi:"
ip6tables -L | grep -c "^[A-Z]"
echo ""
echo "Son engellenen IPv6 adresler:"
grep "BLOCK" /var/log/lfd.log | grep ":" | tail -10
echo ""
echo "ip6tables INPUT zinciri ozeti:"
ip6tables -L INPUT -n -v | head -20
echo ""
echo "CSF deny listesindeki IPv6 sayisi:"
grep -c ":" /etc/csf/csf.deny 2>/dev/null || echo "0"
Scripti çalıştırılabilir yapın ve cron’a ekleyin:
chmod +x /usr/local/sbin/check_ipv6_csf.sh
# Günlük sabah 8'de çalıştır
echo "0 8 * * * root /usr/local/sbin/check_ipv6_csf.sh >> /var/log/ipv6_csf_check.log 2>&1" >> /etc/crontab
Sonuç
IPv6 güvenlik duvarı yapılandırması artık ertelenebilir bir görev değil. İnternetteki IPv6 trafiği her geçen yıl artıyor ve saldırganlar IPv6’yı atlatma vektörü olarak aktif biçimde kullanıyor.
CSF ile IPv6 güvenliğini sağlamak için kritik adımları özetleyelim:
- IPV6 = “1” ayarını etkinleştirmeden önce csf.conf’u eksiksiz yapılandırın
- ICMPv6 kurallarını asla tamamen kapatmayın, NDP için kritik tipler her zaman izinli olmalı
- csfpre.sh ve csfpost.sh ile özel gereksinimlerinize uygun kurallar ekleyin
- LFD’nin IPv6’yı da izlediğinden emin olun, loglara düzenli bakın
- ipset kullanın, büyük engelleme listelerinde performansı önemli ölçüde artırır
- Subnet bazlı engelleme yapın, tek IP engellemenin ötesine geçin
- Değişiklik yapmadan önce yedek alın, csf.conf yedeği sizi gereksiz downtime’dan korur
IPv6 güvenliği karmaşık görünse de CSF bunu yönetilebilir kılıyor. Temel prensipler IPv4 ile aynı, sadece ICMPv6’nın kritik rolünü aklınızda tutun ve adres formatı farklılıklarına dikkat edin. Yapılandırmayı tamamladıktan sonra düzenli test ve log analizi rutini oluşturun. Güvenlik, bir kez yapılan değil, sürekli bakım gerektiren bir süreçtir.