SSH ile VPN – İleri Düzey SSH
06 Ağustos 2008SSH ile VPN’le İleri Düzey SSH serisi yazılarımın sonuna geldik. Öncelikle SSH ile VPN mükemmel bir VPN çözümü değildir. Reliable bir bağlantı olan TCP içinden TCP geçirmek ilave bir overhead’e neden olmaktadır. Düzgün ve sağlıklı olmayan bir bağlantı üstünde sık sık kopmalara neden olabilir. SSH ile VPN’in diğer bir dezavantajı da sadece Linux’ten Linux’e (ve benzeri) yapılabiliyor olmasıdır.
Tüm bu olumsuzluklara rağmen SSH ile VPN bağlantısı kurmak mümkündür ve sağlam bir bağlantı üstünde yeterince sağlıklı çalışmaktadır (SSH ile VPN bağlantısı üstünden SIP ile VOIP görüşmesi yapmışlığım var, herhangi bir sorununu görmedim). Diğer olumlu yanları da sunucu’nun sabit IP’si olacak diye bir şart yoktur. DynDNS.org’dan alacağınız bir isimle VPN kurmak istediğiniz SSH sunucunuza DynDNS.org adıyla rahatlıkla ulaşabilirsiniz. Kurulumu diğer VPN çözümlerine göre nispeten daha kolaydır.
çeşme escort bayan
SSH VPN bağlantısını pppd yardımı ile gerçekleştirmektedir. VPN’nin kurulabilmesi için SSH istemci ve sunucu taraflarının her ikisinde de pppd’nin kurulu olması bir zorunluluktur. SSH istemcisi ile sunucu arasındaki şifreli bağlantının her iki ucunda yer alan pppd’ler noktadan noktaya iletişik protokolü ile şifreli tünel üzerinden yeni bir ağ kurmaktadırlar. Bu da SSH ile VPN’i meydana getirmektedir.
Tüm bu ön bilgilerden sonra gelelim SSH ile VPN kurulumuna. Hazırlık aşaması biraz uzun ve zahmetli (hangi vpn kolay ki ;-)), ancak hazırlığı bir kere yaptıktan sonra bağlantının kurulması oldukça kolay.
SSH ile VPN bağlantısı kuracak olan istemci ve sunucu Linux’lerin her iki tarafta da firewall/gateway olarak kullanılıyor olması avantajınıza olacaktır. Her iki taraftaki tüm istemciler ön tanımlı ağ geçidi (ing. default gateway) olarak bu Linux’leri kullandıklarından dolayı ilave yönlendirme ayarına gerek kalmayacak ve VPN kurulduğunda birbirlerinin ağlarını görebilir duruma gelecekler. Ancak VPN erişimi yapmak istediğiniz ağdaki Linux sunucusu ilgili ağın yönlendiricisi değilse bir miktar daha çalışma yapmak gerekecek. Bunlara yazının sonlarında değineceğim.
OpenSSH Sunucusu Üzerindeki Hazırlıklar
1. VPN kullanıcısının oluşturulması
Sunucu Linux’te vpn bağlantısının kurulması için ssh ile erişmek üzere kullanacağımız bir kullanıcı hesabı tanımlamalıyız.
root@sunucu# useradd -m -d /home/vpnuser vpnuser root@sunucu#
2. VPN kullanıcısı için “sudo /usr/sbin/pppd” ayarının yapılması
Tanımlamış olduğumuz vpnuser kullanıcısının pppd’yi çalıştırabilmesi için geçici yetki yükseltmesine ihtiyacımız var. Bunun için sudo altyapısı kullanılacağız. “visudo” komutu ile /etc/sudoers dosyasını düzenlemeliyiz ve aşağıdaki satırı eklemeliyiz.
root@sunucu# visudo
vpnuser ALL=NOPASSWD: /usr/sbin/pppd
Bu düzenlemeyi test edelim:
root@sunucu# su - vpnuser vpnuser@sunucu$ sudo /usr/sbin/pppd noauth ~�}#�!}!}!} }4}"}&} } } } }%}&�U�}2}'}"}
Yukarıdakine benzer şekilde pppd’nin garip karakterlerini görüyorsak pppd’nin vpnuser tarafından root yetkileri ile çalıştırılması altyapısı hazırdır.
3. SSH açık anahtarının vpn kullanıcısı hesabına yerleştirilmesi
OpenSSH istemci sistemde ilerleyen bölümde hazırlanmış olan ssh açık anahtarını sunucu sistemdeki vpnuser hesabının .ssh/authorized_users dosyasına yazmalıyız. Böylece istemci sistem SSH bağlantısını anahtar altyapısı ile kurabilecektir.
vpnuser@sunucu$ mkdir .ssh vpnuser@sunucu$ cat id_rsa_vpn.pub >> /home/vpnuser/.ssh/authorized_keys
Genel olarak sunucu sistemdeki hazırlıklar bu kadar. Sıra istemci sistemdeki hazırlıklarda.
OpenSSH İstemcisindeki Hazırlıklar
1. root kullanıcısında VPN için gizli ve açık anahtar oluşturulması
OpenSSH gizli ve açık anahtar oluşturulması için ilave bilgi ihtiyacınız olursa SSH Anahtar Kullanımı başlıklı yazıma başvurabilirsiniz. VPN bağlantısının sistem açılışında otomatik olarak başlatılabilmesi için gizli anahtar şifresinin sadece Enter’a basılarak boş geçilmesi gerekmektedir.
root@istemci# ssh-keygen -t rsa -f /root/.ssh/id_rsa_vpn Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa_vpn. Your public key has been saved in /root/.ssh/id_rsa_vpn.pub. The key fingerprint is: 74:9a:43:3a:9a:14:03:20:ce:8d:aa:ba:43:18:09:b8 root@istemci root@istemci#
Burada oluşturmuş olduğumuz gizli ve açık anahtar ikilisinden açık olanı SSH sunucusundaki vpnuser kullanıcısının .ssh/authorized_users dosyasına eklenmesi gerekmektedir. OpenSSH Sunucusu Üzerindeki hazırlıklar başlığına geri dönerek nasıl yapılacağına tekrar göz atabilirsiniz. Açık anahtarın adı üstünde açık anahtar olduğu için şifreli veya şifresiz bir bağlantı ile istemci sistemden sunucu sisteme aktarabilirsiniz. Ya da offline bir şekilde bir medya aracılığı ile de taşıyabilirsiniz. Ancak hedefe yerleştirmeden önce gözle son bir kontrol faydalı olur, başkasının yerimize VPN yapmasını istemeyiz. 😉
2. VPN bağlantı betiğinin hazırlanması.
VPN bağlantısının kurulması için uzun bir komut yazılması gerekmektedir. Daha pratik olması ve sistem açılışında da kullanılabilmesi için aşağıdaki gibi bir betik hazırlamak daha uygun olacaktır.
===================================
#!/bin/bash
SUNUCU_ADI=sunucu.dyndns.org
SUNUCU_VPNKULLANICI=vpnuser
SUNUCU_VPNIP=172.16.1.2
ISTEMCI_VPNIP=172.16.1.1
GIZLI_ANAHTAR=/root/.ssh/id_rsa_vpn
PATH=/sbin:/bin:/usr/sbin:/usr/bin
case "$1" in
start)
pppd updetach noauth passive pty "ssh -P -o StrictHostKeyChecking=no \
${SUNUCU_ADI} -i${GIZLI_ANAHTAR} -l${SUNUCU_VPNKULLANICI} \
-o Batchmode=yes sudo /usr/sbin/pppd nodetach notty noauth" \
ipparam vpn ${ISTEMCI_VPNIP}:${SUNUCU_VPNIP}
echo "VPN BASLATILDI!"
;;
stop)
pkill -f "pppd +updetach +noauth +passive +pty.+ssh.+pppd.+vpn.+\
${ISTEMCI_VPNIP}:${SUNUCU_VPNIP}"
echo "VPN DURDURULDU!"
;;
*)
echo "Kullanim: sshvpn {start|stop}"
exit 1
;;
esac
exit 0
===================================
Sıra geldi VPN bağlantımızın test edilmesine.
root@istemci# ./sshvpn.sh Using interface ppp0 Connect: ppp0 <--> /dev/pts/4 Deflate (15) compression enabled Cannot determine ethernet address for proxy ARP local IP address 172.16.1.1 remote IP address 172.16.1.2 VPN BASLATILDI root@istemci# ifconfig ppp ppp0 Link encap:Point-to-Point Protocol inet addr:172.16.1.1 P-t-P:172.16.1.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:246 (246.0 B) TX bytes:240 (240.0 B) root@istemci# ping 172.16.1.1 PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data. 64 bytes from 172.16.1.1: icmp_seq=1 ttl=64 time=0.075 ms 64 bytes from 172.16.1.1: icmp_seq=2 ttl=64 time=0.072 ms --- 172.16.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.072/0.073/0.075/0.008 ms root@istemci# ping 172.16.1.2 PING 172.16.1.2 (172.16.1.2) 56(84) bytes of data. 64 bytes from 172.16.1.2: icmp_seq=1 ttl=64 time=28.9 ms 64 bytes from 172.16.1.2: icmp_seq=2 ttl=64 time=17.8 ms --- 172.16.1.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 17.888/23.433/28.979/5.547 ms root@istemci#
Görüldüğü üzere istemci Linux’ten sunucu Linux’ü kurmuş olduğumuz VPN’den pingleyebildik. İstemci Linux ve sunucu Linux her birisi kendi ağında ağ geçidi (ing. router) / güvenlik duvarı (ing. firewall) görevi görüyorsa bir taraftaki istemci diğer taraftaki istemciyi ssh vpn tuneli üzerinden geçerek görebilecektir. Aynı şekilde tersi de mümkün olacaktır. Diğer bir deyişle iki ağ geçidi linux arasında kurulan SSH VPN site-to-site VPN’dir.
İstemci Linux ağ geçidi değilse, sunucu Linux ağ geçidiyse; olsa olsa client-to-site VPN kurmuş oluruz. Yani istemci Linux’ün üzerinden karşıdaki istemcilere / sistemlere ulaşabiliriz. Ancak bizim ağımızdaki diğer istemcilerin ulaşabilmesi için yönlendirme tablolarına istemci linux’ümüzün IP adresini karşı ağa gidiş noktası olarak tanımlamalıdırlar.
Ayarlama aşaması biraz zahmetli. Ancak bugüne kadar zahmetsiz bir VPN kurulumu görmedim ben. Tüm VPN teknolojilerinin kurulma aşaması zor ve uğraştırıcı oluyor. Bir kere kurulduktan sonra da rahat bir şekilde kullanılabilir.
İleri Düzey SSH serisi yazılarımı bu son yazı ile burada noktalıyorum ve OpenSSH’ın diğer özelliklerini keşfetmeyi de sizlere bırakıyorum.
Etiketler: client-to-site, ifconfig, ileri düzey ssh, istemci linux, Linux, openssh, openssh ile vpn, openssh ile vpn kurulumu, ping, pppd, routing, routing table, sip, site-to-site, ssh, ssh ile vpn, ssh ile vpn kurulumu, ssh ile vpn nasıl yapılır, ssh vpn through pppd, sunucu linux, voip, vpn, vpn with ssh, yönlendirme tablosu
“SSH ile VPN – İleri Düzey SSH” için 1 Yorum
ejg diyor ki:
17 Mayıs 2010 tarihinde.
valla hocam bu vpn hakında ne kadar bilgi aradımsada pek işe yarar bişi bullamdım ya ne kadar test yaptıgımı bilmek istemesin hepsi de bosa bana detaylı bi anlatım yer varmı