strongSwan ve ipsec Komutu ile Linux’ta IPsec VPN Tüneli Kurulumu ve Yönetimi

Üretim ortamında site-to-site VPN kurarken “basit bir şey bu” diye başlayıp saatlerce hata ayıklamak zorunda kalmak, bu işin içinde olanların neredeyse hepsinin yaşadığı klasik bir durum. IPsec, doğru yapılandırıldığında son derece güvenli ve performanslı bir çözüm sunar; ama yanlış bir parametre, sizi debug cehennemine sürükleyebilir. Bu yazıda strongSwan ile Linux üzerinde IPsec VPN tüneli kurulumunu, ipsec komutunun inceliklerini ve üretimde karşılaşabileceğiniz gerçek senaryoları ele alacağız.

IPsec ve strongSwan Nedir, Neden Kullanırız

IPsec (Internet Protocol Security), ağ katmanında çalışan bir protokol ailesidir. SSL tabanlı VPN çözümlerinin aksine, tünel içinden geçen trafik için uygulama katmanında herhangi bir değişiklik gerekmez. Bu durum onu özellikle site-to-site senaryolarda, iki farklı lokasyondaki ağları birbirine bağlamak için çok tercih edilen bir çözüm haline getirir.

strongSwan ise Linux üzerinde IPsec’i hayata geçiren en olgun ve aktif olarak geliştirilen açık kaynak implementasyonudur. Hem IKEv1 hem IKEv2 protokollerini destekler, sertifika tabanlı kimlik doğrulamadan pre-shared key kullanımına kadar geniş bir yapılandırma esnekliği sunar. Ubuntu, Debian, CentOS, RHEL ve türevlerinde paket depolarından kolayca kurulabilir.

Kurulum

Dağıtıma göre kurulum komutu değişir:

# Debian/Ubuntu
sudo apt update
sudo apt install strongswan strongswan-pki libcharon-extra-plugins

# RHEL/CentOS/Rocky Linux
sudo dnf install strongswan

# Kurulum sonrası servis durumunu kontrol et
sudo systemctl status strongswan

CentOS/RHEL tarafında bazen epel-release reposunu aktif etmeniz gerekebilir. libcharon-extra-plugins paketi Debian tabanlı sistemlerde EAP kimlik doğrulama eklentilerini ve bazı ek şifreleme algoritmalarını beraberinde getirir; roadwarrior senaryolarında bu paket olmadan ciddi sorunlarla karşılaşabilirsiniz.

Temel Yapılandırma Dosyaları

strongSwan’ın yapılandırması birkaç ana dosya üzerine kuruludur:

  • /etc/ipsec.conf: Tünel bağlantılarının tanımlandığı ana yapılandırma dosyası
  • /etc/ipsec.secrets: Pre-shared key veya sertifika parolalarının tutulduğu dosya
  • /etc/strongswan.conf: strongSwan daemon’ının genel ayarları
  • /etc/ipsec.d/: Sertifika ve CRL dosyalarının konumu

Bu dosyaların izin ayarlarına dikkat edin. Özellikle ipsec.secrets dosyası dünya tarafından okunabilir olmamalıdır:

sudo chmod 600 /etc/ipsec.secrets
sudo chown root:root /etc/ipsec.secrets

Site-to-Site Tünel Yapılandırması

Senaryo olarak iki lokasyonu düşünelim: İstanbul ofisi (Sol taraf) ve Ankara ofisi (Sağ taraf).

  • İstanbul dış IP: 203.0.113.10
  • İstanbul iç ağ: 192.168.1.0/24
  • Ankara dış IP: 198.51.100.20
  • Ankara iç ağ: 192.168.2.0/24

İstanbul Tarafı Yapılandırması (/etc/ipsec.conf)

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    keyexchange=ikev2
    authby=secret

conn istanbul-ankara
    left=203.0.113.10
    leftsubnet=192.168.1.0/24
    leftid=@istanbul
    right=198.51.100.20
    rightsubnet=192.168.2.0/24
    rightid=@ankara
    auto=start
    type=tunnel
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!
    dpdaction=restart
    dpddelay=30s
    dpdtimeout=120s

Pre-Shared Key Tanımı (/etc/ipsec.secrets)

