Securing the network for VMs or Containers

36
Securing Securing KVM / container KVM / container networks networks Marian HackMan Marinov Marian HackMan Marinov <[email protected]> <[email protected]> Chief System Architect Chief System Architect SiteGround SiteGround

Transcript of Securing the network for VMs or Containers

Page 1: Securing the network for VMs or Containers

Securing Securing KVM / containerKVM / container

networksnetworks

Marian HackMan MarinovMarian HackMan Marinov<[email protected]><[email protected]>

Chief System ArchitectChief System ArchitectSiteGroundSiteGround

Page 2: Securing the network for VMs or Containers

Who am I?Who am I? Who am I?Who am I?

❖ Chief System Architect of Siteground.com

❖ Sysadmin since 1996

❖ Organizer of OpenFest, BG Perl Workshops,

LUG-BG and similar :)

❖ Teaching Network Security and Linux System

Administration at Sofia University

Page 3: Securing the network for VMs or Containers

DISCLAMERDISCLAMER DISCLAMERDISCLAMER

❖ I'll be looking only at the network on the host machine

❖ The only proper way of securing the network between your VMs / containers and the host machine is to know your infrastructure.

This includes MAC, IP addresses and their actual location.

Page 4: Securing the network for VMs or Containers

❖ Basic things that have to protect from

arp spoofing

ip spoofing

traffic leaking / sniffing

Page 5: Securing the network for VMs or Containers

KVM networkingKVM networking KVM networkingKVM networking

❖What network options does KVM give us?

vnet device on the host

macvtap

Virtual Distributed Ethernet (VDE)

assign a physical device (SR-IOV) Single Root I/O Virtualization (SR-IOV)

assign a physical device (eth, wlan)

Page 6: Securing the network for VMs or Containers

KVM networkingKVM networking KVM networkingKVM networking

❖What network options does KVM give us?

NAT

Routing

Bridge

OpenVswitch

ProxyARP

Page 7: Securing the network for VMs or Containers

Container networkingContainer networking Container networkingContainer networking

❖What network options are available for containers?

macvlan (tap & tun)

veth pair (routing or NAT)

VDE (using tap devices)

move any network device into the container (eth, tun/tap, vlan, wlan, etc.)

Page 8: Securing the network for VMs or Containers

Container networkingContainer networking Container networkingContainer networking

❖What network options are available for containers?

Bridge

OpenVswitch

Routing

NAT

ProxyARP

Page 9: Securing the network for VMs or Containers

Protections?Protections? Protections?Protections?

❖ How can we secure all those options?

VLANs

Page 10: Securing the network for VMs or Containers

Protections?Protections? Protections?Protections?

❖ How can we secure all those options?

VLANs

Routing

Page 11: Securing the network for VMs or Containers

Protections?Protections? Protections?Protections?

❖ How can we secure all those options?

VLANs

Routing

Static ARP

Page 12: Securing the network for VMs or Containers

Protections?Protections? Protections?Protections?

❖ How can we secure all those options?

VLANs

Routing

Static ARP

iptables

Page 13: Securing the network for VMs or Containers

Protections?Protections? Protections?Protections?

❖ How can we secure all those options?

VLANs

Routing

Static ARP

iptables

ebtables

Page 14: Securing the network for VMs or Containers

Protections?Protections? Protections?Protections?

❖ How can we secure all those options?

VLANs

Routing

Static ARP

iptables

ebtables

arptables

Page 15: Securing the network for VMs or Containers

Protections?Protections? Protections?Protections?

❖ How can we secure all those options?

VLANs

Routing

Static ARP

iptables

ebtables

arptables

ip6tables

Page 16: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2

Using a Router

Page 17: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2

Using a Bridge

Page 18: Securing the network for VMs or Containers

Attacking the Attacking the bridged network bridged network Attacking the Attacking the bridged network bridged network

❖ arp poisoning

VM-1 arp cache poison of the HOST

VM-1 arp cache poison of VM-2

As simple as:

# ip a a 10.0.0.1/24 dev eth0

# arping -i eth0 -U 10.0.0.1

Can be even easier:

# arpspoof -i eth0 -t 10.0.0.1 -r 10.0.0.15

Page 19: Securing the network for VMs or Containers

Protecting the Protecting the bridged network bridged network Protecting the Protecting the bridged network bridged network

❖ Preventing arp poison on the HOST

adding static ARP entries:

# ip n a 10.0.0.15 lladdr 01:81:36:ec:05:ee nud permanent dev vnet1

Page 20: Securing the network for VMs or Containers

Protecting the Protecting the bridged network bridged network Protecting the Protecting the bridged network bridged network

❖ Preventing arp spoofing to the VMs/Containers

configure ARPTABLES

# arptables -P OUT DROP

