Preparando nuestro VPS para trabajar

La idea de este artículo es dar un breve vistazo a las formas que tenemos de mejorar nuestros VPS, para hacerlos más eficientes, seguros y fáciles de usar; incluso dejarlos preparados para el trabajo remoto de nuestros trabajos. El artículo está pensado para usuarios medios que tiene un previo conocimiento de Linux. Hay muchos links a muchos otros artículos de este mismo sitio, así que mis respetos para los autores de los mismos.

  1. Optimizando la imagen de un VPS
  2. Creación de usuarios con permisos su
  3. Acceder al VPS utilizando solamente par de llaves pública/privada
  4. Mejorando conexiones SSH con MOSH (OPCIONAL)
  5. Conexión OpenVPN ofuscada
  6. Gestión de interfaz gráfica usando Guacamole
    6.1. Usando aplicaciones gráficas con SSH
  7. Servidor MTProxy para Telegram
  8. Servidor de VoIP (Mumble)
  9. Cerrándonos (IPTables)
  10. Bonus: Personalizando al editor de textos nano
  11. Un buscador en la terminal

1. Optimizando la imagen de un VPS

Para aquellos con más experticia o deseos de aprender, les dejo este muy buen tutorial de como tunear nuestro VPS.

2. Creación de usuarios con permisos su

Puede cambiar a otro usuario (su) sin requerir una contraseña haciendo algunos cambios en el archivo sudoers. En este caso, el usuario (por ejemplo, cyborg) que cambiará a otra cuenta de usuario (por ejemplo, root) debe estar en el archivo sudoers o en el grupo sudo para poder invocar el comando sudo. .
Para la modificación del archivo sudoers se puede modificar directamente el archivo localizado en /etc/sudoers, pero al usar el siguiente comando (visudo) el sistema chequea la sintaxis del archivo antes de guardar, ya que si escribimos algo mal en el archivo (probablemente) dejará de funcionar correctamente y existe la posibilidad de quedarnos sin acceso a root, teniendo que entrar en el modo de rescate al sistema para arreglar el archivo.
Con lo anterior dicho, ejecutamos el siguiente comando para seleccionar nuestro editor de textos de preferencia:

update-alternatives --config editor

Lo cual nos devolverá lo siguiente, mostrando como editor seleccionado el nano:

There are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 15 manual mode

Press to keep the current choice[*], or type selection number:

Con lo anterior dicho, simplemente ejecutamos el comando siguiente:

visudo

Y agregamos la siguiente línea:

cyborg ALL=(ALL) NOPASSWD:ALL

3. Acceder al VPS utilizando solamente par de llaves pública/privada

Hay muchos artículos online que explican la seguridad del logueo por llaves, y además el funcionamiento del mismo, para eso pueden chequear los tutoriales siguientes de Youtbe, DigitalOcean y de Canonical; así que voy a poner solamente los pasos y una breve explicación.

Primeramente, tener en cuenta que vamos a registrarnos desde una terminal (preferentemente nuestra PC personal o laptop) en nuestra VPS, así que lo primero es generarnos un par de llaves públicas y privadas. En mi caso utilizo Linux, así que el procedimiento es bastante sencillo:

Nota: el siguiente procedimiento es válido para aquello que utilicen Windows Subsytem for Linux (WSL)

ssh-keygen
#[...]

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:DsPHQlCKldEddmuh+/z8G77jOPMzMNNNEuy2KekQypk root@tservice2
The key's randomart image is:
+---[RSA 3072]----+
| +=..o.o . |
| o.o...o o o |
| . . . . o . . |
| o . o. + .|
| =.S+ . + * |
| *Eo. * + .|
| . oo =. |
| o+o+. |
| +*B* |
+----[SHA256]-----+

Una vez terminado el proceso, en nuestro terminal tendremos dos archivos nuevos (id_rsa y id_rsa.pub) en la siguiente ruta:

ls ~/.ssh/
#[...]

