đ§ RĂ©seau moderne sous linux: 3. Pare-feu et redirection de port
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 :
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 :
- On autorise le traffic entrant depuis l’internet vers le rĂ©seau local que pour ce qu’est en dnat ou les serveur1 et serveur2 en ipv6.
- On autorise tout dans le rĂ©seau local (pas vraiment de raison d’interdire des choses).
- On accepte le dhcp/dhcpv6 depuis l’internet vers le routeur pour pouvoir rĂ©cupĂ©rer nos ip locales.
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.