# /etc/ipsec.secrets
@istanbul @ankara : PSK "Buraya-Guclu-Bir-Parola-Girin-En-Az-32-Karakter"

PSK değeri için rastgele ve güçlü bir string kullanın. Üretimde sertifika tabanlı kimlik doğrulamayı tercih etmek çok daha sağlıklıdır; PSK paylaşımı operasyonel açıdan sorun çıkarabilir.

Ankara tarafında left ve right değerlerini karşılıklı olarak değiştiriyorsunuz, geri kalanı aynı kalıyor.

ipsec Komutu ile Tünel Yönetimi

Yapılandırma tamamlandıktan sonra işin operasyonel tarafına geçelim. ipsec komutu strongSwan’ın temel yönetim arayüzüdür.

Servisi Başlatmak ve Durumunu Kontrol Etmek

# strongSwan servisini başlat
sudo ipsec start

# Servis durumunu kontrol et
sudo ipsec status

# Tüm bağlantıların detaylı durumu
sudo ipsec statusall

# Yapılandırmayı yeniden yükle (servisi durdurmadan)
sudo ipsec reload

# Tüm bağlantıları yeniden başlat
sudo ipsec restart

ipsec statusall çıktısı başlangıçta biraz ezici gelebilir ama zamanla en iyi arkadaşınız olur. IKE SA durumlarını, ESP SA’larını, trafik selektörlerini ve şifreleme bilgilerini bir arada gösterir.

Bağlantı Yönetimi

# Belirli bir bağlantıyı başlat
sudo ipsec up istanbul-ankara

# Bağlantıyı sonlandır
sudo ipsec down istanbul-ankara

# Bağlantıyı zorla yeniden başlat
sudo ipsec down istanbul-ankara && sudo ipsec up istanbul-ankara

# Yapılandırma değişikliği sonrası tek bağlantıyı yeniden yükle
sudo ipsec reload
sudo ipsec up istanbul-ankara

Bir tüneli down ve tekrar up yapmak, özellikle Phase 1 müzakeresi takıldığında veya IKE SA’sı bayatladığında etkili bir hızlı çözümdür. Ama bu durumun sık tekrarlanması altta yatan bir yapılandırma sorununa işaret eder.

Sertifika Bilgilerini Kontrol Etmek

# Yüklü sertifikaları listele
sudo ipsec listcerts

# CA sertifikalarını göster
sudo ipsec listcacerts

# CRL listesini göster
sudo ipsec listcrls

# Tüm güvenlik ilişkilendirmelerini listele
sudo ipsec listall

Kernel Tarafında IP Yönlendirme Ayarları

IPsec tünelinin çalışması için kernel seviyesinde IP forwarding aktif olmalı. Bu çoğunlukla unutulan ama kritik bir adım:

# Anlık olarak aktif et
sudo sysctl -w net.ipv4.ip_forward=1

# Kalıcı hale getir
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-ipsec.conf
sudo sysctl -p /etc/sysctl.d/99-ipsec.conf

# Durumu doğrula
cat /proc/sys/net/ipv4/ip_forward

Firewall tarafında da dikkat edilmesi gereken noktalar var. Özellikle iptables veya nftables kullanıyorsanız, IKE (UDP 500), NAT-T (UDP 4500) ve ESP (protokol 50) trafiğine izin vermeniz gerekiyor:

# iptables ile gerekli izinler
sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT
sudo iptables -A INPUT -p esp -j ACCEPT

# Forward trafiği için
sudo iptables -A FORWARD -i ipsec+ -j ACCEPT
sudo iptables -A FORWARD -o ipsec+ -j ACCEPT

Hata Ayıklama ve Log Analizi

Gerçek ortamda tünel kurulumu ilk denemede her zaman çalışmaz. Debug sürecinde sistematik bir yaklaşım şart.

Canlı Log Takibi

# systemd journal ile strongSwan loglarını izle
sudo journalctl -u strongswan -f

# Alternatif olarak syslog
sudo tail -f /var/log/syslog | grep charon

# Debug seviyesini geçici olarak artır
sudo ipsec stroke loglevel ike 3
sudo ipsec stroke loglevel esp 3

