Tenemos muchos servidores Linux en varias ubicaciones conjuntas en todo el mundo. Por diseño, estas máquinas generalmente no deberían poder acceder a Internet. Según la ubicación y el rol, algunos sitios pueden tener acceso a Internet muy limitado (por ejemplo, denegar por defecto con uno o dos sitios en la lista blanca). Por lo tanto, dependiendo de las circunstancias, la política de no conexión a Internet se configura mediante reglas de enrutamiento en el nivel del conmutador o mediante un dispositivo de filtro (por ejemplo, Untangle).
Un equipo es responsable de configurar la red según la política, y un equipo independiente (yo) es responsable de la auditoría periódica para asegurarse de que las cosas realmente funcionen según lo previsto.
Por lo tanto, la pregunta es cómo comprensivamente verificar que no se pueda acceder a Internet. El método ingenuo es simplemente "hacer ping a google.com". Pero, ¿qué pasa si Internet está disponible, pero el DNS simplemente no funciona? OK, entonces haga ping a una IP pública conocida, por ejemplo, "ping 8.8.4.4". Pero, ¿qué pasa si se filtra ICMP, pero por ejemplo ¿Las conexiones TCP todavía están permitidas? ¿Qué sucede si se filtran TCP y UDP, pero no la IP sin procesar? ¿Qué sucede si el equipo de la red se dejó un pequeño agujero (no necesariamente por intención maliciosa, tal vez un error honesto, tal vez un error en el firewall o el interruptor)?
Obviamente, el ping es un buen cheque fácil cuando desea el acceso a Internet, pero es muy insuficiente para asegurar que Internet esté completamente bloqueado.
El enfoque ideal sería probar todas las combinaciones posibles de
- puerto
- IP pública
- Protocolo
Pero eso no es práctico. Pero estoy buscando un compromiso razonable entre eso y una prueba de ping ingenua.
Mi idea fue tratar de usar nmap para buscar puertos abiertos en IP públicas que generalmente deberían estar arriba --- servidores DNS públicos. Entonces, por ejemplo (8.8.4.4 es un servidor DNS público):
# 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)
Esto se ejecutó desde un servidor donde se cree que el bloqueo de acceso a Internet funciona correctamente. Sin embargo, ¿por qué dice "Host is up"? ¿Cómo lo sabe? Un simple ping falla y no puedo usar ese servidor con dig.
Tenía la esperanza de salirme con un simple script que buscaba "Host is up" para marcar el acceso a Internet, pero parece que eso generaría demasiados falsos positivos.
¿Alguien tiene mejores sugerencias o enfoques para este problema?