Quitter le forum et retourner au site

Une passerelle en RPi...

Partie réservée à des ateliers précis.
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 719
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

Une passerelle en RPi...

Message par le Manchot Masqué »

Votre montage de vacances, si vous l'acceptez, sera de faire une petite passerelle avec pare-feu à placer derrière votre box internet, pour éviter à votre box de venir renifler en parmanence votre réseau interne, nos FAI n'étant évidemment pas curieux du tout de ce que vous utilisez, du nombre d'utilisateurs dans le foyer, des appareils qui viennent se connecter, etc.

Matériel requis : RPi3 B+ avec une adaptateur réseau USB/RJ45 externe (UGREEN adaptateur Gigabit USB 3.0 vers RJ45 - 19,99€) + carte SD 32Go + écran VGA connecté avec un adaptateur HDMI/VGA externe

1 / Installation de Raspberry Pi OS
On va sur https://www.raspberrypi.com/software - on récupére le Raspberry Pi Imager qui permet de télécharger une image en ligne de la distribution, et de l'envoyer directement sur la carte SD 32 Go qui doit bien entendu être connectée.

Code : Tout sélectionner

sudo bash
dpkg -i Téléchargements/imager_X.Y.Z_amd64.deb
puis on lance l'imager via le menu de MATE Accessoires / Imager

Nous avons choisi l'image en 64 bits, en activant tout de suite le serveur SSH dans les options proposées, avec un accès client WiFi à la borne dans la salle de réunion de la Langmatt qui nous accueille dans nos réunions infos.

Une fois la carte prête, on la met dans le RPi, et on laisse se faire le démarrage...

2/ Configuration du réseau au démarrage
Installation du paquet bridge-utils
On ajoute dans le fichier /etc/network/interfaces les lignes :

Code : Tout sélectionner

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto eth1
allow-hotplug eth1
iface eth1 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual

auto br0
iface br0 inet static
	address 192.168.200.1/24
	bridge_ports eth1 wlan0
	bridge_stp off
	bridge_fd 0
	bridge_maxwait 0
Dans notre cas, l'interface eth0 sera donc l'interface WAN qui pointe vers la box internet.
Le bridge br0 sera quant à lui composé des interfaces wlan0 et eth1 destinées à nos usagers locaux.

On redémarre le réseau et on vérifie la config

Code : Tout sélectionner

# service networking restart
ip a
brctl show
La dernière ligne doit montrer que les deux interfaces wlan0 et eth1 sont bien attachées au pont réseau.

3 / installation du serveur DNS et des deux zones (directe et inverse)

Code : Tout sélectionner

# apt install bind9
On ajoute dans /etc/named.conf.local:

Code : Tout sélectionner

acl "goodclients" {
    192.168.200.0/24;
    localhost;
};

zone "toto.lan" {
    type master;
    file "zone.toto.lan";
    allow-query { "goodclients"; };
    allow-update { "none"; };
    notify no;
};

zone "200.168.192.in-addr.arpa" {
    type master;
    file "zone.toto.lan.rev";
    allow-query { "goodclients"; };
    allow-update { "none"; };
    notify no;
};
Et on ajoute les deux fichiers suivants :

Code : Tout sélectionner

# cat /etc/bind/zone.toto.lan
$TTL 3D
@       IN      SOA     parefeu.toto.lan. root.toto.lan. (
                        202207301       ; serial, todays date + todays serial # 
                        8H              ; refresh, seconds
                        2H              ; retry, seconds
                        4W              ; expire, seconds
                        1D )            ; minimum, seconds
;
                NS      parefeu              ; Inet Address of name server
;
ns              A       192.168.200.1
parefeu              A       192.168.200.1
# cat /etc/bind/zone.toto.lan.rev 
$TTL 3D
@       IN      SOA     parefeu.toto.lan. root.toto.lan. (
                        202207301 ; Serial, todays date + todays serial
                        8H      ; Refresh
                        2H      ; Retry
                        4W      ; Expire
                        1D)     ; Minimum TTL
                NS      parefeu.toto.lan.
1               PTR     parefeu.toto.lan.
On modifie le fichier de démarrage de bind en rajoutant l'option -4 pour accepter uniquement le trafic IPv4:

Code : Tout sélectionner

# cat /etc/default/named 
#
# run resolvconf?
RESOLVCONF=no

# startup options for the server
OPTIONS="-u bind -4"
Enfin, on appelle systemd pour l'activation au démrrage:

Code : Tout sélectionner

# systemctl enable named
# systemctl start named
4 / désactivation de l'IPv6 au démarrage

Par sécurité, on vire l'IPv6 qui ne sert à rien dans un réseau local familial... Sinon à passer les pare-feux dans le dos des usagers ! On ajouter l'option ipv6.disable=1 dans les options de démarrage du noyau :

Code : Tout sélectionner

 # vi /boot/cmdline.txt
console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles ipv6.disable=1
5 / installation du serveur DHCP

Code : Tout sélectionner

# apt install isc-dhcp-server
et configuration

Code : Tout sélectionner

# cat /etc/dhcp/dhcpd.conf
ddns-update-style none;
subnet 192.168.200.0 netmask 255.255.255.0 {
  range 192.168.200.10 192.168.200.30;
  option domain-name-servers 192.168.200.1;
  option domain-name "toto.lan";
  option routers 192.168.200.1;
  default-lease-time 600;
  max-lease-time 7200;
}
Réglage au démarrage (on indique le fichier de configuration à utiliser et l'interface d'écoute - ici le bridge br0) :

Code : Tout sélectionner

# cat /etc/default/isc-dhcp-server 
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
#	Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#	Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="br0"
INTERFACESv6=""
Enfin, on appelle systemd pour l'activation au démarrage :

Code : Tout sélectionner

# systemctl enable isc-dhcp-server
# systemctl start isc-dhcp-server
6 / Configuration du point d'accès WiFi

Code : Tout sélectionner

# apt install hostapd
puis configuration :

Code : Tout sélectionner

# cat /etc/hostapd/hostapd.conf 
interface=wlan0
driver=nl80211
ssid=MONRESEAUWIFICLEPLUSBO
hw_mode=g
bridge=br0
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=totototo
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Vérification du démarrage en console:

Code : Tout sélectionner

# hostapd -d  /etc/hostapd/hostapd.conf
Si le terminale ne rend pas la main, c'est que c'est bon.
Activation au démarrage :

Code : Tout sélectionner

# systemctl enable hostapd
# systemctl start hostapd
7 / Autorisation du NAT (autorisation de la translation d'adrese)
Dans /etc/sysctl.conf, on décommente :

Code : Tout sélectionner

net.ipv4.ip_forward=1
et on recharge la configuration

Code : Tout sélectionner

# sysctl -p
8 / Installation du pare-feu

Code : Tout sélectionner

# apt install shorewall
et configuration :

Code : Tout sélectionner

# cp /usr/share/doc/shorewall/examples/two-interfaces/* /etc/shorewall
# rm /etc/shorewall/*.gz

Code : Tout sélectionner

# cat /etc/shorewall/interfaces 

# Shorewall - Sample Interfaces File for two-interface configuration.
# Copyright (C) 2006-2017 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-interfaces"
###############################################################################
?FORMAT 2
###############################################################################
#ZONE	INTERFACE	OPTIONS
net     NET_IF          dhcp,tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0,physical=eth0
loc     LOC_IF          tcpflags,nosmurfs,routefilter,logmartians,physical=br0

Code : Tout sélectionner

# cat /etc/shorewall/policy 

# Shorewall - Sample Policy File for two-interface configuration.
# Copyright (C) 2006-2015 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-policy"
###############################################################################
#SOURCE	DEST		POLICY		LOGLEVEL	RATE	CONNLIMIT

loc	net		ACCEPT
loc	$FW		ACCEPT
$FW	all		ACCEPT
net	all		DROP		$LOG_LEVEL
# THE FOLOWING POLICY MUST BE LAST
all	all		REJECT		$LOG_LEVEL

Code : Tout sélectionner

# cat /etc/shorewall/snat 

# Shorewall - Sample SNAT/Masqueradee File for two-interface configuration.
# Copyright (C) 2006-2017 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-snat"
#
# See http://shorewall.net/manpages/shorewall-snat.html for more information
###########################################################################################################################################
#ACTION			SOURCE			DEST            PROTO	PORT	IPSEC	MARK	USER	SWITCH	ORIGDEST	PROBABILITY
#
# Rules generated from masq file /home/teastep/shorewall/trunk/Shorewall/Samples/two-interfaces/masq by Shorewall 5.0.13-RC1 - Sat Oct 15 11:41:40 PDT 2016
#
MASQUERADE		192.168.200.0/24	NET_IF
puis on lance le firewall :

Code : Tout sélectionner

# service shorewall restart
On vérifie la présence de règles iptables avec :

Code : Tout sélectionner

# iptables -L
Si tout est ok, dans /etc/default/shorewall, on met le startup à 1 :

Code : Tout sélectionner

startup=1
puis on active le service au démarrage :

Code : Tout sélectionner

systemctl enable shorewall
Répondre