Une appliance pour 100 € avec Raspberry Pi – Part 3

Pour la troisième partie de notre série d’articles « Itinérance & Sécurité : Une appliance pour 100€ avec Raspberry Pi » dans laquelle nous sécuriserons la connexion via notre appliance avec OpenVPN, Squid, SquidGuard et SquidClamAV.

Mise en place du Client OpenVPN

La mise en place d’une connexion VPN sur une appliance portative vous permet principalement de créer un lien sécurisé avec le réseau de votre entreprise et ainsi d’accéder aux applications internes à ce réseau sans risques.

L’installation du client OpenVPN se fait à partir d’une simple commande apt-get. Ce qui nous intéresse ici c’est la configuration qui se sépare en deux étapes : l’importation du certificat et de la clef d’authentification client ainsi que la mise en place du fichier de configuration de la connexion.

Pour la première partie on récupère les fichiers client.crt et client.key par sftp sur le serveur et on les recopie dans un répertoire où l’utilisateur qui exécute OpenVPN a des droits en écriture sur le Raspberry Pi. Bien sûr au préalable ces fichiers doivent être générés par le serveur via OpenSSL mais nous décidons de passer cette étape qui correspond plutôt à l’installation d’un serveur OpenVPN.

Il faut alors éditer le fichier ‘/etc/openvpn/client.conf’ dont voici les valeurs à définir :

client
dev tun
proto tcp
remote mon-server 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca /usr/local/keys/ca.crt
cert /usr/local/keys/client.crt
key /usr/local/keys/client.key
tls-auth /usr/local/keys/ta.key 1
ns-cert-type server
comp-lzo
verb 4
mute 10

Ce fichier fait simplement valeur d’exemple mais respecte nos exigences en matière de sécurité et de fonctionnement. La mise en place d’un VPN sur un port standard tel que le port 443 permet par exemple de passer à travers la plupart des pare-feux qui bloquent les ports de VPN classiques mais pas les ports web, ce qui permet donc d’utiliser l’appliance portative dans la plupart des situations.

Sachez qu’actuellement, le VPN n’est pas configuré pour fonctionner nativement et que si on souhaite initialiser ou stopper la connexion il est nécessaire de se connecter en SSH et de le faire manuellement.

Proxy avec Squid

La première utilité de Squid est la mise en place du cache pour fournir à l’utilisateur une navigation rapide et agréable. Sa seconde utilité est d’implémenter les services SquidGuard et SquidClamAV (avec c-icap) qui feront office, respectivement, de filtre d’URL et de filtre d’application. Nous avons aussi pour habitude de configurer nos proxy en mode transparent pour qu’il n’y ait aucune configuration à faire côté utilisateur et que proxy récupère les requêtes tout seul.

Les repositories de Debian contiennent le paquet squid, on utilise donc le gestionnaire de paquet apt-get pour installer le proxy et de la même manière que pour OpenVPN, on va se pencher immédiatement sur la configuration.

Toutes les configurations se trouvent dans ‘/etc/squid/squid.conf’, dans ce seul fichier de configuration on trouve la configuration par défaut qui est déjà assez dense. Voici les lignes à modifier pour la mise en place du cache et du proxy transparent. (Le répertoire de cache doit appartenir à squid:squid)

http_port 10.8.0.1:8080 transparent
cache_dir ufs /répertoire/de/cache 1000 16 256

Il faut ensuite rediriger toute les requêtes du port 80 vers le port 8080. Le proxy étant aussi la passerelle, les requêtes web passeront obligatoirement dans squid. Pour faire une redirection avant routage, on utilise les commandes suivantes.

iptables -t nat -F PREROUTING
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Vous pouvez vérifier le fonctionnement du proxy en regardant les appels dans ‘/var/log/squid/access.log’

Filtre d’URL et d’application avec SquidGuard et SquidClamAV

Maintenant que notre proxy transparent est en place, nous allons passer à la dernière étape. La mise en place de filtre d’URL et d’application qui vont bloquer toute connexion à des sites référencés comme malveillants ou dont le contenu est malveillant.

