Raspberry PI ile VPN Gateway Kuruyoruz

RaspberryPI VPN Gateway

Kaliteli ve hesaplı VPS (virtual private server) hizmetlerinin çoğalması kişisel projelere ivme kattı. Bir süredir aklımda olan VPN Gateway projem, Raspberry PI ve DigitalOcean VPS sayesinde hayat buldu. Site-to-site VPN modeli ile çalışacak bu yapı ile uzak sunucu üzerindeki veriye daha güvenli erişim sağlanabilecek (ör. otorite imzalı SSL olamayan sayfalara parola girişi). Ayrıca bu yapıda uzak sunucunun üzerinden İnternet erişimi de sağlanabiliyor.

Ücretli/ücretsiz VPN servis sağlayıcılar nedendir bilinmez, hissedilir şekilde yavaş çalışıyorlar. Yıllardır Avrupa konumlu kullandığım VPS‘ler üzerinden geçirdiğim gündelik İnternet trafiğinde yavaşlama hissetmedim. Şahsi tecrübem 100ms paket gecikmesinin üstüne çıkılmadığı sürece hızda yavaşlama hissedilmeyeceği yönünde.

Farklı miniPC modelleri arasından RaspberryPI‘yi seçtim çünkü; yaygın kullanılıyor, kendine özel geliştirilmiş Raspbian adında Debian tabanlı bir işletim sistemi var ve enerji tüketimi yaklaşık 3W. Düşük enerji tüketimi ve düşük sahip olma maliyetinden dolayı, kart bilgisayarlar öğrenciler ve teknoloji meraklıları arasında yaygın kullanılıyor. Sistem gücü prototip projeler ve ev kullanımı için yeterli seviyede.

Çeşitli kaynaklarda RaspberryPI Model B‘nin 35$’dan satıldığı bilgisi var fakat Türkiye’de bu fiyatlara bulmak pek mümkün değil. Farnell distribütörü Yıldırım Elektronik  118TL fiyat veriyor, Robotistan‘da benzer fiyatlar var. Yurtdışı online satış yapan sitelerde kargo dahil 50$ civarında bulunabiliyor.

Kurulum adımları;

Adım adım RaspberryPI üzerine OpenVPN Client kurulumunu inceleyeceğiz (VPS üzerinde çalışan OpenVPN sunucu kurulumunu farklı bir yazıda paylaşmayı düşünüyorum).

RaspberryPI üzerine Raspbian‘ı kurup (raspberry.org’dan NOOBS indirilerek kolayca kuruluyor) SSH erişimini aldıktan sonra sistem güncellemelerini yapalım;

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Cihazın sabit IP alması önemli. Bunu DHCP sunucudan yapabileceğimiz gibi doğrudan ağ kartına tanımlayabiliriz, ağ kartına tanımlayalım;

nano /etc/network/interfaces

ilgili satırları aşağıdaki gibi değiştirelim (seçilen IP, DHCP havuzunun dışında olmalı);

iface eth0 inet static
address 192.168.2.251
netmask 255.255.255.0
gateway 192.168.2.1

Cihaza gelen paketlerin yönlendirilmesi için aşağıdaki dosyada değişikliği uygulayalım;

nano /etc/sysctl.conf

aşağıdaki satırın yorum ifadesini kaldıralım, satır yoksa ekleyelim;

net.ipv4.ip_forward = 1

değişikliği etkinleştirmek için;

sysctl -p /etc/sysctl.conf

OpenVPN’in yapılandırılması;

OpenVPN istemci yazılımını yükleyelim;

sudo apt-get install openvpn

Cihaz açılıdğında VPN bağlantısını otomatik kurması için aşağıdaki dosyayı ilgili dizine oluşturalım (uzantının .conf olması önemli);

sudo nano /etc/openvpn/vpn.conf

Örnek conf dosyası aşağıdaki gibi;

client

dev tun
proto tcp
tun-mtu 1500
remote xx.xx.xx.xx 1194

resolv-retry infinite
nobind

persist-key
persist-tun

verb 3

