Itinérance & Sécurité : une appliance pour 100 € avec Raspberry Pi – Part 2

Dans cette deuxième partie, nous allons voir les bases de la mise en place de la passerelle. Au menu, DHCP, DNS et Shorewall…

Choix et installation du système d’exploitation

Le choix du système d’exploitation est la première problématique posé par cet article. Le site de Raspberry propose en tout 7 systèmes d’exploitation :

  • NOOBS : Le système que l’organisation Raspberry définit comme un système pour débutant
  • Raspbian : Dérivé de la distribution GNU/Linux Debian Wheezy
  • Pidora : Dérivé de la distribution GNU/Linux Fedora version 18
  • OpenELEC : Un système d’exploitation développer pour faire fonctionner le media centre XMBC
  • RaspBMC : Dérivé de la distribution GNU/Linux Debian et développer pour l’utilisation du media centre XMBC
  • RiscOS : Système d’exploitation développé pour les processeurs ARM par l’équipe aillant créé le premier ARM
  • Arch Linux : Distribution GNU/Linux Arch Linux

Parmi ces systèmes, on peut rapidement exclure NOOBS, OpenELEC et RaspBMC qui, par définition ne conviennent pas à une security appliance. RiscOS et Arch Linux étant deux systèmes très peu supporté nous les excluons également. Nous hésitons alors entre Raspbian et Pidora. Pidora étant initialement une distribution orienté poste client et rendant difficile la désactivation de la GUI nous nous tournons donc vers Raspbian.

Afin de réaliser l’installation du système nous utilisons la carte SD. La première chose à faire est de préparer la carte SD avec l’utilitaire Win32Disk et de l’image Raspbian fraichement téléchargé sur le site de Raspberry. Cette étape consiste à sélectionner l’image dans l’utilitaire et à l’écrire sur la carte SD. On insère ensuite la carte SD dans le Raspberry Pi, qu’on alimente pour le démarrer.

Nous ne nous étendrons pas sur les détails de la configuration basique et la personnalisation du système. Sachez que nous avons installé un système sans interface graphique, avec un utilisateur sans privilèges et un compte root.

Configuration des interfaces, DHCP et DNS local

Dans l’optique de simplifier la vie de l’utilisateur, nous allons mettre en place un serveur DHCP qui attribuera automatique une adresse IP au poste client dans un réseau propre à l’appliance. Pour cet article, nous avons choisis l’adresse réseau 10.0.0.0/24, mais celui-ci peut être à modifier pour éviter d’avoir le même adressage réseau que celui relié au Raspberry. De plus, pour avoir une résolution de nom fonctionnel et permettant le ré-adressage local, nous avons choisit d’installer un server DNS local BIND qui sera redistribuer au poste client via le DHCP.

Ci-contre la configuration des interfaces :

#/etc/network/interfaces
auto lo eth0 eth1
allow-hotplug wlan0
iface lo inet loopback
iface eth1 inet dhcp
iface eth0 inet static
   address 10.0.0.1
   netmask 255.255.255.0
   broadcast 10.0.0.255
   network 10.0.0.0
iface wlan0 inet manual
   wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Pour des raisons de sécurité on stocke la configuration de l’interface wifi dans un autre fichier de configuration :

#/etc/wpa_supplicant/wpa_supplicant.conf   
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev   
update_config=1   
network={   
   ssid=/*ssid*/   
   proto=RSN   
   key_mgmt=WPA-PSK   
   pairwise=CCMP TKIP   
   group=CCMP TKIP   
   psk=/*clef d’authentification*/   
}

C’est ce fichier qu’il faudra modifier pour que le raspberry ait accès à un réseau wifi.

La configuration de BIND :

#/etc/named/named.conf      
options {      
   listen-on port 53 {      
      localhost;      
      127.0.0.1;      
      10.0.0.1;      
   };      
   allow-query     {      
      localhost;      
      127.0.0.1;      
      10.0.0.0/24;      
   };      
   allow-query-cache {      
      localhost;      
      127.0.0.1;      
      10.0.0.0/24;      
   };      
   recursion yes;      
   dnssec-enable no;      
   dnssec-validation no;      
   dnssec-lookaside auto;      
   managed-keys-directory "/var/named/dynamic";      
};      
zone "." IN {      
   type hint;      
   file "/etc/named.ca";      
};      
include "/etc/named.rfc1912.zones";      
include "/etc/named.root.key";