Logda dikkat etmeniz gereken temel ifadeler:

  • IKE_SA ... established – Phase 1 başarılı
  • CHILD_SA ... established – Phase 2 başarılı, trafik akıyor
  • no proposal chosen – Şifreleme algoritması uyuşmazlığı, her iki tarafın ike= ve esp= değerlerini kontrol edin
  • authentication failed – PSK veya sertifika sorunu
  • peer not responding – Ağ bağlantısı veya firewall sorunu

Çok Sık Karşılaşılan Sorun: “no proposal chosen”

Bu hatanın en yaygın sebebi, iki tarafın desteklediği şifreleme algoritmalarının örtüşmemesidir. Yapılandırmada ! işaretini kullanmak, strictmode’u aktif eder ve sadece belirtilen algoritmayı kullanmasını zorlar. Hata ayıklama sırasında bu işareti kaldırıp daha geniş bir proposal seti deneyebilirsiniz; sorunu izole ettikten sonra tekrar sıkılaştırın.

# Hata ayıklama için gevşetilmiş yapılandırma
ike=aes256-sha256-modp2048,aes128-sha1-modp1024
esp=aes256-sha256,aes128-sha1

IKEv2 ile Sertifika Tabanlı Kimlik Doğrulama

Pre-shared key kullanmak küçük ortamlarda kabul edilebilir olsa da ölçeklenebilir bir yapı için sertifika tabanlı kimlik doğrulama şiddetle tavsiye edilir. strongSwan’ın pki aracı bu süreci kolaylaştırır:

# CA anahtarı ve sertifikası oluştur
sudo ipsec pki --gen --type rsa --size 4096 --outform pem > /etc/ipsec.d/private/caKey.pem
sudo ipsec pki --self --ca --lifetime 3650 
    --in /etc/ipsec.d/private/caKey.pem 
    --type rsa --dn "CN=VPN Root CA, O=Sirketim, C=TR" 
    --outform pem > /etc/ipsec.d/cacerts/caCert.pem

# Sunucu anahtarı ve sertifika isteği
sudo ipsec pki --gen --type rsa --size 2048 --outform pem > /etc/ipsec.d/private/serverKey.pem
sudo ipsec pki --pub --in /etc/ipsec.d/private/serverKey.pem --type rsa | 
    sudo ipsec pki --issue --lifetime 730 
    --cacert /etc/ipsec.d/cacerts/caCert.pem 
    --cakey /etc/ipsec.d/private/caKey.pem 
    --dn "CN=203.0.113.10, O=Sirketim, C=TR" 
    --san 203.0.113.10 
    --flag serverAuth --flag ikeIntermediate 
    --outform pem > /etc/ipsec.d/certs/serverCert.pem

Sertifika tabanlı yapılandırmada ipsec.conf tarafında authby=pubkey kullanırsınız ve ipsec.secrets dosyasında private key referansı tanımlarsınız:

# /etc/ipsec.secrets - sertifika tabanlı için
: RSA serverKey.pem

Roadwarrior Senaryosu: Gezici Kullanıcılar için VPN

Site-to-site dışında, bireysel kullanıcıların kurumsal ağa bağlanması için roadwarrior yapılandırması da sıkça kullanılır. Burada EAP-MSCHAPv2 ile kullanıcı adı/parola kombinasyonu yaygın bir tercih:

conn roadwarrior
    left=203.0.113.10
    leftsubnet=0.0.0.0/0
    leftcert=serverCert.pem
    [email protected]
    right=%any
    rightid=%any
    rightsourceip=10.10.0.0/24
    rightdns=8.8.8.8,8.8.4.4
    keyexchange=ikev2
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!
    leftauth=pubkey
    rightauth=eap-mschapv2
    eap_identity=%identity
    auto=add
    type=tunnel
    dpdaction=clear

rightsourceip satırı, bağlanan istemcilere sanal IP dağıtır. Bu IP havuzunun iç ağınızla çakışmamasına dikkat edin.

Performans ve Monitoring

Tünel kurulduktan sonra trafik istatistiklerini izlemek için:

# Aktif SA'ları ve trafik sayaçlarını göster
sudo ip xfrm state list

# Policy listesi
sudo ip xfrm policy list

# Detaylı istatistikler
sudo ip -s xfrm state list

# Tünel üzerinden geçen trafiği tcpdump ile yakala
sudo tcpdump -i any esp
sudo tcpdump -i eth0 host 198.51.100.20

ip xfrm komutları, kernel’in IPsec state machine’ine doğrudan erişim sağlar. ipsec statusall daha okunabilir bir çıktı verirken, ip xfrm daha düşük seviyeli ve scripting için daha uygun bir arayüz sunar.

Tünel stabilitesini izlemek için basit bir script:

#!/bin/bash
# /usr/local/bin/ipsec-monitor.sh
TUNNEL="istanbul-ankara"
LOG="/var/log/ipsec-monitor.log"

STATUS=$(ipsec status $TUNNEL | grep "ESTABLISHED")
if [ -z "$STATUS" ]; then
    echo "$(date): Tunel down, yeniden baslatiliyor..." >> $LOG
    ipsec down $TUNNEL
    sleep 5
    ipsec up $TUNNEL
    echo "$(date): Tunel yeniden baslatildi." >> $LOG
else
    echo "$(date): Tunel aktif." >> $LOG
fi

Bu scripti cron ile periyodik çalıştırabilirsiniz, ancak DPD mekanizması doğru yapılandırıldıysa bu tür manuel müdahalelere genellikle ihtiyaç duymazsınız.

Önemli ipsec Parametreleri

ipsec komutunun sık kullanılan alt komutları ve açıklamaları:

  • ipsec start: strongSwan daemon’ını başlatır
  • ipsec stop: Tüm bağlantıları kapatır ve daemon’ı durdurur
  • ipsec restart: Stop ve start işlemini sırayla yapar
  • ipsec reload: Yapılandırma değişikliklerini daemon’ı durdurmadan yükler
  • ipsec status [bağlantı]: Belirtilen veya tüm bağlantıların durumunu gösterir
  • ipsec statusall: SA’lar dahil detaylı durum bilgisi
  • ipsec up [bağlantı]: Belirtilen bağlantıyı başlatır
  • ipsec down [bağlantı]: Belirtilen bağlantıyı sonlandırır
  • ipsec listcerts: Yüklü sertifikaları listeler
  • ipsec pki: PKI anahtar ve sertifika yönetim aracı
  • ipsec version: strongSwan versiyon bilgisini gösterir
  • ipsec leases: roadwarrior sanal IP dağıtımlarını listeler

Güvenlik Sıkılaştırma Notları

Birkaç pratik güvenlik tavsiyesi:

  • IKEv1’i devre dışı bırakın, sadece IKEv2 kullanın. IKEv1’in bilinen zayıflıkları var ve artık kullanmak için geçerli bir sebep yok.
  • aes128-sha1-modp1024 gibi eski algoritma kombinasyonlarından kaçının. AES-256 ve SHA-256 minimum bar olmalı.
  • DH group olarak 2048 bit (modp2048) veya üzerini tercih edin. Kurumsal ortamlarda modp4096 veya elliptic curve tabanlı ecp256, ecp384 grupları daha iyi tercihler.
  • PSK’nın minimum 32 karakter, tercihen 64 karakter ve rastgele üretilmiş olmasına dikkat edin.
  • rightid=%any kullanıyorsanız, leftfirewall=yes ile birlikte gelen trafiği ek firewall kurallarıyla sınırlandırın.

Sonuç

strongSwan ve ipsec komutu, Linux ekosisteminde IPsec VPN yönetimi için olgun ve güvenilir bir araç seti sunar. Site-to-site bağlantılar için basit bir PSK yapılandırmasıyla başlayabilir, zamanla sertifika tabanlı kimlik doğrulamaya geçerek ölçeklenebilir bir yapı kurabilirsiniz. Hata ayıklama sürecinde journalctl, ip xfrm ve ipsec statusall üçlüsü birlikte kullanıldığında çoğu sorunun kaynağını bulmak çok daha kolay hale gelir.

En çok vakit kaybedilen konular genellikle firewall kurallarının eksikliği, IP forwarding’in aktif edilmemiş olması ve iki taraf arasındaki şifreleme algoritması uyuşmazlıklarıdır. Bu üçü doğruysa, tünelin kurulması oldukça pürüzsüz bir deneyim haline gelir. Üretim ortamına almadan önce her zaman bir test ortamında doğrulamak, sonradan çok daha büyük bir baş ağrısından sizi kurtarır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir