3proxy es un servidor proxy gratuito y de código abierto que se utiliza para diversos fines, como filtrar el tráfico, almacenar en caché y bloquear sitios web específicos. Soporta varios protocolos como SOCKS v4/v4a/v5, HTTP, HTTPS, FTP, POP3, SMTP, y admite métodos de autenticación como SOCKS5 nombre de usuario/contraseña, NTLM, LDAP, Kerberos y SSO.
El servidor es altamente personalizable y ofrece una gestión detallada del uso del ancho de banda y de los parámetros de conexión. 3proxy puede instalarse en plataformas Windows, Linux y macOS. Es un servidor proxy ligero y fácil de usar, adecuado para redes pequeñas y medianas. Es posible alquilar un vps proxy.
Se debe tener cuidado ya que no es deseable instalar el servidor sin autorización. Esto puede llevar a un uso no autorizado del servidor por parte de intrusos para organizar spam y alto tráfico.
Para empezar, es necesario instalar varios paquetes y dependencias.
Para AlmaLinux el comando:
yum -y install gcc wget tar
y para Debian:
apt install -y build-essential wget tar
A continuación, descargue los archivos del sitio oficial del proyecto 3proxy, descomprima el archivo y compile los archivos descargados.
A continuación, cree los directorios necesarios para los archivos de configuración y los registros, transfiera el ejecutable 3proxy
y cree un nuevo usuario"proxyuser
" y asígnele derechos sobre los directorios. Para crear un nuevo archivo de configuración, ejecuta el comando:
touch /etc/3proxy/3proxy.cfg
Asignar permisos sólo al usuario root con chmod 600 /etc/3proxy/3proxy.cfg
.
Después de crear un nuevo fichero de configuración es necesario rellenarlo correctamente. Para ello, anote el uid
y el gid
del usuario"proxyuser
" y, a continuación, utilice un editor de texto para copiar y pegar el texto del archivo de configuración de ejemplo. Guarda los cambios en el fichero de configuración y ya tenemos instalado 3proxy con soporte http(s) y socks5-proxy.
A continuación se muestra un fichero de configuración de ejemplo:
Configurar el servidor para que se ejecute como proxyuser
(inserta el uid
y gid de
nuestro usuario que aprendimos antes). setgid 991
setuid 991
Especificar los servidores de nombres correctos. Ver /etc/resolv.conf
: nserver 8.8.8.8.8
nserver 8.8.4.4
Utilice los tiempos de espera y el tamaño de caché predeterminados para las consultas DNS: timeouts 1 5 30 60 180 180 1800 1800 15 60
nscache 65536
Especifique el modo de inicio como daemon: daemon
Especifique la dirección IP de la interfaz externa del servidor: external 111.111.111.111.111
(o ignore la línea si la IP es la misma).
Especifique la dirección IP de la interfaz interna del servidor: internal 192.168.0.1
(o ignórela para que el proxy escuche todas las IP).
Configure el proxy http en el puerto estándar 3128: proxy -p3128 -n -a
(especifique su puerto, asegurándose de antemano de que funciona).
Configurar proxy socks en el puerto estándar 1080: socks -p1080
(especifique su puerto, comprobando que funciona de antemano).
Especifique la ruta a los registros, el formato de registro y la rotación: log /var/log/3proxy/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotar 30
A continuación, crea un fichero de inicialización para systemd
y configura los permisos correctos:
# touch /etc/systemd/system/3proxy.service
# chmod 664 /etc/systemd/system/3proxy.service
El siguiente texto debe ser insertado en este archivo:
[Unit]
Description=3proxy Proxy Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/3proxy /etc/3proxy/3proxy.cfg
ExecStop=/bin/kill `/usr/bin/pgrep proxyuser`
RemainAfterExit=yes
Restart=on-failure
[Install]
WantedBy=multi-user.target
Guarda y actualiza la configuración de systemd
:
# systemctl daemon-reload
Inicia 3proxy y añádelo al autoloader:
# systemctl start 3proxy
# systemctl enable 3proxy
La configuración está completa. Ahora tienes http-proxy en el puerto 3128 y socks-proxy
en el puerto 1080.
El primer problema es que existe la posibilidad de que después de registrar un nuevo dominio, éste no esté disponible debido al almacenamiento en caché del nombre de dominio. Para solucionar este problema, debes esperar a que se actualicen los registros DNS o añadir la dirección IP de tu servidor y el nuevo dominio a tu archivo hosts
. Esto le permitirá acceder al nuevo dominio hasta que se actualicen los registros DNS.
Segundo problema: si utiliza un servidor proxy con puertos predeterminados, tarde o temprano el servidor puede ser detectado. Para solucionar este problema, se recomienda cambiar los puertos.
Por ejemplo, puede establecer el puerto 7834 en proxy http y 7835 en Socks. Sin embargo, estos puertos también pueden ser detectados, por lo que puede configurar el cortafuegos para permitir el acceso al servidor sólo desde ciertas direcciones, mientras que a otras se les denegará el acceso. Esta solución es bastante fiable, aunque no demasiado flexible, ya que puede que no tengas acceso a una dirección IP estática.
El tercer problema es que si utilizas un servidor proxy y guardas registros de todas las conexiones, con el tiempo pueden llegar a ser bastante grandes y ocupar la mayor parte del espacio libre de tu disco. Para evitar este problema, debes ocuparte de la rotación de los registros o de no mantenerlos en absoluto.
Existen varios métodos de rotación de registros que le permiten conservar sólo los últimos archivos de registro y eliminar automáticamente los registros más antiguos. Por lo tanto, es mejor configurar el proceso de rotación de registros con antelación para evitar desbordar el disco. Esto ayudará a guardar todos los datos y evitará perder información al utilizar un servidor proxy.
users proxyuser:CL:password
daemon
log /var/log/3proxy/3proxy.log D
rotate 30
auth strong
proxy -n -a
setgid 65534
setuid 65534
También es necesario crear un directorio para los logs y establecer los permisos (arrancamos el servidor con los derechos mínimos de nadie en el sistema usando las directivas setgid/setud
):
mkdir /var/log/3proxy ; chown nobody /var/log/3proxy
Consideremos la instalación de 3proxy en Docker.
Primero, necesitamos instalar algunos paquetes (y para los sistemas operativos Debian y Ubuntu instalados recientemente, puede que también necesitemos actualizar el índice de paquetes apt
con # apt update
).
Para AlmaLinux y CentOS:
# yum install docker docker-compose
Para Ubuntu y Debian:
# apt install docker docker.io docker-compose
Descargar imagen:
# docker pull 3proxy/3proxy
Por defecto, 3proxy utiliza un entorno chroot seguro en /usr/local/3proxy
con uid 65535
y gid 65535
, y espera que el fichero de configuración de 3proxy se sitúe en /usr/local/etc/3proxy
. Las rutas en el archivo de configuración deben especificarse relativas a /usr/local/3proxy
, es decir, debe ser /logs
en lugar de /usr/local/3proxy/logs
. En chroot, se requiere permiso para nserver
.
Para ello, cree un directorio y un archivo de configuración de 3proxy
:
# mkdir -p /etc/dockerapp/3proxy
# touch /etc/dockerapp/3proxy/3poxy.conf
A continuación, utilice cualquier editor de texto que desee para editar el archivo de configuración 3proxy .conf
creado. Para ejecutar 3proxy en Docker, la configuración mínima es suficiente:
nserver 8.8.8.8.8
socks -p3129
Para añadir logging y usuario, es necesario añadir al archivo de configuración de 3proxy
:
log /logs/3proxy.log
auth strong
users "proxyuser:CR:87beeef3f4ee4661ac1897eca216fc26"
En lugar de"87beeef3f4ee4661ac1897eca216fc26
" necesitas especificar el hash MD5 de la contraseña para el proxyuser
. Puedes encontrar el hash MD5 usando generadores online.
Vamos a iniciar 3proxy usando docker-compose
. Para ello será necesario crear un archivo de configuración en formato .yml
:
# touch /etc/dockerapp/3proxy/docker-compose.yml
Inserta allí el siguiente texto usando un editor de texto:
version: "2.1"
services:
3proxysvc:
image: 3proxy/3proxy:latest
container_name: 3proxy
volumes:
- /etc/dockerapp/3proxy/conf:/usr/local/3proxy/conf
ports:
- 8080:3129
restart: unless-stopped
Guardar. En este fichero hemos especificado el puerto externo 8080. Ahora ya podemos ejecutarlo:
# docker-compose -f /etc/dockerapp/3proxy/docker-compose.yml up -d
Obtendremos una respuesta como esta
Creando red"3proxy_default
" con el driver por defecto
Creando 3proxy ... hecho
Probando:
# docker ps
Obtenemos una respuesta con el ID del contenedor, imagen, estado, puertos utilizados y nombre:
48cc0cd140cd 3proxy/3proxy:latest "/bin/3proxy /etc/3p..." 5