voxdemonix : révision n°24 (22 avril 2019 15:00:14)
Qu'est-ce que captive.apple.com
===============================
captive.apple.com est un service de _Health Check_ utilisé sur [Android](https://fr.wikipedia.org/wiki/Android) afin de connaître l'état de la connexion Wan (internet). Les smartphones/tablettes émettent de façon régulière des requêtes [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) vers http://captive.apple.com/generate_204 tandis que ce dernier répond en affichant "Success " avec le code HTTP 204.
Si la machine n'arrive pas à récupérer cette valeur en joignant le site, le smartphone ou la tablette affichera un petit point d'exclamation sur l'écran d'accueil. Il annoncera aussi dans les notifications que la connexion internet n'est pas disponible.
A noter que d'autres logiciels peuvent utiliser d'autres adresses de health check.
Incidence sur la vie privée
===========================
La machine envoie un [User-Agent](https://fr.wikipedia.org/wiki/User-agent) complet avec la version de Dalvik, le modèle de la machine, la version d'Android et la version du Build. Bref, une emprune numérique qui peut éventuellement être facile à tracker.
Voici un exemple de ce que l'on peut voir grâce à netcat ( _nc -l 127.0.0.1 8081 -v_ ). Les données sont bien entendu volontairement anonymisées :
```
root@testmachine:/# nc -l 127.0.0.1 8081 -v
Listening on [127.0.0.1] (family 0, port 8081)
Connection from [127.0.0.1] port 8081 [tcp/tproxy] accepted (family 2, sport 53078)
GET /generate_204 HTTP/1.1
Connection: Close
User-Agent: Dalvik/2.0.0 (Linux; U; Android 6.0; modèle_censuré Build/30.0.A.0.125)
Host: captive.apple.com
Accept-Encoding: gzip
X-Forwarded-For: 192.168.42.2
```
Mettre en place une alternative
===============================
#### Suivez ce tuto pour mettre en place un serveur DNS menteur : [[Tuto/HowTo] Mettre en place un serveur DNS aux noms de domaines parametrable (Rogue DNS)](https://linuxfr.org/wiki/tuto-howto-mettre-en-place-un-serveur-dns-aux-noms-de-domaines-parametrable-rogue-dns)
#### Dans les noms de domaines, renvoyez captive.apple.comles adresses suivantes vers une [adresse IP](https://fr.wikipedia.org/wiki/Adresse_ip) disponible sur votre réseau local (LAN).
```
captive.apple.com
connectivitycheck.gstatic.com
detectportal.firefox.com
```
#### Sur cette [adresse IP](https://fr.wikipedia.org/wiki/Adresse_ip) Lan, utilisez un serveur web ou netcat afin de renvoyer un http 204 avec "Success" dans le contenu. Le plus simple étant d'utiliser [ncat](https://nmap.org/ncat/guide/ncat-usage.html) avec une commande du type :
```
ncat -c "echo 'HTTP/1.0 204 OK\n\n<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>'" -k -lp 80
```
Pour ce faire nous allons utiliser un script qui checkera le réseau et lancera ncat ou non :
1. Téléchargez [ce script de lancement](https://gitlab.com/voxdemonix/divers-script/blob/master/captive_alternative.bash), rendez-le exécutable puis rangez-le où vous souhaitez. Par défaut le script écoute sur 0.0.0.0:8081, éditez-le si besoin ;)
```
wget https://gitlab.com/voxdemonix/divers-script/raw/master/captive_alternative.bash && sudo chmod +x ./captive_alternative.bash
mv ./captive_alternative.bash /opt/scripts/
```
* [ncat](https://nmap.org/ncat/) et screen doivent être installé ( _sudo apt-get install -y screen nmap_ )
1. Éditez cron si possible avec un utilisateur disposant de peu de droit (root n'étant nécessaire que pour les ports les plus communs, situé sous les 1000 comme 80 et 443 entre autre)
```
crontab -e
```
1. Et ajoutez la ligne suivante en l'adaptant éventuellement à vos envies :
```
@reboot ( sleep 15 ; /opt/scripts/captive_alternative.bash )
*/10 * * * * /opt/scripts/captive_alternative.bash
```
* /opt/scripts/ => le chemin ou vous avez rangé le script
Si vous utilisez un _Frontend_ Haproxy, voici la config _Backend_ à insérer
```
backend fake_captive_portail
mode http
balance roundrobin
cookie SERVERID insert indirect nocache
server LocaleLoop 127.0.0.1:8081 cookie 127.0.0.1
```