Commençons par SquidGuard. Tout comme Squid, il est disponible sur les repositories Debian et ne nécessite qu’une commande apt-get pour son installation. Sa configuration se fait dans deux fichiers de configurations, le fichier de Squid ‘/etc/squid/squid.conf’ et un fichier spécifiant les bases de données de blacklist à utiliser ‘/etc/squid/squidguard.conf ‘.

Voici les lignes à modifier dans squid.conf :

redirect_program /usr/bin/squidGuard -c /etc/squid/squidguard.conf
redirect_children 5

On récupère les blacklists et on les place dans le bon répertoire :

# cd /var/lib/squidguard/db/
# wget http://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz
# tar xvzf blacklists.tar.gz
# mv blacklists/* ./

Puis on crée le fichier de configuration ‘/etc/squid/squidguard.conf’ pour y définir les listes qu’on va compiler.

# vi /etc/squid/squidguard.conf

Enfin on lance la commande pour compiler les bases :

# squidGuard -C all

Cette commande peut prendre un certain temps. Une fois terminé, vous pouvez tester en appelant un site interdit, par exemple un site pornographique.

Pour installer SquidClamAV, on a besoin de l’antivirus clamav disponible sur les repository debian via apt-get, et de c-icap qui fait le lien entre l’antivirus et le service de proxy. Le seul moyen d’installer c-icap est de le compiler à la main, voici les étapes détaillées de ce procédé.

# wget http://sourceforge.net/projects/c-icap/files/c-icap/0.3.x/c_icap-0.3.4.tar.gz
# tar xvzf c_icap-0.3.4.tar.gz
# cd c_icap-0.3.4
# ./configure
# make
# make install
# cp /usr/local/etc/c-icap.conf /etc

On édite ensuite le fichier de configuration et le fichier de démarrage du service.

# vi /etc/c-icap.conf
Service squidclamav squidclamav.so
ServerLog /var/log/squidclam.log
# vi /etc/rc.d/init.d/c-icap

Puis il faut installer le service SquidClamAV manuellement de la manière suivante.

# wget http://downloads.sourceforge.net/project/squidclamav/squidclamav/6.11/squidclamav-6.11.tar.gz
# cd squidclamav-6.11
# ./configure
# make
# make install

Pour la configuration, on édite le fichier créé par la compilation : /etc/squidclamav.conf et le fichier de configuration de squid.

# vi /etc/squidclamav.conf
redirect http://www.ovh.com/fr/images/hosting/astuce_htaccess/interdit.jpg
clamd_local /var/run/clamav/clamd.sock
# vi /etc/squid/squid.conf
icap_enable on
icap_send_client_ip on
icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_resp allow all

Vous pouvez vérifier le fonctionnement via les fichiers de logs de squid et le fichier ‘/var/log/squidclamav.log’ défini dans le fichier de configuration de c-icap.

Améliorations de notre appliance Raspberry…

Pour conclure cette série de trois articles, nous vous proposons de faire un bilan des inconvénients et des améliorations possibles de l’appliance.

Dans l’état actuel, l’appliance n’est pas adaptée pour un utilisateur lambda puisqu’il est nécessaire de se connecter en SSH pour activer les services suivants :

  • VPN
  • Wi-Fi
  • Mise à jour
  • Whitelist du proxy

Ceci rend les modifications ou activations de ces services plus longues et moins conviviales. Pour certains de ces services ont peut imaginer l’installation d’une interface web d’administration comme Webmin mais pour pouvoir tout administrer à distance il faudrait envisager le développement d’une application web d’administration de la plateforme raspberry complète.

La seconde chose qu’on pourrait reprocher à l’appliance raspberry dans son état actuel est la démultiplication des composants qui d’une part n’est pas très esthétique mais en plus pas très pratique car on risque d’en perdre des éléments. Pour solutionner cela on pourrait envisager de créer un bloc dédié sur mesure pour positionner les éléments et ne plus avoir a les bouger de leurs emplacement.