-rw------- 1 root root 0 2020-07-28 00:50 authorized_keys
-rw------- 1 root root 2.6K 2022-03-25 12:40 id_rsa
-rw-r--r-- 1 root root 568 2022-03-25 12:40 id_rsa.pub
-rw-r--r-- 1 root root 888 2022-03-25 10:47 known_hosts

Ahora solamente tenemos que copiar el contenido del archivo id_rsa.pub y pegarlo en el archivo authorized_keys de nuestra VPS(!!!!!). Aún no terminamos, hay que habilitar el logueo por llaves públicas en el servidor ssh de nuestro VPS, así que corra el siguiente comando:

find /etc/ssh/sshd_config -type f -exec sed -e '/PubkeyAuthentication/ s/^#*/#/' -i {} \; -print && \
find /etc/ssh/sshd_config -type f -exec sed -e '/PasswordAuthentication/ s/^#*/#/' -i {} \; -print && \
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config &;&; \
systemctl restart sshd

El anterior comando busca y comenta las líneas que comiencen con las palabras PubkeyAuthentication y PubkeyAuthentication, asegurándonos así de que el logueo por contraseñas va a ser inhabilitado y la configuración actual del logueo por llaves será inválida, luego le pasamos la configuración nueva del logueo por llaves y luego reiniciamos el servicio.

Como muchas personas utilizan Windows como sistema operativo de su PC/laptop personal, les dejo aquí como loguearse usando llaves con softwares como él PuTTY, MobaXTerm y XShell.

4. Mejorando conexiones SSH con MOSH (OPCIONAL)

He escrito un artículo de cómo usar MOSH, lo pueden ver aquí.

5. Conexión OpenVPN ofuscada

Muchos de nosotros somos paranoicos con la seguridad y/o pasamos mucho trabajo a la hora de conectarnos a nuestro VPS utilizando la red de datos móviles, y he encontrado la manera más fácil de loguearnos usando los mismos datos móviles sin tener que intentar la conexión 3 o 4 veces: corriendo un server openvpn y luego conectándonos vía SSH o MOSH al IP que nos da el server openvpn (la conexión «local»). Así que para este paso solo tiene que ir a este artículo de este mismo blog.

6. Gestión de interfaz gráfica usando Guacamole

Hay momentos (muy puntuales) en los que necesitamos de una interfaz gráfica, para eso utilizaremos Guacamole. Hay un tutorial muy bueno aquí (Parte1, Parte2 y Parte3), échenle un ojo, yo utilicé esta opción!!!

Aunque también hay varios scripts automatizados que facilitan mucho la vida, uno que he usado con anterioridad y ha funcionado ha sido este, aunque hay muchos más. El citado script en particular instala XFCE como entorno de escritorio y algunas herramientas. Solo siga las instrucciones en el README.md.

Al estar disponible en GitHub se puede revisar de arriba a abajo el script, para aquellos preocupados por la seguridad.

 

6.1 Usando aplicaciones gráficas con SSH

Una forma más sencilla de ver aplicaciones con GUI es reenviar el apartado gráfico vía SSH hacia desde donde nos estamos conectado al VPS. Para ello solo basta con:

apt install xorg openbox -y

Ahora tenemos que habilitar el X11Forwarding en nuestro servidor SSH del VPS, para ellos solo copie y pegue:

find /etc/ssh/sshd_config -type f -exec sed -e '/X11Forwarding/ s/^#*/#/' -i {} \; -print && \
echo "X11Forwarding yes" >> /etc/ssh/sshd_config && \
systemctl restart sshd

Si quiere correr las aplicaciones gráficas desde el usuario root tiene que aplicar el siguiente comando
xauth add $(xauth -f ~cloud/.Xauthority list|tail -1)

Para poder ver las interfaces gráficas de estas aplicaciones usando Moba solamente tiene que marcar las opciones de X11-Forwarding y Compression a la hora de editar la sesión. Para más detalles lea aquí.

