Openstack Security Group ve FWaaS , sadece cli !

Openstack neutron iki farkli katmanda guvenlik saglar. Ilki port bazli ki instance yaratilirken oncelike port yaratilir ve bu port’a atanan Security Group dogrultusunda VM-to-VM ayni L2 networkunde dair koruma saglayabilirsiniz. Ikincisi ise Router uzerinde, ne zamanki iki farkli network’u veya instance’lari internet’e ve/veya internet’den instance’lara dogru erisim soz konusu oldugunda Router uzerinde uygulanan firewall kurallari devreye girer. Baska bir deyisle Neutron NSX gibi kuzey-guney ve bati-dogu yollari uzerinde koruma saglar.

Security Groups

Security Group(SG), nova security group(NSG) uyumludur, ingress(giris)/egress(cikis) yonunde kural tanimlamanizi bunuda ilgili neutron portlarina uygulamaniza, gercek zamanli kural degisiklikleri uygulamaniza izin verir.

Davranis sekli giris yonunde sadece matched(uyan) aksi taktirde drop. Egress keza ayni fakat her yeni Security Group yaratildiginda disariya dogru tum trafik izinlidir.

Openstack uzerinde varsayili olarak “default security group” mevcut olup disa dogru tum trafik , security group icersinde tum trafik izinli olup disardan gelecek tum trafige karsi kapalidir.

Security Group sonuc olarak bir iptables uyarlamasidir fakat ML2 + OVS entegrastonu biraz karisiktir ve sirf iptables uygulanabilsin diye OVS ile instance arasinda linux bridge entegre edilmistir, ornek bir cizimi asagida gorebilirsiniz.

screen-shot-2016-10-18-at-11-25-05

Bunun yerine Openstack dunyasinda OVS+conntrack(kernel connection tracking) ile daha ideal bir cozume gidilmekte ve yeni ismide OVN olmakta . 2015 den bir video.  Guzel bir ornekte mevcut, flow-based programlama yapiyorsunuz.

Security Group Yaratma

  • Once var olan SG leri gorelim
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-list
  • Demo projesi icin islem yapacagiz, ilgili proje id’sini elde edelim
    • stack@helion-cp1-c0-m1-mgmt:~$ openstack project list
    • 68ca3d8aa2294bc1bc606acbb8b9405a
  • Simdi yaratalim
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-create –tenant-id 68ca3d8aa2294bc1bc606acbb8b9405a SG1
  • Yarattigimiz SG’e ayit kurallari gormek icin
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-show e39a9263-5ac0-408e-955b-e8d532934799
    • GUI uzerinden gorunum. Disariya dogru IPv4 ve IPv6 bazinda tum erisim verilmisscreen-shot-2016-10-18-at-13-25-11
  • SG silmek icin
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-delete e39a9263-5ac0-408e-955b-e8d532934799
  • Diyelim ilgili instance Linux tabanli ve disaridan SSH/HTTP/HTTPS protokolleri uzerinde sinirlama olmaksizin ersilmek isteniyor.
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-rule-create –protocol tcp –port-range-min 22 –port-range-max 22 –direction ingress –remote-ip-prefix 0.0.0.0/0 SG1
    • stack@helion-cp1-c0-m1-mgmt:~$ stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-rule-create –protocol tcp –port-range-min 443 –port-range-max 443 –direction ingress –remote-ip-prefix 0.0.0.0/0 SG1
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-rule-create –protocol tcp –port-range-min 80 –port-range-max 80 –direction ingress –remote-ip-prefix 0.0.0.0/0 SG1
  • Elimizdeki instance’a hangi SG set edilmis gorelim
    • Cli> da OS_PROJECT_NAME ortam degiskenini guncelleyin
    • nova list ile ilgili instance id bulun.
    • Simdi bakalim hangi SG set edilmis
      • stack@helion-cp1-c0-m1-mgmt:~$ nova list-secgroup 9fd17930-29c5-4507-a763-34b0a7d32a61
      • veya adini
      • stack@helion-cp1-c0-m1-mgmt:~$ nova list-secgroup TestServer1
      • Muhtemelen “Default” security group goreceksiniz
  • Elimizdeki instance’a yeni SG set edelim
    • Oncesinde yaratmis oldugunuz SG id’sini bulun
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron security-group-list | grep SG1
      • d085775e-170a-4ba1-830c-e7eef1447fb6
    • stack@helion-cp1-c0-m1-mgmt:~$ nova add-secgroup 9fd17930-29c5-4507-a763-34b0a7d32a61 d085775e-170a-4ba1-830c-e7eef1447fb6
    • Default SG kaldiralim
      • stack@helion-cp1-c0-m1-mgmt:~$ nova remove-secgroup 9fd17930-29c5-4507-a763-34b0a7d32a61 7adbfe0c-d233-42d2-8026-4a31bd461447
  • Uygulanan tum kurallar instance’larin calistigi compute node uzerinde olacaktir, kontrol etmek icin
    • Instance’in kostugu node’a baglanin
    • Instance’a ait port numarasinin ilk 11 rakamini veya
    • stack@helion-cp1-compute0001-mgmt:~$ sudo virsh domiflist instance-xxxxx ile interface id’yi alin
    • Benim icin ilgili deger 541f168b-16
      • stack@helion-cp1-compute0001-mgmt:~$ sudo iptables -L -v -n | grep 5865fa4
      • Daha duzgun okumak icin
      • stack@helion-cp1-compute0001-mgmt:~$ sudo iptables-save | grep 5865fa4

