IT & IoT Security | Cloud | It's all about the life itself

Nothing in life is as important as you think it is, while you are thinking about it.

AWS ile Azure arasında Site to Site VPN Yapılandırması

There are lots of documentation(blog posts etc.) about AWS in English that’s why I have been writing in Turkish. I hope this will be informative for Turkish readers.
Regards.

Merhaba,

Şirketinizin merkez lokasyonu ile uzak lokasyonlarını birbirleri ile iletişime geçirmek için endüstri standardı bir bağlantı yöntemi olan IPSec VPN bağlantısını yapılandırabilirsiniz. Günümüzde şirketler, sistemlerini kendilerine ait veri merkezlerinde barındırabildikleri gibi, bulut hizmeti sağlayan servis sağlayıcılardan da BT hizmetlerini kiralayıp, sistemlerinin tamamını veya bir kısmını buluta taşıyabilmektedir(iaas,saas,paas gibi). Şirketler bulut hizmetlerinden faydalanırken, ülkeden ülkeye ve sektörden sektöre göre değişmekle birlikte farklı yükümlülükler veya kısıtlamalar ile karşılaşmaktadır.

Yazımda bu vizyonu biraz farklılaştıracağım. Yazıma konu olan hayali şirket, sistemlerinin bir kısmını AWS üzerinde bir kısmını Azure üzerinde barındırıyor 🙂 Bu senaryoda iki büyük bulut servis sağlayıcısı, hayali şirketimizin iki farklı lokasyonu olarak veya HQ/DR site’ları olarak düşünülebilir.

Bu tür testler için vpn cihazları(juniper,checkpoint,cisco,software vpn vb.) gerekiyorsenaryoyu incelemek için AWS üzerinde bir sanal sunucuyu vpn gateway olarak yapılandırdım. Yazılımsal veya donanımsal vpn sisteminize ayırdığınız kaynağa bağlı olarak performans değişebilir fakat bulut ortamında vpn yapılandırmasını incelemek için sizler de bu şekilde bir test ortamı hazırlayabilirsiniz.

Topolojimden bahsedeyim. Önceki yazımda genel olarak AWS’den ve AWS’de geçen kavramlardan bahsetmiştim.AWS terminolojisi hakkında önceki yazımı inceleyebilirsiniz.

clip_image002

AWS üzerinde vpn gateway yapılandırdığımı belirtmiştim. VPN gateway hizmetini bir sanal sunucu üzerinde çalıştırdım. VPN hizmeti için kullandığım sanal sunucu Ubuntu Server’dır ve kullanıdığım vpn yazılımı Openswan yazılımıdır. Ubuntu server’dan farklı olarak test için AWS üzerinde windows server 2012 r2 instance’ını oluşturdum. Benzer şekilde Azure üzerinde de bir adet windows server 2012 r2 sanal sunucum mevcut.

AWS’de çalıştırdığım sistemin network ve vpn altyapısını açıklayayım.

clip_image003

Üstte görüldüğü gibi 10.0.0.0/16 subnet’ini kullanacak bir VPC oluşturdum.

clip_image005

VPC ‘de kullanmak için 10.0.0.0/24 ve 10.0.1.0/24 instance subnet’lerini oluşturdum.

clip_image006

VPC’den internet’e erişebilmek için bir Internet Gateway objesi oluşturdum.(igw-9b…)

clip_image008

VPC için kullanılacak olan routing table’ı oluşturdum(rtb-627..). Routing table’da, internet’e erişebilmek için veya vpn tünelinin diğer tarafındaki network’e erişebilmek için route’lar belirlemeniz gerekiyor! Routing table’da varsayılan olarak gelen route, VPC içinde kalan local network’ü tanımlayan route’dur.

Bunun dışında VPC’den internet’e erişebilmek için kullanacağınız gateway’i(internet gateway) belirlemeniz gerekiyor(üst kısımda belirlediğimi yazmıştım). İlaveten bu yazımdaki senaryom gereği,vpn tünelinden geçerek Azure tarafındaki subnet’e(172.16.0.0./16) nasıl erişileceğini belirlemek gerekiyor.

