Abbiamo molti server Linux in diverse co-location in tutto il mondo. Di norma, queste macchine in genere non dovrebbero essere in grado di accedere a Internet. A seconda dell'ubicazione e del ruolo, alcuni siti potrebbero avere un accesso a Internet molto limitato (ad esempio, il rifiuto predefinito con uno o due siti elencati in bianco). Quindi, a seconda delle circostanze, il criterio di non-Internet è configurato o dalle regole di routing a livello di switch o da un dispositivo di filtro (ad esempio Untangle).
Un team è responsabile della configurazione della rete per policy e un team separato (io) è responsabile del controllo periodico per assicurarsi che le cose funzionino come previsto.
La domanda, quindi, è come esaustivamente controllare che Internet non possa essere raggiunto? Il metodo ingenuo è semplicemente "ping google.com". Ma cosa succede se Internet è disponibile, ma DNS semplicemente non funziona? OK, quindi esegui il ping di un IP pubblico noto, ad es. "ping 8.8.4.4". Ma cosa succede se ICMP viene filtrato, ma ad es. Le connessioni TCP sono ancora permesse? Cosa succede se vengono filtrati TCP e UDP, ma non l'IP raw? Che cosa succede se il team di rete si è lasciato un piccolo buco (non necessariamente per intento malevolo, errore forse onesto, forse bug nel firewall o switch)?
Ovviamente, il ping è un bel controllo quando vuoi l'accesso a Internet, ma è terribilmente insufficiente per garantire che Internet sia completamente bloccato.
L'approccio ideale sarebbe provare tutte le possibili combinazioni di
- Port
- IP pubblico
- Protocollo
Ma non è pratico. Ma sto cercando un ragionevole compromesso tra questo e un ingenuo test del ping.
Il mio pensiero era di provare ad usare nmap per cercare eventuali porte aperte su IP pubblici che dovrebbero essere generalmente in ordine --- server DNS pubblici. Quindi, ad esempio (8.8.4.4 è un server DNS pubblico):
# nmap -v -v -v -T3 -sS 8.8.4.4
Starting Nmap 6.40 ( http://nmap.org ) at 2014-03-18 10:24 CDT
Initiating Ping Scan at 10:24
Scanning 8.8.4.4 [4 ports]
Completed Ping Scan at 10:24, 0.01s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:24
Completed Parallel DNS resolution of 1 host. at 10:24, 13.00s elapsed
DNS resolution of 1 IPs took 13.00s. Mode: Async [#: 2, OK: 0, NX: 0, DR: 1, SF: 0, TR: 4, CN: 0]
Initiating SYN Stealth Scan at 10:24
Scanning 8.8.4.4 [1000 ports]
Completed SYN Stealth Scan at 10:24, 0.07s elapsed (1000 total ports)
Nmap scan report for 8.8.4.4
Host is up (0.0015s latency).
All 1000 scanned ports on 8.8.4.4 are closed
Read data files from: /usr/local/encap/nmap-6.40/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.14 seconds
Raw packets sent: 1004 (44.152KB) | Rcvd: 1001 (40.040KB)
Questo è stato eseguito da un server in cui si ritiene che il blocco dell'accesso a Internet funzioni correttamente. Eppure perché dice "Host is up"? Come lo sa? Un semplice ping fallisce e non riesco a usare quel server con dig.
Speravo di farla franca con un semplice script che cercava "Host is up" per segnalare l'accesso a Internet, ma sembra che genererebbe troppi falsi positivi.
Qualcuno ha suggerimenti o approcci migliori a questo problema?