Sur mon ordinateur de poche Android, j'utilise le pare-feu Android AFWall+ (en fait, c'est juste une interface graphique pour le pare-feu natif du noyau Linux, Netfilter).
Ça me permet de contrôler quelles applications peuvent émettre et sur quel(s) réseau(x) (Wi-Fi, 4G, VPN) elles le peuvent.
J'utilise également un VPN de confiance (avec le logiciel Android OpenVPN For Android qui n'est pas l'implémentation officielle du projet OpenVPN) afin de me protéger des craderies de mon opérateur mobile lorsque je suis en 4G (on a vu Bouygues Telecom modifier les réponses DNS, on a vu SFR modifier les réponses web, etc.) et des points d'accès Wi-Fi malveillants (notamment ceux tenus par des potes farceurs). Mais également pour ne pas dévoiler ma vie privée à des gens en qui je n'ai pas confiance (opérateurs mobiles, fournisseurs de Wi-Fi ouverts, etc.).
Lorsqu'on utilise un VPN dans un tel contexte, le minimum est d'interdire tout trafic qui voudrait sortir en dehors du VPN, sauf le VPN lui-même et DHCP.
De même, lorsqu'un VPN est établi, il convient d'interdire tout trafic DNS sortant vers les serveurs DNS récursifs de l'opérateur mobile / fournisseur Wi-Fi, car certaines applications les utilisent au lieu de ceux proposés par le service de VPN, ce qui fait fuiter une partie de la vie privée.
AFWall+ permet uniquement d'autoriser / bloquer des logiciels. Le premier besoin est satisfait (bloquer tout en sortie, autoriser quelques logiciels via le VPN), pas le deuxième. Pour le satisfaire, il faut utiliser des scripts personnalisés.
On peut saisir un script perso directement dans l'interface d'AFWall+, sauf que c'est pénible et long. Je choisis donc de l'écrire dans un fichier séparé. Voici mon script pour bloquer le trafic à destination des serveurs DNS récursifs de Numericable :
#!/system/bin/sh
# Necessary at the beginning of each script!
IPTABLES=/system/bin/iptables
# Now add your own rules...
$IPTABLES -I "afwall-vpn" -d 89.2.0.1/32 -j "afwall-reject"
$IPTABLES -I "afwall-vpn" -d 89.2.0.2/32 -j "afwall-reject"
# Don't
# exit 0
Quelques commentaires :
su
) Android (j'utilise le classique Terminal Emulator pour y accéder) pour voir les chaînes disponibles à un instant T ;set -e
(voir ici) ne semble pas être disponible. Dommage. Plus surprenant, un « exit 0 » en fin de script pour signifier que tout s'est bien passé conduit AFWall+ à déclarer que l'application des règles de filtrage a échoué…
Avec le gestionnaire de fichiers Android Ghost commander, je déplace ce script depuis ma carte SD vers le dossier /storage/emulated/0/afwall
. Pourquoi ? 1) Je n'ai pas trouvé de dossier nommé à peu près afwall dans /data/data ; 2) C'est ici qu'AFWall+ stocke ses exportations de règles (menu -> « Export ») donc, c'est lui qui a créé le dossier, donc, en l'utilisant, je me prémunis de problèmes de droits d'accès.
Plutôt qu'une carte SD, j'aurais pu utiliser adb
, oui.
Ne pas laisser ce script sur la carte SD, car, si elle n'est pas insérée lors d'un démarrage de l'ordiphone, alors les règles de filtrage ne seront pas appliquées, donc le pare-feu sera désactivé.
Dans le menu d'AFWall+ -> « Set custom script » -> « Enter custom script below », je saisis . /storage/emulated/0/afwall/<nom_script>
. Attention au point au début !
Menu AFWall+ -> « Apply ». C'est terminé. \o/