3proxy es una suite de servidor proxy ligera y de alto rendimiento que se puede instalar y configurar para proporcionar servicios de proxy HTTP, HTTPS, SOCKSv4/4.5/5 y FTP, así como mapeo de puertos TCP y redirección de tráfico, principalmente a través de la compilación desde el código fuente en sistemas tipo Unix o utilizando binarios precompilados en Windows.
3proxy es un servidor proxy compacto y versátil diseñado para entornos que requieren un consumo mínimo de recursos y una alta configurabilidad. Su tamaño reducido y eficiencia lo hacen adecuado para sistemas embebidos, uso personal o escenarios donde un proxy con todas las funciones como Squid es excesivo.
Requisitos Previos
Antes de instalar 3proxy, asegúrese de que el sistema de destino cumpla con los siguientes requisitos:
- Sistema Operativo: Un sistema tipo Unix (Linux, FreeBSD, macOS) para la compilación, o Windows para la distribución binaria. Esta guía se centra en Linux.
- Compilador: GCC o Clang (para la compilación desde el código fuente).
- Herramientas de Construcción: Utilidad
make. - Acceso a la Red: Capacidad para descargar archivos fuente.
- Privilegios de Usuario: Acceso
rootosudopara la instalación y configuración del servicio del sistema.
Instalación
La instalación de 3proxy generalmente implica descargar el código fuente, compilarlo y luego colocar los binarios y archivos de configuración en las ubicaciones apropiadas.
Descargar Código Fuente
Siempre descargue la última versión estable del sitio web oficial de 3proxy o de su repositorio de GitHub.
# Navegar a un directorio temporal
cd /tmp
# Descargar la última versión estable (reemplace con la versión actual si es diferente)
# Consulte https://3proxy.ru/ o https://github.com/3proxy/3proxy para el último enlace
wget https://3proxy.ru/0.9.4/3proxy-0.9.4.tar.gz
# Extraer el archivo
tar -xzf 3proxy-0.9.4.tar.gz
# Cambiar al directorio extraído
cd 3proxy-0.9.4
Compilar e Instalar
3proxy utiliza un Makefile simple. La compilación es sencilla.
# Compilar 3proxy
make -f Makefile.Linux
# Crear directorios de instalación
mkdir -p /usr/local/3proxy/bin
mkdir -p /usr/local/3proxy/etc
mkdir -p /usr/local/3proxy/logs
# Instalar el binario compilado y la configuración de ejemplo
cp src/3proxy /usr/local/3proxy/bin/
cp 3proxy.cfg.sample /usr/local/3proxy/etc/3proxy.cfg
# Establecer permisos apropiados (opcional, pero buena práctica)
chmod 755 /usr/local/3proxy/bin/3proxy
chmod 640 /usr/local/3proxy/etc/3proxy.cfg
Para sistemas que requieren características específicas (por ejemplo, autenticación NTLM, soporte IPv6), consulte src/Makefile.Linux para las banderas de compilación. Por ejemplo, para habilitar NTLM: make -f Makefile.Linux NTLM.
Configuración Básica
El archivo de configuración principal para 3proxy es 3proxy.cfg. Define los puertos de escucha, tipos de proxy, métodos de autenticación y reglas de acceso. La ubicación predeterminada es /usr/local/3proxy/etc/3proxy.cfg.
Directivas Principales
Un 3proxy.cfg mínimo incluye:
nserver: Especifica los servidores DNS para la resolución de nombres de host.timeouts: Establece varios tiempos de espera de conexión.log: Define la ruta y el formato del archivo de registro.users: Declara usuarios para la autenticación.auth: Especifica el método de autenticación.proxy,socks,tcppm: Define los servicios de proxy.
Ejemplo: Proxy HTTP/HTTPS Simple
Esta configuración establece un proxy HTTP/HTTPS en el puerto 3128, requiriendo autenticación básica para un usuario llamado testuser con la contraseña password123.
# /usr/local/3proxy/etc/3proxy.cfg
# Configuración global
nserver 8.8.8.8 # Google Public DNS
nserver 8.8.4.4
# Tiempos de espera en segundos
timeouts 1 5 30 60 180 1800 15 60
# Configuración de registro
# log /usr/local/3proxy/logs/3proxy.log D # Rotación diaria
log /usr/local/3proxy/logs/3proxy.log
logformat "- +_L%t.%. %N.%O %I %E %U %C:%c %R:%r %O %h %T"
# Usuarios para autenticación: usuario:contraseña
users testuser:CL:password123
# Método de autenticación
# CL: Contraseña en texto claro (no recomendado para producción)
# LM: Hash de LAN Manager
# NT: Hash NTLM
# P: Contraseña cifrada (formato interno de 3proxy, use `3proxy -e` para generar)
auth strong # Usar autenticación fuerte (requiere LM/NT o P)
# Para contraseñas CL simples, use 'auth iponly,basic'
# Permitir acceso para usuarios autenticados
allow testuser
# Definir el servicio de proxy HTTP/HTTPS
# -p 3128: Escucha en el puerto 3128
# -n: Deshabilita la autenticación NTLM para este servicio (si NTLM global está habilitado)
# -a: Habilita la autenticación básica
proxy -p3128
Para generar una contraseña cifrada usando 3proxy -e:
/usr/local/3proxy/bin/3proxy -e password123
La salida (por ejemplo, _E_01000000010000000000000000000000) se puede usar luego en la directiva users con el prefijo _E_: users testuser:_E_01000000010000000000000000000000.
Ejecutando 3proxy
Después de configurar 3proxy.cfg, inicie el servidor:
/usr/local/3proxy/bin/3proxy /usr/local/3proxy/etc/3proxy.cfg
Para ejecutarlo en segundo plano como un demonio:
/usr/local/3proxy/bin/3proxy /usr/local/3proxy/etc/3proxy.cfg -d
Temas de Configuración Avanzada
Métodos de Autenticación
3proxy soporta varios métodos de autenticación:
iponly: Autenticación basada únicamente en la dirección IP del cliente (sin nombre de usuario/contraseña).basic: Autenticación Básica HTTP (envía credenciales en texto claro).digest: Autenticación Digest HTTP.ntlm: Autenticación NTLM (requiere compilación con soporte NTLM).strong: Selecciona automáticamente el método más fuerte disponible.
Ejemplo con auth iponly:
# /usr/local/3proxy/etc/3proxy.cfg
auth iponly
allow 192.168.1.0/24 # Permitir todos los clientes de esta subred sin autenticación de usuario explícita
proxy -p3128
Control de Acceso
Las directivas allow y deny controlan el acceso del cliente basándose en varios criterios. Las reglas se procesan en orden. La primera regla que coincide se aplica.
# /usr/local/3proxy/etc/3proxy.cfg
# Denegar direcciones IP específicas
deny 192.168.1.10
# Permitir un usuario específico
allow myuser
# Permitir una subred específica para HTTP/HTTPS
allow * 192.168.1.0/24 * * HTTP HTTPS
# Denegar acceso a dominios de destino específicos
deny * * .example.com
La sintaxis para allow/deny es allow [usuario] [ip_origen] [ip_destino] [puerto_destino] [protocolo]. * actúa como un comodín.
Encadenamiento de Proxies (Proxies Padre)
3proxy puede reenviar solicitudes a otro servidor proxy utilizando la directiva parent.
# /usr/local/3proxy/etc/3proxy.cfg
# Encadenar a un proxy HTTP ascendente
parent 1000 http 192.168.1.100 8080 myuser:mypass
# Encadenar a un proxy SOCKS5 ascendente
parent 1000 socks5 192.168.1.101 1080
El primer argumento 1000 es un tiempo de espera en milisegundos.
Proxy SOCKS
Para configurar un proxy SOCKS (v4, v4.5, v5), use la directiva socks.
# /usr/local/3proxy/etc/3proxy.cfg
# Definir el servicio de proxy SOCKS en el puerto 1080
socks -p1080
Mapeo de Puertos TCP (TCPPM)
La directiva tcppm permite reenviar conexiones TCP desde un puerto local a un host y puerto remotos.
# /usr/local/3proxy/etc/3proxy.cfg
# Reenviar conexiones del puerto local 2222 a remotehost:22 (SSH)
tcppm -p2222 remotehost.example.com 22
Configuración de Registro
La directiva log especifica el archivo de registro. logformat define la estructura de salida. rotate configura la rotación de registros.
# /usr/local/3proxy/etc/3proxy.cfg
# Registrar en /usr/local/3proxy/logs/access.log
log /usr/local/3proxy/logs/access.log
# Formato de registro personalizado
logformat "- +_L%t.%. %N.%O %I %E %U %C:%c %R:%r %O %h %T"
# Rotar registros diariamente (D), semanalmente (W), mensualmente (M) o por tamaño (S<bytes>)
rotate D /usr/local/3proxy/logs/archive
Integración con el Sistema (Servicio systemd)
Para una operación robusta, ejecute 3proxy como un servicio systemd.
-
Crear un archivo de servicio:
/etc/systemd/system/3proxy.service```ini
[Unit]
Description=3proxy Lightweight Proxy Server
After=network.target[Service]
Type=forking
ExecStart=/usr/local/3proxy/bin/3proxy /usr/local/3proxy/etc/3proxy.cfg -d
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
User=nobody # O un usuario dedicado sin privilegios como '3proxy'
Group=nogroup # O un grupo dedicado[Install]
WantedBy=multi-user.target
`` *Nota*: Cree el usuario/grupo3proxysi lo desea:sudo useradd -r -s /sbin/nologin 3proxy. Ajuste la propiedad de los archivos para/usr/local/3proxy/logs`. -
Recargar systemd, habilitar e iniciar el servicio:
bash sudo systemctl daemon-reload sudo systemctl enable 3proxy.service sudo systemctl start 3proxy.service sudo systemctl status 3proxy.service
Consejos para la Resolución de Problemas
- Verificar Registros: Siempre consulte el archivo de registro de 3proxy (
/usr/local/3proxy/logs/3proxy.logpor defecto) para ver mensajes de error o problemas de acceso. - Reglas de Firewall: Asegúrese de que el firewall (por ejemplo,
ufw,firewalld,iptables) permita las conexiones entrantes a los puertos de escucha de 3proxy (por ejemplo, 3128, 1080).
bash # Ejemplo para ufw sudo ufw allow 3128/tcp - Sintaxis de Configuración: Verifique
3proxy.cfgen busca de errores de sintaxis. 3proxy es particular con su formato de configuración. - Permisos: Asegúrese de que el binario de 3proxy tenga permisos de ejecución y que el directorio de registro sea escribible por el usuario que ejecuta el servicio.
- Reiniciar Servicio: Después de cualquier cambio de configuración, recargue o reinicie el servicio 3proxy (
sudo systemctl restart 3proxy).
3proxy vs. Squid
| Característica | 3proxy | Squid |
|---|---|---|
| Uso de Recursos | Mínimo (bajo CPU, RAM) | Moderado a alto (depende de la carga/características) |
| Complejidad | Relativamente simple, configuración basada en texto | Complejo, amplias opciones de configuración |
| Tipos de Proxy | HTTP, HTTPS, SOCKS, FTP, TCPPM | HTTP, HTTPS, FTP, ICP, ESI |
| Caché | Sin caché nativo | Caché robusto y altamente configurable |
| Intercepción SSL | Limitada/básica | Avanzada, basada en certificados |
| Autenticación | Básica, Digest, NTLM, basada en IP | Completa (LDAP, Kerberos, RADIUS) |
| Caso de Uso | Ligero, personal, embebido | Empresarial, alto tráfico, filtrado de contenido |
| Desarrollo | Activo, desarrollador único | Activo, impulsado por la comunidad |