# arptables -A OUT -j ACCEPT -s GW \ -i eth0 -z xx:xx:xx:xx:xx:xx

# arptables -A OUT -j ACCEPT -s 10.0.0.15 \

-i vnet1 -z xx:xx:xx:xx:xx:xx

# arptables -A OUT -j ACCEPT -o vnet1

Page 21: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2

Using a Bridge

eth0: 10.12.0.12# brctl showbridge bridge id interfacesbr0 8000.028037ec0200 eth0

vnet1 vnet2

Page 22: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2Using a Bridge

eth0: 10.12.0.12VM1: ping -c1 10.12.0.12PING 10.12.0.12 (10.12.0.12) 56(84) bytes of data.64 bytes from 10.12.0.12: icmp_seq=1 ttl=64 time=0.086 ms

Page 23: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2Using a Bridge

eth0: 10.12.0.12VM1: ping -c1 10.12.0.12PING 10.12.0.12 (10.12.0.12) 56(84) bytes of data.64 bytes from 10.12.0.12: icmp_seq=1 ttl=64 time=0.086 ms

Page 24: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2Using a Bridge

❖ We now have many options

we can use bridge vlan filteringusing ingress policyusing ebtablesusing namespacesebtables filter (drop all traffic on that interface)arptables filteriptables filter (drop all traffic on that interface)

don't forget about IPv6 ☺

Page 25: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2Using a Bridge

# echo 1 > /sys/class/net/br0/bridge/vlan_filtering# bridge vlan del dev br0 vid 1 self# bridge vlan showport vlan idseth0 1 PVID Egress Untaggedvnet1 1 PVID Egress Untaggedvnet2 1 PVID Egress Untaggedbr0 None

Page 26: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2Using a Bridge

# echo 1 > /sys/class/net/br0/bridge/vlan_filtering# bridge vlan del dev br0 vid 1 self# bridge vlan showport vlan idseth0 1 PVID Egress Untaggedvnet1 1 PVID Egress Untaggedvnet2 1 PVID Egress Untaggedbr0 None

HOST

Page 27: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2Using a Bridge

ingress filter# tc qdisc add dev br0 handle ffff: ingress# tc filter add dev br0 parent ffff: u32 \ match u8 0 0 action drop

ebtables:# ebtables -A INPUT --logical-in br0 -j DROP

Page 28: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2

Using a Bridge

HOST

eth1

br0

eth0

vnet1

vnet2

vm-bridge

Page 29: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

# ip netns add vm-bridge# ip link set netns vm-bridge eth0# ip link set netns vm-bridge vnet1# ip link set netns vm-bridge vnet2# ip link del dev br0# ip netns exec vm-bridge brctl addbr br0# for i in eth0 vnet1 vnet2; do> ip netns exec vm-bridge brctl addif br0 $i> ip netns exec vm-bridge ip link set up dev $i> done# ip netns exec vm-bridge ip link set up dev br0

Page 30: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

Disabling ARP on bridge br0:

# ip link set arp off dev br0# ip l l dev br08: br0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 50:54:33:00:00:04 brd ff:ff:ff:ff:ff:ff

Page 31: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2

Using a Router

VM1: 10.0.0.4/30VM2: 10.0.0.8/30HOST: 10.0.0.0/30

Page 32: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2If you want flexibility, If you want flexibility,

you add a routing protocolyou add a routing protocol

bgp1bgp1 bgp2bgp2

Page 33: Securing the network for VMs or Containers

Network setupNetwork setup Network setupNetwork setup

VM-1VM-1LXC-1LXC-1

VM-2VM-2LXC-2LXC-2If you want flexibility, If you want flexibility,

you add a routing protocolyou add a routing protocol

You now need to protect the BGPs from bogus announcements

bgp1bgp1 bgp2bgp2

Page 34: Securing the network for VMs or Containers

Protect the HOSTProtect the HOST Protect the HOSTProtect the HOST

Prevent access to the host node with policy routing

# echo “200 vnet1” >> /etc/iproute2/rt_tables# ip route add 0/0 via x.x.x.x table vnet1# ip route add 10.0.0.15 dev vnet1 table vnet1# ip rule add iif vnet1 table vnet1# ip rule add oif vnet1 table vnet1

Page 35: Securing the network for VMs or Containers

Prevent spoofing of IPsPrevent spoofing of IPs Prevent spoofing of IPsPrevent spoofing of IPs

Limit the source IPs of all clients:

# iptables -P FORWARD DROP# iptables -A FORWARD -j ACCEPT -i vnet1 -s 10.0.0.15# iptables -A FORWARD -j ACCEPT -i vnet2 -s 10.0.0.16

Page 36: Securing the network for VMs or Containers

THANK YOU THANK YOU THANK YOU THANK YOU

Marian HackMan Marinov<[email protected]>