Y ya podríamos utilizar desde gedit hasta firefox.

Por experiencia personal este método resulta mucho más lento y agonizante que el Guacamole.

 

7. Servidor MTProxy para Telegram (Opcional)

Por qué debería de hostear un MTProto para telegram… ¿La pregunta en realidad es por qué no? Así que manos a la obra. El script de instalación que siempre uso es este y es tan fácil que solo basta con correr el siguiente comando y leer las instrucciones.

curl -o MTProtoProxyInstall.sh -L https://git.io/fjo34 && bash MTProtoProxyInstall.sh

Cuando termine debe de una salida similar a:

Use these links to connect to your proxy:
cyborg: tg://proxy?server=152.206.119.149&port=23&secret=eefe12eadckkkk213f015bae5a4128f1e87777772e676f6f676c652e636f6d

Luego solo resta copiar el link, pegarlo en cualquier chat de telegram y hacerle clic, la aplicación de Telegram solamente reconocerá el proxy.

7. Servidor de VoIP (Opcional)

Puede darse el caso de que en determinado momento necesitemos hacer una llamada, pero no dispongamos de WhatsApp o Telegram, ¡¡¡o que simplemente quieres tener un lugar tuyo para hablar con tus colegas y decidir a quien le caen a tiros en ese server de Call of Duty… no se diga más!!! Te presento a Mumble, es un TeamSpeak pero opensource. Y su instalación es bien sencilla:

Instalación del servidor y cliente para Mumble:

apt install mumble-server mumble -y

Luego correr el siguiente comando:

dpkg-reconfigure mumble-server
yes
yes
mumbleadmin

Ahora solo resta configurar el servidor, descomentar las siguientes opciones, removiendo «;»:

# [...]
autobanAttempts = 10
autobanTimeframe = 120
autobanTime = 300
# [...]
host=
# [...]
serverpassword=<<strongpassword>>
# [...]
users=<<>>
# [...]
textmessagelength=5000
# [...]
imagemessagelength=131072
# [...]
allowhtml=true
# [...]

Y reiniciar el servicio:

service mumble-server restart

Abrir el puerto TCP y UPD 64738

Tiene clientes para todos los OS, pero les dejo los links de descargas de los clientes de los OS más usados:
Windows, Android

Para acceder como admin al servidor desde el cliente, debe especificarse:

user: SuperUser
password: <<strongpassword>>

9. Cerrándonos (IPTables)

La seguridad es un aspecto importante, y aunque hemos cerrado los accesos posibles (SSH ahora por llaves), y usado contraseñas seguras en el servicio web brindado (Guacamole) siempre hay puertos abiertos innecesariamente, así que… por qué no proteger nuestro VPS al más puro estilo FortKnox?

En este mismo sitio hay un excelentísimo tutorial de Iptables, si quiere saber lo que se hará, lea aquí.

Manos a la obra… Primeramente tenemos que determinar cuáles son los puertos que tenemos abiertos que realmente se encuentran brindando servicios. Si ha seguido este tutorial debe de tener los siguientes servicios habilitados: SSH, MOSH, OpenVPN+Shapeshifter, Guacamole, Telegram MTProto y el servidor de VoIP Mumble. Si hacemos una relación de los puertos/protocolos que tenemos de cara a la red pública quedaría algo así:

ServicioProtocoloPuerto
SSH(1)TCP22
MOSH(2)UDP60001 – 60999
OVPN(3)TCP8888
MTProxy(4)TCP23
MumbleTCP/UDP64738