On applique une configuration de relais DNS avec le cache activé pour que dans un premier temps la requête soit redirigé vers les serveurs racines puis mise en cache sur le serveur local de manière à ce qu’il donne une réponse plus rapide.

Puis la configuration du DHCP :

#/etc/dhcp/dhcpd.conf
ddns-update-style              none;
default-lease-time             86400;
max-lease-time                 86400;
option subnet-mask             255.255.255.0;
option broadcast-address       10.0.0.255;
option routers                 10.0.0.1;
option domain-name-servers     10.0.0.1;
subnet 10.0.0.0 netmask 255.255.255.0 {
   range 10.0.0.10 10.0.0.20;
}

Configuration de Shorewall

Le service Shorewall nous permet de configurer l’ip masquerade, ainsi que le firewall de Netfilter. On commence par effectuer la configuration du masquerade :

#/etc/shorewall/masq
eth1     eth0
wlan0    eth0

La configuration de pare-feu via shorewall prend en compte 4 fichiers :

  • Le fichier zones définit les différentes zones du pare-feu. fw désigne l’hôte local, net le réseau externe et loc le réseau connecté au poste client.
#/etc/shorewall/zones
#                  ZONES
#
#           net : Zone connectée au reste du réseau
#           loc : Zone connectée au PC
#           wifi : Zone wifi
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # #
fw       firewall
net      ipv4
loc      ipv4
  • Le fichier interfaces fait correspondre les zones avec des interfaces réseaux.
#/etc/shorewall/interfaces
#                   INTERFACES
#
#        eth0 : Interface connectée au réseau
#           (Interface du Raspberry)
#        eth1 : Interface connectée à l'équipement sécurisé
#           (Dongle USB Eth)
#         wlan0: Interface wifi (Dongle wifi)
#
# # # # # # # # # # # # # # # # # # # # # # # # # #
loc       eth0      detect
net       eth1      detect       dhcp
net       wlan0     detect       dhcp
  • Le fichier policy désigne les règles par défaut. En général, nous conseillons de dropper tout par défaut.
#/etc/shorewall/policy
loc       all       DROP      info
net       all       DROP      info
fw        all       DROP      info
all       all       REJECT    info
  • On fait ensuite une configuration plus particulière dans le fichier de règles en ouvrant exclusivement les ports qui nous sont utiles :
#                               RULES
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # #
#
ACCEPT           loc       net       tcp       443
ACCEPT           loc       net       tcp       143
ACCEPT           loc       net       tcp       993
ACCEPT           loc       net       tcp       25
ACCEPT           loc       net       tcp       465
ACCEPT           loc       net       tcp       110
ACCEPT           loc       net       tcp       995
ACCEPT           loc       net       icmp      echo-request
#
ACCEPT           loc       fw        tcp       53
ACCEPT           loc       fw        udp       53
ACCEPT           loc       fw        tcp       10000
ACCEPT           loc       fw        tcp       22
ACCEPT           loc       fw        icmp      echo-request
#
ACCEPT           fw        net       tcp       53
ACCEPT           fw        net       udp       53
ACCEPT           fw        net       tcp       80
ACCEPT           fw        net       tcp       443
ACCEPT           fw        net       icmp      echo-request
NTP(ACCEPT)      fw        net
# REDIRECTION DES REQ HTTP VERS SQUID
REDIRECT         loc       8080      tcp       www

Conclusion

Nous venons de poser les bases de la passerelle vers le Web sur RaspBian. A noter, qu’à l’aide de la passerelle DNS, vous pouvez préciser des URL spécifiques à votre entreprise, et cela sans passer par un DNS publique. Dans la troisième partie, nous verrons la sécurisation des flux vers internet et l’entreprise à l’aide du proxy Squid couplé avec ClamAV, et d’OpenVPN.