đ§ 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.