Archiv der Kategorie: OpenBSD

FreeBSD 10.1: PBR, ECMP, FIB und IPFW Layer2 Filtering

Diesmal geht es etwas um:
– Policy-Based Routing (PBR)
– Equal-cost multi-path routing (ECMP)
– Forwarding Information Base (FIB)
– IPFW Layer2 Regeln

Policy-Based Routing ermöglicht zusätzlich zum klassischen Routing (anhand der Zieladresse per „Default, Routing Protocol oder statischer Route) auch ein elementbasiertes Routing z.B. anhand der „Source Address“, ToS (Type of Service), Protocol, Port, usw. …

Mitte 2013 hatte ich ein kurzes HowTo: OpenBSD Multipath NAT Routing erstellt, „Equal-cost multi-path routing“ ist unter FreeBSD um einiges einfacher

FreeBSD unterstützt bis zu 16 verschiedene Routingtabellen, FIBs eigenen sich gut bei JAIL Systemen ohne VIMAGE Kernelsupport

FreeBSD Beastie PBR, ECMP, FIB und IPFW Layer2 Filtering

Punkt 1 zu Policy-Based Routing

der Custom-Kernel kann z.B. folgende options zusätzlich besitzen:

$
options         IPFIREWALL                      # enables IPFW
options         IPFIREWALL_VERBOSE              # enables logging for rules with log keyword
options         IPFIREWALL_VERBOSE_LIMIT=256    # limits number of logged packets per-entry
options         IPFIREWALL_DEFAULT_TO_ACCEPT    # sets default policy to pass what is not explicitly denied
### options         IPDIVERT                        # enables NATd Support
options         IPFIREWALL_NAT                  # IPFW in-Kernel NAT support
options         LIBALIAS                        # required for in-Kernel NAT / replacement for NATd
$

options IPFIRWALL_FORWARD ist deprecated. Der fwd Code ist mit in ipfw enthalten.

Punkt 1.1 PBR Beispiel:

$
/sbin/ipfw add fwd 172.31.254.254 tcp from any to any 80
$

Punkt 2 zu Equal-cost multi-path routing

der Custom-Kernel benötigt folgende option:

$
options RADIX_MPATH # Equal-cost multi-path routing (ECMP)
$

Punkt 2.1 mehrere ECMP Routen definieren

$
route add -net 172.31.253.0/24 172.31.255.1
route add -net 172.31.253.0/24 172.31.255.2
$

Gewichtung ändern:

$
route change -weight 10 172.31.253.0/24 172.31.255.2
route show 172.31.253.0/24 172.31.255.2
$

Punkt 3 zu Forwarding Information Base

Wer mit der Stabilität von VIMAGE (Jail Host) Systemen unzufrieden ist und nur eine Handvoll Jails laufen hat, jedoch die IP Aliases unterschiedlichen Broadcastdomänen zuweisen möchte (mit diversen default gateways), der kann pro Applikation/Jail eine FIB zuweisen

der Custom-Kernel benötigt folgende option:

$
options         ROUTETABLES=15 # max 16 FIB (0-15/Forward Information Base/multiple routing tables) support
$

Punkt 3.1 FIB pro Application/JAIL

für Routingtabelle 2:

$
vi /etc/rc.conf
#
apache24_enable="YES"
apache24_fib="1"
#
$

für Routingtabelle 3:

$
vi /usr/local/etc/ezjail/test1.domain.tld
#
export jail_test1_domain_tld_fib="2"
#
$

für Routingtabelle 4:

$
setfib 3 netstat -rn
$

Hinweis: Eine Kombination aus ROUTETABLES und VIMAGE Kernel kann zu unverhofften Systemabstürzen führen!

Punkt 4 IPFW Layer2 Filter Beispiel für komplexe Bridge Zones

erlaubt nur validen Traffic für das gewünschte Interface mit Bindung an die IP und MAC Adresse:

$
# filter for vswitch26 (JAIL: test26.domain.tld)
### / ipv4
add 05001 allow ip4 from 148.XXX.XXX.XXX to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair49b
add 05002 allow ip4 from 148.XXX.XXX.XXX to any layer2 MAC any 02:FF:FF:FF:FF:FF via vswitch26
add 05003 allow ip4 from 148.XXX.XXX.XXX to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair89b
add 05011 allow ip4 from any to 148.XXX.XXX.XXX layer2 MAC 02:FF:FF:FF:FF:FF any via epair49b
add 05012 allow ip4 from any to 148.XXX.XXX.XXX layer2 MAC 02:FF:FF:FF:FF:FF any via vswitch26
add 05013 allow ip4 from any to 148.XXX.XXX.XXX layer2 MAC 02:FF:FF:FF:FF:FF any via epair89b
add 05097 deny ip4 from any to any layer2 MAC any any via epair49b
add 05098 deny ip4 from any to any layer2 MAC any any via vswitch26
add 05099 deny ip4 from any to any layer2 MAC any any via epair89b
### / ipv6
add 05101 allow ip6 from 2a01:AAAA:AAAA:AAAA::26 to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair49b
add 05102 allow ip6 from 2a01:AAAA:AAAA:AAAA::26 to any layer2 MAC any 02:FF:FF:FF:FF:FF via vswitch26
add 05103 allow ip6 from 2a01:AAAA:AAAA:AAAA::26 to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair89b
add 05111 allow ip6 from any to 2a01:AAAA:AAAA:AAAA::26 layer2 MAC 02:FF:FF:FF:FF:FF any via epair49b
add 05112 allow ip6 from any to 2a01:AAAA:AAAA:AAAA::26 layer2 MAC 02:FF:FF:FF:FF:FF any via vswitch26
add 05113 allow ip6 from any to 2a01:AAAA:AAAA:AAAA::26 layer2 MAC 02:FF:FF:FF:FF:FF any via epair89b
add 05151 allow ip6 from fe80::EE:EE:EEEE:890a to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair49b
add 05152 allow ip6 from fe80::EE:EE:EEEE:890a to any layer2 MAC any 02:FF:FF:FF:FF:FF via vswitch26
add 05153 allow ip6 from fe80::EE:EE:EEEE:890a to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair89b
add 05161 allow ip6 from any to fe80::EE:EE:EEEE:890a layer2 MAC 02:FF:FF:FF:FF:FF any via epair49b
add 05162 allow ip6 from any to fe80::EE:EE:EEEE:890a layer2 MAC 02:FF:FF:FF:FF:FF any via vswitch26
add 05163 allow ip6 from any to fe80::EE:EE:EEEE:890a layer2 MAC 02:FF:FF:FF:FF:FF any via epair89b
add 05197 deny ip6 from any to any layer2 MAC any any via epair49b
add 05198 deny ip6 from any to any layer2 MAC any any via vswitch26
add 05199 deny ip6 from any to any layer2 MAC any any via epair89b
#
$

That’s FreeBSD