Cómo construir un servidor Shadowsocks-Rust con Docker

Introducción

En este tutorial, aprenderá cómo crear su propio servidor Shadowsocks en una plataforma Linux usando Docker.

El servidor que creará implementará el cifrado autenticado con cifrado de datos asociados (AEAD) chacha20-ietf-poly1305. Probarás tu servidor con el cliente de interfaz gráfica de usuario (GUI) de Shadowsocks para Windows.

Al final de este tutorial, tendrá un servidor Shadowsocks en funcionamiento y probado.

Requisitos previos

Antes de comenzar este tutorial, necesitará un servidor privado, una Raspberry PI, ordenador viejo o VPS puede valer. No necesita un nombre de dominio para el servidor en este tutorial.

Paso 1: iniciar sesión como raíz

SSH en su servidor. En Linux y macOS, puede usar el comando de terminal sshpara llegar a su servidor. En Windows, puede usar PowerShell o una interfaz gráfica de usuario (GUI) como PuTTY o XSHELL .

Si no ha iniciado sesión como root, conviértase rootde la siguiente manera. Si aún no conoce la contraseña de root, configúrela emitiendo el comando:

sudo passwd root

El sudo comando permite a los usuarios no root ejecutar comandos de root. El passwdcomando le permite establecer la contraseña para usted o para otro usuario, que en este caso es el usuario llamado root.

Se le pedirá que introduzca su propia contraseña:

[sudo] password for amy:

Ingrese su propia contraseña (no root).

A continuación, se le pedirá que introduzca una nueva contraseña para el usuario root:

New password:

Elija e ingrese la nueva contraseña para root.

Se le pedirá que confirme la nueva contraseña volviendo a escribirla:

Retype new password:

Introduzca la misma contraseña nueva para root.

Si todo está bien, recibirá un mensaje de respuesta:

passwd: password updated successfully

Ahora que conoce la contraseña de root, conviértase en root:

su -

El sucomando (abreviatura de cambiar de usuario) le permite cambiar a otra identificación de usuario, para que pueda ejecutar comandos con los privilegios de ese usuario. Dado que no se nombra ningún usuario específico, cambiará de forma predeterminada al usuario root. El guión ( -) significa crear un nuevo entorno de inicio de sesión para el nuevo usuario, que será completamente independiente de su entorno de inicio de sesión existente.

Se le pedirá que ingrese la contraseña rootque estableció hace unos momentos:

Password:

Ingrese la contraseña raíz.

Notará que su símbolo del sistema cambia de un signo de dólar a un signo de almohadilla:

#

Este es un recordatorio de que ha iniciado sesión como root. Ahora que lo está root, no necesita anteponer comandos privilegiados con sudo.

Actualice sus listas de paquetes y actualice todos sus paquetes a la última versión:

apt update && apt upgrade -y

Verá mensajes de actualización de paquetes en su terminal.

Paso 2: generar un número de puerto aleatorio

Su servidor Shadowsocks utilizará un puerto aleatorio para su entrada. Genere un número aleatorio entre 1024 y 65535 para su número de puerto de Shadowsocks.

shuf -i 1024-65535 -n 1

El shufcomando genera permutaciones aleatorias. -iespecifica un rango de entrada y -nes el número de líneas de salida requeridas. Usaremos el siguiente ejemplo en el resto de este tutorial:

25117

Tome nota de este número, ya que lo necesitará tanto en el servidor como en el cliente.

Paso 3: Activar el cortafuegos (opcional)

Le recomendamos que proteja su servidor y especialmente el puerto 22(el puerto SSH) instalando un firewall. En este tutorial, instalará y configurará el cortafuegos sin complicaciones ( ufw).

En muchos sistemas Ubuntu, ufwya está instalado. Compruebe que ufwestá instalado en su sistema:

apt list ufw

Deberías ver un mensaje:

ufw/focal,now 0.36-6 all [installed]

Si no ve el mensaje que indica que ufwya está instalado, instale el paquete de software ahora:

apt install ufw

Ahora configurará el firewall. Si puede garantizar que siempre accederá a SSH a su servidor desde una única dirección IP, entonces limite el acceso SSH a esa única dirección. Por ejemplo, si su dirección IP es 51.51.51.51, emita el comando:

ufw allow from 51.51.51.51/32 to any port 22 proto tcp

Cuando ejecute ese comando, verá un mensaje:

Rules updated

Si no es posible limitar el acceso a una sola dirección IP, pero puede garantizar que siempre se conectará desde un rango de direcciones IP conocido, limite el acceso SSH solo a ese rango. Por ejemplo, si está en una oficina que siempre usa el rango de direcciones IP 51.51.51.0/24, emita el comando:

ufw allow from 51.51.51.0/24 to any port 22 proto tcp

Si no es posible limitar el acceso a un rango de direcciones IP, deberá abrir el puerto SSH para acceder desde todo el mundo:

ufw allow ssh

En cualquier caso, le recomendamos que proteja aún más el puerto 22utilizando la autenticación de clave SSH en lugar de la autenticación de contraseña. La generación de pares de claves SSH y la carga en su servidor están fuera del alcance de este tutorial. Puedes encontrar tutoriales sobre este tema en la web.

Abra su puerto Shadowsocks, que en nuestro ejemplo es 25117.

ufw allow 25117/tcp
ufw allow 25117/udp

Habilitar UFW:

ufw enable

Verá un mensaje de advertencia:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Escriba Yy presione ENTERpara confirmar que desea habilitar ufw. Verás un mensaje:

Firewall is active and enabled on system startup

Compruebe el estado de su cortafuegos:

ufw status

Verá una pantalla de estado del firewall similar a la siguiente:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       51.51.51.0/24
25117/tcp                  ALLOW       Anywhere
25117/udp                  ALLOW       Anywhere
25117/tcp (v6)             ALLOW       Anywhere (v6)
25117/udp (v6)             ALLOW       Anywhere (v6)

Si su proveedor de VPS implementa el concepto de grupos de seguridad, también deberá abrir sus asignaciones de grupos de seguridad para estos puestos en el panel de control de su proveedor.

Paso 4: generar una contraseña segura

Debe generar una contraseña segura para proteger su servidor. Copie y pegue el siguiente comando en su sesión de terminal con su servidor:

< /dev/urandom tr -dc A-Za-z0-9 | head -c 16; echo;

El archivo especial /dev/urandomen los sistemas Linux proporciona una interfaz para el generador de números pseudoaleatorios del núcleo. El contenido de /dev/urandomse convierte en entrada para tr. El trcomando es una utilidad de línea de comandos para traducir o eliminar caracteres. -dsignifica eliminar y -csignifica complemento, por lo que -dcsignifica eliminar cualquier carácter que no esté en el conjunto Athrough Zathrough z0through 9.

La salida, ahora solo alfanumérica, se canaliza a head. El headcomando es una utilidad de línea de comandos para generar la primera parte de un archivo que se le proporciona a través de la entrada estándar. El -cconmutador limita el número de caracteres. El operando 16es el número de caracteres que desea.

Finalmente, el echocomando repite la entrada al terminal, que en este caso solo le da una nueva línea después de mostrar su contraseña.

Aquí está la salida de muestra. Verá este ejemplo utilizado en el resto de este tutorial:

25u4kC4XbIWZJ75Q

Copie su contraseña generada. Abra un editor de texto en su PC. Pegue la contraseña en su editor de texto.

Necesitará esta contraseña tanto en su servidor como en su cliente cuando ejecute Shadowsocks.

Paso 5: Instalación de Docker

Ahora instalará Docker en su servidor.

Instale paquetes para permitir aptel uso de un repositorio a través de HTTPS:

apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

Agregue la clave GPG oficial de Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Use el siguiente comando para configurar el repositorio estable de Docker:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

El archivo /etc/apt/sources.list.d/docker.listahora contiene el repositorio de Docker. Actualice sus listas de paquetes en consecuencia:

apt update

Instalar ventana acoplable:

apt install -y docker-ce docker-ce-cli containerd.io

Verifique que Docker Engine esté instalado correctamente ejecutando la hello-worldimagen.

docker run hello-world

Deberías ver mensajes:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Paso 6: tirar de la imagen

Extraiga la imagen de Docker de Teddysun para Shadowsocks-Rust emitiendo el comando:

