Configuración inicial del servidor con Ubuntu 20.04/18.04 y 16.04


Este tutorial lo guiará en los primeros pasos básicos que necesita para configurar en un nuevo servidor Ubuntu instalado para aumentar la seguridad y confiabilidad de su servidor.

Las configuraciones explicadas en este tema son casi las mismas para todos los sistemas de servidor Ubuntu, con respecto a la plataforma del sistema operativo subyacente, si Ubuntu está instalado en un servidor bare-metal, en una máquina virtual privada o una máquina virtual en un VPS público. nube.

  • Instalación del servidor Ubuntu 20.04
  • Instalación del servidor Ubuntu 18.04
  • Instalación del servidor Ubuntu 16.04

Actualizar y actualizar el sistema Ubuntu

El primer paso del que debe ocuparse en caso de una nueva instalación del servidor Ubuntu o un nuevo VPS de Ubuntu implementado es asegurarse de que el sistema y todos los componentes del sistema, como el kernel, tengan los parches de seguridad.

Para actualizar el servidor Ubuntu, inicie sesión en la consola del servidor con una cuenta con privilegios de root o directamente como root y ejecute los siguientes comandos para realizar el proceso de actualización y actualización.

$ sudo apt update 

Después de ejecutar el comando de actualización, verá la cantidad de paquetes disponibles para el proceso de actualización y el comando utilizado para enumerar las actualizaciones de paquetes.

$ sudo apt list --upgradable

Después de haber consultado la lista de paquetes disponibles para actualizar, ejecute el siguiente comando para iniciar el proceso de actualización del sistema.

$ sudo apt upgrade

Para eliminar todos los paquetes deb descargados localmente y todos los demás cachés de apt-get, ejecute el siguiente comando.

$ sudo apt autoremove
$ sudo apt clean

Crear nueva cuenta en Ubuntu

De forma predeterminada, como medida de seguridad, la cuenta raíz está completamente deshabilitada en Ubuntu. Para crear una nueva cuenta en el sistema, inicie sesión en el sistema con el usuario de la cuenta con privilegios de root y cree una nueva cuenta con el siguiente comando.

A esta nueva cuenta se le otorgarán privilegios de poderes de root a través del comando sudo y se utilizará para realizar tareas administrativas en el sistema. Asegúrese de configurar una contraseña segura para proteger esta cuenta. Siga el mensaje adduser para configurar los detalles del usuario y la contraseña.

$ sudo adduser ubuntu_user

Si esta cuenta se asignará a otro administrador del sistema, puede obligar al usuario a cambiar su contraseña en el primer intento de inicio de sesión emitiendo el siguiente comando.

$ sudo chage -d0 ubuntu_user

Por ahora, el nuevo usuario agregado no puede realizar tareas administrativas a través de la utilidad sudo. Para otorgar privilegios administrativos a esta nueva cuenta de usuario, debe agregar el usuario al grupo del sistema "sudo" emitiendo el siguiente comando.

$ sudo usermod -a -G sudo ubuntu_user

De forma predeterminada, todos los usuarios que pertenecen al grupo "sudo" pueden ejecutar comandos con privilegios de root a través de la utilidad sudo. El comando Sudo debe usarse antes de escribir el comando necesario para la ejecución, como se muestra en el siguiente ejemplo.

$ sudo apt install package_name

Pruebe si el nuevo usuario tiene los privilegios de root otorgados, iniciando sesión en el sistema y ejecutando el comando apt update con el prefijo sudo.

$ su - ubuntu_user
$ sudo apt update

Configurar el nombre de host del sistema en Ubuntu

Por lo general, el nombre de host de la máquina se configura durante el proceso de instalación del sistema o cuando se crea el VPS en la nube. Sin embargo, debe cambiar el nombre de su máquina para reflejar mejor el destino de su servidor o para describir mejor su propósito final.

En una gran empresa, las máquinas reciben nombres de esquemas de nombres complejos para identificar fácilmente la máquina en los racks del centro de datos. Por ejemplo, si su máquina Ubuntu va a operar un servidor de correo, el nombre de la máquina debe reflejar este hecho y puede configurar el nombre de host de la máquina como mx01.mydomain.lan, por ejemplo.

Para mostrar detalles sobre el nombre de host de su máquina, ejecute el siguiente comando.

$ hostnamectl

Para cambiar el nombre de su máquina, emita el comando hostnamectl con el nuevo nombre que configurará para su máquina, como se ilustra en el siguiente extracto.

$ sudo hostnamectl set-hostname tecmint

Verifique el nuevo nombre de su sistema con uno de los siguientes comandos.

$ hostname
$ hostname -s
$ cat /etc/hostname 

Configurar SSH con autenticación de clave pública en Ubuntu

