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 ssh
para 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 root
de 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 passwd
comando 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 su
comando (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 root
que 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 shuf
comando genera permutaciones aleatorias. -i
especifica un rango de entrada y -n
es 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, ufw
ya está instalado. Compruebe que ufw
está 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 ufw
ya 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 22
utilizando 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 Y
y presione ENTER
para 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/urandom
en los sistemas Linux proporciona una interfaz para el generador de números pseudoaleatorios del núcleo. El contenido de /dev/urandom
se convierte en entrada para tr
. El tr
comando es una utilidad de línea de comandos para traducir o eliminar caracteres. -d
significa eliminar y -c
significa complemento, por lo que -dc
significa eliminar cualquier carácter que no esté en el conjunto A
through Z
, a
through z
y 0
through 9
.
La salida, ahora solo alfanumérica, se canaliza a head
. El head
comando 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 -c
conmutador limita el número de caracteres. El operando 16
es el número de caracteres que desea.
Finalmente, el echo
comando 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 apt
el 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.list
ahora 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-world
imagen.
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 /etc
named /shadowsocks-rust
:
mkdir /etc/shadowsocks-rust
Cree un archivo de configuración /etc/shadowsocks-rust/config.json
utilizando el siguiente ejemplo como plantilla. Antes de usar el ejemplo:
- Reemplace
25117
por su elección de número de puerto aleatorio - Reemplace
25u4kC4XbIWZJ75Q
por su elección de contraseña segura - Reemplace
chacha20-ietf-poly1305
por 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 25117
en 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 -d
opción significa correr separado. La -p
opción especifica los puertos expuestos. La -v
opció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 .
Descomprima el zip
archivo.
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
25117
en nuestro ejemplo - Ingrese su elección de Contraseña , que está
25u4kC4XbIWZJ75Q
en nuestro ejemplo - Seleccione su elección de cifrado de cifrado, que se encuentra
chacha20-ietf-poly1305
en nuestro ejemplo
Haga clic en Aplicar .
Haga clic en Aceptar . Aparece una notificación que dice que 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 .
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.
Deja una respuesta