Configuración inicial de Ubuntu Server para principiantes


Este tutorial lo guiará en los primeros pasos básicos que necesita 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, en relación con la plataforma del sistema operativo subyacente, ya sea que Ubuntu esté instalado en un servidor completo, en una máquina virtual privada o en una máquina virtual derivada en un público de VPS nube.

  1. Ubuntu Server Edition installation

Actualizar y actualizar el sistema de Ubuntu

El primer paso que debe tener en cuenta en el caso de una instalación nueva 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, el administrador de paquetes y todos los demás paquetes instalados, estén actualizados. A la fecha con las últimas versiones lanzadas y parches de seguridad.

Para actualizar el servidor de Ubuntu, para iniciar 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 los paquetes.

$ sudo apt list --upgradable

Después de consultar la lista de paquetes disponibles para la actualización, 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 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.

Esta nueva cuenta se otorgará con privilegios de poderes de raíz mediante el 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 indicador adduser para configurar los detalles y la contraseña del usuario.

$ sudo adduser ubuntu_user

Si esta cuenta se asignará a otro administrador del sistema, puede forzar 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 a esta nueva cuenta de usuario con privilegios administrativos, debe agregar el usuario al grupo de 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 SPV 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 tienen nombres de complejos esquemas de nombres para poder identificar fácilmente la máquina en los bastidores del centro de datos. Por ejemplo, si su máquina Ubuntu 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 hostnamectl command con el nuevo nombre que configurará para su máquina, como se ilustra en el extracto a continuación.

$ 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 un par de claves SSH, las claves pública y privada, con una longitud de clave específica, como 2048 bits, ejecutan el siguiente comando en la consola del servidor.

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

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

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

Una vez que se ha generado 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 del 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 w command para enumerar los usuarios registrados remotos 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 para instalar manualmente la clave en un servidor SSH remoto, ejecute 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 remoto de SSH a la cuenta raíz a través de Contraseña o clave, abriendo el archivo de configuración principal del servidor SSH y realice los cambios siguientes.

$ sudo vi /etc/ssh/sshd_config

Primero, busque en 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 yes , elimine el comentario de la línea eliminando el signo # (hashtag) al principio de la línea y modifique la línea para que se vea como se muestra en el extracto de abajo.

PermitRootLogin no

Luego, reinicie el servidor SSH para aplicar la nueva configuración y pruebe la configuración al intentar 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 de root a través de SSH debe estar restringido.

$ sudo systemctl restart sshd

Además, ejecute netstat o comando ss y filtre la salida a través de 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 el archivo oculto TMOUT a su cuenta .bashrc y obliga a cada conexión SSH con el nombre del el usuario se desconectará o se retirará después de 5 minutos de inactividad.

$ echo 'TMOUT=300' >> .bashrc

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

$ tail .bashrc

En la captura de pantalla de abajo, 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

Normalmente, el demonio de firewall UFW está activo y en ejecución 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 el 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 el tiempo del servidor 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 zona horaria de su servidor, primero ejecute timedatectl command con el argumento list-timezones para enumerar todas las zonas horarias disponibles y, luego, establezca la zona horaria de su sistema como se muestra en el extracto a continuación.

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

El nuevo systemd-timesyncd del cliente del demonio del sistema 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 interlocutor 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 la declaración NTP, como se muestra en el extracto del archivo a continuación:

$ 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 sus servidores NTP geográficos más cercanos, consulte la lista de servidores de proyectos del grupo NTP en la siguiente dirección: http://www.pool.ntp.org/en/

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

$ 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 en su servidor Ubuntu, ejecute el comando ss o netstat.

$ sudo netstat -tulpn
OR
$ sudo ss -tulpn

Comenzando con la versión Ubuntu 16.10 , el sistema de resolución de DNS predeterminado ahora está controlado por el servicio solucionado por el sistema , como lo revela la salida de netstat o comandos ss .

También debe verificar el estado del servicio systemd-resolution ejecutando el siguiente comando.

$ sudo systemctl status systemd-resolved.service

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

La ejecución de sistema resuelto para almacenar el daemon DNS en un servidor de producción puede ser peligroso debido a la cantidad de ataques DDOS realizados por piratas informáticos malintencionados 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 e inhabilitado emitiendo ss o comando netstat . Los puertos de escucha resueltos del sistema, 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 daemon resueltos por el sistema y restaurar el archivo predeterminado /etc/resolv.conf .

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

Aunque ha deshabilitado la ejecución de algunos servicios de red no deseados 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 ps, 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 comience a instalar el software empaquetado a través del administrador de paquetes Snap, debe deshabilitar y eliminar completamente estos servicios, emitiendo los siguientes comandos.

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

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