defensa y alta disponibilidad con la nueva generación de ... · mayor configurabilidad de tablas y...

47
#CyberCamp18 Defensa y alta disponibilidad con la nueva generación de firewall de linux Laura García <[email protected] > Pablo Neira <[email protected] >

Upload: others

Post on 05-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Defensa y alta disponibilidad con la nueva

generación de firewall de linux

Laura García <[email protected]>

Pablo Neira <[email protected]>

Page 2: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Presentación

▪ Pablo Neira Ayuso

Profesor Univ. Sevilla

Soleta Networks (Spin-off)

Mantenedor Netfilter

▪ Laura García Liébana

CEO Zevenet

Contribuidora Netfilter

Page 3: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

1.Infraestructura de Netfilter

2.Camino de datos en Netfilter

3.iptables vs nftables

4.Demo cortafuegos con nftables

5.Capa de compatibilidad

6.Balanceador de carga con nftables

7.Casos de uso de balanceo de carga

Índice

Page 4: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Infraestructura de Netfilter

Page 5: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

➔ipchains (1997)

➔iptables (1998)

● arptables

● ebtables

● ip6tables

➔ipset (2000)

➔conntrack-tools (2006)

➔nftables (2013 en kernel 3.13) - versión actual 0.9.0

Historia de Netfilter

5

Page 6: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

6

Componentes de Netfilter

Page 7: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Camino de Datos en Netfilter

Page 8: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Camino de Datos en Netfilter

8

Page 9: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Camino de Datos en un servidor con firewall

9

Page 10: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Camino de Datos en un firewall perimetral

10

Page 11: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

iptables vs nftables

Page 12: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Simplificación de utilidades

nftables =~ iptables + ip6tables + arptables + ebtables + ipset

# iptables -I INPUT -p tcp --dport 80 -j DROP

# ip6tables -I INPUT -p tcp --dport 80 -j DROP

# ebtables -I INPUT -p tcp --dport 80 -j drop

# arptables ...

nft add rule ip filter input tcp dport 80 drop

- sólo modificar familias: ip6, bridge, arp, inet

Diferencias

12

Page 13: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Mejora la gestión de diferentes stacks (ipv4/6)

iptables -A INPUT -p icmp -j DROP

ip6tables -A INPUT -p icmpv6 -j DROP

nft add rule inet filter input ip protocol icmp drop

nft add rule inet filter input ip6 nexthdr icmpv6 drop

Diferencias

13

Page 14: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Mayor configurabilidad de tablas y cadenas

Con iptables, las tablas y cadenas son creadas por defecto.

# iptables-save

*nat

:PREROUTING ACCEPT [0:0]

-A PREROUTING -t nat -i wan0 -m tcp --dport 80 -j DNAT --to 1.2.3.4:80

:INPUT ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

COMMIT

Diferencias

14

Page 15: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Mayor configurabilidad de tablas y cadenas,

En nftables creamos las tablas que necesitemos.

table ip nat {

chain pre {

type nat hook prerouting priority dstnat; policy accept;

iifname “wan0” tcp dport 80 dnat to 1.2.3.4:80

}

chain no-ve-trafico {

}

}

Diferencias

15

Page 16: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Mayor facilidad de gestión de tablas y cadenas

Por ejemplo, para la eliminación de tablas

iptables -F -t nat

iptables -X -t nat

iptables -F -t mangle

iptables -X -t mangle nft

flush ruleset

iptables -F -t raw

iptables -X -t raw

iptables -F -t filter

iptables -X -t filter

Diferencias

16

Page 17: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Solventa problemas de diseño en la API de iptables:

- mejora en tiempo cambios incrementales

… no hay que reconstruir el blob

- mejoras en concurrencia

… múltiples procesos compiten por actualizar reglas.

- pérdida de estados internos

… tras actualización de una sola regla, por ejemplo, -m quota

Diferencias

17

Page 18: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Lenguaje más natural y expresivo para reducir número de reglas

iptables -A FORWARD -i “wan0” -o “lan0” -j LOG

iptables -A FORWARD -i “wan0” -o “lan0” \

-m state --state ESTABLISHED,RELATED -j ACCEPT

nft add rule filter forward iifname “wan0” oifname “lan0” \

log ct state established,related accept

Diferencias

18

Page 19: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Estructuras de mapas, conjuntos y mapas de decisión nativos

ip6tables -A INPUT -p icmpv6 \

--icmpv6-type packet-too-big -j ACCEPT

ip6tables -A INPUT -p icmpv6 \

