Empezar con el Servidor Apache HTTP

Jan Kuparinen Version F34 onwards Last review: 2020-11-15 Needs Review!
El Servidor Apache HTTP es uno de los servidores web usados más comúnmente. Esta sección actúa como guía de arranque rápido para desplegar y configurar Apache en Fedora.

Instalar HTTPD

Este procedimiento describe los pasos para instalar HTTPD en Fedora.

  1. Instalar los paquetes HTTPD.

    sudo dnf install httpd -y
  2. Iniciar el servicio HTTPD.

    sudo systemctl start httpd.service

Para habilitar el inicio automático del servicio HTTPD en el arranque, ejecute el siguiente comando:

sudo systemctl enable httpd.service

Vaya a http://localhost para acceder a la página de prueba de Apache test page. Usted no debe ser capaz de acceder al servidor desde cualquier otro host. Para acceder al servidor desde otros hosts, vea Abriendo puertos del cortafuegos.

Seguridad de Apache HTTPD

Para habilitar el soporte TLS/SSL, descargue e instale uno de los siguientes paquetes:

Usar mod_ssl

Instalar mod_ssl

El paquete mod_ssl será habilitado automáticamente después de la instalación. Instale el paquete mod_ssl usando el siguiente comando:

sudo dnf install mod_ssl -y

Generar un nuevo certificado

Para generar un nuevo certificado, vea Crear un certificado usando OpenSSL.

Instalar un certificado existente

Si ya tiene un certificado generado en otro ordenador, haga lo siguiente:

  1. Mueva el certificado y el archivo de clave a la carpeta correcta

    sudo mv key_file.key /etc/pki/tls/private/myhost.com.key
    sudo mv certificate.crt /etc/pki/tls/certs/myhost.com.crt
  2. Asegure que los siguiente parámetros son correctos:

    1. Contextos SELinux

      restorecon /etc/pki/tls/private/myhost.com.key
      restorecon /etc/pki/tls/certs/myhost.com.crt
    2. Propiedad

      sudo chown root:root /etc/pki/tls/private/myhost.com.key
      sudo chown root:root /etc/pki/tls/certs/myhost.com.crt
    3. Permisos

      sudo chmod 0600 /etc/pki/tls/private/myhost.com.key
      sudo chmod 0600 /etc/pki/tls/certs/myhost.com.crt

Después de instalar el certificado existente, configure el certificado usando [mod_ssl configuration].

Configuración mod_ssl

La configuración predeterminada TLS/SSL está contenida en el archivo /etc/httpd/conf.d/ssl.conf. En el archivo ssl.conf, lo siguiente son las directivas donde se ubican el certificado y la clave TLS/SSL:

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

Estas directivas están encerradas en un bloque que define un host virtual:

<VirtualHost _default_:443>
...
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
...
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
...
</VirtualHost>

Para definir una ubicación diferente para estos archivos, haga lo siguiente:

  1. Cree una copia del archivo /etc/httpd/conf.d/ssl.conf y renombre el archivo a z-ssl-local.conf.

  2. Edite las siguientes líneas en el archivo z-ssl-local.conf:

<VirtualHost _default_:443>
SSLCertificateFile /etc/pki/tls/certs/www.myhost.org.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.myhost.org.key
</VirtualHost>

