GNU/Linux >> Tutoriales Linux >  >> Linux

Configurar la seguridad básica

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.

Nota: Podrían ser necesarias pequeñas modificaciones a los siguientes comandos si está utilizando una distribución diferente. Si es necesario, consulte la documentación de su sistema operativo.

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.

  1. 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.

  2. 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
    
  3. 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
    
  4. 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

  1. En su computadora local, cree una carpeta para guardar sus llaves:

    mkdir ~/.ssh
    
  2. 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.

  1. 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/
    
  2. Cuando se le solicite, ingrese la contraseña del usuario administrador.

  3. 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.

  1. Ejecute el siguiente comando:

    nano /etc/ssh/sshd_config
    
  2. 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.

Nota: El procedimiento de esta sección no se aplica a los servidores que usan 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.

  1. 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.

  2. 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
    
  3. Cambie y agregue puertos según sea necesario.

  4. Ejecute el siguiente comando para aplicar las reglas a su servidor:

    iptables-restore < /etc/iptables.test.rules
    
  5. Ejecute el siguiente comando para observar cualquier diferencia:

    iptables -L
    
  6. Si no hay cambios en la salida, repita los pasos anteriores y vuelva a intentarlo.

  7. 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.

  8. 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
    
  9. Agregue las siguientes líneas al nuevo archivo:

    #!/bin/sh
    /sbin/iptables-restore < /etc/iptables.up.rules
    
  10. 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.


Linux
  1. Cómo instalar y configurar OpenVPN Server en Debian 10

  2. Gestión básica del cortafuegos de iptables

  3. Gestión básica de usuarios de Linux

  4. Configurar el servidor MariaDB en CentOS

  5. Configuración de seguridad IP en IIS

Cómo configurar NGINX en un servidor CentOS 7

Cómo configurar Postfix como un servidor SMTP de solo envío en Ubuntu 20.04

Instalar y configurar phpMyAdmin

Configurar enlaces de red en Ubuntu Server

Ubuntu 19.04:configurar el servidor NTP

Centos 7:configurar el servidor NTP