Présentation
Il y a quelques temps j'ai cherché un système assez simple afin de mettre en place un kill switch vpn sur un serveur linux sans interface graphique. Le but étant de couper l'accès internet à l'application Deluge si ma connexion vpn venait à s'arrêter.
Je n'ai pas trouvé de logiciels qui me convenait et j'ai fini par tomber sur un tutoriel qui se basait sur le pare-feu UFW. Sachant que la machine que j'utilise est exposée sur le web au travers du port forwarding de mon fournisseur Vpn j'ai voulu faire quelque chose de plutôt sécurisé en ouvrant juste le nécessaire. De plus cette solution à l'avantage de pouvoir définir des ouvertures spécifiques côté LAN.
Au début je cherchais donc quelque chose d'assez simple et je me suis donc retrouvé à faire tout un paquet de règles UFW . Je me suis donc dit qu'il serait intéressant de documenter ma démarche qui pourra surement ressevir pour d'autres utilisations.
Allez c'est parti.
Pré-requis
On installe ufw
# apt install ufw
Par défaut dans UFW dès qu'on crée une règle elle est générée en ipv4 et en ipv6. De mon côté je préfère désactiver l'ipv6 que je ne maitrise pas trop et je trouve que le listing des règles ufw est plus lisible sans ça. Si vous désirez faire de même il suffit de d'ajouter le bloc ci-dessous dans le fichier /etc/default/ufw
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=no
Attention désactivez l'ipv6 sur la carte réseau de votre machine puisque vous n'aurez plus de pare-feu dessus
Une fois que UFW est installé je commence toujours par autoriser le ssh sur toutes les interfaces avant de le démarrer.
# ufw allow 22/tcp
Rule added
Ensuite on peut démarrer ufw
# ufw enable
A chaque fois que je touche aux règles concernant le ssh je tente toujours une connexion au serveur depuis un second terminal histoire de vérifier que je ne me suis pas planté et que je ne perdrais pas l'accès distant sur mon serveur.
Tout au long du tuto vous pourrez consulter votre avancement de cette manière
# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
Par défaut on va tout bloquer en entrée et en sortie
# ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
# ufw default deny outgoing
Default outgoing policy changed to 'deny'
(be sure to update your rules accordingly)
Configuration des règles
A présent nous pouvons configurer nos ports. Mon application Deluge est configurée pour utiliser les ports 49152 à 65525, je ne sais pas exactement si c'est de l'UDP ou du TCP. J'autorise donc ces ports en entrant et en sortant sur les deux protocoles de mon interface VPN (tun0)
# ufw allow in on tun0 to any port 49152:65525 proto tcp
Rule added
# ufw allow out on tun0 to any port 49152:65525 proto tcp
Rule added
# ufw allow in on tun0 to any port 49152:65525 proto udp
Rule added
# ufw allow out on tun0 to any port 49152:65525 proto udp
Rule added
Concernant les ports utilisés par les applications de torrent il faut autoriser le port utilisé par le Tracker. Par exemple on peut remarquer celui de la distribution de Kali Linux est le 6969
Voici donc les ports que j'ai configuré pour mes différents trackers. On n'autorise ici que les ports sortants.
# ufw allow out on tun0 to any port 80 proto tcp
Rule added
# ufw allow out on tun0 to any port 443 proto tcp
Rule added
# ufw allow out on tun0 to any port 1337 proto udp
Rule added
# ufw allow out on tun0 to any port 6969 proto tcp
Rule added
# ufw allow out on tun0 to any port 6969 proto udp
Rule added
# ufw allow out on tun0 to any port 8080 proto tcp
Rule added
J'autorise tous les flux entrant provenant de mon réseau local sur l'interface Ethernet (eth0) (SSH / Deluge / Deluge Web)
# ufw allow in on eth0 from 10.0.0.0/24 to any port 22 proto tcp
Rule added
# ufw allow in on eth0 from 10.0.0.0/24 to any port 1987 proto tcp
Rule added
# ufw allow in on eth0 from 10.0.0.0/24 to any port 8112 proto tcp
Rule added
On autorise tous les flux entrants / sortants sur le port 1195 de l'interface Ethernet. Il va permettre à notre ordinateur d'initier la connexion au fournisseur du vpn. A adapter au port utilisé par votre Vpn bien sûr.
# ufw allow in on eth0 from any port 1195
Rule added
# ufw allow out on eth0 to any port 1195
Rule added
J'autorise le Dns sur toutes les interfaces
# ufw allow in from any to any port 53
Rule added
# ufw allow out from any to any port 53
Rule added
Et une petite dernière pour la route on autorise le serveur de temps
# sudo ufw allow ntp
Une fois que c'est ok on supprime notre 1ere règle qui autorise le SSH sur toutes les interfaces
# ufw delete 1
Au besoin, on peut autoriser le ping vers l'exterieur en editant le fichier /etc/ufw/before.rules ainsi
# allow outbound icmp
-A ufw-before-output -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A ufw-before-output -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
Voici le résultat final
# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 49152:65525/tcp on tun0 ALLOW IN Anywhere
[ 2] 49152:65525/tcp ALLOW OUT Anywhere on tun0 (out)
[ 3] 49152:65525/udp ALLOW OUT Anywhere on tun0 (out)
[ 4] 49152:65525/udp on tun0 ALLOW IN Anywhere
[ 5] 80/tcp ALLOW OUT Anywhere on tun0 (out)
[ 6] 443/tcp ALLOW OUT Anywhere on tun0 (out)
[ 7] 1337/udp ALLOW OUT Anywhere on tun0 (out)
[ 8] 6969/tcp ALLOW OUT Anywhere on tun0 (out)
[ 9] 6969/udp ALLOW OUT Anywhere on tun0 (out)
[10] 8080/tcp ALLOW OUT Anywhere on tun0 (out)
[11] 1985/tcp on eth0 ALLOW IN 10.0.0.0/24
[12] 1987/tcp on eth0 ALLOW IN 10.0.0.0/24
[13] 8112/tcp on eth0 ALLOW IN 10.0.0.0/24
[14] Anywhere on eth0 ALLOW IN 1195
[15] 1195 ALLOW OUT Anywhere on eth0 (out)
[16] 53 ALLOW OUT Anywhere (out)
[17] 53 ALLOW IN Anywhere
[18] 123/udp ALLOW OUT Anywhere (out)
Conclusion
Voilà je suis plutôt satisfait du résultat, ça tourne depuis plusieurs mois sans souci jusqu'à présent. En esperant que ça puisse servir à d'autres et vous faire économiser du temps.