Algunas personas piensan que esto no es peligroso si no hay servicios ejecutándose en el servidor y no importa que todos los puertos estén abiertos. No estamos de acuerdo. Si las conexiones a puertos no utilizados (y populares) se bloquean o se interrumpen, la gran mayoría de los intrusos maliciosos se trasladarán a otra máquina donde los puertos acepten conexiones. Solo toma unos minutos configurar un firewall, por lo que le recomendamos que lo haga para proteger su servidor.
Después de crear un nuevo servidor en la nube, le recomendamos que realice las siguientes tareas para mejorar la seguridad del servidor.
Iniciar sesión en el servidor
Tan pronto como tenga la dirección IP y la contraseña de su servidor, inicie sesión con el siguiente comando SSH:
ssh [email protected]
Nota :si está iniciando sesión en un servidor reconstruido, es posible que vea un mensaje que indica que la identificación del host remoto ha cambiado. Cuando reconstruye un servidor en la nube, la clave del host remoto cambia, lo que indica actividad inusual o sospechosa en su computadora. Para evitar este problema, elimine la entrada anterior de la dirección IP del servidor. En su local computadora, edite el SSH known_hosts
archivo utilizando el siguiente comando y elimine cualquier entrada que apunte a la dirección IP de su servidor en la nube:
nano ~/.ssh/known_hosts
Si su computadora local ejecuta un sistema operativo que no sea Linux o Mac OS X, la ubicación de los known_hosts
el archivo diferirá. Consulte la documentación de su sistema operativo para conocer la ubicación de este archivo.
Cambiar la contraseña de root
Después de iniciar sesión en su servidor, cambie la contraseña de root emitiendo el siguiente comando:
passwd
Agregar un usuario administrador
Nota :Si está configurando usuarios de SSH adicionales para un servidor de OnMetal, consulte Crear servidores en la nube de OnMetal para ver los pasos aplicables de OnMetal.
-
Para agregar un usuario administrador, emita el siguiente comando y reemplace demo con el nombre de usuario de su elección:
adduser demo
Nota :Después de este paso inicial, no debe iniciar sesión como usuario raíz para realizar operaciones diarias en su servidor. Sin embargo, necesitará privilegios de superusuario (sudo) para completar estas tareas administrativas.
-
Para asignar los privilegios sudo al usuario administrador, emita el siguiente comando, que invoca el editor nano de forma predeterminada en el sistema operativo Ubuntu:
visudo
-
Al final del archivo, agregue su nombre de usuario administrador (en lugar de demostración en el siguiente ejemplo) y la siguiente cadena de texto:
demo ALL=(ALL) ALL
-
Cuando termine de agregar esta línea, salga, confirme y guarde el archivo de la siguiente manera:
una. Presiona Ctrl-X para salir.b. Presiona y para confirmar los cambios.c. Pulsa Intro para guardar el archivo como
/etc/sudoers.tmp
.Nota :Mientras se trabaja en el editor nano, la tecla de retroceso/borrar funciona de forma inesperada, eliminando caracteres delante del cursor en lugar de detrás de él. Puede resolver este problema editando el
/etc/nanorc
archivo (con nano, por ejemplo) y ya sea descomentando la siguiente línea o agregándola:set rebinddelete
El nuevo comportamiento entra en vigor después de guardar el archivo y abrir nano de nuevo.
Configurar claves públicas y privadas (SSH keygen)
Una forma efectiva de asegurar el acceso SSH a su servidor en la nube es usar un servidor público/privado. key, lo que significa que una clave pública se coloca en el servidor y la clave privada está en su computadora local. Esto hace que sea imposible que alguien inicie sesión usando solo una contraseña; deben tener la clave privada. Esta configuración consta de los siguientes pasos básicos:cree la clave en su computadora local, copie la clave pública en el servidor y configure los permisos correctos para la clave.
Las siguientes instrucciones asumen que usa Linux o Mac OS X. Para obtener instrucciones sobre Windows, consulte Generación de claves con Putty para Windows.
Paso 1. Crear las claves pública y privada
-
En su computadora local, cree una carpeta para guardar sus llaves:
mkdir ~/.ssh
-
Para crear las claves SSH, en su local computadora, ingrese el siguiente comando:
ssh-keygen -t rsa
-
El id_rsa y el id_rsa.pub se crean en el directorio .ssh. El archivo rsa.pub contiene la clave pública. Colocarás este archivo en tu servidor.
-
El archivo id_rsa es su clave privada. Nunca muestre, regale ni guarde este archivo en una computadora pública.
-
Paso 2. Copie la clave pública
Puedes usar el scp
comando para colocar la clave pública en su servidor.
-
Mientras todavía está en su local computadora, ingrese el siguiente comando, sustituyendo su usuario administrador por demo, dirección IP y directorio de inicio del usuario administrador:
scp ~/.ssh/id_rsa.pub [email protected]:/home/demo/
-
Cuando se le solicite, ingrese la contraseña del usuario administrador.
-
Cree un directorio en la carpeta de inicio del usuario administrador en su servidor llamado .ssh y mueva la clave de pub allí, como se muestra en los siguientes ejemplos:
mkdir /home/demo/.ssh mv /home/demo/id_rsa.pub /home/demo/.ssh/authorized_keys
Paso 3. Modificar permisos SSH
Establezca los permisos correctos en la clave usando los siguientes comandos, cambiando el usuario y grupo "demo" a su usuario y grupo administrador:
chown -R demo:demo /home/demo/.ssh
chmod 700 /home/demo/.ssh
chmod 600 /home/demo/.ssh/authorized_keys
Ahora ha creado con éxito la clave en su computadora local, ha copiado la clave pública en su servidor y ha establecido los permisos correctos para la clave.
Modificar la configuración SSH
Mantener el servicio SSH en el puerto predeterminado de 22 lo convierte en un objetivo fácil. Recomendamos cambiar la configuración predeterminada de SSH para que sea más segura.
-
Ejecute el siguiente comando:
nano /etc/ssh/sshd_config
-
Cambie el puerto predeterminado de 22 a uno de su elección, desactive los inicios de sesión raíz y defina qué usuarios pueden iniciar sesión:
Port 22 <--- change to a port of your choosing Protocol 2 PermitRootLogin no PasswordAuthentication no UseDNS no AllowUsers demo
Nota :El número de puerto puede ser cualquier número entero entre 1025 y 65536. Asegúrese de anotar el nuevo número de puerto y recuerde evitar conflictos de puerto si configura procesos de escucha adicionales más adelante.
Debido a que configuró una clave pública/privada, puede configurar el parámetro PasswordAuthentication en no. Sin embargo, si tiene la intención de acceder a su servidor desde diferentes computadoras, es posible que desee dejar la Autenticación de contraseña configurada en sí. Solo use la clave privada si la computadora local es segura (es decir, no coloque la clave privada en una computadora del trabajo).
Estos ajustes aún no están habilitados. Antes de reiniciar SSH usando el nuevo puerto, debe crear un firewall simple usando iptables.
Nota :No reinicie SSH todavía.
Configure un firewall privado usando iptables
La utilidad llamada iptables es el cortafuegos predeterminado para los sistemas Linux. Funciona rechazando las conexiones a los puertos o servicios que especifique.
systemd
. Servidores que usan systemd
ahora use otra interfaz de firewall para iptables llamada FirewallD. La sintaxis y la implementación de FirewallD varían mucho. Para una configuración de firewall adecuada en FirewallD y systemd
servidores, consulte "Introducción a firewalld" en el portal de clientes de Red Hat.
Como parte de este procedimiento, abrirá tres puertos:ssh , http y https.
A continuación, creará dos archivos:
-
/
etc/iptables.test.rules
-
/etc/iptables.up.rules
El primero es un conjunto de reglas de prueba temporales y el segundo es el conjunto permanente de reglas que usará iptables.
Nota :Necesita permisos de usuario raíz para completar el procedimiento. Si actualmente no ha iniciado sesión como root, use el comando sudo delante de los siguientes comandos.
-
Ejecute el siguiente comando para ver qué procesos se están ejecutando actualmente:
iptables -L
Verás algo similar a esto:
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Esto significa que el servidor está aceptando cualquier cosa de cualquier persona en cualquier puerto.
-
Para construir el firewall, cree el archivo
/etc/iptables.test.rules
y añadir algunas reglas. Si ha seguido estos pasos anteriormente, es posible que este archivo no esté vacío:nano /etc/iptables.test.rules
-
Cambie y agregue puertos según sea necesario.
-
Ejecute el siguiente comando para aplicar las reglas a su servidor:
iptables-restore < /etc/iptables.test.rules
-
Ejecute el siguiente comando para observar cualquier diferencia:
iptables -L
-
Si no hay cambios en la salida, repita los pasos anteriores y vuelva a intentarlo.
-
Verifique las reglas y vea exactamente lo que se acepta, rechaza y descarta. Cuando esté satisfecho con las reglas, guárdelas de forma permanente emitiendo el siguiente comando:
iptables-save > /etc/iptables.up.rules
Nota :Si el servidor se reinicia antes de guardar las reglas de forma permanente, los cambios se pierden y el servidor vuelve a la configuración anterior.
-
Agregue un script que el sistema ejecuta cuando se inician las interfaces de red. Cree el archivo ejecutando:
nano /etc/network/if-pre-up.d/iptables
-
Agregue las siguientes líneas al nuevo archivo:
#!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules
-
Guarde sus cambios y luego haga que el nuevo script sea ejecutable:
chmod +x /etc/network/if-pre-up.d/iptables
Configurar iptables en Red Hat
Si está utilizando una distribución de Red Hat, iptables funciona de forma un poco diferente a como lo hace en el sistema operativo Ubuntu. Usando los siguientes comandos, puede cambiar su conjunto de reglas de iptables directamente desde la línea de comandos.
HTTP - puerto 80
Para RHEL 7 y CentOS 7, use el siguiente comando para abrir el puerto 80 para el tráfico HTTP (web) en su firewall de iptables:
sudo firewall-cmd --add-service=http --permanent
Para versiones anteriores del sistema operativo, use el siguiente comando:
sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport http -j ACCEPT
HTTPS/SSL - puerto 443
Para RHEL 7 y CentOS 7, use el siguiente comando para abrir el puerto 443 para el tráfico HTTP seguro:
sudo firewall-cmd --add-service=https --permanent
Para versiones anteriores del sistema operativo, use el siguiente comando:
sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport https -j ACCEPT
SSH - puerto 22
Aunque el puerto 22 está abierto de manera predeterminada para permitirle acceder a su servidor por SSH después de que se construya, el siguiente comando le muestra cómo abrir el puerto 22 en RHEL 7 y CentOS 7:
sudo firewall-cmd --add-service=ssh -permanent
Si configura un puerto personalizado para SSH, use el siguiente comando para RHEL7 y CentOS 7:
sudo firewall-cmd --add-port=<customport>/tcp --permanent
Para versiones anteriores del sistema operativo, use el siguiente comando para abrir el puerto 22:
sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport ssh -j ACCEPT
FTP - puerto 21
FTP es un servicio común para la transferencia de archivos, pero en gran parte está obsoleto porque no es un protocolo seguro. Recomendamos encarecidamente utilizar un protocolo de transferencia de archivos seguro como SFTP en su lugar. Si absolutamente tiene que usar FTP, use el siguiente comando para abrir el puerto predeterminado de 21 en RHEL 7 y CentOS 7:
sudo firewall-cmd --add-service=ftp --permanent
Para versiones anteriores del sistema operativo, use los siguientes comandos:
sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport ftp -j ACCEPT
sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport ftp-data -j ACCEPT
MySQL - puerto 3306
Si necesita realizar una conexión remota a su base de datos MySQL desde otro servidor, debe abrir el puerto 3306 en iptables. Para RHEL 7 y CentOS 7, use el siguiente comando:
sudo firewall-cmd --add-service=mysql --permanent
Para versiones anteriores del sistema operativo, use el siguiente comando:
sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport mysql -j ACCEPT
Guarde sus reglas
Utilice el siguiente comando para guardar todas las reglas que ha creado. Si no se guarda antes de reiniciar su servidor, el conjunto de reglas de iptables volverá al conjunto de reglas predeterminado, bloqueando todo el tráfico excepto en el puerto 22. Si está utilizando RHEL 7 o CentOS 7, este paso no es necesario.
sudo /sbin/service iptables save
Reiniciar iptables
Sus cambios en iptables surten efecto solo después de haber guardado las reglas y reiniciado el servicio de iptables. Recuerde, si reinicia iptables antes de guardar sus reglas, iptables vuelve al conjunto de reglas predeterminado.
Para RHEL 7 y CentOS 7, use el siguiente comando:
firewall-cmd --reload
Para versiones anteriores del sistema operativo, use el siguiente comando:
sudo /sbin/service iptables restart
Comprobar reglas
Para verificar las reglas después de recargar el firewall en RHEL 7 y CentOS 7, use los siguientes comandos:
firewall-cmd --get-active-zones
Esto devuelve qué zona está activa (la que acaba de guardar todas sus reglas).
firewall-cmd --zone=<zone> --list-all
Esto enumera los servicios habilitados en una zona específica.
Reiniciar ssh
Ahora puede reiniciar el servicio SSH. Permanezca conectado mientras reiniciash y pruébelo con una nueva conexión. De esa manera, si ocurre un error, puede solucionarlo más fácilmente.
En la mayoría de las distribuciones, el servicio es sshd y lo reinicia con el comando:
sudo service sshd restart
En el sistema operativo Ubuntu y algunas otras distribuciones, el servicio se llama ssh y lo reinicia con un comando similar:
sudo service ssh restart
Si tiene problemas para establecer una nueva conexión después de reiniciar SSH, verifique los síntomas para determinar qué podría estar mal.
- Si se agota el tiempo de conexión, es posible que haya un problema con la configuración de iptables.
- Si recibe una advertencia sobre una clave privada, es posible que su clave no esté instalada correctamente en el servidor (verifique si hay saltos de línea adicionales o caracteres que se hayan perdido en una operación de copiar y pegar).
- Si ha estado reconstruyendo el servidor, es posible que deba eliminar la clave de host de su archivoknown_hosts antes de poder establecer una conexión.
Si está bloqueado
La configuración incorrecta de SSH, sudo o iptables podría hacer que se le bloquee el acceso a su sistema. Si esto ocurre, inicie sesión en el Panel de control de TheRackspace Cloud y use la Consola de emergencia o el Modo de rescate para reparar las configuraciones.
Estos son los conceptos básicos para conectarse a un servidor en la nube de Linux y configurar la seguridad. Consulte Windows Cloud Server para realizar estos pasos en un servidor de Windows.