Para aumentar el grado de seguridad del sistema de un servidor Ubuntu, debe configurar la autenticación de clave pública SSH para una cuenta local. Para generar el par de claves SSH, la clave pública y privada, con una longitud de clave especificada, como 2048 bits, ejecute el siguiente comando en la consola de su servidor.

Asegúrese de haber iniciado sesión en el sistema con el usuario con el que está configurando la clave SSH.

$ su - ubuntu_user
$ ssh-keygen -t RSA -b 2048

Mientras se genera la clave, se le pedirá que agregue una frase de contraseña para asegurar la clave. Puede ingresar una contraseña segura o dejar la contraseña en blanco si desea automatizar tareas a través del servidor SSH.

Una vez generada la clave SSH, puede copiar la clave pública a un servidor remoto ejecutando el siguiente comando. Para instalar la clave pública en el servidor SSH remoto, necesitará una cuenta de usuario remoto con los permisos y credenciales adecuados para iniciar sesión en el servidor remoto.

$ ssh-copy-id [email protected]_server

Debería poder iniciar sesión automáticamente a través de SSH en el servidor remoto utilizando el método de autenticación de clave pública. No necesitará agregar la contraseña de usuario remoto mientras usa la autenticación de clave pública SSH.

Una vez que haya iniciado sesión en el servidor remoto, puede comenzar a ejecutar comandos, como el comando w para enumerar los usuarios que iniciaron sesión remotamente en ssh, como se muestra en la siguiente captura de pantalla.

Escriba exit en la consola para cerrar la sesión SSH remota.

$ ssh [email protected]_server
$ w
$ exit

Para ver el contenido de su clave SSH pública a fin de instalar manualmente la clave en un servidor SSH remoto, emita el siguiente comando.

$ cat ~/.ssh/id_rsa.pub

Servidor SSH seguro en Ubuntu

Para proteger el demonio SSH, debe cambiar el número de puerto SSH predeterminado de 22 a un puerto aleatorio, superior a 1024, y no permitir el acceso SSH remoto a la cuenta raíz mediante contraseña o clave, abriendo el archivo de configuración principal del servidor SSH y hacer el siguientes cambios.

$ sudo vi /etc/ssh/sshd_config

Primero, busque la línea comentada # Port22 y agregue una nueva línea debajo (reemplace el número de puerto de escucha en consecuencia):

Port 2345

No cierre el archivo, desplácese hacia abajo y busque la línea #PermitRootLogin sí, elimine el comentario de la línea eliminando el signo # (hashtag) del principio de la línea y modifique la línea para que se vea como se muestra en el siguiente extracto.

PermitRootLogin no

Luego, reinicie el servidor SSH para aplicar la nueva configuración y pruebe la configuración intentando iniciar sesión desde una máquina remota en este servidor con la cuenta raíz a través del nuevo número de puerto. El acceso a la cuenta raíz a través de SSH debe estar restringido.

$ sudo systemctl restart sshd

Además, ejecute el comando grep para mostrar el nuevo número de puerto de escucha para el servidor SSH.

$ sudo ss -tlpn| grep ssh
$ sudo netstat -tlpn| grep ssh

Hay situaciones en las que es posible que desee desconectar automáticamente todas las conexiones SSH remotas establecidas en su servidor después de un período de inactividad.

Para habilitar esta función, ejecute el siguiente comando, que agrega la variable bash TMOUT al archivo oculto .bashrc de su cuenta y obliga a que cada conexión SSH realizada con el nombre del usuario se desconecte o se elimine después de 5 minutos de inactividad.

$ echo 'TMOUT=300' >> .bashrc

Ejecute el comando tail para verificar si la variable se ha agregado correctamente al final del archivo .bashrc. Todas las conexiones SSH posteriores se cerrarán automáticamente después de 5 minutos de inactividad a partir de ahora.

$ tail .bashrc

En la siguiente captura de pantalla, la sesión SSH remota desde la máquina drupal al servidor Ubuntu a través de la cuenta ubuntu_user se ha agotado y se ha cerrado automáticamente después de 5 minutos.

Configurar Ubuntu Firewall UFW

Cada servidor necesita un firewall bien configurado para asegurar el sistema a nivel de red. El servidor Ubuntu usa la aplicación UFW para administrar las reglas de iptables en el servidor.

Verifique el estado de la aplicación de firewall UFW en Ubuntu emitiendo los siguientes comandos.

$ sudo systemctl status ufw
$ sudo ufw status

Por lo general, el demonio de firewall UFW está en funcionamiento en el servidor Ubuntu, pero las reglas no se aplican de forma predeterminada. Antes de habilitar la política de firewall UFW en su sistema, primero debe agregar una nueva regla para permitir que el tráfico SSH pase a través del firewall a través del puerto SSH modificado. La regla se puede agregar ejecutando el siguiente comando.

$ sudo ufw allow 2345/tcp

Una vez que haya permitido el tráfico SSH, puede habilitar y verificar la aplicación de firewall UFW con los siguientes comandos.