Firewall Service

SG’den sonra birde internet’den iceriye gelen baglantilari kontrol etmemiz gerekiyor. Bunun icin Openstack FW-as-a-Service’i sagliyor. Ozunde daha once yarattigimiz Router’in Network Namespace uzerinde iptables uygulayacagiz.

  • Oncelikle /opt/stack/service/neutron-20160722T142043Z/etc/neutron.conf bakalim
    • Dikkat edilmesi gereken konu firewall plugin’in set edilmis olmasi
    • [DEFAULT]
    • service_plugins =neutron_fwaas.services.firewall.fwaas_plugin.FirewallPlugin
    • Eger service_plugin tanimli degil ise Horizon GUI’de Router tab’ini goremeyebilirsiniz
  • Bir sonraki konfigrasyon dosyasi sudo vi /opt/stack/service/neutron-20160722T142043Z/etc/l3_agent.ini
    • Buradaki onemli parametre var interface_driver , OVS kullaniyorsaniz OVS Interface driver olamli
  • Horizion uzerinde ayarlama yapmak istiyorsaniz /opt/stack/service/horizon-20160722T142043Z/etc/local_settings.py dosyasinda asagidaki parametre True olmali
    • ‘enable_firewall’: True
  • Bu islemlerden sonra sirasiyla once firewall kurali yaratacagiz , sonra bunlari toparlayacagiz (Firewall Policy) ve en sonunda firewall’u aktive edecegiz.
  • Islemede baslamadan once sahip oldugumuz router’in id’sini bakalim
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-list
  • Daha sonra Network Node ve ilgili proje icin yaratilmis instance’lar var ise bu instance’larin kostugu Compute Node’lar uzerinde qrouter-<Router-id> seklinde network namespace’ler goreceksiniz. Ilgili network namespace’leri gormek icin
    • stack@helion-cp1-c1-m2-mgmt:~$ sudo ip netns
      • qrouter-d4fe02b8-0cc0-4662-8573-b3b3f783baaf
  • Bu namespace’lere ait interface ip adreslerini gormek icin
    • stack@helion-cp1-c1-m2-mgmt:~$ sudo ip netns exec qrouter-d4fe02b8-0cc0-4662-8573-b3b3f783baaf ifconfig
  • Bu namespace’lere ait iptables tabloalarini gormek icin
    • stack@helion-cp1-c1-m2-mgmt:~$ sudo ip netns exec qrouter-d4fe02b8-0cc0-4662-8573-b3b3f783baaf iptables -L -v -n
  • Ilgili komutlari sanki cli> da calistiyor gibi yapmak icin
    • stack@helion-cp1-c1-m2-mgmt:~$ sudo ip netns exec qrouter-d4fe02b8-0cc0-4662-8573-b3b3f783baaf bash
      • root@helion-cp1-c1-m2-mgmt:/home/stack# iptables -L -v -b
      • root@helion-cp1-c1-m2-mgmt:/home/stack# ifconfig
  • Isleme baslamadan once dogru proje icin islem yaptigimiza emin olun
    • Simdi bir kural (Firewall Rule) girelim , oldukca sacma olacak disaridan sanki Google DNS bizdeymis gibi kural yaziyoruz.
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-rule-create –name FWRule1 –source-ip-address 0.0.0.0/0 –destination-ip-address 8.8.8.8/32 –destination-port 22 –protocol tcp –action allow
    • Simdi bir Firewall policy yaratalim , bu bir container gibi, icersine biraz once yarattigimiz firewall kuralini ekleyecegiz. Daha onceden yarattigimiz firewall kuralinin ismi ve yeni yaratacagimiz firewall policy adini set edecegiz.
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-policy-create –firewall-rules FWRule1 FWPolicy1
      • FWPolicy1 atanmis tum kurallari gormek isterseniz
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-policy-show 2c5e0bfa-9865-414d-95ad-31dcbb8f345e
      • Diyelim ek FW Rule eklediniz ve bunu Policy’e eklemek istiyorsunuz
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-policy-insert-rule FWPolicy1 FWRule2
        • Burada kurallarin ekleme sirasi onemli onunu icin ilgili komutu –insert-before ve –insert-after parametrelerini kullanarakda ekleme yapabilirsiniz.
    • Ve firewall’u yaratalim
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-create –name Firewall1 FWPolicy1
  • Simdi bakalim olaylar nasil gerceklesi
    • Once yarattigimiz tum kural , policy , firewall ve router bilgilerini edinelim
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-rule-list
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-policy-list
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron firewall-list
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-list
        • id bizim icin onemli yaratilan network namespace’i buradan bulacagiz
        • d4fe02b8-0cc0-4662-8573-b3b3f783baaf
      • Simdi Network/Controller node’lari uzerinde bulalim kendisini
        • stack@helion-cp1-c1-m1-mgmt:~$ sudo ip netns | grep router | grep d4fe02b8-0cc0-4662-8573-b3b3f783baaf
        • stack@helion-cp1-c1-m1-mgmt:~$ sudo ip netns exec qrouter-d4fe02b8-0cc0-4662-8573-b3b3f783baaf iptables -L -v -n
      • HOS kullanimlarinda ek olarak yine ayni id ve snat prefix’ile farkli bir namespace daha gorebilirsiniz ve ilgili tanimlar bu namespace altina yapilmis olabilir
        • stack@helion-cp1-c1-m2-mgmt:~$ sudo ip netns exec snat-d4fe02b8-0cc0-4662-8573-b3b3f783baaf iptables -L -v -n
      • Yine HOS kullanimlarinda ayni sekilde Floating-IP leri icinde compute node uzerinde farkli namespace‘ler goreceksiniz fip prefix’i ile
        • fip-efb5448d-7593-46f7-90ad-bd33206c2c7b
        • stack@helion-cp1-compute0002-mgmt:~$ sudo ip netns exec fip-efb5448d-7593-46f7-90ad-bd33206c2c7b iptables -L -v -n

VM

Guzel Link’ler :

https://wiki.openstack.org/wiki/Neutron/SecurityGroups

http://docs.openstack.org/cli-reference/nova.html

http://docs.openstack.org/cli-reference/neutron.html

Posted on 07/11/2016, in Firewalls, Openstack and tagged , , , , , , , , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: