¿No es seguro usar el archivo / etc / hosts como bloqueador de sitios web de la siguiente manera?

22

Soy un linux noob, y mientras buscaba una técnica simple de bloqueo de sitios web a nivel de SO, encontré la solución de usar el archivo de hosts de linux así:

127.0.0.1 websiteiwanttoblock.com
127.0.0.1 anotherone.com
...

Esto es agradable y simple: perfecto para mis propósitos, pero aquí está mi pregunta: si a menudo uso 127.0.0.1 para fines de desarrollo web, ¿es esto peligroso?

Parece que, al menos, podría estropear el proyecto de desarrollo web en el que estoy trabajando actualmente. Por ejemplo, si Chrome / Firefox realiza una solicitud a websiteiwanttoblock.com/api/blah , ¿eso haría una solicitud 127.0.0.1/api/blah y potencialmente podría interferir con la api de mi proyecto?

Si esto es peligroso en ese sentido, ¿hay una dirección IP "nula" más segura a la que pueda redirigir los sitios bloqueados? Sé que probablemente no sea una buena práctica usar el archivo de hosts como este, pero me encanta la simplicidad de editar un archivo de texto en lugar de descargar un paquete o lo que sea.

Edit: Ah, y a menudo uso el puerto 3000 para cosas de desarrollo, pero supongamos que a veces uso 80, o cualquier otro número de puerto disponible.

    
pregunta Joe 26.11.2017 - 13:15
fuente

4 respuestas

21

Respuesta corta

¿Es seguro utilizar el archivo /etc/hosts como un sitio web que bloquea la dirección "nula"?

Argumentaría que la respuesta debería ser: No.

Si, por ninguna otra razón, las solicitudes no se "anulan". Todavía son peticiones activas. Y como indica el OP, ya que las solicitudes son para hosts de Internet legítimos, este tipo de método abreviado para redirigir las solicitudes a localhost puede interferir con las pruebas de código de red en un entorno de desarrollo.

Quizás un mejor método para bloquear el tráfico hacia y desde ciertos hosts de Internet, es utilizar iptables , que es la interfaz del firewall del kernel de Linux. iptables es la tabla de reglas de red predeterminada para la mayoría de los sistemas GNU / Linux. Algunas distribuciones utilizan ufw como front-end para iptables .

Si desea usar iptables , aquí hay una secuencia de comandos simple que DROP todos los paquetes entrantes y salientes para una lista de direcciones IP o nombres de host con una dirección o nombre de host por línea contenida en un archivo de texto sin formato llamado ~/blocking.txt

## Block every IP address in ~/blocking.txt
## DROP incoming packets to avoid information leak about your hosts firewall
## (HT to Conor Mancone) REJECT outgoing packets to avoid browser wait
for i in $(cat ~/blocking.txt); do
    echo "Blocking all traffic to and from $i"    
    /sbin/iptables -I INPUT -s $i -j DROP
    /sbin/iptables -I OUTPUT -d $i -j REJECT
done

Muestra ~/blocking.txt

websiteiwanttoblock.com
anotherone.com
ip.add.of.net/mask

No coloque sus localhost direcciones IP en este archivo.

Respuesta más larga

Si bien la reasignación de hosts de Internet a localhost en el archivo /etc/hosts es una técnica de atajo común para bloquear hosts de Internet no deseados, este método tiene algunos inconvenientes de seguridad graves.

solicitudes entrantes

Las solicitudes entrantes que no se iniciaron a propósito a través de una solicitud de usuario específica. El ejemplo más común es anuncios en páginas web. Sigamos los paquetes entrantes ...

Primero, inicio wireshark . Luego coloco la compañía de anuncios de Internet más grande en mi archivo /etc/hosts con esta línea:

127.0.0.1   google.com

Y luego deshabilita todos los bloqueadores de anuncios en mi navegador, navega a youtube y reproduce cualquier video aleatorio.

Si filtro mis paquetes, en general, incluyendo el espacio de direcciones IP de Google:

ip.addr==172.217.0.0/16

Todavía estoy recibiendo paquetes de Google.

¿Qué significa esto?

