VPS Sunucu Üzerine Strongswan ile IKEv2 VPN Sunucu Kurmak

Belki daha önce VPS sunucuya OpenVPN kurmak makalemi okumuşsunuzdur. Bu blog yazısı teknolojinin değişmesi ve ilerlemesi sebebi ile bir önceki makalenin iyileştirilmiş hali. Bu sefer OpenVPN değil onun yerine IKEv2 kuruyoruz.

Şimdi diyeceksiniz OpenVPN varken IKEv2 nereden çıktı? OpenVPN neyimize yetmiyordu? OpenVPN güvenilirlik olarak çok güçlü bir altyapı olmasına rağmen hız ve modern mobil altyapıların bize sunduğu mobilite ile verimli çalışmayan bir yapı. iOS gibi bir cihazda da işletim sistemi tarafından direkt desteklenmiyor ve ek bir yazılım gerektiriyor.

Bu kötü birşey mi? Değil tabiki ama eğer VPN’im 7/24 açık olsun istiyorsanız ve cep telefonunuzdaki pil önemliyse OpenVPN size göre değil. Sizin ihtiyacınız olan IKEv2 destekli bir VPN hizmeti. Ben geçtim 7/24 iPhone X üzerinde kullanıyorum. Tavsiye ederim.

Haydı başlayalım 🙂

sudo apt update 
sudo apt install strongswan strongswan-pki libcharon-extra-plugins libstrongswan-extra-plugins

Öncelikle IKEv2 hizmetini sağlayacak olan Strongswan’ı ve yan paketlerinin kurulumunu gerçekleştiriyoruz.

Daha sonra da VPN’de şifreleme için kullanacağımız sertifikaları oluşturuyoruz.

mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki
ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
ipsec pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
    --type rsa --dn "CN=VPN Kok Sertifika" --outform pem > ~/pki/cacerts/ca-cert.pem

Bu aşamada VPN’de kullanacağımız sertifikaları imzalayacak kök sertifikayı oluşturduk. Şimdi ise Strongswan VPN sunucusunun sertifikasını oluşturacağız.

ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Şimdi VPN sunucunun sertifikasını oluşturduk. Bu sertifikayı bir önceki adımda oluşturduğumuz kök sertifika ile imzalayacağız. Burada “SunucuAdı_veya_IP_Adresi” olarak isimlendirdiğim kısımları kendi sunucunuzun IP adresi veya DNS (URL) adresini yazmanız gerekli. Aksi takdirde sertifikayı kullanamazsınız.

ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | ipsec pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=SunucuAdı_veya_IP_Adresi" --san "SunucuAdı_veya_IP_Adresi" \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem

Şimdi VPN sunucunun kendini doğrulaması için gerekli sertifikaları oluşturduk ve imzaladık. Bu sertifika dosyalarını Strongswan’ın ilgili klasörlerine kopyalamamız gerekli.

