A chaque nouvelle installation de serveur, ou chaque déploiement d’application, une étape importante consiste à ajouter et configurer un firewall.
Homestead est une machine virtuelle qui tourne sur Ubuntu. Ce dernier embarque un pilote pour iptable (UFW) mais je ne le trouve pas assez robuste et pas assez restrictif par défaut.
Shorewall offre cet avantage qu’il est moins verbeux que la création de base des règles Iptables.
Comment installer et configurer Shorewall
Pour simplifier les choses, j’ai créé un petit dépot, avec les fichiers de configuration de base : https://github.com/rikless/homestead-shorewall
Pour faire simple, il faut se connecter en ssh sur votre machine virtuelle et lancer :
sudo aptitude install shorewall sudo cd /etc/shorewall sudo git clone https://github.com/rikless/homestead-shorewall.git sudo cd homestead-shorewall sudo mv * ../ && cd ../ sudo rm -rf homestead-shorewall README.md sudo shorewall check sudo /etc/init.d/shorewall start
Décomposition des fichiers de configuration
interfaces : Ce fichier liste les interfaces réseaux de votre serveur. En utilisant Forge + Digital Ocean avec Homestead, par défaut, il y a 2 interfaces : eth0 et eth1 (eth1 correspond à un réseau privé, que nous allons complètement ignorer/bloquer). Il faut les identifier avec un nom plus explicite pour pouvoir réutiliser ces noms dans le fichier zones.
zones : Ce fichier est utilisé par Shorewall pour savoir quelle interface fait quoi : ipv4/ipv6/firewall
rules : Ce fichier contient toutes les règles routage et de filtrage de votre firewall. C’est ici que vous pouvez utiliser le nom que vous avez donné à chaque interface pour dire par exemple : j’autorise toutes les connexions sur le port 80 depuis le net, vers le firewall (parce qu’il agit comme un gardien, et tout le trafic passe par lui avant d’être accepté, re-routé, ou pas).
policy : Là on définit le comportement par défaut. Est-ce que l’on veut autoriser les connexions sortantes, mais refuser toutes les entrantes, pour ensuite appliquer les règles du fichier rules ? Il est important de comprendre que cette politique de fonctionnement est appliquée avant les règles du fichier rules. Dans le cas de notre dépôt, on bloque tout par défaut.
Quelles sont les règles de ce dépôt :
Comme indiqué plus haut, par défaut, le fichier policy bloque tout. Ensuite, grâce au fichier rules, on ouvre les connexions/ports/protocoles suivants :
- http
- https
- ssh (22)
- dns
- ntp
- ssl
- tcp
- udp
- les connexions vers github et bitbucket (pour pouvoir pusher)
- whois
- ping
Ouvrir un nouveau port
Pour ajouter une règle, ouvrez simplement le fichier /etc/shorewall/rules avec votre éditeur (et les privilèges super user), et ajoutez une ligne en fin de fichier (sur l’avant dernière ligne, car la dernière ne doit impérativement pas changer) :
ACCEPT $FW net tcp 5555 - - - -
ACCEPT (ou REJECT, ou DROP) les connexions qui partent du firewall, vers internet, sur le protocole TCP, sur le port 5555
Enregistrez, et lancez un shorewall check avant de redémarrer le firewall.