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ıyorno proposal chosen– Şifreleme algoritması uyuşmazlığı, her iki tarafınike=veesp=değerlerini kontrol edinauthentication failed– PSK veya sertifika sorunupeer 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-modp1024gibi 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,ecp384grupları daha iyi tercihler. - PSK’nın minimum 32 karakter, tercihen 64 karakter ve rastgele üretilmiş olmasına dikkat edin.
rightid=%anykullanıyorsanız,leftfirewall=yesile 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.