docker pull teddysun/shadowsocks-rust

Verá mensajes similares a los siguientes:

Using default tag: latest
latest: Pulling from teddysun/shadowsocks-rust
45b42c59be33: Pull complete
f50629ee3cc4: Pull complete
b270b750cfe4: Pull complete
3854afaafaf8: Pull complete
0cc26c8d335f: Pull complete
c02c65108591: Pull complete
Digest: sha256:4d79f0f64c397e5beb82661367449eeb3ab27022fd0c10581f13f55056973ea4
Status: Downloaded newer image for teddysun/shadowsocks-rust:latest
docker.io/teddysun/shadowsocks-rust:latest

Paso 7: Configuración de Shadowsocks

Ahora creará su archivo de configuración de Shadowsocks en el servidor.

Hacer un directorio en /etcnamed /shadowsocks-rust:

mkdir /etc/shadowsocks-rust

Cree un archivo de configuración /etc/shadowsocks-rust/config.jsonutilizando el siguiente ejemplo como plantilla. Antes de usar el ejemplo:

  • Reemplace 25117por su elección de número de puerto aleatorio
  • Reemplace 25u4kC4XbIWZJ75Qpor su elección de contraseña segura
  • Reemplace chacha20-ietf-poly1305por su elección de cifrado, pero asegúrese de usar un cifrado AEAD
cat > /etc/shadowsocks-rust/config.json <<EOF
{
    "server":"0.0.0.0",
    "server_port":25117,
    "password":"25u4kC4XbIWZJ75Q",
    "timeout":300,
    "method":"chacha20-ietf-poly1305",
    "nameserver":"8.8.8.8",
    "mode":"tcp_and_udp"
}
EOF

Paso 8: ejecutar el contenedor

Ejecute el siguiente comando, reemplazando 25117en los cuatro lugares por su elección de número de puerto:

docker run -d -p 25117:25117 -p 25117:25117/udp --name ss-rust --restart=always -v /etc/shadowsocks-rust:/etc/shadowsocks-rust teddysun/shadowsocks-rust

La -dopción significa correr separado. La -popción especifica los puertos expuestos. La -vopción da los volúmenes.

Paso 9: Prueba con el cliente de Windows

Ahora trabaja en tu PC.

Descargue la versión más reciente del cliente de Windows desde https://github.com/shadowsocks/shadowsocks-windows/releases .

Archivo zip de Shadowsocks para Windows

Descomprima el ziparchivo.

Shadowsocks para Windows descomprimido

Haga doble clic en la aplicación shadowsocks.exe para iniciar el cliente Shadowsocks para Windows. Si aparece Microsoft Defender SmartScreen, haga clic en Más información y luego en Ejecutar de todos modos .

Ingrese los parámetros del cliente que coincidan con la configuración que especificó en su servidor:

  • Ingrese la dirección IP real de su servidor
  • Ingrese su elección de número de puerto del servidor Shadowsocks , que se encuentra 25117en nuestro ejemplo
  • Ingrese su elección de Contraseña , que está 25u4kC4XbIWZJ75Qen nuestro ejemplo
  • Seleccione su elección de cifrado de cifrado, que se encuentra chacha20-ietf-poly1305en nuestro ejemplo

Haga clic en Aplicar .

Servidores de edición de Shadowsocks

Haga clic en Aceptar . Aparece una notificación que dice que Shadowsocks está conectado.

Shadowsocks está conectado

Haga clic derecho en el icono del avión de papel de Shadowsocks en la bandeja del sistema. Esto abre el menú contextual. Seleccione Proxy del sistema . Asegúrese de estar en modo Global .

Modo global de Shadowsocks

En su navegador, visite https://www.iplocation.net para confirmar que su navegación web ahora proviene de la ubicación de su servidor.

Cuando haya terminado de navegar, salga de Shadowsocks desde el menú contextual.

Conclusión

Ahora tiene un servidor Shadowsocks en funcionamiento que ha probado con el cliente de Windows.

Puede obtener más información sobre las diferentes versiones de Shadowsocks en https://github.com/shadowsocks .

 

Esta es una traducción y reimpretación del artículo original siguiente.



Comments

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies