CSF ile Temel Port ve Erişim Kuralları

Sunucunuzu internete açtığınız andan itibaren saat başı yüzlerce, bazen binlerce yetkisiz erişim denemesiyle karşılaşırsınız. Brute force saldırıları, port taramaları, otomatik exploit denemeleri… Bunların önüne geçmek için güçlü bir firewall yapılandırması şart. CSF (ConfigServer Security & Firewall), iptables üzerine inşa edilmiş, özellikle cPanel/WHM ortamlarında çok yaygın kullanılan ama standalone Linux sunucularda da son derece etkili bir güvenlik çözümü. Bu yazıda CSF ile temel port ve erişim kurallarını nasıl yönetirsiniz, gerçek dünya senaryolarıyla adım adım ele alacağız.

CSF Nedir ve Nasıl Çalışır

CSF, temelde iptables kurallarını yöneten bir wrapper. Ama bunu çok daha akıllı ve yönetilebilir hale getiriyor. Hem IPv4 hem IPv6 desteği var, login failure detection (lfd) daemon’ı sayesinde başarısız giriş denemelerini otomatik olarak tespit edip engelliyor.

Yapılandırma dosyaları /etc/csf/ altında toplanıyor:

  • csf.conf: Ana yapılandırma dosyası
  • csf.allow: Kalıcı izin verilen IP’ler
  • csf.deny: Kalıcı engellenen IP’ler
  • csf.ignore: lfd tarafından görmezden gelinecek IP’ler
  • csf.pignore: Process ignore listesi

CSF’nin çalışma mantığını şöyle özetleyebiliriz: Önce izin verilen portları ve IP’leri tanımlıyorsunuz, geri kalan her şeyi reddediyorsunuz. Bu “default deny” yaklaşımı güvenlik açısından en sağlam yöntem.

CSF Kurulumu

Eğer henüz kurmadıysanız, kurulum oldukça basit:

# Gerekli bağımlılıkları kur
yum install -y perl-libwww-perl perl-LWP-Protocol-https perl-GDGraph

# veya Debian/Ubuntu için
apt-get install -y libwww-perl libio-socket-ssl-perl

# CSF'yi indir ve kur
cd /tmp
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

Kurulumdan sonra önce test modunda çalışıp çalışmadığını kontrol edin. /etc/csf/csf.conf dosyasında TESTING = "1" satırı varsa CSF henüz production modda değil demektir. Bu mod aktifken iptables kuralları her 5 dakikada bir temizleniyor, kendinizi kilitlememeniz için önce bu modda test etmeniz iyi bir pratik.

TCP ve UDP Port Kuralları

CSF’nin kalbi csf.conf dosyasındaki port tanımlamaları. Gelen ve giden trafik için ayrı ayrı TCP ve UDP portlarını belirtiyorsunuz.

# csf.conf içindeki temel port yapılandırması
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,2096"
TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995"
UDP_IN = "20,21,53,68,123"
UDP_OUT = "20,21,53,68,123,113,123"

Ama dikkat edin, bu default değerler cPanel ortamı için optimize edilmiş. Eğer salt bir web sunucusu çalıştırıyorsanız bu kadar porta ihtiyacınız yok. Minimalist bir web sunucusu için:

# Sadece web ve SSH için minimal yapılandırma
TCP_IN = "22,80,443"
TCP_OUT = "22,25,53,80,443"
UDP_IN = "53,68"
UDP_OUT = "53,68,123"

Burada UDP 68 (DHCP client) ve UDP 123 (NTP) önemli. Bunları kapatırsanız sunucunuzun IP alması ve zaman senkronizasyonu sorun çıkarabilir.

Port Aralığı Tanımlama

Tek tek port yazmak yerine aralık da tanımlayabilirsiniz:

# Pasif FTP için port aralığı açma
TCP_IN = "22,80,443,49152:65534"

Bu özellikle pasif FTP için kritik. FTP sunucunuz çalışıyorsa ve pasif mode destekliyorsa, ilgili port aralığını hem firewall’da hem FTP yazılımınızda eşleştirmeniz gerekiyor.

IP Bazlı Erişim Kuralları

Kalıcı IP İzinleri

Ofis IP’nizi, yedekleme sunucunuzun adresini ya da güvendiğiniz altyapı IP’lerini kalıcı olarak whitelist’e almanız gerekiyor. Bu işlem için iki yöntem var:

# Komut satırından IP izni ekleme
csf -a 203.0.113.50 "Ofis statik IP - Ahmet"

