🖧 RĂ©seau moderne sous linux: 3. Pare-feu et redirection de port

| ~ 3 mins | 528 mots

Dans cet article, je vais modifier la configuration routeur dĂ©jĂ  rĂ©aliser dans l’article prĂ©cĂ©dent en ajoutant un pare-feu et des redirections de port pour d’éventuels serveurs.

La logique de pare-feu sera simple : On interdit par dĂ©faut les connection entrante. Pour la raison de ce choix, voir l’article que j’ai fait sur l’utilitĂ© des pare-feu.

Plan

On aurait donc quelque-chose comme ça :

routeur avec pare-feu et redirection de port

Vous pouvez noter que l’ancienne version du protocole internet rend une fois de plus les choses complexes.

Pour le rĂ©seau, nous allons utilisez le pare-feu foomuuri qui est une surcouche sur nftables, dont je trouve la simplicitĂ© d’écriture des rĂšgles intĂ©ressantes.

RĂšgle de base du Pare-feu

Foomuuri est relativement facile Ă  utiliser, il faut dĂ©finir des zones et les interface associĂ©s :

# /etc/foomuuri/1_zone.conf
zone {
    localhost
    public wan
    internal lan
}

On peut dĂ©finir ensuite les rĂšgles. Dans l’exemple ici, on dĂ©cide d’ĂȘtre relativement laxiste sur ce qu’on autorise :

Un truc trĂšs important Ă  savoir, la rĂšgle “accept” de base de foomuuri n’autorise pas le traffic broadcast et multicast, il faut donc penser Ă  l’autoriser ou autoriser les protocoles associĂ©s.

# /etc/foomuuri/2_base.conf
macro {
    server1_ipv6 2001:db8::2
    server2_ipv6 2001:db8::3
}

# Allow all and explicit dhcp (to allow broadcast/multicast)
public-localhost {
    dhcpv6-client
    dhcp-client
    accept
}
localhost-public{
    dhcpv6-server
    dhcp-server
    accept
}

# Allow all in internal network
localhost-internal {
    broadcast
    multicast
    accept

}
internal-localhost {
    broadcast
    multicast
    accept
}

public-internal {
    ct_status dnat
    daddr server1_ipv6 server2_ipv6
    drop log
}
internal-public {
    # extra-safety to avoid ipv4 local traffic to be routed on the internet
    daddr 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 drop
    accept
}

On remarque que :

NAT 44

Nous n’avons pas configurĂ© le NAT pour l’ancienne version du protocole IP (IPv4) donc pour l’instant seul le masquerade cĂŽtĂ© networkd (voir le prĂ©cĂ©dent article est prĂ©sent, ce qui signifie un NAT classique sans rĂšgles spĂ©cifiques.

Pour commencer, nous allons laisser la gestion du NAT uniquement au pare-feu foomuuri au lieu de networkd, cela Ă©vitera les confusions :

# /etc/systemd/lan.network.d/ipv4.conf
[Network]
Address=192.168.1.1/24
DHCPServer=yes
# note: you may want to do masquerade by you firewall rule instead
- IPMasquerade=yes
+ # IPMasquerade=yes
IPv4Forwarding=yes

On peut ainsi dĂ©finir le nat IPv4 avec foomuuri, dans la configuration d’exemple ici, on imagine que le serveur numĂ©ro 1 est un serveur web http/https et le serveur 2 Ă  un service vpn, mais bien sĂ»r, il faut ajuster selon votre cas.

# /etc/foomuuri/3_nat.conf
macro {
    server1_ipv4 192.168.1.2
    server2_ipv4 192.168.1.3
    any_ipv4 0.0.0.0/0
}

snat {
    saddr 192.168.1.0/24 oifname wan masquerade
}
dnat {
    saddr any_ipv4 iifname wan http dnat server1_ipv4
    saddr any_ipv4 iifname wan https dnat server1_ipv4
    saddr any_ipv4 iifname wan wireguard dnat server2_ipv4
}

VoilĂ . Vous avez maintenant un routeur linux correct en mode double-pile (IPv6 et l’IP historique v4). Dans le prochain article, je verrais comment on peut rĂ©duire au maximum la surface d’usage d’IPv4 Ă  partir de cette configuration.