I2P es una red descentralizada y cifrada que anonimiza los datos transmitidos entre los usuarios. Las comunicaciones de I2P fluyen a través de túneles unidireccionales de entrada y salida compuestos por dos nodos cada uno.
Al realizar una conexión inicial en la red, se usan túneles exploradores que descubren otros pares para obtener una lista de nodos ofrecida por servidores de resiembra confiados. Esto permite establecer más conexiones y obtener velocidades mayores a más tiempo se permanezca conectado a la red.
A diferencia de Tor, en I2P no existe tráfico de salida hacia internet (aunque sí existen proxies de salida), sino que todas las conexiones se establecen entre los servicios ocultos de I2P llamados Eepsites.
Al ser una red P2P, la dirección IP del usuario siempre será expuesta al establecer conexiones con otros pares, lo que revelará el uso de I2P desde la ubicación del cliente. Sin embargo, por las características de enrutamiento y cifrado mencionadas, no se revelará la identidad ni las actividades del usuario al establecer conexiones con el resto de usuarios en la red.
Puedes encontrar una explicación más extensa sobre el funcionamiento de I2P en este artículo.
Superficie de ataque
- Fuerza bruta – Un adversario global puede intentar correlacionar las rutas que siguen los mensajes que fluyen entre los nodos enviando paquetes de gran tamaño y monitoreando todas las conexiones para descartar los pares que no han recibido paquetes de datos de ese tamaño. Como defensa, podría servir establecer límites bajos de ancho de banda y usar leasesets cifrados o no publicados para Eepsites.
- Intersección – Consiste en contactar periódicamente con el objetivo y hacer un seguimiento sobre los pares conectados a I2P. Conforme se produce la rotación de nodos, el adversario cruzará los conjuntos de pares que están en línea cuando un mensaje se transmite con éxito, pudiendo dar con su objetivo mediante el descarte a lo largo del tiempo. El costo de este ataque aumenta a medida que crece la red.
- Ataques de etiquetado – Si un atacante se encuentra en la puerta de enlace del túnel de entrada y al mismo tiempo forma parte del mismo túnel más adelante, puede reconocer que se encuentra en el mismo túnel.
- Segregación de pares – Un atacante poderoso podría segregar los pares cortando la conexión con los nodos no controlados si la red es lo suficientemente pequeña. Esto aislaría al objetivo y ninguna reparación en la base de datos de la red podría solucionarlo. También es posible fragmentar la red analíticamente encontrando diferencias de comportamiento entre los miembros de la red y agrupándolos en consecuencia. Un adversario que recopile la base de datos de la red puede saber cuándo un destino tiene un número determinado de túneles de entrada, lo que le permitirá particionar la red según los túneles seleccionados.
- Ataques Sybil – Un adversario con recursos puede introducir amplias cantidades de pares en la red para aumentar la probabilidad de ser seleccionado como nodo y ayudarse a realizar otro tipo de ataques.
Más tipos de ataques a I2P pueden ser encontrados en este artículo.
Instalación (Java)
El cliente Java de I2P incluye una interfaz web para gestionar el funcionamiento del software junto a otras aplicaciones compatibles con la red. Esta versión es la más recomendada para usuarios sin experiencia en informática, aunque ocupa más espacio y recursos del sistema.
Antes de añadir el repositorio, asegúrate de instalar algunos paquetes necesarios:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https lsb-release curl
Ejecuta el siguiente comando para añadir el repositorio de I2P:
$ echo "deb [signed-by=/usr/share/keyrings/i2p-archive-keyring.gpg] https://deb.i2p2.de/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/i2p.list
Descarga la llave usada para firmar el repositorio:
$ sudo curl -o /usr/share/keyrings/i2p-archive-keyring.gpg https://geti2p.net/_static/i2p-archive-keyring.gpg
Actualiza los repositorios del sistema:
$ sudo apt-get update
Instala I2P:
$ sudo apt-get install i2p i2p-keyring
Usa i2prouter start y i2prouter stop para iniciar y detener el software. Ya iniciado, dirígete a 127.0.0.1:7657 en el navegador para comenzar a explorar la interfaz. Deberás esperar unos minutos antes de poder visitar servicios ocultos y alcanzar mayores velocidades en la red.
Se recomienda usar un navegador aparte para las actividades de I2P. Mullvad Browser y Librewolf son buenas opciones. Dirígete a about:config y aplica los siguientes valores:
- network.proxy.http = 127.0.0.1
- network.proxy.http_port = 4444
- network.proxy.no_proxies_on = 127.0.0.1
- network.proxy.socks_remote_dns = false
- dom.security.https_first_pbm = false
- dom.security.https_only_mode = false
- browser.fixup.domainsuffixwhitelist.i2p = true
- javascript.enabled = false
Cuando hayas alcanzado suficientes pares para empezar a navegar, un buen punto de partida es inr.i2p.
Instalación (C++)
El cliente i2pd basado en C++ se ejecta en segundo plano y se configura mediante archivos. Si quieres prescindir de Java, ahorrar recursos y/o alojar un servicio oculto, esta es la mejor opción.
Antes de añadir el repositorio, asegúrate de instalar algunos paquetes necesarios:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https lsb-release curl
Descarga y ejecuta el script que añadirá automáticamente el repositorio de i2pd:
$ wget -q -O - https://repo.i2pd.xyz/.help/add_repo | sudo bash -s -
$ sudo apt-get update
Instala i2pd:
sudo apt-get install i2pd
Por defecto, i2pd se ejecutará cada vez que se encienda el sistema, pero puedes evitarlo deshabilitando el servicio:
$ sudo service i2pd disable
Si lo has deshabilitado, deberás ejecutarlo manualmente cada vez que quieras usar i2pd:
$ sudo service i2pd start
En un navegador basado en Firefox, dirígete a about:config y aplica los siguientes valores:
- network.proxy.http = 127.0.0.1
- network.proxy.http_port = 4444
- network.proxy.no_proxies_on = 127.0.0.1
- network.proxy.socks_remote_dns = false
- dom.security.https_first_pbm = false
- dom.security.https_only_mode = false
- browser.fixup.domainsuffixwhitelist.i2p = true
- javascript.enabled = false
Puedes configurar el funcionamiento del router en /etc/i2pd/i2pd.conf. Desde el navegador, en la dirección 127.0.0.1:7070 encontrarás información sobre la conexión a I2P.
Servicios ocultos
Instala el cliente C++ de I2P si pretendes alojar un servicio oculto.
Del mismo modo que en Tor, necesitarás haber configurado previamente el servicio que quieres reflejar en la red I2P. En estos ejemplos se asumirá que se trata de un servidor HTTP escuchando en el puerto 80.
Simplemente elimina el archivo /etc/i2pd/tunnels.conf y crea uno nuevo con el siguiente contenido:
[NOMBRE-DEL-SERVICIO]
type = http
host = 127.0.0.1
port = 80
keys = nombre-del-servicio.dat
Con esto creado, reinicia i2pd:
$ sudo service i2pd restart
Encontrarás la dirección del servicio oculto en la categoría I2P Tunnels de la interfaz web de i2pd.
Puedes crear un dominio abreviado para tu dirección .b32.i2p visitando I2P Name Registry.
napalm@cryptolab.net