Esto significa que existe la posibilidad de que un servidor malintencionado inserte software malintencionado que pueda atacar mi plataforma informática a través de paquetes que aún llegan y se envían a localhost. El uso de /etc/hosts en lugar de eliminar o rechazar los paquetes a través de las reglas del firewall, es una medida de seguridad deficiente. No bloquea los paquetes entrantes de posibles hosts maliciosos, ni proporciona comentarios efectivos para la resolución de problemas.

Solicitudes salientes

Las solicitudes salientes que se envían a localhost en lugar de ser rechazadas o eliminadas por las reglas de firwall todavía están siendo procesadas por el kernel. Hay algunas acciones indeseables que ocurren cuando se usa /etc/hosts en lugar del firewall:

  • Se está produciendo un procesamiento adicional cuando el paquete saliente llega a localhost. Por ejemplo, si un servidor web se está ejecutando en el host, el servidor web puede procesar el paquete enviado a localhost.

  • Los comentarios de las solicitudes salientes pueden llegar a ser confusos si el /etc/hosts se rellena con ciertos dominios.

iptables puede manejar muchas reglas

Según algunos:

ServerFault: cuántas reglas puede admitir iptables

Un posible límite teórico en una máquina de 32 bits es 38 millones de reglas. Sin embargo, como se señaló en la publicación a la que se hace referencia, a medida que se expande la lista de reglas iptables , también lo hace la memoria del kernel necesaria.

    
respondido por el RubberStamp 26.11.2017 - 15:22
fuente
11
  

[...] mientras buscaba una técnica simple de bloqueo de sitios web a nivel de SO, encontré la solución de usar el archivo de hosts Linux [...]

Para aclarar, /etc/hosts solo asigna nombres de host a direcciones IP. Una entrada con 127.0.0.1 no bloquea su acceso al servidor, solo hace que su computadora resuelva localmente ese nombre en particular a 127.0.0.1 . Usted y el servidor podrían seguir intercambiando paquetes sin restricciones.

  

Si uso a menudo 127.0.0.1 para fines de desarrollo web, ¿es peligroso? Parece que, al menos, podría estropear el proyecto de desarrollo web en el que estoy trabajando actualmente.

No, resolver a 127.0.0.1 no te pone en peligro adicional. Esto se debe a que un sitio web puede hacer que su nombre se resuelva a cualquier IP de todos modos, incluido 127.0.0.1 (a menos que el servidor DNS lo bloquee). Entonces, si evilpage.example quisiera resolver a 127.0.0.1 , solo podrían especificar un registro DNS A respectivo y no tendrían que depender de su /etc/hosts . (También vea: ¿Es seguro tener un registro DNS que apunte a 127.0.0.1? )

Tenga en cuenta que ejecutar algo en 127.0.0.1 puede hacerlo vulnerable a los ataques de DNS recauchutado .

    
respondido por el Arminius 26.11.2017 - 16:53
fuente
4

A menos que su servidor web se esté ejecutando en el puerto 80 o 443 en su máquina local ( 127.0.0.1 ), eso no debería afectar su proyecto web. Si es así, entonces podría ser una molestia. Si enviaba una solicitud a http://example.com/api/ , entonces terminaría enviando una solicitud a http://127.0.0.1/api/ . Si tiene un recurso llamado /api/ , entonces terminaría recibiendo la solicitud e interfiriendo con su aplicación. Pero el punto más importante en el que me gustaría enfatizar que @Arminus mencionó fue que el archivo /etc/hosts/ es para asignar direcciones IP a nombres de host. Si desea bloquear un host en particular, sugeriría que instale un firewall como UFW o que use el firewall de Linux predeterminado, iptables. Aquí hay algunos enlaces para ayudarlo a comenzar:

UFW: enlace

iptables: enlace

    
respondido por el ssharma 26.11.2017 - 18:07
fuente
3

Si desea usar una dirección IP que no debe ir a cualquier lugar , puede usar la documentación oficial de Direcciones IP :

  • 192.0.2.0/24
  • 198.51.100.0/24
  • 203.0.113.0/24

Todavía es posible que vayan a algún lugar, pero DEBEN agregarse a espacios de direcciones no enrutables. Como otros han señalado, potencialmente solo dirigirá su tráfico a esas direcciones IP; hay mejores soluciones mencionadas en las otras respuestas, pero al menos no irán a su local máquina.

    
respondido por el Wayne Werner 27.11.2017 - 05:47
fuente

Lea otras preguntas en las etiquetas