News

This website is currently migrating all its content to the fine CMSMS engine.

Ce site est en train de migrer tout son contenu vers l'excellent moteur CMSMS.

Diese Webseite migriert derzeit sämtliche Inhalte auf CMSMS.

CMS Made Simple

7, place de l'église
30730 Montpezat
France
+334 66 63 10 32
contact@kikinovak.net

kikinovak.net
 

Bloquer l'accès à Facebook

Mon entreprise utilise une combinaison de Squid et SquidGuard pour configurer un filtrage Internet pour les écoles, les médiathèques et les entreprises. La solution fonctionne très bien, à la seule exception de Facebook.

Depuis quelque temps déjà, Facebook n'est plus disponible qu'en HTTPS, ce qui est louable en soi. Malheureusement, il est à peu près impossible de gérer les connexions sécurisées avec Squid sans sauter à travers des cerceaux en feu. Il fallait donc trouver une autre solution.

En règle générale, les entreprises aussi bien que les écoles souhaitent un blocage total des réseaux sociaux, pour des raisons plus ou moins évidentes. Dans ce cas, on peut songer à configurer le blocage au niveau du pare-feu.

Bloquer une ou plusieurs adresses IP avec iptables, rien de plus simple. Le souci, c'est que Facebook est un géant qui dispose d'une quantité impressionnante de serveurs et d'adresses IP associées dans le monde, et que ces adresses sont susceptibles d'évoluer. Bref, c'est une cible mouvante.

Pour savoir quelles sont les adresses IP diverses et variées de Facebook, on peut utiliser la commande suivante :

[kikinovak@alphamule:~] $ whois -h whois.radb.net '!gAS32934'
A953
204.15.20.0/22 69.63.176.0/20 66.220.144.0/20 66.220.144.0/21 
69.63.184.0/21 69.63.176.0/21 74.119.76.0/22 69.171.255.0/24 
173.252.64.0/18 69.171.224.0/19 69.171.224.0/20 103.4.96.0/22 
69.63.176.0/24 173.252.64.0/19 173.252.70.0/24 31.13.64.0/18 
31.13.24.0/21 66.220.152.0/21 66.220.159.0/24 69.171.239.0/24 
69.171.240.0/20 31.13.64.0/19 31.13.64.0/24 31.13.65.0/24 
31.13.67.0/24 31.13.68.0/24 31.13.69.0/24 31.13.70.0/24 
31.13.71.0/24 31.13.72.0/24 31.13.73.0/24 31.13.74.0/24 
31.13.75.0/24 31.13.76.0/24 31.13.77.0/24 31.13.96.0/19 
31.13.66.0/24 173.252.96.0/19 69.63.178.0/24 31.13.78.0/24 
31.13.79.0/24 31.13.80.0/24 31.13.82.0/24 31.13.83.0/24 
31.13.84.0/24 31.13.85.0/24 31.13.86.0/24 31.13.87.0/24 
31.13.88.0/24 31.13.89.0/24 31.13.90.0/24 31.13.91.0/24 
31.13.92.0/24 31.13.93.0/24 31.13.94.0/24 31.13.95.0/24 
69.171.253.0/24 69.63.186.0/24 31.13.81.0/24 204.15.20.0/22 
69.63.176.0/20 69.63.176.0/21 69.63.184.0/21 66.220.144.0/20
69.63.176.0/20

Comment transforrmer ce potage numérique en quelque chose de lisible que l'on puisse servir à iptables ?

[kikinovak@alphamule:~] $ whois -h whois.radb.net '!gAS32934' | tr ' ' '\n'
A953
204.15.20.0/22
69.63.176.0/20
66.220.144.0/20
66.220.144.0/21
69.63.184.0/21
69.63.176.0/21
74.119.76.0/22
69.171.255.0/24
...

On va mettre un peu d'ordre dans tout ça :

[kikinovak@alphamule:~] $ whois -h whois.radb.net '!gAS32934' | tr ' ' '\n' \
| sort -n -k1,1 -k2,2 -k3,3 -k4,4
A953
C
31.13.24.0/21
31.13.64.0/18
31.13.64.0/19
31.13.64.0/24
31.13.65.0/24
31.13.66.0/24
31.13.67.0/24
31.13.68.0/24
31.13.69.0/24
...

Débarrassons-nous des deux entrées initiales :

[kikinovak@alphamule:~] $ whois -h whois.radb.net '!gAS32934' | tr ' ' '\n' \
| sort -n -k1,1 -k2,2 -k3,3 -k4,4 | tail -n+3
31.13.24.0/21
31.13.64.0/18
31.13.64.0/19
31.13.64.0/24
31.13.65.0/24
31.13.66.0/24
31.13.67.0/24
31.13.68.0/24
31.13.69.0/24
...

 À présent, nous pouvons intégrer ce résultat dans /etc/rc.d/rc.firewall :

# Bloquer Facebook 
/usr/bin/whois -h whois.radb.net '!gAS32934' | tr ' ' '\n' \
  | sort -n -k1,1 -k2,2 -k3,3 -k4,4 | tail -n+3 > /tmp/fbips.txt
FBIPS=$(egrep -v '(^\s+$)' /tmp/fbips.txt)
for FBIP in $FBIPS; do
  iptables -A FORWARD -p tcp -s $FBIP -j DROP
done

Toutes les connexions aux serveurs de Facebook sont désormais bloquées :

[root@nestor:~] # iptables -L -v -n
...
Chain FORWARD (policy ACCEPT 12 packets, 651 bytes)
pkts bytes target prot opt in  out source         destination         
   0     0 DROP   tcp  --  *   *   31.13.24.0/21  0.0.0.0/0           
   0     0 DROP   tcp  --  *   *   31.13.64.0/18  0.0.0.0/0           
   0     0 DROP   tcp  --  *   *   31.13.64.0/19  0.0.0.0/0           
   0     0 DROP   tcp  --  *   *   31.13.64.0/24  0.0.0.0/0           
   0     0 DROP   tcp  --  *   *   31.13.65.0/24  0.0.0.0/0           
   0     0 DROP   tcp  --  *   *   31.13.66.0/24  0.0.0.0/0
...

Les utilisateurs du réseau n'ont plus qu'à se rabattre sur le solitaire ou le démineur en guise de divertissement ;o)