keepalive 10 120
comp-lzo
cipher DES-CBC

#openvpn root yetkileriyle çalıştırmamak için;
user <kullanıcı_adı>
group <grup_adı>
daemon

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

<ca>
-----BEGIN CERTIFICATE-----
.........
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
.........
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
.........
-----END PRIVATE KEY-----
</key>

Sistem açıldığında VPN bağlantısının otomatik kurulması için aşağıdaki dosyada değişiklik yapalım;

nano /etc/default/openvpn

ilgili yorum ifadesini kaldıralım yada aşağıdaki satırı ekleyelim;

AUTOSTART=all

OpenVPN yapılandırmasını tamamladık.

Iptables’ın yapılandırması;

Kolaylık ve tak-çalıştır olabilmesi için tünel ağına bir NAT tanımlayalım. Aşağıdaki komutla NAT yapılandıralım;

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

iptables tanımlarımızın kalıcı olması için iptables-persistent kullanacağız, komutlar aşağıdaki gibi;

sudo apt-get install iptables-persistent
sudo /etc/init.d/iptables-persistent save
sudo /etc/init.d/iptables-persistent reload

Herşey yolunda gittiyse sistemi yeniden başlattığınızda sistem açılacak, VPN bağlantısı kurulacak, VPN Gateway istekleri cevaplamak için hazır hale gelecektir. Kurulum sonrası cihazımız tak-çalıştır haline geliyor. Elektrik ve ağ kablolarını bağladığınız herhangi bir yerde VPN hattı kullanılabilir (DHCP’den adres alacak şekilde ayarlanmalı ve otomatik alınan adres öğrenilmeli).

Ağımızdaki trafiği kurduğumuz yeni VPN Gateway‘e yönlendirmede iki farklı yöntem uygulanabilir. Birincisi, DHCP tanımlarından Default Gateway bilgisine VPN cihazımızın IP adresi yazılabilir. İkincisi, istemcilere elle sabit IP tanımlarken Default Gateway bilgisine VPN cihazının IP adresi yazılabilir.

Kurduğumuz sistemde DNS sorguları dahil tüm trafik VPN tünelinden geçiyor. Ufak değişikliklerle ihtiyaca göre farklı modeller uygulanabilir. Bu sisteme çok benzer VPN Hotspot kurulabilir. İhtiyacım olur da kurarsam ayrı bir blog yazısında paylaşırım. Soru ve önerilerinizi bekliyorum.

Hamdi ÖZCAN – ozcan.com

30 Mayıs 2014

Posted In: gateway, lkd, raspberry pi, teknik, tr, tunnel, vpn

Raspberry PI ile VPN Gateway Kuruyoruz (VPN Router)

RaspberryPI VPN Gateway

Kaliteli ve hesaplı VPS (virtual private server) hizmetlerinin çoğalması kişisel projelere ivme kattı. Bir süredir aklımda olan VPN Gateway (VPN Router) projem, Raspberry PI ve DigitalOcean VPS sayesinde hayat buldu. Site-to-site VPN modeli ile çalışacak bu yapı ile uzak sunucu üzerindeki veriye daha güvenli erişim sağlanabilecek (ör. otorite imzalı SSL olamayan sayfalara parola girişi). Ayrıca bu yapıda uzak sunucunun üzerinden İnternet erişimi de sağlanabiliyor.

Ücretli/ücretsiz VPN servis sağlayıcılar nedendir bilinmez, hissedilir şekilde yavaş çalışıyorlar. Yıllardır Avrupa konumlu kullandığım VPS‘ler üzerinden geçirdiğim gündelik İnternet trafiğinde yavaşlama hissetmedim. Şahsi tecrübem 100ms paket gecikmesinin üstüne çıkılmadığı sürece hızda yavaşlama hissedilmeyeceği yönünde.

Farklı miniPC modelleri arasından RaspberryPI‘yi seçtim çünkü; yaygın kullanılıyor, kendine özel geliştirilmiş Raspbian adında Debian tabanlı bir işletim sistemi var ve enerji tüketimi yaklaşık 3W. Düşük enerji tüketimi ve düşük sahip olma maliyetinden dolayı, kart bilgisayarlar öğrenciler ve teknoloji meraklıları arasında yaygın kullanılıyor. Sistem gücü prototip projeler ve ev kullanımı için yeterli seviyede.

Çeşitli kaynaklarda RaspberryPI Model B‘nin 35$’dan satıldığı bilgisi var fakat Türkiye’de bu fiyatlara bulmak pek mümkün değil. Farnell distribütörü Yıldırım Elektronik  118TL fiyat veriyor, Robotistan‘da benzer fiyatlar var. Yurtdışı online satış yapan sitelerde kargo dahil 50$ civarında bulunabiliyor.

Kurulum adımları;

Adım adım RaspberryPI üzerine OpenVPN Client kurulumunu inceleyeceğiz (VPS üzerinde çalışan OpenVPN sunucu kurulumunu farklı bir yazıda paylaşmayı düşünüyorum).

RaspberryPI üzerine Raspbian‘ı kurup (raspberry.org’dan NOOBS indirilerek kolayca kuruluyor) SSH erişimini aldıktan sonra sistem güncellemelerini yapalım;

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Cihazın sabit IP alması önemli. Bunu DHCP sunucudan yapabileceğimiz gibi doğrudan ağ kartına tanımlayabiliriz, ağ kartına tanımlayalım;

nano /etc/network/interfaces

ilgili satırları aşağıdaki gibi değiştirelim (seçilen IP, DHCP havuzunun dışında olmalı);

iface eth0 inet static
address 192.168.2.251
netmask 255.255.255.0
gateway 192.168.2.1

Cihaza gelen paketlerin yönlendirilmesi için aşağıdaki dosyada değişikliği uygulayalım;

nano /etc/sysctl.conf

aşağıdaki satırın yorum ifadesini kaldıralım, satır yoksa ekleyelim;

net.ipv4.ip_forward = 1

değişikliği etkinleştirmek için;

sysctl -p /etc/sysctl.conf

OpenVPN’in yapılandırılması;

OpenVPN istemci yazılımını yükleyelim;

sudo apt-get install openvpn

Cihaz açılıdğında VPN bağlantısını otomatik kurması için aşağıdaki dosyayı ilgili dizine oluşturalım (uzantının .conf olması önemli);

sudo nano /etc/openvpn/vpn.conf

Örnek conf dosyası aşağıdaki gibi;

client

dev tun
proto tcp
tun-mtu 1500
remote xx.xx.xx.xx 1194

resolv-retry infinite
nobind

persist-key
persist-tun

verb 3

keepalive 10 120
comp-lzo
cipher DES-CBC

#openvpn root yetkileriyle çalıştırmamak için;
user <kullanıcı_adı>
group <grup_adı>
daemon

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

<ca>
-----BEGIN CERTIFICATE-----
.........
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
.........
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
.........
-----END PRIVATE KEY-----
</key>

Sistem açıldığında VPN bağlantısının otomatik kurulması için aşağıdaki dosyada değişiklik yapalım;

nano /etc/default/openvpn

ilgili yorum ifadesini kaldıralım yada aşağıdaki satırı ekleyelim;

AUTOSTART=all

OpenVPN yapılandırmasını tamamladık.

Iptables’ın yapılandırması;

Kolaylık ve tak-çalıştır olabilmesi için tünel ağına bir NAT tanımlayalım. Aşağıdaki komutla NAT yapılandıralım;

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

iptables tanımlarımızın kalıcı olması için iptables-persistent kullanacağız, komutlar aşağıdaki gibi;

sudo apt-get install iptables-persistent
sudo /etc/init.d/iptables-persistent save
sudo /etc/init.d/iptables-persistent reload

Herşey yolunda gittiyse sistemi yeniden başlattığınızda sistem açılacak, VPN bağlantısı kurulacak, VPN Gateway istekleri cevaplamak için hazır hale gelecektir. Kurulum sonrası cihazımız tak-çalıştır haline geliyor. Elektrik ve ağ kablolarını bağladığınız herhangi bir yerde VPN hattı kullanılabilir (DHCP’den adres alacak şekilde ayarlanmalı ve otomatik alınan adres öğrenilmeli).