-1: El protocolo SSH utiliza el puerto 22 por defecto, aunque puede ser cambiado… Se podría pensar que este puerto podría cerrarse ya que se utiliza a MOSH, pero…
-2: MOSH utiliza el SSH para realizar el logueo y luego salta a los puertos UDP 60001-60999, así que no podremos cerrar el puerto SSH a menos que utilicemos algún tipo ssh proxy para realizar el logueo.
-3: El puerto por defecto de los servidores OpenVPN es el UDP 1194, pero recuerde que no le entramos al servicio por el puerto del OpenVPN sino por el puerto que deja expuesto el Shapeshifter, en el caso del tutorial enlazado es el puerto 8888
-4: En mi caso personal utilice el puerto 23, pero a la hora de correr el script esto puede ser cambiado

Una vez detectados los puertos que vamos a utilizar:

tcp_ports=22,23,88,64738
udp_ports=64738,60001:60999

Pues solo resta aplicar las reglas, para ello he escrito un pequeño script que automatiza el proceso:

git clone https://github.com/kCyborg/iptables_for_vps.git && \
cd iptables_for_vps/ && \
chmod +x iptables_script.sh && \
./iptables_for_vps.sh

NOTA: Si quiere agregar más puertos solamente edite las variables TCP_PORTS y UDP_PORTS y UDP_PORTS1 en el script
El script se encuentra en version 1, le agregaré más detalles en el transcurso del tiempo.

Breve descripcion del script: cerrará los accesos a todos los IPs que no sean cubanos, si algún IP que no esté permitido intenta loguearse será baneado por los siguientes 20 segundos, permite el ICMP y el traceroute, permite el tráfico desde y hacia los clientes conectados a la vpn…

 

10. Bonus: Personalizando al editor de textos nano

Algunos me saltarán a la yugular, pero no soporto al editor vi (malamente conozco cómo editar, buscar, borrar/copiar/pegar líneas) … ya sé que vi y emac son mucho mejores que nano pero comencé con Debian Jessie en el mundo de Linux y ya venía el Nano instalado, así que por que no mejorarlo personalizándolo?

Configuraciones básicas

Lo usual es que nano no tenga ningún archivo de configuración, así que hay que creárselo, lo pondremos donde van casi todos los archivos rc:

nano ~/.nanorc

Y le agregamos las siguientes líneas:

# Ver numeros de lineas
set linenumbers

# Si la linea anterior tiene indentación, la nueva línea también la tendrá:.
set autoindent

# De manera predeterminada, si el archivo no tiene una nueva línea al final del archivo, agrega una,
# esto puede causar problemas con las sumas de verificación, por lo que tiendo a tenerlo desactivado.
set nonewlines

# Cuando se presiona ctrl-x para salir, se guarda automáticamente sin preguntar.
set tempfile

# Crea una copia de seguridad del archivo que está editando, para restauraciones rápidas,
# aunque significa que debe ordenarlo usted mismo.
set backup

# Le advierte si el archivo ya está abierto, aunque aún puede proceder a editarlo.
set locking

# De forma predeterminada, Nano tiene algunos atajos útiles en la parte inferior de la pantalla.
# Esta opción hace que no se muestre.
set nohelp

Vale la pena aclarar que hay muchas más opciones que poner o quitar, para más información visitar aquí.

Remapeado de combinaciones de teclas

En nano se pueden remapear las combinaciones de teclas originales, por ejemplo:

# Remapear la búsqueda de palabras: ahora funcionara con Ctrl+F (originalmente es Ctrl+W)
bind ^f whereis main

# Remapear la accion de deshacer: ahora funcionara con Ctrl+Z
bind ^z undo main

# Remapear la accion de deshacer: ahora funcionara con Ctrl+Y
bind ^y redo main

También las teclas de control F1-F12 pueden ser remapeadas, originalmente tienen sus usos, pero vamos a darles otro uso:

# Guarda y cierra: ahora funcionara con F1
bind F1 exit main

# Guarda solamente: ahora funcionara con F2
bind F2 savefile main

# Busca la siguiente palabra, encontrada anteriormente con la búsqueda (ahora Ctrl+F),
# ahora funcionara con F3
bind F3 findnext main

Resaltado de sintaxis