$ sudo ufw enable
$ sudo ufw status

Para agregar nuevas reglas de firewall para otros servicios de red instalados posteriormente en su servidor, como un servidor HTTP, un servidor de correo u otros servicios de red, use los siguientes ejemplos de comandos de firewall como guía.

$ sudo ufw allow http  #allow http traffic
$ sudo ufw allow proto tcp from any to any port 25,443  # allow https and smtp traffic

Para enumerar todas las reglas de firewall, ejecute el siguiente comando.

$ sudo ufw status verbose

Establecer la hora del servidor de Ubuntu

Para controlar o consultar el reloj del servidor Ubuntu y otras configuraciones de tiempo relacionadas, ejecute el comando timedatectl sin ningún argumento.

Para cambiar la configuración de la zona horaria de su servidor, primero ejecute el comando timedatectl con el argumento list-timezones para enumerar todas las zonas horarias disponibles y, luego, configure la zona horaria de su sistema como se muestra en el siguiente extracto.

$ sudo timedatectl 
$ sudo timedatectl list-timezones 
$ sudo timedatectl set-timezone Europe/Vienna

El nuevo cliente daemon systemd-timesyncd systemd se puede utilizar en Ubuntu para proporcionar una hora precisa para su servidor a través de la red y sincronizar la hora con un servidor de pares de tiempo superior.

Para aplicar esta nueva característica de Systemd, modifique el archivo de configuración del demonio systemd-timesyncd y agregue los servidores NTP geográficamente más cercanos a la línea de declaración NTP, como se muestra en el siguiente extracto del archivo:

$ sudo nano /etc/systemd/timesyncd.conf

Agregue la siguiente configuración al archivo timesyncd.conf:

[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=ntp.ubuntu.com

Para agregar los servidores NTP geográficamente más cercanos, consulte la lista de servidores del proyecto de grupo NTP en la siguiente dirección: http://www.pool.ntp.org/en/

Luego, reinicie el demonio de sincronización temporal de Systemd para reflejar los cambios y verificar el estado del demonio ejecutando los siguientes comandos. Después de reiniciar, el demonio comenzará a sincronizar la hora con el nuevo servidor ntp.

$ sudo systemctl restart systemd-timesyncd.service 
$ sudo systemctl status systemd-timesyncd.service

Deshabilitar y eliminar servicios innecesarios en Ubuntu

Para obtener una lista de todos los servicios de red TCP y UDP en funcionamiento de forma predeterminada en su servidor Ubuntu, ejecute el comando ss o netstat.

$ sudo netstat -tulpn
OR
$ sudo ss -tulpn

A partir de la versión de Ubuntu 16.10, el solucionador de DNS predeterminado ahora está controlado por el servicio resuelto por systemd, como lo revela la salida de los comandos netstat o ss.

También debe verificar el estado del servicio resuelto por systemd ejecutando el siguiente comando.

$ sudo systemctl status systemd-resolved.service

El servicio resuelto por systemd se vincula en todas las interfaces de red habilitadas y escucha en los puertos 53 y 5355 TCP y UDP.

La ejecución de un demonio DNS de almacenamiento en caché resuelto por el sistema en un servidor de producción puede ser peligroso debido a la gran cantidad de ataques DDOS realizados por piratas informáticos maliciosos contra servidores DNS no seguros.

Para detener y deshabilitar este servicio, ejecute los siguientes comandos.

$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved

Verifique si el servicio se ha detenido y deshabilitado emitiendo el comando ss o netstat. Los puertos de escucha resueltos por systemd, 53 y 5355 TCP y UDP, no deben aparecer en la salida del comando netstat o ss, como se ilustra a continuación.

También debe reiniciar la máquina para deshabilitar completamente todos los servicios de demonio resueltos por systemd y restaurar el archivo predeterminado /etc/resolv.conf.

$ sudo ss -tulpn
$ sudo netstat -tulpn
$ sudo systemctl reboot

Aunque ha desactivado algunos servicios de red no deseados para que se ejecuten en su servidor, también hay otros servicios instalados y en ejecución en su sistema, como el proceso lxc y el servicio snapd. Estos servicios se pueden detectar fácilmente mediante los comandos top o pstree.

$ sudo ps aux
$ sudo top
$ sudo pstree

En caso de que no vaya a utilizar la virtualización de contenedores LXC en su servidor o comenzar a instalar el software empaquetado a través del administrador de paquetes Snap, debe deshabilitar y eliminar por completo estos servicios, emitiendo los siguientes comandos.

$ sudo apt autoremove --purge lxc-common lxcfs
$ sudo apt autoremove --purge snapd

¡Eso es todo! Ahora, el servidor de Ubuntu está preparado para instalar software adicional necesario para aplicaciones o servicios de red personalizados, como instalar y configurar un servidor web, un servidor de base de datos, un servicio para compartir archivos u otras aplicaciones específicas.