sudo cp -r ~/pki/* /etc/ipsec.d/

Bu aşamayla beraber sertifika işlemimiz tamamlandı. Şimdi VPN sunucumuzu ayarlayalım. Öncelikle sil baştan bir konfigürasyon dosyası oluşturalım.

sudo mv /etc/ipsec.conf{,.original}
sudo nano /etc/ipsec.conf

Nano editörü açılıp içerisine konfigürasyonu girmemizi isteyecek. Konfigürasyonu aşağıda paylaşıyorum.

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

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@XXX.YYY.ZZZ
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=1.1.1.1,8.8.8.8
    rightsendcert=never
    eap_identity=%identity

Bu konfigürasyon dosyasında sadece leftid= isimli kısmı düzenlemeniz yeterli lakin burada bir püf noktası var.

Eğer sunucunuza IP adresi üzerinden bağlanıyorsanız leftid=123.123.123.123 şeklinde yazmanız gerekli. Eğer bir alan adı kullanıyorsanız leftid=@vpn.sunucu.com.tr’de olduğu gibi @ işareti kullanmalısınız aksi takdirde sunucu konfigürasyonu doğru olmaz ve Strongswan servisi çalışmaz.

Şimdi Strongswan’a kullanıcı adı ve şifreyle giriş yapılabilmesi için şifre dosyasımızı düzenleyelim.

sudo nano /etc/ipsec.secrets

Açılan nano ekranına aşağıdaki satırları ekleyelim.

include /var/lib/strongswan/ipsec.secrets.inc
: RSA "server-key.pem"
kullanici_adi : EAP "sifre"

Burada kullanici_adi ve sifre kısımlarını kendi isteğinize göre değiştirin. Her yeni satır yeni bir kullanıcı demektir.

Tüm bu işlemleri tamamladıktan sonra Strongswan servisini yeniden başlatalım.

sudo systemctl restart strongswan

Strongswan’ın konfigürasyonu tamam. Şimdi sırada Firewall’da yer açmak ve linux kernelinde paket yönlendirmesine izin vermek kaldı.

Eğer OpenVPN gibi bir VPN kurup çalıştırdıysanız kernel’de paket yönlendirmesi aktif demektir. Eğer değilse aşağıdaki yönergeleri izleyin.

sysctl net.ipv4.ip_forward

Bu komutun sonucunda =1 çıkarsa yönlendirme kernelde aktif demektir. Eğer o çıkarsa aşağıdaki komutu girerek yönlendirmeyi aktif hale getirin.

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Burada IP yönlendirme ayarı sistem baştan başladığında yok olacak. O sebeple sysctl.conf dosyasında bazı ayarlar yapmamız gerekli.

nano /etc/sysctl.conf

yazarak sistem konfigürasyon dosyasını açıp aşağıdaki satırları değiştiriyoruz (ve başında # varsa siliyoruz) ve dosyayı kaydediyoruz.

net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

Şimdi paket yönlendirme tamam. Geriye firewall’ın konfigürasyonu kalıyor. Ben Debian ve Iptables kullandığım için ona uygun komutları aşağıda paylaşacağım.

Öncelikle ethernet adaptörünün sistemde tanımlı adına bakalım.

ip route | grep default

Şöyle bir sonuç çıkacak.

default via 170.230.140.103 dev eth0 onlink

Buradaki “eth0” bizim adaptörümünüz adı. Eğer sizde farklı bir isimle yer alıyorsa iptables komutlarında ilgili yerleri düzeltin.

iptables -A FORWARD -s 10.10.10.0/24 -o eth0 -p tcp -m policy --dir in --pol ipsec -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -p udp -m udp --dport 4500 -m comment --comment "IKEv2 4500" -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 500 -m comment --comment "IKEv2 500" -j ACCEPT
iptables -A FORWARD -s 10.10.10.0/24 -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -A FORWARD -d 10.10.10.0/24 -m policy --dir out --pol ipsec --proto esp -j ACCEPT

Kullananlar bilir Iptables bazen başa bela olabilir. Kullandıkça alışıyor insan ama ilk seferde öğrenmesi biraz vakit alabiliyor. Siz yukarıdaki komutları teker teker çalıştırın. Böylelikle firewall’da ilgili portları (4500 ve 500) açıp gerekli yönlendirmeleri yapmış olacaksınız.

Bu aşamada -eğer herşey doğru yapılmışsa- çalışan ve bağlanılabilinen bir IKEv2 VPN sunucunuz olmuş demektir. Hadi şimdi bir iPhone ile sunucunuza bağlanalım.

iPhone’un sunucuya güvenmesi için sunucuda oluşturduğumuz kök sertifikayı iPhone’a yüklememiz gerekiyor. Öncelikle kök sertifikamızı görüntüleyelim.

cat /etc/ipsec.d/cacerts/ca-cert.pem

Bu komutu çalıştırdığımızda şöyle bir görüntü çıkacak karşımıza

-----BEGIN CERTIFICATE-----
MIIFBjCCAu6gAwIBAgIIRGnt3FJAV0swDQYJKoZIhvcNAQEMBQAwITEfMB0GA1UE
AxMWU29sYXJpYW4gSUtFdjIgUm9vdCBDQTAeFw0xOTEyMjgxNzEwMzVaFw0yOTEy
...
0oX5AhPwD3E9vC+7RCMEE6hVnuZVInpc1CI7qZdar5mE+l4jaMlAtxSqjJR/jNF8
igw2GC7xEEU/o6ymnl0SbNqj7Y0jN/h9G0Q22CAx9sliZ63C4ybh5U7X
-----END CERTIFICATE-----

Bu bizim kök sertifikamızın taşınabilir kopyalanabilir hali. Bu içeriği bilgisayarınızda notepad veya benzeri bir text editörüne kopyalayın ve kaydederken uzantısının .pem olmasına özen gösterin. Örnek: iphone.pem

Daha sonra bu dosyayı kendinizi ePosta ile gönderin, iCloud’a kopyalayın veya Telegram’dan kendinize gönderin. Artık cihazınız ile aranızda nasıl bir iletişim varsa 🙂 Dosyayı bir şekilde iPhone’a transfer edip çalıştırın. Eğer Apple Watch kullanıyorsanız dosyayı nereye kurayım diye soracak; iPhone’u seçip şifrenizi girin ve profili kurun. Böylelikle iPhone’unuz sunucunuza artık güvenebilecek.

Şimdi IKEv2’yi yapılandıralım. Telefonunuzda VPN konfigürasyonu ekleme kısmına gelin ve aşağıdaki şekilde doldurun.

Buraya daha önce ipsec.secrets dosyamıza yazdığımız kullanıcı adı ve şifrenizi girin. Server ve RemoteID kısmına da sunucunuzun adresini girin. LocalID kısmına o cihaza özel bir tanımlayıcı girin mesela OrcuniPhone gibi. Bu mobilite sırasında VPN bağlantınızın sağlıklı olması açısından önemli.

Kaydet’e tıklayın ve VPN switchini açarak VPN’e bağlanın. Hayırlı olsun IKEv2 tabanlı bir VPN sunucunuz oldu üstelik cep telefonunuzda hiç kapatmanıza gerek kalmadan, aşırı batarya tüketmeden.


Yazılar eğer ilginizi çekiyorsa aşağıya eposta adresinizi yazarak abone olabilirsiniz

Her yeni makale yayınlandığında size e-posta gönderilecektir.


Yorumlar

“VPS Sunucu Üzerine Strongswan ile IKEv2 VPN Sunucu Kurmak” için 2 yanıt

  1. HighPriv avatarı

    Teşekkürler, çok faydalı bir içerik olmuş. Kurulum esnasında yaşadığım sorunu ve çözümünü paylaşmak istiyorum, ola ki aynı sorunu yaşayan arkadaşlar faydalanabilsin.

    Son aşamada gerekli Port açma işlemleri sırasında aşağıdaki komutu uyguladıktan sonra “No chain/target/match by that name.” hatası aldım.

    iptables -A POSTROUTING -s 10.10.10.0/24 -o venet0 -m policy –dir out –pol ipsec -j ACCEPT

    Bu komut fazla belirsiz olduğu için böyle bir sorunla karşılaşabiliyoruz. Sorunu bu komut yerine aşağıdakini uygulayarak çözdüm:

    iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o venet0 -m policy –dir out –pol ipsec -j ACCEPT

    (iptables’tan sonra -t -nat ifadesini ekledim. Dikkat etmeniz gereken nokta venet0 ifadesi yerine kendi adaptörünüzü yazmanız gerekmekte.)

    1. Merhaba,

      Yorum için teşekkürler. Ben de aynı hatayı alıp düzeltmiştim ama buraya yazarken atlamışım. Yazıda da düzeltiyorum.

Bir yanıt yazın

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