W poprzednich wpisach mówiłem w wdrożeniu samego NSX i jego funkcjonalności, ale przyszedł czas na słynną mikrosegmentacja.
Co to jest mikrosegmentacja?
Zacznijmy od podstaw, na chwilę obecną mikrosgmentację realizujemy przez tworzenie wielu vlanów per app czy funkcja a ruch pomiędzy vlanami filtrujemy za pomocą ACL’ek czy reguł FW, takim przypadku jest ciężko blokować ruch w tym samym vlanie tzw. ruch wschód-zachód. W środowisku czysto fizycznym mogliśmy kombinować np. private vlan.
Dziś mamy coraz częściej wyłącznie środowisko wirtualne. Tutaj przychodzi z pomocą nam rozwiązanie NSX. Sam NSX pozwala na stworzenie reguł firewall które pozwolą na bardzo szczegółowe filtrowanie ruchu nawet w tym samym segmencie sieciowym (ten sam vlan lub vxlan). Reguły te są “przypisywane” do karty sieciowej wirtualnej maszyny, reguły wędrują za nią podczas wykonywania vmontion.
Sam NSX daje nam firewalla warstwy 4, jeżeli chcemy filtrować w warstwie 7 musimy sięgnąć po rozwiązania firm trzecich które integrują się z NSX’em, są to min.:
- PaloAlto
- Fortinet
- Trend Micro
Tyle torii teraz trochę praktyki.
Będziemy pracować na architekturze z wpisu o load balncerze
gdzie zadaniem będzie blokowanie ruchu pomiędzy dwoma hostami w tym samej sieci VNI10001.
Tworzenie reguł pokaże na dwa sposoby:
- Budowanie ręczne polityk – dzisiejszy wpis będzie poświęcony temu.
- użycie funkcji Service Composer
Sprawdzenie komunikacji przed wdrożenie polityk
Poniżej przedstawiam testy, przed implementacją reguł firewall.
połączenie SSH
z hosta 172.16.11.11 na 172.16.11.12
root@photon01 [ ~ ]# ssh 172.16.11.12 The authenticity of host '172.16.11.12 (172.16.11.12)' can't be established. ECDSA key fingerprint is SHA256:bvjT0a9h9BWitRgP4MQvAP5XkqGscFWq6ps5adg98gE. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.11.12' (ECDSA) to the list of known hosts. Password: Last login: Tue Aug 8 06:40:02 2017 from 192.168.0.250 root@photon02 [ ~ ]# root@photon02 [ ~ ]# ifconfig docker0 Link encap:Ethernet HWaddr 02:42:83:a8:92:8b inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:83ff:fea8:928b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2214 errors:0 dropped:0 overruns:0 frame:0 TX packets:2727 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:654128 (654.1 KB) TX bytes:161342 (161.3 KB) eth0 Link encap:Ethernet HWaddr 00:50:56:82:67:0e inet addr:172.16.11.12 Bcast:172.16.11.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe82:670e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21142 errors:0 dropped:4 overruns:0 frame:0 TX packets:12236 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1565016 (1.5 MB) TX bytes:1500317 (1.5 MB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:170 errors:0 dropped:0 overruns:0 frame:0 TX packets:170 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:13289 (13.2 KB) TX bytes:13289 (13.2 KB) veth3710e3e Link encap:Ethernet HWaddr 26:24:33:eb:e4:43 inet6 addr: fe80::2424:33ff:feeb:e443/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2214 errors:0 dropped:0 overruns:0 frame:0 TX packets:2740 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:685124 (685.1 KB) TX bytes:162487 (162.4 KB) root@photon02 [ ~ ]# exit logout Connection to 172.16.11.12 closed. root@photon01 [ ~ ]#
z hosta 172.16.11.12 na 172.16.11.11
root@photon02 [ ~ ]# ssh 172.16.11.11 Password: Last login: Tue Aug 8 07:12:43 2017 from 172.16.11.12 root@photon01 [ ~ ]# root@photon01 [ ~ ]# root@photon01 [ ~ ]# root@photon01 [ ~ ]# root@photon01 [ ~ ]# ifconfig docker0 Link encap:Ethernet HWaddr 02:42:e3:7c:91:2a inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:e3ff:fe7c:912a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2032 errors:0 dropped:0 overruns:0 frame:0 TX packets:2614 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:616703 (616.7 KB) TX bytes:154989 (154.9 KB) eth0 Link encap:Ethernet HWaddr 00:50:56:bb:c6:7f inet addr:172.16.11.11 Bcast:172.16.11.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:febb:c67f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:17703 errors:0 dropped:2 overruns:0 frame:0 TX packets:13137 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1326908 (1.3 MB) TX bytes:1505389 (1.5 MB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:231 errors:0 dropped:0 overruns:0 frame:0 TX packets:231 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:18644 (18.6 KB) TX bytes:18644 (18.6 KB) vethb200b37 Link encap:Ethernet HWaddr be:23:8a:54:b7:e9 inet6 addr: fe80::bc23:8aff:fe54:b7e9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2032 errors:0 dropped:0 overruns:0 frame:0 TX packets:2627 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:645151 (645.1 KB) TX bytes:156131 (156.1 KB) root@photon01 [ ~ ]# exit logout Connection to 172.16.11.11 closed.
Ping
root@photon01 [ ~ ]# ping 172.16.11.12 PING 172.16.11.12 (172.16.11.12) 56(84) bytes of data. 64 bytes from 172.16.11.12: icmp_seq=1 ttl=64 time=0.580 ms 64 bytes from 172.16.11.12: icmp_seq=2 ttl=64 time=0.575 ms ^C --- 172.16.11.12 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.575/0.577/0.580/0.024 ms root@photon01 [ ~ ]#
root@photon02 [ ~ ]# ping 172.16.11.11 PING 172.16.11.11 (172.16.11.11) 56(84) bytes of data. 64 bytes from 172.16.11.11: icmp_seq=1 ttl=64 time=0.679 ms 64 bytes from 172.16.11.11: icmp_seq=2 ttl=64 time=0.730 ms 64 bytes from 172.16.11.11: icmp_seq=3 ttl=64 time=0.624 ms ^C --- 172.16.11.11 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.624/0.677/0.730/0.052 ms root@photon02 [ ~ ]#
NETCAT
root@photon01 [ ~ ]# netcat -z -v 172.16.11.12 80 172.16.11.12 80 (http) open root@photon01 [ ~ ]#
root@photon02 [ ~ ]# netcat -z -v 172.16.11.11 80 172.16.11.11 80 (http) open root@photon02 [ ~ ]#
Ręcznie tworzenie polityk
Logujemy się do naszego vcenter i przechodzimy do Networking & Security
następnie do sekcji Firewall
tutaj tworzymy nową sekcję klikając na katalog z zielonym plusem. Jest to pomocne do utrzymania porządku w regułach.
w nowym oknie nadajemy nazwę sekcji
następnie dodajemy regułę w tej sekcji przez kliknięcie zielonego plusa. Pojawi się nowa reguła w której uzupełnimy ją o obiekty oraz ustawienia.
do tworzenia reguł możemy korzystać z wielu możliwości:
- IP
- Virtual Machine
- IP SET
- Cluster
- Datacenter
- vNIC
- i jeszcze kilka możliwości
wybieramy co będzie Source – w naszym przypadku będą to wirtualne maszyny, wybieram obiekty z vCenter
podobnie jak wyżej w polu Destination wybieramy też nasze maszyny
w polu Service zostawiamy ANT, a w polu Action dajemy zgodnie:
ważne aby dać logowanie aby było można zobaczyć logi w syslogu, warto również o tagować te wpisy dla łatwiejszego wyszukiwania.
po zakończeniu tworzenie reguły publikujemy ją klikając Publish Changes
Weryfikacja
Sprawdzamy połączenia SSH
root@photon01[ ~ ]# ssh 172.16.11.12 ssh: connect to host 172.16.11.12 port 22: Connection timed out root@photon01[ ~ ]#
root@photon02[ ~ ]# ssh 172.16.11.11 ssh: connect to host 172.16.11.11 port 22: Connection timed out root@photon02[ ~ ]#
Ping
root@photon01[ ~ ]# ping 172.16.11.12 PING 172.16.11.12 (172.16.11.12) 56(84) bytes of data. ^C --- 172.16.11.12 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2015ms root@photon01[ ~ ]#
root@photon02[ ~ ]# ping 172.16.11.11 PING 172.16.11.11 (172.16.11.11) 56(84) bytes of data. ^C --- 172.16.11.11 ping statistics --- 5 packets transmitted, 0 received, 100% packet loss, time 4032ms
Logi
Sprawdzamy logi wykorzystując Vmware log insight który opisałem w tym wpisie o integracji z NSX’em
filtrujemy po id reguły którą stworzyliśmy
lub po wcześniej ustawionym tagu
w kolejnym wpisie poruszę temat Service Composer.