# IP bloğunu (CIDR) izin listesine ekleme
csf -a 203.0.113.0/24 "Ofis network blogu"

Bu komut /etc/csf/csf.allow dosyasına ilgili satırı ekliyor ve kuralları hemen uyguluyur. Dosyayı doğrudan düzenleyip csf -r ile de reload yapabilirsiniz:

# csf.allow dosyası format örnekleri
203.0.113.50  # IP comment
203.0.113.0/24  # CIDR notasyonu
tcp|in|d=22|s=203.0.113.50  # Sadece SSH için izin
tcp|in|d=22,3306|s=203.0.113.0/24  # SSH ve MySQL için izin

Kalıcı IP Engelleme

Tekrar eden saldırılar, spammer IP’leri veya kötü niyetli tarama yapan adresler için:

# Tek IP engelleme
csf -d 198.51.100.100 "Tekrar eden bruteforce - manual block"

# IP bloğunu engelleme
csf -d 198.51.100.0/24 "Bu bloktan surekli tarama geliyor"

# Engelleme listesini görüntüle
csf -g 198.51.100.100

csf -g komutu çok faydalı; verilen IP’nin hem allow hem deny listelerinde ve aktif iptables kurallarında olup olmadığını gösteriyor.

Gelişmiş Port Erişim Kuralları

Portlara IP Bazlı Erişim Kısıtlaması

Belki 22 numaralı portu tamamen açık bırakmak istemiyorsunuzdur. Sadece belirli IP’lerin SSH bağlanabilmesini istiyorsanız, CUSTOM_CRON ile veya csf.allow üzerinden port bazlı kural yazabilirsiniz:

# Sadece belirli IP'den SSH erişimine izin ver
# TCP gelen trafik, hedef port 22, kaynak IP belirtilen adres
tcp|in|d=22|s=203.0.113.50

# Birden fazla port için aynı IP'ye izin
tcp|in|d=22,3306,6379|s=203.0.113.50

Bu satırları /etc/csf/csf.allow dosyasına ekledikten sonra:

csf -r

ile kuralları yeniden yükleyin.

MySQL ve Redis Gibi Servislerin Güvenliği

Veritabanı portlarını internete açmak büyük risk. Ama uygulama sunucunuz ayrı bir makinedeyse bu portlara sadece o sunucudan erişime izin vermeniz gerekiyor:

# Sadece uygulama sunucusundan MySQL erişimi
csf -a 10.0.0.5 "Uygulama sunucusu - MySQL erisimi icin"

# Ya da csf.allow'a port bazlı ekle
tcp|in|d=3306|s=10.0.0.5
tcp|in|d=6379|s=10.0.0.5  # Redis
tcp|in|d=5432|s=10.0.0.5  # PostgreSQL

Bu şekilde 3306, 6379 gibi portları TCP_IN listesine eklemeden sadece yetkili IP için açabilirsiniz.

CIDR Blok Yönetimi ve Ülke Bazlı Engelleme

Türkiye’ye hizmet veren bir platformunuz varsa ve Rusya, Çin gibi ülkelerden sürekli saldırı alıyorsanız CSF’nin CC_DENY özelliği işinize yarıyor:

# csf.conf içinde ülke bazlı engelleme
CC_DENY = "CN,RU,KP,IR"
CC_ALLOW = "TR,DE,NL,GB"

# Ülke bazlı engelleme aktif etmek için
CC_DENY_PORTS = ""  # Boş bırakılırsa tüm portlar

Dikkat: Bu özelliği kullanabilmek için BLOCK_REPORTING ve CC_LOOKUPS ayarlarını da yapılandırmanız gerekiyor. Ayrıca MaxMind GeoIP database’i güncel tutmanız şart, aksi halde yanlış bloklama yapabilirsiniz.

SYN Flood ve Port Tarama Koruması

# csf.conf'ta SYN flood koruması
SYNFLOOD = "1"
SYNFLOOD_RATE = "75/s"
SYNFLOOD_BURST = "150"

# Port tarama koruması
PORTFLOOD = "22;tcp;5;300,80;tcp;20;5,443;tcp;20;5"

PORTFLOOD parametresinin formatı şöyle: port;protokol;hit_count;interval. Yani yukarıdaki örnek “22 numaralı porta 300 saniyede 5’ten fazla bağlantı gelirse engelle” anlamına geliyor. Web portları için daha toleranslı (20 hit, 5 saniye) tutulmuş.

CONNLIMIT ile Eş Zamanlı Bağlantı Sınırı

# csf.conf'ta eş zamanlı bağlantı limiti
CONNLIMIT = "22;5,80;100,443;100"

Bu ayar “22 portuna aynı andan en fazla 5 bağlantı, 80 ve 443’e 100 bağlantı” demek. DDoS ve brute force senaryolarında kritik önem taşıyor.

LFD ile Dinamik Engelleme

CSF’nin ayrılmaz parçası lfd (Login Failure Daemon), log dosyalarını izleyerek başarısız giriş denemelerini tespit ediyor:

# csf.conf'ta lfd ayarları
LF_TRIGGER = "10"        # Kaç başarısız denemede engel
LF_INTERVAL = "3600"     # Kaç saniyelik pencerede sayılsın
LF_DURATION = "3600"     # Kaç saniye engellensin (0 = kalıcı)

# SSH brute force için özel ayar
LF_SSHD = "5"
LF_SSHD_PERM = "1"      # Kalıcı engelleme aktif

# cPanel login denemesi için
LF_CPANEL = "10"
LF_CPANEL_PERM = "0"    # Geçici engelleme

LF_SSHD_PERM = "1" yaparsanız SSH brute force yapan IP’ler kalıcı olarak csf.deny‘a ekleniyor. Bu agresif bir ayar ama SSH’a ciddi saldırı alan sunucularda çok etkili.

lfd Log Analizi

# lfd'nin ne yaptığını görmek için
grep "lfd" /var/log/lfd.log | tail -50

# Engellenen IP'leri listele
csf -l | grep -i "block"

# Aktif geçici blokları gör
csf -t

Gerçek Dünya Senaryosu: E-Ticaret Sunucusu Yapılandırması

Bir e-ticaret sitesi için tipik CSF yapılandırması şöyle olabilir:

# /etc/csf/csf.conf - E-ticaret sunucusu profili

# Temel web portları
TCP_IN = "22,80,443"
TCP_OUT = "22,25,53,80,443,587"
UDP_IN = "53,68,123"
UDP_OUT = "53,68,123"

# SYN flood koruması - e-ticaret sitesi DDoS hedefi olabilir
SYNFLOOD = "1"
SYNFLOOD_RATE = "100/s"
SYNFLOOD_BURST = "200"

# Bağlantı limitleri
CONNLIMIT = "22;3,80;200,443;200"

# Port flood koruması
PORTFLOOD = "22;tcp;3;300,80;tcp;50;10,443;tcp;50;10"

# SSH brute force - agresif koruma
LF_SSHD = "3"
LF_SSHD_PERM = "1"

# Genel login failure
LF_TRIGGER = "5"
LF_INTERVAL = "300"
LF_DURATION = "86400"  # 24 saat engel

# Email bildirimi
LF_ALERT_TO = "[email protected]"
LF_ALERT_FROM = "[email protected]"

Ödeme altyapısına erişen IP’leri whitelist’e almayı unutmayın:

# Ödeme sistemi IP'lerini izin listesine ekle
csf -a 185.0.0.0/24 "PayTR odeme sistemi IP blogu"
csf -a 213.0.0.0/24 "Iyzico IP blogu"

Gerçek Dünya Senaryosu: Yönetim Portlarının Güvenliği

cPanel, Plesk veya özel yönetim panelleriniz varsa bu portları herkese açık bırakmak çok riskli. Sadece ofis ve VPN IP’lerinize açın:

# Yonetim portlarini sadece guvenlilen IP'lere ac
# csf.allow dosyasina ekle:
tcp|in|d=2082,2083,2086,2087|s=203.0.113.50  # Ofis IP
tcp|in|d=2082,2083,2086,2087|s=203.0.113.51  # VPN IP

# TCP_IN listesinden bu portları cikarabilir ya da
# asagidaki sekilde sadece bu IP'ler icin izin kuralı iptables'a eklenir

Sonra csf.conf‘ta bu portları TCP_IN‘den çıkarın ve kuralları yeniden yükleyin:

csf -r

CSF Kural Yönetimi ve Sorun Giderme

Sık Kullanılan CSF Komutları

# CSF'yi yeniden başlat
csf -r

# CSF'yi durdur (DIKKAT: firewall devre disi kalir)
csf -f

# Tüm aktif kuralları listele
csf -l

# Geçici engellenen IP'leri gör
csf -t

# Belirli bir IP'nin durumunu sorgula
csf -g 203.0.113.100

# IP'yi geçici olarak engelle (saniye cinsinden)
csf -td 203.0.113.100 3600 "Gecici engel 1 saat"

# IP'yi whitelist'e al ve aktif engeli kaldir
csf -ar 203.0.113.100

# lfd'yi yeniden başlat
service lfd restart

Kural Testleri

Bir değişiklik yaptıktan sonra doğrulama kritik:

# Aktif iptables kurallarini kontrol et
iptables -L -n | grep -E "22|80|443"

# IPv6 kurallarini kontrol et
ip6tables -L -n | head -50

# CSF kural dosyasini syntax kontrolu
csf --cron

Kendinizi Kilitlememe

Bu konuda en sık yapılan hata SSH portunu yanlışlıkla kapatmak. Bunun önüne geçmek için:

  • Her zaman önce TESTING = "1" modunda çalışın
  • Değişikliklerden önce mevcut kuralları yedekleyin: cp /etc/csf/csf.conf /etc/csf/csf.conf.bak
  • SSH portunu değiştirdiyseniz hem yeni hem eski portu geçici olarak açık tutun
  • Sunucu sağlayıcısının out-of-band erişimini (IPMI, KVM, rescue mode) her zaman aklınızda bulundurun
# Guvenli kural guncelleme akisi
cp /etc/csf/csf.conf /etc/csf/csf.conf.$(date +%Y%m%d_%H%M%S)
# csf.conf'u duzenle
# TESTING = "1" ile test et
# Her sey tamam ise TESTING = "0" yap
csf -r

IPv6 Kuralları

Pek çok sistem yöneticisi IPv6’yı unutuyor. IPv4 tarafını güzel yapılandırıyorsunuz ama IPv6 üzerinden açık kapı kalıyor:

# csf.conf'ta IPv6 port ayarlari
TCP6_IN = "22,80,443"
TCP6_OUT = "22,53,80,443"
UDP6_IN = "53,68,123"
UDP6_OUT = "53,68,123"

# IPv6'yi tamamen devre disi birakmak isterseniz
IPV6 = "0"

Eğer sunucunuzda IPv6 kullanmıyorsanız IPV6 = "0" yapmanız en temiz çözüm. Ama IPv6 üzerinden hizmet veriyorsanız kuralları IPv4 ile paralel tutun.

Periyodik Bakım ve Monitoring

CSF’yi kurup unutmak olmaz. Düzenli bakım şart:

# Engel listesi şişmesini önlemek için eski geçici blokları temizle
csf -tf  # Geçici engel listesini temizle

# lfd loglarini düzenli incele
tail -f /var/log/lfd.log

# CSF versiyon güncellemesi
cd /tmp && wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz && cd csf && sh install.sh
# Kurulu ayarlarinizi ezmez, conf dosyalariniz korunur

csf.deny dosyası zamanla çok büyüyebilir ve binlerce satır birikilebilir. Bu iptables performansını etkiler. Periyodik olarak temizlemek ve blok listeleri kullanmak daha verimli:

# csf.deny dosya satir sayisini kontrol et
wc -l /etc/csf/csf.deny

# Cok buyumesse eski kayitlari temizle (500 satirdan fazlaysa dikkat et)
# Manuel review yapip eski/gereksiz bloklari kaldir

Sonuç

CSF, doğru yapılandırıldığında sunucunuzun güvenlik duvarını gerçek anlamda sağlamlaştırıyor. Temel noktalara bakacak olursak: Port yönetimini “minimum gerekli” prensibiyle yapın, fazladan açık port bırakmayın. IP bazlı erişim kurallarını özellikle yönetim portları ve veritabanı servisleri için mutlaka kullanın. SYN flood, CONNLIMIT ve PORTFLOOD ayarlarını sunucunuzun trafiğine göre optimize edin, çok kısıtlayıcı değerler meşru kullanıcıları etkileyebilir.

lfd’nin aktif ve doğru yapılandırılmış olması dinamik tehditlere karşı otomatik koruma sağlıyor. Ama log bildirimlerini düzenli takip etmezseniz neler döndüğünü bilemezsiniz. Email alertleri kurun, günlük veya haftalık log review alışkanlığı edinin.

En önemli pratik tavsiye: Production ortamda kural değişikliği yapmadan önce her zaman yedek alın ve mümkünse değişiklikleri önce test sunucusunda deneyin. Kendinizi SSH’dan kitleyip IPMI’a koşmak her sysadmin’in hayatında en az bir kez oluyor, ama iki kez olmasına gerek yok.

Yorum yapın