--icmpv6-type neighbour-advertisement -j ACCEPT

ip6tables -A INPUT -p icmpv6 \

--icmpv6-type echo-reply -j ACCEPT

nft add rule ip6 filter input icmpv6 type {

packet-too-big,

time-exceeded,

echo-reply }

Diferencias

19

Page 20: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Nuevo hook: ingress (x2 más rápido)

- iptables desde prerouting/raw:

iptables -I PREROUTING -t raw -p udp –dport 9 -j DROP

5.999.928pps

- nftables desde ingress:

nft add rule netdev ingress udp dport 9 drop

12.356.983pps

nft add rule netdev ingress udp dport { 1, 2, ..., 384} drop

11.844.615pps

Diferencias

20

Page 21: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Fast path (2,75x más rápido)

Diferencias

21

Page 22: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Implementación con mayor rendimiento

Evita uso de llamadas indirectas (tras Meltdown & Spectre)

Casos Performance

iptables DNAT 256,864 http req/s per core

iptables SNAT 262,089 http req/s per core

nft DNAT 608,941 http req/s per core

nft SNAT 560,976 http req/s per core

nft ingress 7,302,517 http req/s per core

con retpoline habilitado:

iptables: 40.77% penalty

nftables: 17.27% penalty

Diferencias

22

Page 23: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Configuración: Fast path

table ip x {

flowtable f {

hook ingress priority 0; devices = { eth0, eth1};

}

chain y {

type filter hook forward priority 0;

ip protocol tcp flow add @f

}

}

Diferencias

23

Page 24: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Scripting: más amigable

#!/usr/sbin/nft

include "another-ruleset.nft"

define ntp_servers = { 84.77.40.132, 176.31.53.99, 81.19.96.148,

138.100.62.8 }

add rule ip foo bar ip saddr $ntp_servers udp dport 123 counter

Diferencias

24

Page 25: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Biblioteca nativa para aplicaciones

Evita llamadas a comandos del sistema: system()

#include <nftables/libnftables.h>

struct nft_ctx *ctx = nft_ctx_new(NFT_CTX_DEFAULT);

const char *cmd = “nft flush ruleset; \

nft add rule filter input iifname ‘wan0’ drop”;

nft_run_cmd_from_buffer(ctx, cmd, strlen(cmd));

nft_ctx_free(ctx);

Diferencias

25

Page 26: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add rule ip foo bar tcp dport { 22, 80, 443 } counter

nft add set ip foo whitelist { type ipv4_addr \; }

nft add rule ip foo bar ip daddr @whitelist counter accept

nft add element ip foo whitelist { \

192.168.0.1, \

192.168.0.10 \

}

Ejemplo: Creando whitelist

26

Page 27: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add table ip nat

nft add chain ip nat post { \

type nat hook postrouting priority 0\; }

nft add rule ip nat post snat ip saddr map { \

1.1.1.0/24 : 192.168.3.11 , \

2.2.2.0/24 : 192.168.3.12 \

}

Ejemplo: Mapeo NAT

27

Page 28: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add set ip foo whitelist { type ipv4_addr; timeout 1h; }

nft add element ip foo whitelist { \

192.168.2.123,

192.168.2.124,

}

nft add set ip foo whitelist { type ipv4_addr; flags timeout; }

nft add element ip foo whitelist { 192.168.2.123 timeout 10s }

nft add rule ip foo update @whitelist { ip saddr timeout 30s }

Ejemplo: Whitelist dinámico con timeouts

28

Page 29: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add chain ip foo tcp-chain

nft add chain ip foo udp-chain

nft add chain ip foo icmp-chain

nft add rule ip foo bar ip protocol vmap { \

tcp : jump tcp-chain, \

udp : jump udp-chain, \

icmp : jump icmp-chain

}

Ejemplo: Diccionarios

29

Page 30: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add rule netdev foo bar ip saddr . tcp dport vmap { \

192.168.1.123 . 22 : jump whitelist_chain, \

192.168.1.123 . 80 : jump whitelist_chain, \

}

nft add set netdev foo test { type ether_addr . ipv4_addr \; }

nft add element netdev foo test { \

00:ca:fe:00:be:ef . 192.168.1.123,

00:ab:cd:ef:00:12 . 192.168.1.124 \

}

nft add rule netdev foo bar ether saddr . ip saddr @test accept

Ejemplo: Concatenaciones

30

Page 31: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add rule ip foo bar ip daddr 8.8.8.8 counter accept \

comment \“google dns\”

nft add set ip foo dns-whitelist {\

type ipv4_addr\;

}

