Configurar un servidor proxy SOCKS5 en Linux usando Dante implica instalar el paquete dante-server, configurar /etc/danted.conf para definir interfaces de red, métodos de autenticación y reglas de acceso, y luego iniciar el servicio danted. Dante funciona como un servidor SOCKS, enrutando el tráfico de red entre clientes y destinos, mejorando la seguridad de la red y permitiendo el acceso a recursos restringidos.
Prerrequisitos
Antes de continuar, asegúrese de lo siguiente:
- Un servidor Linux (por ejemplo, Debian, Ubuntu, CentOS, RHEL, Fedora) con privilegios de root o sudo.
- Conocimientos básicos de la interfaz de línea de comandos de Linux y conceptos de redes.
- Una interfaz de red disponible para que el proxy escuche (interna) y una interfaz para conexiones salientes (externa). Estas pueden ser la misma.
Instalación
Instale el paquete del servidor Dante específico para su distribución de Linux.
Debian/Ubuntu
sudo apt update
sudo apt install dante-server
RHEL/CentOS/Fedora
sudo dnf install dante-server # Para Fedora/RHEL 8+
# O para CentOS/RHEL 7 más antiguos:
sudo yum install dante-server
Configuración
El archivo de configuración principal para Dante es /etc/danted.conf. El archivo predeterminado puede contener configuraciones de ejemplo; a menudo es mejor hacer una copia de seguridad del original y comenzar con una configuración mínima y limpia.
sudo mv /etc/danted.conf /etc/danted.conf.bak
sudo nano /etc/danted.conf
Estructura de Configuración Básica
Un danted.conf mínimo define la interfaz de escucha (internal), la interfaz de salida (external) y reglas de acceso básicas.
logoutput: /var/log/danted.log
internal: 0.0.0.0 port=1080
external: eth0 # Reemplace eth0 con la interfaz de red externa de su servidor
socksmethod: none
user.privileged: root
user.notprivileged: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
Explicación de las directivas:
logoutput: Especifica la ruta del archivo de registro.internal: Define la interfaz de red y el puerto en el que Dante escucha las conexiones de clientes entrantes.0.0.0.0se enlaza a todas las interfaces de red disponibles.port=1080es el puerto SOCKS estándar.- Puede especificar una dirección IP específica (por ejemplo,
internal: 192.168.1.10 port=1080).
external: Define la interfaz de red que Dante utiliza para las conexiones salientes a los destinos. Reemplaceeth0con la interfaz pública o de salida real de su servidor (por ejemplo,ens3,enp0s3).socksmethod: Especifica los métodos de autenticación que los clientes SOCKS pueden usar.nonesignifica sin autenticación.user.privileged: El usuario con el que se ejecuta Dante al realizar operaciones privilegiadas (por ejemplo, enlazar a puertos bajos).user.notprivileged: El usuario al que Dante cambia para operaciones no privilegiadas después de la inicialización.- Reglas
client pass: Controlan qué clientes tienen permitido conectarse al servidor Dante.from: 0.0.0.0/0permite conexiones desde cualquier dirección IP. Restrinja esto por seguridad.to: 0.0.0.0/0especifica el destino para las conexiones de clientes (siempre el propio proxy en este contexto).
- Reglas
socks pass: Controlan a qué destinos se permite que los clientes SOCKS lleguen a través del proxy.from: 0.0.0.0/0se refiere a clientes que se han autenticado con éxito o han pasado las reglas de cliente.to: 0.0.0.0/0permite conexiones a cualquier destino. Restrinja esto por seguridad.log: error connect disconnecthabilita el registro de eventos de conexión.
Métodos de Autenticación
Dante admite varios métodos de autenticación. Los más comunes son none (sin autenticación) y username (nombre de usuario/contraseña).
1. Sin Autenticación (Anónimo)
Este método es adecuado para redes privadas de confianza donde todos los clientes son conocidos y están autorizados a usar el proxy sin credenciales explícitas. No se recomienda para proxies de cara al público.
# ... (resto de la configuración básica)
socksmethod: none
client pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # Restringir a una subred específica
log: error connect disconnect
}
socks pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # Los clientes de esta subred pueden acceder a cualquier cosa
log: error connect disconnect
}
2. Autenticación por Nombre de Usuario/Contraseña
Este es el método más común y recomendado para proxies SOCKS5, especialmente cuando los clientes son externos o no confiables. Dante utiliza usuarios del sistema para la autenticación.
Pasos:
-
Cree un usuario del sistema para el proxy. No cree un directorio de inicio ni asigne un shell por seguridad.
bash sudo useradd -r -s /bin/false proxyuser sudo passwd proxyuser # Introduzca y confirme una contraseña fuerte
Repita para usuarios adicionales si es necesario. -
Modifique
danted.conf:
```
logoutput: /var/log/danted.log
internal: 0.0.0.0 port=1080
external: eth0socksmethod: username # Habilitar la autenticación por nombre de usuario/contraseña
user.privileged: root
user.notprivileged: nobodyclient pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username # Requerir nombre de usuario/contraseña para conexiones SOCKS
log: error connect disconnect
}
`` La directivasocksmethod: usernameen la reglasocks pass` asegura que solo los usuarios autenticados puedan usar el proxy.
3. Autenticación Basada en IP
Este método permite que direcciones IP o subredes específicas utilicen el proxy sin nombre de usuario/contraseña. Se puede combinar con la autenticación username.
# ... (resto de la configuración)
socksmethod: username # Permitir nombre de usuario/contraseña como opción
client pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # Permitir subred específica sin autenticación
log: error connect disconnect
}
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 # Permitir todos los demás clientes, pero requerir autenticación
socksmethod: username
log: error connect disconnect
}
socks pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # Los clientes de esta subred pueden acceder a cualquier cosa (no se necesita autenticación)
log: error connect disconnect
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 # Los clientes autenticados pueden acceder a cualquier cosa
socksmethod: username
log: error connect disconnect
}
En esta configuración, los clientes de 192.168.1.0/24 no necesitan autenticación, mientras que todos los demás clientes deben proporcionar un nombre de usuario y una contraseña.
Configuración del Firewall
Después de configurar Dante, abra el puerto SOCKS (predeterminado 1080) en el firewall de su sistema para permitir conexiones entrantes.
Firewalld (CentOS/RHEL/Fedora)
sudo firewall-cmd --permanent --add-port=1080/tcp
sudo firewall-cmd --reload
UFW (Debian/Ubuntu)
sudo ufw allow 1080/tcp
sudo ufw enable # Si UFW no está habilitado
Gestión del Servicio
Después de la configuración y los ajustes del firewall, inicie y habilite el servicio Dante.
sudo systemctl start danted
sudo systemctl enable danted
sudo systemctl status danted
Verifique el estado del servicio para asegurarse de que se esté ejecutando sin errores. Revise /var/log/danted.log para detectar cualquier problema de configuración.
Prueba del Proxy
Utilice una máquina cliente para probar el proxy SOCKS5.
Usando curl (sin autenticación)
curl -x socks5://YOUR_SERVER_IP:1080 http://ifconfig.me/ip
La salida debería ser la dirección IP pública de su servidor, indicando que el tráfico se enruta a través del proxy.
Usando curl (con autenticación de nombre de usuario/contraseña)
curl -x socks5://proxyuser:your_password@YOUR_SERVER_IP:1080 http://ifconfig.me/ip
Reemplace proxyuser y your_password con las credenciales configuradas anteriormente.
Usando proxychains (utilidad cliente de Linux)
-
Instale
proxychains:
bash sudo apt install proxychains4 # Debian/Ubuntu sudo dnf install proxychains-ng # RHEL/CentOS/Fedora -
Configure
proxychains.conf:
Edite/etc/proxychains.confo~/.proxychains/proxychains.conf.
Comentestrict_chainy descomentedynamic_chain.
Al final del archivo, agregue los detalles de su servidor proxy:```
... (otras configuraciones de proxychains)
dynamic_chain
strict_chain
random_chain
round_robin_chain
dynamic_chain # Usar cadena dinámica para mayor flexibilidad
[ProxyList]
agregar proxy aquí ...
socks5 127.0.0.1 9050
socks5 YOUR_SERVER_IP 1080 proxyuser your_password # Con autenticación
O, para sin autenticación:
socks5 YOUR_SERVER_IP 1080
```
-
Pruebe con
proxychains:
bash proxychains curl http://ifconfig.me/ip
La salida debería mostrar la dirección IP de su servidor proxy.
Mejores Prácticas de Seguridad
- Restringir el Acceso: Use las reglas
client passpara limitar qué direcciones IP de clientes pueden conectarse a su proxy. - Contraseñas Fuertes: Para la autenticación de nombre de usuario/contraseña, asegúrese de que todos los usuarios del proxy tengan contraseñas fuertes y únicas.
- Menor Privilegio: No otorgue privilegios innecesarios al usuario
nobodyo a los usuarios del proxy. - Actualizaciones Regulares: Mantenga su sistema operativo Linux y el paquete Dante actualizados para corregir vulnerabilidades de seguridad.
- Registro y Monitoreo: Revise regularmente los registros de Dante (
/var/log/danted.log) en busca de actividad sospechosa. Implemente soluciones de monitoreo de registros. - Reglas de Firewall: Configure su firewall para permitir solo conexiones al puerto SOCKS (1080) desde rangos de IP confiables.
- Usuario Dedicado: Use un usuario del sistema dedicado para el acceso al proxy en lugar de cuentas de usuario existentes.
- Deshabilitar Métodos No Usados: Habilite solo las opciones de
socksmethodque sean estrictamente necesarias.