Aunque Nano viene con algú resaltado de sintaxis por defecto, es bien pobre, así que ahora le agregaremos el resaltado de sintaxis (syntax highlight), este repo de github tiene opciones para muchos formatos diferentes de archivos, y es tan fácil de instalar como:

curl https://raw.githubusercontent.com/scopatz/nanorc/master/install.sh | sh

El script crea una carpeta en ~/.nano/, dentro de la cual copia todos los archivos que sirven para el resaltado de sintaxis, y el mismo script incluye todos esos archivos en nuestro ~/.nanorc.

Usando el mouse

Si trabajas a menudo por SSH con tus servidores, necesitas editar texto y usas algún emulador de terminal (como el PuTTY o el XShell) puedes habilitar el mouse de tal forma que la posición del puntero dentro del editor cambiará hacia donde hagas clic. Para habilitar esta opción basta con usar la bandera -m a la hora de abrir el nano:

nano -m archivo_de_prueba

Alias

Podemos crear diferentes alias en nuestro ~/.bashrc o ~/.zshrc:

alias snano='sudo nano -m --rcfile=/home/tnash/.nanorc'
alias qedit=’nano -m --tempfile --backup’
alias sqedit=’sudo -m nano --rcfile=/home/tnash/.nanorc --tempfile --backup’
  • snano ejecuta sudo nano, sin embargo, cuando ejecuta un comando sudo, no se ejecuta con su usuario y, como tal, no carga su archivo de configuración, por lo que el alias no es solo una abreviatura, sino que también garantiza que mi configuración esté cargada.

  • El qedit abre Nano, pero cuando presiona Ctrl+X, se guardará automáticamente sin preguntar, sin embargo, crea una copia de seguridad del archivo.

  • sqedit como qedit pero con sudo y una vez más pasando mi archivo nanorc.

Bonus

Si ponemos la bandera +NumeroEntero el editor nano abrirá el archivo que estamos trabajando en la linea que marca la variable NumeroEntero.

Script para automatizar el proceso:

Si quiere puede simplemente:

cd /opt/ && \
git clone https://github.com/kCyborg/nanorc.git && \
cd nanorc/ && \
bash configure_nanorc

11. Un navegador en la terminal

Navegar en la terminal siempre se ha podido hacer, algunos paquetes como lynx o w3m permiten esto desde hace años… pero y si se pudiera navegar en la consola como si se tuviera un navegador moderno con el cual podemos interactuar con el mouse, instalar extensiones, usar pestañas incluso «ver» videos? Pues todo eso es posible usando browsh. Para instalarlo basta con:

wget https://github.com/browsh-org/browsh/releases/download/v1.6.4/browsh_1.6.4_linux_amd64.deb
apt install ./browsh_1.6.4_linux_amd64.deb
rm ./browsh_1.6.4_linux_amd64.deb
browsh

Antes de lanzarnos a navegar primeramente veamos los atajos del teclado:

CombinaciónAcción
F1Abrir la documentación
ARROW KEYS, PGUP, PGDNMoverse en la página
CTRL+qSalir de browsh
CTRL+lMoverse a la barra de búsqueda
BACKSPACEIr a la última página
CTRL+rRecargar página
CTRL+tNueva pestaña
CTRL+wCerrar pestaña
CTRL+\Moverse entre pestañas

Una vez abramos la aplicación la página por defecto será https://www.brow.sh/, la cual podremos cambiar con solo presionar Ctrl+L, esta combinación de teclas nos llevará a la «barra de búsqueda», en donde escribiremos cualquier frase o link y podremos navegar. Para navegar por las páginas dentro de la aplicación basta con utilizar el mouse. Si queremos una nueva pestaña solamente presionamos Ctrl+T, y si queremos cambiar de pestañas basta con presionar la combinación Ctrl+\

 

+++++++++++++++++++++++++++++++++++++++++++++++++++

Autores:

  • Frank Morales
  • Franco Díaz

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.8 / 5. Recuento de votos: 15

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*