En este momento estás viendo Instalación y configuración de Apache y el Firewall UFW

Instalación y configuración de Apache y el Firewall UFW

Instalación y configuración de Apache y UFW

Sumario

  • Requisitos previos
    • Crear usuario normal con privilegios de root
    • Configurar un firewall básico
  • Habilitar el acceso externo para el usuario normal
    • Si root se autentica con contraseña
    • Si root se autentica con pareja de claves
  • Instalación del servidor web apache
    • Configuración del cortafuegos (Firewall)

Requisitos previos

Antes de iniciar la instalación de apache y el resto de la pila LAMP, tenemos que tener un usuario normal con privilegios de sudo configurado además de root.


Deberemos además, habilitar un firewall básico para que bloquee los puertos que no sean esenciales para apache. Vamos con ello.

Crear usuario normal con privilegios de root

Con la instalación de Ubuntu 20.04 Server, como vimos en el post anterior, ya hemos instalado OpenSSH y hemos comprobado que funciona. Si no fuera el caso, el procedimiento es el siguiente. Puedes ver como se instala y configura OpenSSh en este enlace.

Nos conectamos mediante ssh (OpenSSH) con el servidor y usuario root. Antes deberíamos haber instalado las claves, privada en el servidor y pública en el cliente para facilitar las cosas.

ssh root@ip_servidor

Nos pedirá la contraseña una sola vez si tenemos las claves SSH instaladas, si no tendremos que introducirla siempre que nos conectemos.

El siguiente paso será crear un usuario normal con privilegios de sudo para administrar el servidor sin los peligros que conlleva el trabajar con root.

adduser javier

Nos pedirá una contraseña y otra información adicional no obligatoria. Con ENTER nos las podemos saltar.

Conceder privilegios de sudo al usuario normal

Para muchos de los trabajos que tengamos que realizar en el servidor, necesitaremos privilegios de root temporales para el usuario normal (superusuario). Para utilizar estos privilegios, el usuario deberá anteponer sudo a los comandos. Esto se hace añadiendo el usuario al grupo sudo.

Como root tenemos que ejecutar el siguiente comando:

usermod -aG sudo javier

Y así, el usuario javier puede tener privilegios de root, añadiendo sudo a los comandos.

Configurar un firewall básico

Con Ubuntu 20.04 Server, podemos utilizar el cortafuegos UFW (Uncomplicated Firewall), que viene instalado por defecto, para garantizar las conexiones por unos puertos establecidos y mantener cerrados los demás. Esta es la opción más fácil, ya que es una interfaz de firewall simplificada que oculta la complejidad de las tecnologías de filtrado de paquetes de nivel inferior, como iptables y nftables.

Si por lo que fuese tuviésemos que instalarlo, lo haríamos como sigue:

sudo apt install ufw​​​2

Las aplicaciones pueden registrar sus perfiles con UFW tras la instalación. Estos perfiles permiten a UFW gestionar estas aplicaciones por su nombre. OpenSSH, el servicio que nos permite conectar con nuestro servidor ahora, tiene un perfil registrado con UFW.

Lo podemos comprobar con:

sudo ufw app list

Para que el cortafuegos nos permita conexiones SSH las tenemos que configurar con:

ufw allow OpenSSH

Y activamos el cortafuegos

ufw enable

Escribimos «y» y pulsamos INTRO para continuar. Podemos ver que las conexiones SSH están permitidas escribiendo lo siguiente:

ufw status

Como podemos comprobar, el cortafuegos solo permite las conexiones SSH, bloqueando todas las demás. Si necesitásemos instalar algún otro servicio tendríamos que habilitarlo en el cortafuegos.

También podemos abrir el puerto directamente con el comando:

sudo ufw allow ssh 
ó 
sudo ufw allow 22

Habilitar el acceso externo para el usuario normal

Ahora, que ya tenemos un usuario normal para usar en la administración del servidor, debemos verificar que nos podemos conectar con SSH. Si fuese necesario tendríamos que instalar OpenSSH.

Mientras no lo tengamos asegurado, no hay que cerrar la sesión con root. Podríamos tener problemas para entrar en el servidor y sin la sesión root, nos veríamos en un problema.

Para configurar el acceso SSH, dependerá de si tenemos la cuenta de root configurada para usar contraseña o claves SSH para la autenticación.

Si root se autentica con contraseña

Si hemos iniciado sesión en root con contraseña, entonces la contraseña estará habilitada para SSH. Podemos iniciar sesión con la cuenta de usuario en una nueva terminal y conectar por SSH.

ssh javier@ip_servidor

Y si todo ha ido bien, ya deberíamos poder conectarnos. Ahora ya disponemos de privilegios de root anteponiendo sudo al comando a ejecutar e introduciendo la contraseña.