Ağımızdaki trafiği kurduğumuz yeni VPN Gateway‘e yönlendirmede iki farklı yöntem uygulanabilir. Birincisi, DHCP tanımlarından Default Gateway bilgisine VPN cihazımızın IP adresi yazılabilir. İkincisi, istemcilere elle sabit IP tanımlarken Default Gateway bilgisine VPN cihazının IP adresi yazılabilir.

Kurduğumuz sistemde DNS sorguları dahil tüm trafik VPN tünelinden geçiyor. Ufak değişikliklerle ihtiyaca göre farklı modeller uygulanabilir. Bu sisteme çok benzer VPN Hotspot kurulabilir. İhtiyacım olur da kurarsam ayrı bir blog yazısında paylaşırım. Soru ve önerilerinizi bekliyorum.

Hamdi ÖZCAN – ozcan.com

30 Mayıs 2014

Posted In: gateway, lkd, raspberry pi, teknik, tr, tunnel, vpn

SSH tünel ile bağlantı güvenliği (SSH Tunnel)

SSH ile bağlantımızı tünelleyip istediğimiz noktalar arasında kriptolu geçirebiliriz. Bu yöntem hangi durumlar için kullanılabilir;

sshtunnel

• Güvensiz bir İnternet bağlantısı kullandığımız konumlarda bağlantı güvenliğimizi arttırmak
• Ağ filtrelerine takılmamak (ağ filtrelerini aşmak, varsa “kullanım politikası sözleşmenize” aykırı olabilir)
• NAT arkasından gerçek dünyaya soket açmak (NAT arkasından dışarıya servis vermek)
• İnternet çıkışını farklı ülkelere taşıyarak testler yapmak
• Sistemlere uzaktan erişim için bir zıplama noktası oluşturmak (VPN alternatifi)

SSH Tunnel in 3 farklı tipi bulunuyor, bunlar;

• Yerel port yönlendirme (Local port forwarding)
• Uzak port yönlendirme (Remote port forwarding | Reverse Tunnelling)
• Dinamik port yönlendirme (Dynamic port forwarding)

Yerel port yönlendirme (Local port forwarding):

ssh -L 9001:domain.com:80 sshServerIP

Bağlı bulunduğunuz ağdan domain.com adresine erişiminiz yoksa, bu adrese erişimi olan bir SSH sunucu üzerinden erişim sağlanabilir. Yukarıdaki örnekte sshServerIP sunucusuna kurduğum SSH bağlantısı üzerinden domain.com‘a 80. port üzerinden tünel açtık. Bu komutu çalıştırdıktan sonra tarayıcınıza http://localhost:9001 yazdığınızda domain.com yüklenecektir. https protokolü için de aynı yöntem uygulanabilir. (kötü haber facebook.com gibi dağıtık yapıdaki sistemler bu yöntemle çalışmıyor, onlara erişim için dinamik port yönlendirme kullanılmalı )

Uzak port yönlendirme (Remote port forwarding | Reverse Tunnelling):

ssh -R 9001:localhost:80 sshServerIP

NAT veya firewall arkasından dış dünyaya bulunduğunuz ağdaki veya kendi makinenizden hizmet sağlanabilir. Dış dünyadaki gerçek IP adresine (sunucu) istek gönderenler tünelin ucundaki makine ile konuşabilirler. Yukarıdaki örnekte güvenli ağ arkasındaki makineden sshServerIP sunucusunun 80. portuna ters tünel açtık. Kurulan bu bağlantı ile dış dünyada bulunan sunucumuza tarayıcı ile ulaşanlar, güvenlikli bölgedeki makinemizin üzerinde çalışan web sunucudan hizmet alabilecekler.

Yukarıdaki örneği biraz değiştirerek iş yerinizdeki intranet sayfalarına evden erişim sağlanabilir. VPN erişimi alınamadığı durumlarda zorlukları aşmada kuvvetli bir alternatif olacaktır.

Dinamik port yönlendirme (Dynamic port forwarding):

ssh -D 9001 sshServerIP

En çok işimize yarayacak bağlantı tipi dinamik port yönlendirmedir. Yerel makinede açılan bir soket uzak makine üzerinden tüm hedeflere ulaştırılır. Yerel soket üzerinden SOCKS proxy protokolü kullanılarak bağlantı karşı tarafa ulaştırılır. Özetle uzak makinenin İnternet erişimi kullanılabilir. Yerel makinede tarayıcıya SOCKS proxy ayarlarının girilmesi gerekir. Firefox kendi bağlantı ayarlarını içsel olarak kullandığından bu iş için kolaylık sağlar. Ayrıca tarayıcılar için proxy uzantıları kullanılabilir. Veya yerel makinenin tüm trafiğinin proxy üzerinden geçirilmesi tercih edilebilir.

Firefox ağ ayarlarından SOCKS proxy tanımlandığında DNS sorguları bu proxy üzerinden geçirilmez. DNS sorgularının da tünelden geçmesi için adres satırına “about:config” yazıp, “network.proxy.socks_remote_dns” true olarak ayarlanmalıdır.

Bağlantısını kullanacağımız uzak makine için bir VPS yeterli olacaktır. Avrupa konumlu DigitalOcean planlarını incelemenizi tavsiye ederim.

Linux istemcilerde doğrudan komut satırından SSH komutu (OpenSSH) ile tünelleme kolayca yapılabilir. Windows istemcilerde Putty yukarıda bahsettiğim tüm bağlantı tiplerini kurabilecek yeteneğe sahip.

RDP yazılımlarından içsel olarak SSH tünel özelliğine sahip olanlara örnek; RemminaMobaXterm .

SSH’ın standart portu 22 dir. Bu port ile geçiş yapamıyorsanız, OpenSSH ayar dosyasında küçük bir değişiklikle 80 veya 443 kullanmanız pek çok engeli aşmanıza yardımcı olacaktır. Sıkı firewall cihazlarına karşı (deep packet inspection),  SSH tüneli HTTP tünelinden geçirilebilir.

Bağlantınızı istediğiniz yerden istediğiniz gizlilikte geçirebilme özgürlüğünü muhakkak yaşamalısınız.

10 Ocak 2014

Posted In: dinamik port yönlendirme, dynamic port forwarding, lkd, socks proxy, ssh, ssh tünel, ssh tunnel, teknik, tr, tünel, tunnel, vpn

SSH tünel ile bağlantı güvenliği (SSH Tunnel)

SSH ile bağlantımızı tünelleyip istediğimiz noktalar arasında kriptolu geçirebiliriz. Bu yöntem hangi durumlar için kullanılabilir;

sshtunnel

• Güvensiz bir İnternet bağlantısı kullandığımız konumlarda bağlantı güvenliğimizi arttırmak
• Ağ filtrelerine takılmamak (ağ filtrelerini aşmak, varsa “kullanım politikası sözleşmenize” aykırı olabilir)
• NAT arkasından gerçek dünyaya soket açmak (NAT arkasından dışarıya servis vermek)
• İnternet çıkışını farklı ülkelere taşıyarak testler yapmak
• Sistemlere uzaktan erişim için bir zıplama noktası oluşturmak (VPN alternatifi)

SSH Tunnel in 3 farklı tipi bulunuyor, bunlar;

• Yerel port yönlendirme (Local port forwarding)
• Uzak port yönlendirme (Remote port forwarding | Reverse Tunnelling)
• Dinamik port yönlendirme (Dynamic port forwarding)

Yerel port yönlendirme (Local port forwarding):

ssh -L 9001:domain.com:80 sshServerIP

Bağlı bulunduğunuz ağdan domain.com adresine erişiminiz yoksa, bu adrese erişimi olan bir SSH sunucu üzerinden erişim sağlanabilir. Yukarıdaki örnekte sshServerIP sunucusuna kurduğum SSH bağlantısı üzerinden domain.com‘a 80. port üzerinden tünel açtık. Bu komutu çalıştırdıktan sonra tarayıcınıza http://localhost:9001 yazdığınızda domain.com yüklenecektir. https protokolü için de aynı yöntem uygulanabilir. (kötü haber facebook.com gibi dağıtık yapıdaki sistemler bu yöntemle çalışmıyor, onlara erişim için dinamik port yönlendirme kullanılmalı )

Uzak port yönlendirme (Remote port forwarding | Reverse Tunnelling):

ssh -R 9001:localhost:80 sshServerIP

NAT veya firewall arkasından dış dünyaya bulunduğunuz ağdaki veya kendi makinenizden hizmet sağlanabilir. Dış dünyadaki gerçek IP adresine (sunucu) istek gönderenler tünelin ucundaki makine ile konuşabilirler. Yukarıdaki örnekte güvenli ağ arkasındaki makineden sshServerIP sunucusunun 80. portuna ters tünel açtık. Kurulan bu bağlantı ile dış dünyada bulunan sunucumuza tarayıcı ile ulaşanlar, güvenlikli bölgedeki makinemizin üzerinde çalışan web sunucudan hizmet alabilecekler.

Yukarıdaki örneği biraz değiştirerek iş yerinizdeki intranet sayfalarına evden erişim sağlanabilir. VPN erişimi alınamadığı durumlarda zorlukları aşmada kuvvetli bir alternatif olacaktır.

Dinamik port yönlendirme (Dynamic port forwarding):

ssh -D 9001 sshServerIP

En çok işimize yarayacak bağlantı tipi dinamik port yönlendirmedir. Yerel makinede açılan bir soket uzak makine üzerinden tüm hedeflere ulaştırılır. Yerel soket üzerinden SOCKS proxy protokolü kullanılarak bağlantı karşı tarafa ulaştırılır. Özetle uzak makinenin İnternet erişimi kullanılabilir. Yerel makinede tarayıcıya SOCKS proxy ayarlarının girilmesi gerekir. Firefox kendi bağlantı ayarlarını içsel olarak kullandığından bu iş için kolaylık sağlar. Ayrıca tarayıcılar için proxy uzantıları kullanılabilir. Veya yerel makinenin tüm trafiğinin proxy üzerinden geçirilmesi tercih edilebilir.

Firefox ağ ayarlarından SOCKS proxy tanımlandığında DNS sorguları bu proxy üzerinden geçirilmez. DNS sorgularının da tünelden geçmesi için adres satırına “about:config” yazıp, “network.proxy.socks_remote_dns” true olarak ayarlanmalıdır.

Bağlantısını kullanacağımız uzak makine için bir VPS yeterli olacaktır. Avrupa konumlu DigitalOcean planlarını incelemenizi tavsiye ederim.

Linux istemcilerde doğrudan komut satırından SSH komutu (OpenSSH) ile tünelleme kolayca yapılabilir. Windows istemcilerde Putty yukarıda bahsettiğim tüm bağlantı tiplerini kurabilecek yeteneğe sahip.

RDP yazılımlarından içsel olarak SSH tünel özelliğine sahip olanlara örnek; RemminaMobaXterm .

SSH’ın standart portu 22 dir. Bu port ile geçiş yapamıyorsanız, OpenSSH ayar dosyasında küçük bir değişiklikle 80 veya 443 kullanmanız pek çok engeli aşmanıza yardımcı olacaktır. Sıkı firewall cihazlarına karşı (deep packet inspection),  SSH tüneli HTTP tünelinden geçirilebilir.

Bağlantınızı istediğiniz yerden istediğiniz gizlilikte geçirebilme özgürlüğünü muhakkak yaşamalısınız.

10 Ocak 2014

Posted In: dinamik port yönlendirme, dynamic port forwarding, lkd, socks proxy, ssh, ssh tünel, ssh tunnel, teknik, tr, tünel, tunnel, vpn

WP Twitter Auto Publish Powered By : XYZScripts.com