Routing table’daki yapılandırmam şu şekilde oldu.İlerleyen kısımlarda routing table’dan ekran alıntısı paylaşacağım.

10.0.0.0./16 > VPC içindeki local network’ümdür.

172.16.0.0/16 subnetine erişirken Ubuntu instance’ının network interface’ini kullanacağım

0.0.0.0/0 genel internete erişirken(üstteki iki destination dışında kalan yerlere) internet gateway’imi kullanıyorum.

Ubuntu instance’ına aşağıdaki ip adresleri(public ve private) atanmış durumdadır.

clip_image010

Ubuntu instance’ına uzaktan bağlanabilmek için ve diğer gereksinimler için, instance seviyesinde kullanılan security groups yapılandırmasını aşağıdaki gibi yaptım. Hata denetimi için tüm security group’ları göz önünde bulundurunuz!

clip_image011

İlk kural ssh ile erişim içindir. İkinci kural opsiyonel, test için oluşturdum.Üçüncü ve dördüncü kurallar Azure site’ından gelecek IPSec VPN bağlantısının AWS VPC’si içindeki instance’ına(vpn yazılımına,Ubuntu) geçebilmesi için gerekiyor. Son kuralı test amaçlı açtım(Azure’daki sunucudan gelen icmp paketinin AWS’deki instance’a aktarılması yani ping ile test yapabilmek için). Outbound kurallarda varsayılan olarak her trafik izinlidir! Fakat ihtiyaçlarınız doğrultusunda değiştirebilirsiniz.

Openswan, linux dağıtımları(fedora,red hat,Ubuntu,debian,Gentoo vb.) üzerinde çalışan virtual private network(vpn) yazılımıdır. Test senaryomda kullandığım linux dağıtımı, Ubuntu’dur. Ubuntu instance’I üzerine Openswan kurulumunu ve yapılandırmasını genel olarak açıklayayım. Kaynaklar kısmında belirttiğim web sitelerinden detaylara erişebilirsiniz.

Openswan yazılımını apt-get install openswan (yetkili kullanıcıya geçmek için sudo) komutu ile kurabilirsiniz.

Ör: sudo apt-get install openswan

clip_image012

Üstte gösterilen ipsec.conf dosyası içinde aşağıdaki satırları yapılandırmak yeterli olacaktır.

config setup

        plutodebug=all

        plutostderrlog=/var/log/pluto.log

        protostack=netkey

        nat_traversal=yes

        virtual_private=%v4:10.0.0.0/16

        oe=off

