Cómo configurar el proxy Dante para conexiones privadas en Ubuntu 20.04
Introducción
Los servidores proxy son un tipo de aplicación de servidor que funciona como una puerta de enlace entre un usuario final y un recurso de Internet. A través de un servidor proxy, un usuario final puede controlar y supervisar su tráfico web para una amplia variedad de propósitos, incluidos la privacidad, la seguridad y el almacenamiento en caché. Por ejemplo, puede utilizar un servidor proxy para realizar solicitudes web desde una dirección IP diferente a la suya. También puede utilizar un servidor proxy para investigar cómo se sirve la web de forma diferente de una jurisdicción a otra, o evitar algunos métodos de vigilancia o limitación del tráfico web.
Dante es un proxy SOCKS estable, popular y de código abierto. En este tutorial, instalará y configurará Dante para proporcionar un proxy SOCKS en un servidor Ubuntu 20.04.
Prerrequisitos
Para completar esta guía, necesitarás:
- Un servidor Ubuntu 20.04 y un usuario no root con privilegios sudo. Puede obtener más información sobre cómo configurar un usuario con estos privilegios en nuestra guía Configuración inicial del servidor con Ubuntu 20.04 .
En este tutorial, utilizarás el nombre de dominio your_domain , pero deberás sustituirlo por tu propio nombre de dominio o dirección IP.
Paso 1: Instalación de Dante
Dante es un servidor proxy SOCKS de código abierto. SOCKS es un protocolo menos utilizado, pero es más eficiente para algunas aplicaciones peer to peer y se prefiere a HTTP para algunos tipos de tráfico. Comience ejecutando los siguientes comandos como usuario no root para actualizar sus listas de paquetes e instalar Dante:
- sudo apt update
- sudo apt install dante-server
Dante también configurará automáticamente un servicio en segundo plano y se iniciará después de su instalación. Sin embargo, está diseñado para cerrarse sin problemas con un mensaje de error la primera vez que se ejecuta, ya que viene con todas sus funciones deshabilitadas. Puede verificar esto utilizando el systemctl
comando:
- systemctl status danted.service
Output● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2021-12-15 21:48:22 UTC; 1min 45s ago Docs: man:danted(8) man:danted.conf(5) Main PID: 14496 (code=exited, status=1/FAILURE)Dec 15 21:48:21 proxies systemd[1]: Starting SOCKS (v4 and v5) proxy daemon (danted)...Dec 15 21:48:22 proxies systemd[1]: Started SOCKS (v4 and v5) proxy daemon (danted).Dec 15 21:48:22 proxies danted[14496]: Dec 15 21:48:22 (1639604902.102601) danted[14496]: warning: checkconfig(): no socks authentication methods enabled. This means all socks requests will be blocked after negotiation. Perhaps this is not intended?
Para iniciar con éxito los servicios de Dante, deberá habilitarlos en el archivo de configuración.
El archivo de configuración de Dante se proporciona, por defecto, en formato /etc/danted.conf
. Si abres este archivo con nano
o tu editor de texto favorito, verás una larga lista de opciones de configuración, todas ellas deshabilitadas. Puedes intentar navegar por este archivo y habilitar algunas opciones línea por línea, pero en la práctica será más eficiente y más legible borrar este archivo y reemplazarlo desde cero. No te preocupes por hacer esto. Siempre puedes revisar la configuración predeterminada de Dante navegando a su manual en línea , e incluso puedes volver a descargar el paquete manualmente desde la lista de paquetes de Ubuntu para volver a obtener el archivo de configuración estándar si alguna vez lo deseas. Mientras tanto, sigue adelante y elimínalo:
- sudo rm /etc/danted.conf
Ahora puedes reemplazarlo por algo más conciso. Al abrir un archivo con un editor de texto, se creará automáticamente el archivo si no existe, por lo que, si usas nano
tu editor de texto favorito, ahora deberías obtener un archivo de configuración vacío:
- sudo nano /etc/danted.conf
Añade el siguiente contenido:
/etc/danted.conf
logoutput: sysloguser.privileged: rootuser.unprivileged: nobody# The listening network interface or address.internal: 0.0.0.0 port=1080# The proxying network interface or address.external: eth0# socks-rules determine what is proxied through the external interface.socksmethod: username# client-rules determine who can connect to the internal interface.clientmethod: noneclient pass { from: 0.0.0.0/0 to: 0.0.0.0/0}socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0}
Ahora tiene una configuración de servidor SOCKS utilizable, que se ejecuta en el puerto 1080, que es una convención común para SOCKS. También puede desglosar el resto de este archivo de configuración línea por línea:
logoutput
Se refiere a cómo Dante registrará las conexiones, en este caso utilizando el registro del sistema normal.user.privileged
permite que dante tengaroot
permisos para verificar permisosuser.unprivileged
no otorga al servidor ningún permiso para ejecutarse como un usuario sin privilegios, ya que esto no es necesario cuando no se otorgan permisos más granularesinternal
Los detalles de conexión especifican el puerto en el que se ejecuta el servicio y qué direcciones IP pueden conectarse.external
Los detalles de conexión especifican la interfaz de red utilizada para las conexiones salientes,eth0
de forma predeterminada en la mayoría de los servidores.
El resto de los detalles de configuración se ocupan de los métodos de autenticación, que se analizan en la siguiente sección. No olvide abrir el puerto 1080 en su firewall si está utilizando ufw
:
- sudo ufw allow 1080
En este punto, podrías reiniciar Dante y conectarte a él, pero tendrías un servidor SOCKS abierto a todo el mundo, lo cual probablemente no quieras, así que aprenderás a protegerlo primero.
Paso 2: Asegurar Dante
Si has seguido este tutorial hasta ahora, Dante utilizará cuentas de usuario Linux normales para la autenticación. Esto es útil, pero la contraseña utilizada para esa conexión se enviará en texto sin formato, por lo que es importante crear un usuario SOCKS dedicado que no tenga ningún otro privilegio de inicio de sesión. Para ello, utilizarás useradd
indicadores que no asignarán un shell de inicio de sesión al usuario y, a continuación, establecerás una contraseña:
- sudo useradd -r -s /bin/false your_dante_user
- sudo passwd your_dante_user
También conviene evitar iniciar sesión en esta cuenta a través de una conexión inalámbrica no segura o compartir el servidor con demasiada frecuencia. De lo contrario, los actores maliciosos pueden intentar iniciar sesión repetidamente.
Dante admite otros métodos de autenticación, pero muchos clientes (es decir, aplicaciones) que se conectarán a servidores proxy SOCKS solo admiten la autenticación básica de nombre de usuario y contraseña, por lo que es posible que desee dejar esa parte como está. Lo que puede hacer como alternativa es restringir el acceso solo a direcciones IP específicas. Esta no es la opción más sofisticada, pero dada la combinación de tecnologías que se utilizan aquí, es una opción sensata. Es posible que ya haya aprendido cómo restringir el acceso a direcciones IP específicas con ufw
nuestros tutoriales de requisitos previos, pero también puede hacerlo directamente dentro de Dante. Edite su /etc/danted.conf
:
- sudo nano /etc/danted.conf
/etc/danted.conf
…client pass { from: your_ip_address/0 to: 0.0.0.0/0}
Para admitir varias direcciones IP, puede utilizar la notación CIDR o simplemente agregar otro client pass {}
bloque de configuración:
/etc/danted.conf
client pass { from: your_ip_address/0 to: 0.0.0.0/0}client pass { from: another_ip_address/0 to: 0.0.0.0/0}
Después de eso, finalmente podrás reiniciar Dante con los cambios de configuración.
- sudo systemctl restart danted.service
Esta vez, cuando verifiques el estado del servicio, deberías ver que se ejecuta sin errores:
- systemctl status danted.service
Output● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enable Active: active (running) since Thu 2021-12-16 18:06:26 UTC; 24h ago
En el siguiente paso te conectarás finalmente a tu proxy.
Paso 3: Conexión a través de Dante
Para demostrar el funcionamiento de su servidor Dante, utilizará un programa de línea de comandos llamado curl
, que es popular para realizar distintos tipos de solicitudes web. En general, si desea verificar si una conexión determinada debería funcionar en un navegador en circunstancias ideales, siempre debe probar primero con curl
. Para ello, utilizará curl en su máquina local ; está instalado de forma predeterminada en todos los entornos modernos de Windows, Mac y Linux, por lo que puede abrir cualquier shell local para ejecutar este comando:
- curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/
Output* Trying 138.197.103.77...* TCP_NODELAY set* SOCKS5 communication to www.google.com:80* SOCKS5 connect to IPv4 142.250.189.228 (locally resolved)* SOCKS5 request granted.* Connected to 138.197.103.77 (138.197.103.77) port 1080 (#0) GET / HTTP/1.1…
Las credenciales que utilizó curl
ahora deberían funcionar en cualquier otro lugar donde desee utilizar su nuevo servidor proxy.
Conclusión
En este tutorial, aprendiste a implementar un punto final de API de código abierto popular para redirigir el tráfico con poca o ninguna sobrecarga. Muchas aplicaciones tienen compatibilidad con servidores proxy integrada (a menudo a nivel del sistema operativo) desde hace décadas, lo que hace que esta pila de servidores proxy sea altamente reutilizable.
A continuación, es posible que desees aprender a implementar Squid , un proxy HTTP que puede ejecutarse junto con Dante para representar distintos tipos de tráfico web.
Dado que uno de los casos de uso más comunes de los servidores proxy es el tráfico hacia y desde diferentes regiones globales, es posible que desees revisar cómo usar Ansible para automatizar las implementaciones de servidores a continuación, en caso de que desees duplicar esta configuración en otros centros de datos.
Deja una respuesta