Este archivo anulará los dos ajustes para el host virtual _default_:443; todos los demás ajustes de ssl.conf` serán retenidos.

Configuraciones para host virtuales individuales

Para usar SSL/TLS para un host virtual específico con un certificado predeterminado diferente, haga lo siguiente:

  1. Abra el archivo de configuración del host virtual /etc/httpd/conf.d/hostname.conf.

  2. Inserte estas líneas entre <VirtualHost hostname:port>`y `</VirtualHost>:

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/hostname.crt
    SSLCertificateKeyFile /etc/pki/tls/private/hostname.key

Instalar aplicaciones web

Usted probablemente desea ejecutar algo sobre su servidor web. Muchas de las aplicaciones web más populares están empaquetadas para Fedora. Se recomienda la utilización de las versiones empaquetadas de aplicaciones web. Estos paquetes serán configurados siguiendo las mejores practicas de la distribución que le ayudan a asegurar la seguridad de la instalación.

Por ejemplo, mediante la instalación de archivos estáticos en ubicaciones en las que el servidor web no tiene capacidad de escribir y haciendo control de accesos con ficheros de configuración en lugar de con ficheros .htaccess files, que son un poco más vulnerables a lo ataques.

Las aplicaciones web empaquetadas también estarán configuradas para trabajar con SELinux, que proporciona beneficios de seguridad significativos.

También recibirá actualizaciones a través del proceso normal de actualización de Fedora, haciendo más fácil el mantener su instalación actualizada.

A menudo también tendrá la configuración predeterminada ajustada de acuerdo con las convenciones de Fedora, lo que significa que tendrá que hacer menos trabajo para que la aplicación esté en funcionamiento.

La mayoría de las aplicaciones web están simplemente empaquetadas de acuerdo a su nombre. Por ejemplo, puede instalar Wordpress ejecutando el siguiente comando:

sudo dnf install wordpress

Las aplicaciones web empaquetadas normalmente proporcionarán instrucciones específicas de Fedora en un archivo de documentación. Por ejemplo, Wordpress proproporciona los archivos /usr/share/doc/wordpress/README.fedora y /usr/share/doc/wordpress/README.fedora-multiuser.

Las aplicaciones web empaquetadas, normalmente, restringen el acceso de modo predeterminado de manera que solo puede acceder desde el host servidor mismo, para asegurar que usted puede ejecutar la configuración inicial con seguridad y las cosas como las interfaces de administración no se dejan accesibles al público. Para obtener información sobre como ampliar el acceso, vea Habilitar el acceso a aplicaciones web.

Las aplicaciones web comúnmente requieren el uso de un servidor de base de datos. Este artículo Quick Docs proporciona información sobre la instalación y configuración de PostgreSQL y esta página wiki sobre MariaDB en Fedora.

Configurar Apache HTTPD

/etc/httpd/conf/httpd.conf es el archivo de configuración principal de Apache. Los archivos de configuración personalizados se especifican bajo /etc/httpd/conf.d/*.conf. Si los mismo ajustes están especificados en /etc/httpd/conf/httpd.conf y un archivo .conf en /etc/httpd/conf.d/, se usará el ajuste del archivo /etc/httpd/conf.d/.

Los archivos en /etc/httpd/conf.d/ se leen en orden alfabético: un ajuste en /etc/httpd/conf.d/z-foo.conf será usado sobre un ajuste de /etc/httpd/conf.d/foo.conf. De la misma forma, un ajuste de /etc/httpd/conf.d/99-foo.conf, será usado sobre un ajuste de /etc/httpd/conf.d/00-foo.conf.

Como mejor práctica, no modifique /etc/httpd/conf/httpd.conf o cualquiera de los archivos /etc/httpd/conf.d enviados por los paquetes Fedora directamente. Si usted hace cualquier cambio local a estos archivos, cualquier cambio en las versiones más nuevas de los paquetes no serán aplicados directamente. En su lugar, se creará un archivo .rpmnew y tendrá que combinar estos cambios manualmente.

Se recomienda crear un nuevo archivo en /etc/httpd/conf.d/ que tendrá preferencia sobre el archivo que desee modificar y editar los ajustes requeridos. Por ejemplo, para cambiar un ajuste espcificado en /etc/httpd/conf.d/foo.conf`usted podría crear el archivo `/etc/httpd/conf.d/z-foo-local.conf y poner su ajuste en ese archivo.

Después de hacer cualquier cambio en la configuración de su servidor, ejecute el siguiente comando:

sudo systemctl reload httpd.service

Ciertos cambios pueden requerir que Apache sea reiniciado totalmente. Para reiniciar totalmente Apache, ejecute el siguiente comando:

sudo systemctl restart httpd.service

Habilitar acceso a las aplicaciones web

De modo predeterminado las aplicaciones web empaquetadas en Fedora se configuran de manera que solo se permite el acceso desde el localhost. Esto está definido por el archivo /etc/httpd/conf.d/webapp.conf que contiene los siguientes ajustes:

<Directory /usr/share/webapp>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require local
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
    </IfModule>
</Directory>

Antes de permitir el acceso general a la aplicación web, asegúrese de lo siguiente:

  • La aplicación web ha sido configurada correctamente

  • La interfaz de administración y otras áreas sensibles no son accesibles sin la autenticación apropiada

  • La configuración de la base de datos es segura, si la aplicación usa una base de datos

Para ampliar el acceso a la aplicación, cree un archivo /etc/httpd/conf.d/z-webapp-allow.conf. Para permitir el acceso a todos los sistemas sobre una red local típica, añada las siguientes líneas en el archivo:

<Directory /usr/share/webapp>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require local
        Require ip 192.168.1
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
        Allow from 192.168.1
    </IfModule>
</Directory>

Una vez que la aplicación está correctamente configurada, añada la siguiente configuración para permitir el acceso desde cualquier host:

<Directory /usr/share/webapp>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Allow from all
    </IfModule>
</Directory>

Abriendo puertos en el cortafuegos

Esto expone a su ordenador a la Internet y a los potenciales atacantes. Asegure su sistema y su instalación Apache apropiadamente antes de exponer su servidor a la Internet.

Apache usa el puerto 80 para conexiones planas http y el puerto 443 para conexiones TLS/SSL predeterminadas. Para hacer este servicio disponible desde otros ordenadores o la Internet, permita a Apache atravesar el cortafuegos usando cualquiera de los siguientes comandos:

Para permitir que Apache atraviese el cortafuegos en cada arranque:

  • Para conexiones planas HTTP:

    sudo firewall-cmd --permanent --add-service=http
  • Para conexiones TLS/SSL:

    sudo firewall-cmd --permanent --add-service=https

Para permitir que Apache atraviese el cortafuegos instantáneamente:

  • Para conexiones planas HTTP:

    sudo firewall-cmd --add-service=http
  • Para conexiones TLS/SSL:

    sudo firewall-cmd --add-service=https
Si su servidor está corriendo en una red con un enrutador NAT, también necesitará configurar su enrutador para reenviar los puertos HTTP y HTTPS a su servidor, si desea permitir acceso desde fuera de su red local.

Deshabilitar la Página de Prueba

Para deshabilitar la página de prueba, comente todas las líneas en el archivo /etc/httpd/conf.d/welcome.conf usando # como sigue:

# <LocationMatch "^/+$">
#    Options -Indexes
#    ErrorDocument 403 /.noindex.html
# </LocationMatch>

# <Directory /usr/share/httpd/noindex>
#    AllowOverride None
#    Require all granted
# </Directory>

# Alias /.noindex.html /usr/share/httpd/noindex/index.html

Recursos Adicionales