Lo más recomendable es configurar una pareja de claves de SSH, y así evitamos la autenticación con contraseña y añadimos seguridad a nuestro servidor. Para ello puedes consultar este enlace Configuracion-servidor-ssh. Está realizado con Debian, pero con Ubuntu es exactamente igual.

Si root se autentica con pareja de claves

Si root ha iniciado sesión con pareja de claves, la autenticación por contraseña estará deshabilitada para SSH. Para que el usuario recién creado, pueda iniciar sesión, tendremos que copiar la clave pública del servidor en el home del nuevo usuario. El directorio correcto es : «~/.ssh/authorized_keys»

Esto lo podemos hacer de dos maneras, según nos sea conveniente:

  • Copiar la clave publica al home del usuario desde el servidor.
  • Copiar la clave pública del servidor, almacenada en el home de root, al home del usuario desde el cliente. Deberá estár tambien en » ~/.ssh/authorized_keys»

Para hacerlo podemos utilizar el comando cp, o rsync.

Desde el cliente y en sesión root ejecutaríamos:

cp -r ~/.ssh/authorized_keys  /home/javier/.ssh/authorized_keys
ó
rsync --archive --chown=javier:javier ~/.ssh /home/javier

Es importante que con el comando rsync en el origen pongamos «~/.ssh», sin barra final. Si pusiésemos «~/.ssh/» se copiará el contenido del directorio «~/.ssh» de la cuenta root al directorio principal del usuario sudo en lugar de la estructura de directorios completa a «~/.ssh». Los archivos no estarán donde se les espera y no funcionará la autenticación por pareja de claves.

Y comprobamos que podemos iniciar sesión con el usuario normal por SSH.

ssh javier@servidor_ip

Y conectaremos con el servidor, con una sesión de usuario normal, con la opción de utilizar sudo para tareas administrativas. Para ello nos solicitará la contraseña.

Y así terminamos la configuración del servidor Ubuntu 20.04 Server para la estructura que vamos a montar. Podemos proceder a instalar el software que queramos. En este caso instalaremos la pila LAMP (Linux, Apache, MySQL y PHP).

Se puede hacer esta instalación de una manera más sencilla, pero quiero instalar una versión de MySQL más antigua (MySQL v5.7.31), y si hacemos la instalación estandar, el sistema nos instalará la última versión disponible, por un asunto de prioridades del S.O.

Instalación del servidor web apache

El servidor apache esta disponible en los repositorios oficiales de Ubuntu. Por ello lo podemos instalar con las herramientas habituales del sistema para la gestión de paquetes.

Como siempre que vamos a instalar algo, primero actualizamos la lista de paquetes de los repositorios

sudo apt update

Como ya tenemos conexión ssh, instalamos el servidor apache y todas sus dependencias desde el cliente.

sudo apt install apache2

Y ya tenemos instalado el servidor Apache.

Configuración del cortafuegos (Firewall)

Para que el servidor apache funcione, es necesario modificar el cortafuegos para permitir el acceso desde el exterior a los puertos web predeterminados: 80 para el protocolo http y 443 para el protocolo https.

Para ver los perfiles de aplicación UFW disponibles ejecutamos:

sudo ufw app list

Nos mostrará una lista de aplicaciones disponibles.

Como vemos, hay tres perfiles disponibles para Apache:

  • Apache: abre solo el puerto 80 (tráfico web normal no cifrado, con http)
  • Apache Full: abre el puerto 80 (tráfico web normal no cifrado, con http) y el puerto 443 (tráfico TLS/SSL cifrado, con https)
  • Apache Secure: abre solo el puerto 443 (tráfico TLS/SSL cifrado, con https)

Si vemos las características del perfil «Apache Full» con:

sudo ufw app info "Apache Full"

Para permitir el tráfico de entrada HTTP y HTTPS para este perfil

sudo ufw allow in "Apache Full"

También podemos abrir los puertos con los comandos:

sudo ufw allow http ó sudo ufw allow 80
sudo ufw allow https ó sudo ufw allow 443

Para ver las conexiones permitidas en el cortafuegos, ejecutamos el comando:

sudo ufw status verbose

Que nos mostrará los puertos abiertos, el protocolo de las conexiones, la acción establecida y desde donde se permiten estas.

Y ya podemos comprobar que apache funciona con un navegador. Introducimos la «ip pública» de nuestro servidor y nos mostrará la página web predeterminada de apache.

http://your_server_ip

Si ha funcionado es que tenemos correctamente instalado apache y configurado el cortafuegos.

Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.

Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.

Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.

Esta entrada tiene 2 comentarios

  1. Sergi

    Hola Javier. Gracias por dejar esta información. Me está siendo muy útil. Me pregunto si hay alguna manera de incluir una aplicación que ocntenga un listado de IPs maliciosas para denegar luego el acceso con una sola linea en el ufw, en vez de llenar el status con más de 1000 lineas… Un saludo.

Deja una respuesta

This site uses Akismet to reduce spam. Learn how your comment data is processed.