include /etc/ipsec.d/*.conf

Pluto.log dosyası hata denetimi için çok önemlidir!

Bu dosyayı yapılandırdıktan sonra Azure tarafı için bir yapılandırma dosyası oluştuyoruz. Test ortamımda, yapılandırma dosyasına amznazure.conf ismini vermiştim.

clip_image013

IPSec ve VPN konseptini bilenler için üstteki ekran görüntüsünü ve alt kısımlarıdaki yapılandırmaları yorumlamak oldukça kolaydır. Bu yapılandırmada hedeflenen kısaca şudur. AWS tarafındaki 10.0.0.0/16 subneti ile Azure tarafındaki 172.16.0.0/16 subneti vpn tünelinin uçlarındaki subnet’lerdir.

AWS tarafındaki vpn peer’inin ip adresi 10.0.0.101’dir(Ubuntu instance’ının network interface’i). Azure tarafındaki vpn peer’in ip adresi 104.40.149.222 ’dir. IKE ve ESP için kullanılabilecek seçenekleri üstte görüldüğü gibi seçtim. IKE ve ESP için sadece gereken yöntemleri yazmanız yeterli olacaktır.

Düzenlememiz gereken bir başka dosya ise ipsec.secrets dosyasıdır.

clip_image014

Bu dosyada geçen 10.0.0.101 adresi AWS tarafındaki vpn peer’idir. %any yerine Azure tarafında vpn peer’inin ip adresini de yazabilirsiniz. PSK ‘yı Azure tarafındaki VPN gateway objesinden tedarik ediyorsunuz.

clip_image015

Yapılandırılması gereken son ayar da aşağıdaki gibidir.

clip_image016

Bu işlemi de yaptıktan sonra sysctl –p /etc/sysctl.conf komutu ile(yetki için başına sudo yazarak) değiştirdiğimiz network ayarının geçerli olmasını sağlıyoruz.

Ubuntu instance’ımız için aşağıdaki değişikliği de yapıyoruz.

clip_image018

Ubuntu instance’ına etkiyen security groups’dan ve routing table’dan, yazımın ilk kısımlarında bahsetmiştim. Bu aşamada şunu tekrar hatırlatmak istiyorum. AWS VPC’nize hizmet veren routing table’da, Azure tarafına erişim için vpn tünelinin kullanılacağını, yani Ubuntu instance’ının network interface’inin kullanılacağını belirlemeniz gerekiyor! Ortamımdaki routing table aşağıdaki gibidir.

clip_image019

172.16.0.0/16 network’üne erişim için, ilgili instance’ın ilgili network interface’inin kullanılacağı bilgisi, üstte görüldüğü gibi belirtilmiş durumdadır.

Bu arada yaptığınız işlemlerden sonra, ipsec servisini ara ara yeniden başlatmak için service ipsec restart komutunu kullanabilirsiniz.Yetkili kullanıcıya geçmek için “sudo”

Azure tarafındaki vpn network’ünün yapılandırma adımlarını tek tek resmetmeyeceğim. Azure tarafındaki vpn konfigürasyonu için anadilimizde bir sürü kaynak hazırlanmıştır ve hazırlanmaya devam ediyordur.Yazımın sonunda kaynaklar kısmında birkaçını belirttim. Fakat konu hakkında sorularınız olursa benimle iletişime geçebilirsiniz.

Azure tarafındaki konfigürasyonumu bir kaç ekran görüntüsü şeklinde aktarıyorum.

clip_image021

awsazrs2sVNET isimli obje, vpn network objesidir. Bu obje üstteki tanım gereği S2SawsazrLocalNet isimli network’e bağlanacaktır. S2SawsazrLocalNet isimli network’ün detayını ilerleyen kısımlarda belirteceğim.

clip_image023

clduyg address space’ini, uygulama sunucuları için, cldback address space’ini diğer network’teki sunucular için düşündüm. Son subnet’te gateway(vpn) subnet’im. Azure-AWS veya Azure-On-Premise vpn bağlantısı oluştururken, routing problemleri yaşama adına, bu kısımlardaki address space’lere ve subnet seçimlerine dikkat etmek gerekiyor!

clip_image025

Üstte görüldüğü üzere, S2SawsazrLocalNet network objesi ile Azure’un AWS tarafına vpn tüneli oluştururken kullanacağı vpn gateway ip adresini ve AWS tarafında erişeceği internal network’e ait bilgileri yapılandırdım. Hatırlarsanız, benzer ayarları Ubuntu instance’ı için azmnazure.conf dosyasında da yapmıştık.

clip_image027

Yapılandırmaları tamamladıktan sonra Azure tarafındaki vpn bağlantısı durumunu üstteki gibi gözleyebilirsiniz. Azure tarafındaki vpn bağlantısında hata denetimi yapmak pek konforlu değil fakat kaynaklar kısmında belirttiğim bir adresi ziyaret ederek hata denetimi script’ini temin edebilirsiniz. Script’i bir süre çalıştırıp log toplayabiliyorsunuz. AWS tarafındaki vpn gateway’imi kapatarak örnek log topladım. Örnek aşağıdaki gibidir. Sanırım bir kaç defa MS Support’a case açtıktan sonra error code’larını Azure perspektifinden yorumlamaya alışabilirsiniz.

clip_image029

Ubuntu instance’ındaki vpn bağlantısında(openswan vpn yazılımında), hata denetimini aşağıdaki şekillerde yapabilirsiniz.

clip_image030

clip_image031

clip_image032

Daha detaylı IPSec log’larını /var/log/pluto.log dosyasından temin edebilirsiniz. Bu arada openswan yazılımını test amaçlı kullandık gibi görünüyor fakat üretim ortamınızda da uygun kaynaklar sağlayarak kullanabilirsiniz!

Şimdi AWS tarafındaki test instance’ından(windows server 2012 r2), Azure tarafındaki test sanal sunucusuna erişmeyi deneyelim.

clip_image033

Üstte görüldüğü üzere Azure tarafındaki sunucuma ICMP ile eriştim.

clip_image035

Benzer şekilde Azure’dan AWS tarafındaki instance ’ıma ICMP ile eriştim. Test amaçlı başka bir işlem yapalım. Söz konusu site to site vpn olduğunda, genelde test edilen konulardan biri de active directory domain controller ve active directory additional domain controller arası iletişim olacaktır. AWS cloud’daki windows server’ımı DC rolüne, Azure tarafındaki sunucumu da additional DC rolüne yükselteceğim.

Azure tarafındaki sanal sunucunun AWS ‘deki domain’e katılması ve devamı için AWS tarafındaki domain controller instance’ının firewall’unda(security groups) active directory için gereken portları açmanız gerekiyor! Bu durum segmented network’lerde alışık olduğumuz durumlardan biridir. Erişim problemlerini araştırırken AWS tarafındaki tüm security group’ları göz önüne alınız!

clip_image037

Üstte görüldüğü üzere AWS’de ve Azure’da birer domain controller çalışmaya başladı. Site to Site vpn network’ü kurulduktan ve vpn bağlantısı sağlandıktan sonra, AWS’deki instance’larınız ile Azure’daki sanal sunucularınız, tanımladığınız firewall rule’larına bağlı olarak birbirleri ile iletişime geçmektedirler.

Bir sonraki yazımda bu çalışmayı bir adım daha ilerletmeyi düşünüyorum.

Herkese sorunsuz ve neşeli günler dilerim.

Kaynaklar:

https://help.ubuntu.com/community/IptablesHowTo

http://manpages.ubuntu.com/manpages/trusty/man8/route.8.html

http://blogs.msdn.com/b/walterm/archive/2013/05/29/moving-a-virtual-machine-from-one-virtual-network-to-another.aspx

https://gallery.technet.microsoft.com/scriptcenter/Azure-Virtual-Network-2b4d0793

http://azure.microsoft.com/blog/2014/12/02/azure-virtual-network-gateway-improvements/

http://askubuntu.com/questions/90314/unable-to-edit-proc-sys-net-ipv4-ip-forward-in-xubuntu

http://www.itsyourip.com/Security/how-to-disable-icmp-redirects-in-linux-for-security-redhatdebianubuntususe-tested/

http://www.murat.ws/ipsecl2tp-vpn-debianubuntu/

http://xmodulo.com/create-site-to-site-ipsec-vpn-tunnel-openswan-linux.html

https://bugzilla.redhat.com/show_bug.cgi?id=537106

http://www.cyberciti.biz/faq/ubuntu-start-stop-iptables-service/

http://stackoverflow.com/questions/23635985/site-to-site-ipsec-openswan-and-azure-disconnecting-every-hour

http://blog.jameskyle.org/2012/07/configuring-openswan-ipsec-server/

http://xmodulo.com/create-site-to-site-ipsec-vpn-tunnel-openswan-linux.html

http://stackoverflow.com/questions/10813000/openswan-tunnel-not-working-after-network-restart

http://michaelwasham.com/2013/09/03/connecting-clouds-site-to-site-aws-azure/

http://aws.amazon.com/vpc/pricing/

https://www.openswan.org/

https://github.com/xelerance/Openswan/blob/master/programs/examples/sysctl.conf.in

http://www.mshowto.org/tag/azure-vpn-kurulumu

http://blogs.technet.com/b/keithmayer/archive/2014/12/18/diagnose-azure-virtual-network-vpn-connectivity-issues-with-powershell.aspx

http://aws.amazon.com

http://docs.aws.amazon.com