Crear proxy socks con dante y con openssh

Cómo crear un proxy SOCKS con Dante en Ubuntu

En la era digital, mantener la privacidad y seguridad en línea es más crucial que nunca. Una de las maneras de proteger tu identidad y datos en la red es a través del uso de un servidor proxy SOCKS. Este tipo de proxy actúa como un intermediario entre tu dispositivo y el internet, ocultando tu dirección IP real y cifrando tu tráfico de internet. En este artículo, te guiaremos paso a paso en cómo configurar tu propio servidor proxy SOCKS en Ubuntu utilizando Dante, un servidor proxy versátil y de alto rendimiento.

Iniciando la instalación de Dante

Antes de sumergirnos en la configuración de Dante, es esencial preparar tu sistema y asegurarte de que está actualizado. Para ello, abre una terminal y ejecuta los siguientes comandos:

sudo apt update
sudo apt install dante-server

Estos comandos actualizarán la lista de paquetes de tu sistema y luego instalarán Dante, respectivamente.

Configuración del archivo danted.conf

Una vez instalado Dante, el siguiente paso es configurar el servidor proxy. Esto se hace editando el archivo de configuración danted.conf ubicado en /etc/danted/. Para ello, usa tu editor de texto preferido. Aquí, utilizaremos vim:

vim /etc/danted.conf

Dentro de este archivo, debes especificar detalles cruciales como las interfaces externa e interna, el método de autenticación y las reglas de acceso. A continuación, te mostramos una configuración ejemplo que puedes ajustar según tus necesidades:

logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# La interfaz externa (puede ser tu dirección IP pública o el nombre de la interfaz)
external: eth0

# La interfaz interna (usualmente la dirección IP de tu servidor o loopback)
internal: 0.0.0.0 port=1080

# Método de autenticación
socksmethod: username

# Reglas de acceso
client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect error
}

# Quién puede utilizar este proxy
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bind connect udpassociate
    log: connect disconnect error
    socksmethod: username
}

Esta configuración define un servidor SOCKS que escucha en todas las interfaces disponibles (0.0.0.0) en el puerto 1080. Utiliza autenticación por nombre de usuario y permite conexiones desde y hacia cualquier dirección.

Creación de un usuario para el proxy

Para que el proxy sea seguro y no esté abierto al público, es necesario crear un usuario específico para la conexión. Esto se logra con los siguientes comandos:

sudo useradd -r -s /bin/false nombre_usuario
sudo passwd nombre_usuario

Aquí, nombre_usuario es el nombre de usuario que deseas para la conexión al proxy. El comando useradd crea el usuario, y passwd te permite asignarle una contraseña.

Reiniciar y habilitar el servicio Dante

Con el usuario creado y el archivo de configuración ajustado, es momento de reiniciar el servicio Dante y asegurarse de que se ejecute al inicio del sistema:

sudo systemctl restart danted.service
sudo systemctl enable danted.service
sudo systemctl status danted.service

Además, es importante asegurarse de que el puerto 1080, que es donde escucha el proxy, esté permitido en el firewall:

sudo ufw allow 1080/tcp

Comprobación de la conexión

Finalmente, para verificar que todo está funcionando correctamente, puedes probar la conexión a través del proxy con el siguiente comando:

curl -v -x socks5://nombre_usuario:contraseña@tu_ip_del_servidor:1080 https://cualesmiip.es/

Recuerda reemplazar nombre_usuario, contraseña y tu_ip_del_servidor con tus datos específicos. Este comando utilizará tu servidor proxy para acceder a un sitio web que muestra tu dirección IP pública, verificando así que el tráfico realmente está siendo redirigido a través del proxy SOCKS.

Configurar un servidor proxy SOCKS con Dante puede parecer complejo al principio, pero siguiendo estos pasos, podrás tener un poderoso sistema

Puedes configurar un servidor proxy SOCKS5 utilizando OpenSSH en Ubuntu 22.04, lo cual es una alternativa más sencilla y directa en ciertos casos, especialmente para uso personal o en situaciones donde ya tienes un servidor SSH configurado. A continuación, te explico cómo hacerlo:

Crear un proxy Socks 5 con OpenSSH

A diferencia de dante, con el cual podemos crear un servicio de proxy con autenticación, con OpenSSH, podemos crear un tunel en un puerto que se puede utilizar de proxy socks sin autenticación por lo que lo conveniente es que se utilice solo para localhost dentro de un solo equipo (luego explicaremos mejor esto)

Instalación de OpenSSH Server

Si aún no tienes OpenSSH Server instalado en tu servidor que va a hacer de proxy, puedes instalarlo con el siguiente comando siempre y cuando sea una distribución basada en Debian / Ubuntu:

sudo apt update
sudo apt install openssh-server

Asegúrate de que el servicio está activo y se ejecuta correctamente con:

sudo systemctl status ssh

Configuración del Servidor SSH (Opcional)

Por defecto, OpenSSH escucha en el puerto 22. Puedes ajustar configuraciones adicionales editando el archivo /etc/ssh/sshd_config, como cambiar el puerto, restringir el acceso a ciertos usuarios, etc. Si realizas cambios, recuerda reiniciar el servicio SSH:

sudo systemctl restart ssh

Uso de SSH como un Proxy SOCKS5

Para configurar un túnel SSH que funcione como un proxy SOCKS5, utiliza el siguiente comando desde tu cliente (no en el servidor). Este comando establece un túnel SSH que escucha localmente en tu máquina en el puerto especificado (por ejemplo, 1080) y redirige el tráfico a través del servidor SSH:

ssh -D 1080 -C -q -N usuario@direccion_servidor
  • -D 1080 especifica que SSH debe crear un proxy SOCKS5 en el puerto local 1080.
  • -C comprime los datos antes de enviarlos.
  • -q habilita el modo silencioso que minimiza los mensajes de log.
  • -N indica que no se ejecuten comandos remotos, útil cuando solo quieres establecer el túnel.
  • usuario es tu nombre de usuario en el servidor SSH.
  • direccion_servidor es la dirección IP o dominio de tu servidor SSH.

En este punto es donde comentamos que con la opción -D debemos indicar unicamente el puerto ya que si exponemos el puerto a toda la red podemos estar permitiendo que otros equipos de la red utilicen este proxy sin autenticarse:

[ger@ger-pc ~]$ ssh -D 0.0.0.0:1081 root@192.168.54.100

Si lo comprobamos con el comando ss o con netstat podemos ver que está escuchando en todas las redes:

[ger@ger-pc ~]$ ss -putan|grep 1081
tcp LISTEN 0 128 0.0.0.0:1081 0.0.0.0:* users:(("ssh",pid=292405,fd=4)) 
[ger@ger-pc ~]$

Sin embargo, si conectamos especificando unicamente el puerto sin 0.0.0.0 o sin ninguna IP, lo hara solo en localhost:

[ger@ger-pc ~]$ ssh -D 1081 root@192.168.54.100

.......

[ger@ger-pc ~]$ ss -putan|grep 1081
tcp LISTEN 0 128 127.0.0.1:1081 0.0.0.0:* users:(("ssh",pid=292485,fd=5)) 
tcp LISTEN 0 128 [::1]:1081 [::]:* users:(("ssh",pid=292485,fd=4)) 
[ger@ger-pc ~]$

Conexión a través del Proxy SOCKS5:

Ahora puedes configurar tu navegador o aplicación para utilizar el proxy SOCKS5 en localhost y el puerto 1080. Cada aplicación tiene una manera diferente de configurar esto, así que necesitarás revisar las preferencias o la documentación de la aplicación.

Automatización de la Conexión (Opcional):
Si necesitas que el túnel se establezca automáticamente al inicio o sin interacción manual, puedes considerar usar una herramienta como autossh para mantener la conexión del túnel abierta y reconectar en caso de que se caiga.

Esta es una forma efectiva de establecer un proxy SOCKS5 rápido para un usuario o unos pocos usuarios, especialmente útil para eludir restricciones de red o asegurar tu tráfico en redes no confiables. La principal ventaja de este método es su simplicidad y que aprovecha la infraestructura SSH existente, sin necesidad de configurar software adicional en el servidor.

Deja una respuesta