nft add element ip foo dns-whitelist { \

8.8.8.8 comment “google dns”, \

192.203.230.10 comment “nasa dns”,

}

Ejemplo: Comentarios en las reglas y sets

31

Page 32: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add counter filter http-traffic

nft add rule filter output tcp dport https counter name http-traffic

nft add rule filter output counter name tcp dport map { \

443 : "https-traffic", \

80 : "http-traffic", \

22 : “ssh-traffic”, \

25 : "smtp-traffic", \

}

Ejemplo: Contadores y cuota con nombre

32

Page 33: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

nft add map filter mystats { type ipv4_addr : counter \; }

nft add rule filter input counter name ip saddr map @mystats

nft add counter filter computer1

nft add counter filter computer2

nft add element filter mystats { 192.168.2.3 : "computer1" }

nft add element filter mystats { 192.168.2.4 : "computer2" }

Ejemplo: Mapas con contadores con nombres

33

Page 34: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Demo cortafuegos con nftables

Page 35: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Entorno de Demo

cliente

192.168.43.0/24

fw-lb

if0: 192.168.43.108/24

if1: 192.168.100.1/24

backend1

192.168.100.10/24

gw: 192.168.100.1

backend2

192.168.100.11/24

gw: 192.168.100.1

Page 36: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Capa de Compatibilidad

Page 37: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ iptables-translate

s/iptables/iptables-translate & s/ip6tables/ip6tables-translate

# iptables-translate -A INPUT -p tcp --dport 22 \

-m conntrack --ctstate NEW -j ACCEPT

nft add rule ip filter INPUT tcp dport 22 ct state new counter accept

# ip6tables-translate -A FORWARD -i eth0 -o eth3 -p udp \

-m multiport --dports 111,222 -j ACCEPT

nft add rule ip6 filter FORWARD iifname eth0 oifname eth3 meta l4proto udp udp

dport { 111,222 } counter accept

Utilidades de traducción

37

Page 38: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Capa de compatibilidad

38

Page 39: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ nft compat para uso nftables con sintaxis de iptables

iptables en espacio de usuario, nftables en espacio del kernel

Capa de compatibilidad

39

# iptables-nft -A FORWARD -p icmp -j

ACCEPT

# iptables-nft-save

*filter

:INPUT ACCEPT [62:3777]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [62:4074]

-A FORWARD -p icmp -j ACCEPT

COMMIT

# nft list ruleset

table ip filter {

chain INPUT {

type filter hook input priority 0; policy accept;

}

chain FORWARD {

type filter hook forward priority 0; policy accept;

ip protocol icmp counter packets 0 bytes 0 accept

}

chain OUTPUT {

type filter hook output priority 0; policy accept;

}

}

Page 40: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Demo de capa de compatibilidad

Page 41: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Balanceador de Carga con nftables

Page 42: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

LVS:

infraestructura duplicada con netfilter, chequeos en espacio de usuario,

no preparado para ciertos casos de uso como puede ser proxy

transparente, multipuerto, multi-protocolo, etc. Soporta sNAT, TUN y

DSR, pero no dNAT.

iptables:

sNAT, sNAT pero no DSR, diferentes binarios para diferentes stacks, se

requieren muchas reglas (al menos ~2/servidor), tratamiento secuencial

de reglas y problemas de bloqueo.

Opciones de alta disponibilidad

42

Page 43: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Diseño de nftlb

43

libnftable

s

netfilter datapath (DSR/SNAT/DNAT/STLS DNAT)

Page 44: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Soporta las topologías sNAT, dNAT (con y sin estado) y DSR

▪ Manejo de multipuerto y multiprotocolo de forma nativa

▪ Soporte de tráfico IPv4 e IPv6

▪ Los servicios virtuales están indexados con vmaps, no necesita

tratamiento secuencial de reglas

▪ Programadores: weight, round robin, hash and symmetric hash

Propiedades desde el camino de datos

44

Page 45: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

▪ Demonio en espacio de usuario

▪ Optimiza el número de reglas y aislamiento de cadenas por servicio

▪ Soporta múltiples virtual services

▪ Soporte de prioridad por servidor

▪ Gestión remota mediante API JSON y socket HTTP

▪ Key de seguridad

Y en el camino de control

45

Page 46: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

Demo de balanceo de carga

Page 47: Defensa y alta disponibilidad con la nueva generación de ... · Mayor configurabilidad de tablas y cadenas, En nftables creamos las tablas que necesitemos. table ip nat {chain pre

#CyberCamp18

GRACIAS