HTTPD - Servidor Web Apache2
Anterior
Siguiente

HTTPD - Servidor Web Apache2

Apache es el Servidor Web mas comunmente utilizado en sistemas GNU/Linux. Los Servidores Web son usados para servir Páginas Web solicitadas por ordenadores clientes. Los clientes típicamente solicitan ver Páginas Web usando un Navegador como Firefox, Opera, o Mozilla.

Los usuarios introducen un Localizador de Recursos Uniforme (Uniform Resource Locator, URL) para señalar a un servidor web por medio de su Nombre de Dominio Totalmente Cualificado (Fully Qualified Domain Name, FQDN) y de una ruta al recurso solicitado. Por ejemplo, para ver la página web del sitio web de Ubuntu, un usuario debería introducir únicamente el FQDN. Para solicitar información específica acerca del soporte de pago, un usuario deberá introducir el FQDN seguido de una ruta.

El protocolo más comunmente utilizado para ver páginas Web es el Hyper Text Transfer Protocol (HTTP). Protocolos como el Hyper Text Transfer Protocol sobre Secure Sockets Layer (HTTPS), y File Transfer Protocol (FTP), un protocolo para subir y descargar archivos, también son soportados.

Los servidores web Apache a menudo se usan en combinación con el motor de bases de datos MySQL, el lenguaje de scripting PHP, y otros lenguajes de scripting populares como Python y Perl. Esta configuración se denomina LAMP (Linux, Apache, MySQL y Perl/Python/PHP) y conforma una potente y robusta plataforma para el desarrollo y distribución de aplicaciones basadas en la web.

Instalación

El servidor web Apache2 esta disponible en Ubuntu Linux. Para instalar Apache2:

  • Introduzca el siguiente comando en un terminal:

    sudo apt-get install apache2

Configuración

Apache se configura colocando directivas en archivos de configuración de texto plano. El archivo principal de configuración se llama apache2.conf. Además, se pueden añadir otros archivos de configuración mediante la directiva Include, y se pueden usar comodines para incluir muchos archivos de configuración. Todas las directivas deben colocarse en alguno de esos archivos de configuración. Apache2 sólo reconocerá los cambios realizados en los archivos principales de configuración cuando se inicie o se reinicie.

El servidor también lee un fichero que contiene los tipos mime de los documentos; el nombre de ese fichero lo establece la directiva TypesConfig, y es mime.types por omisión.

El archivo de configuración predeterminado de Apache2 es /etc/apache2/apache2.conf. Puede editar este archivo para configurar el servidor Apache2. Podrá configurar el número de puerto, la raíz de documentos, los módulos, los archivos de registros, los hosts virtuales, etc.

Opciones básicas

Esta sección explica los parámetros de configuración esenciales para el servidor Apache2. Remitase a la Documentación de Apache2 Documentation para más detalles.

  • Apache2 ships with a virtual-host-friendly default configuration. That is, it is configured with a single default virtual host (using the VirtualHost directive) which can modified or used as-is if you have a single site, or used as a template for additional virtual hosts if you have multiple sites. If left alone, the default virtual host will serve as your default site, or the site users will see if the URL they enter does not match the ServerName directive of any of your custom sites. To modify the default virtual host, edit the file /etc/apache2/sites-available/default. If you wish to configure a new virtual host or site, copy that file into the same directory with a name you choose. For example, sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite Edit the new file to configure the new site using some of the directives described below.

  • La directiva ServerAdmin especifica la dirección de correo del administrador del servidor. El valor por omisión es webmaster@localhost. Cambie esta dirección por alguna a la que le puedan llegar los mensajes que se le envíen (si ud. es el administrador del servicio). Si su sitio web tiene algún problema, Apache2 mostrará un mensaje de error con en la que aparecerá esta dirección de correo para que la gente pueda enviar un informe del error. La directiva se encuentra en el fichero de configuración de su sitio en /etc/apache2/sites-available.

  • The Listen directive specifies the port, and optionally the IP address, Apache2 should listen on. If the IP address is not specified, Apache2 will listen on all IP addresses assigned to the machine it runs on. The default value for the Listen directive is 80. Change this to 127.0.0.1:80 to cause Apache2 to listen only on your loopback interface so that it will not be available to the Internet, to (for example) 81 to change the port that it listens on, or leave it as is for normal operation. This directive can be found and changed in its own file, /etc/apache2/ports.conf

  • The ServerName directive is optional and specifies what FQDN your site should answer to. The default virtual host has no ServerName directive specified, so it will respond to all requests that do not match a ServerName directive in another virtual host. If you have just acquired the domain name ubunturocks.com and wish to host it on your Ubuntu server, the value of the ServerName directive in your virtual host configuration file should be ubunturocks.com. Add this directive to the new virtual host file you created earlier (/etc/apache2/sites-available/mynewsite).

    Sugerencia

    También puede desear que su sitio responda a www.ubunturocks.com, ya que muchos usuarios asumen que el prefijo www es apropiado. Para ello, use la directiva ServerAlias. Puede usar comodines en la directiva ServerAlias. Por ejemplo, ServerAlias *.ubunturocks.com hará que su sitio responda a cualquier solicitud de dominio que termine en .ubunturocks.com.

  • La directiva DocumentRoot especifica dónde debe buscar Apache los archivos que forman el sitio. El valor predeterminado es /var/www. No hay ningún sitio configurado allí, pero si descomenta la directiva RedirectMatch en /etc/apache2/apache2.conf, las peticiones se redirigirán a /var/www/apache2-default, que es donde reside el sitio predeterminado de Apache2. Cambie este valor en el archivo de host virtual de su sitio, y recuerde crear ese directorio si fuese necesario.

Sugerencia

Apache2 no procesa el directorio /etc/apache2/sites-available. Los enlaces simbólicos en /etc/apache2/sites-enabled apuntan a los sitios «disponibles». Use la utilidad a2ensite (Apache2 Enable Site) para crear esos enlaces simbólicos, así: sudo a2ensite minuevositio donde el archivo de cofiguración de su sitio es /etc/apache2/sites-available/minuevositio. Igualmente, se debe usar la utilidad a2dissite para deshabilitar sitios.

Opciones predeterminadas

Esta sección explica la configuración de las opciones predeterminadas del servidor Apache2. Por ejemplo, si desea añadir un host virtual, las opciones que usted configura para el host virtual tienen prioridad para ese host virtual. Para las directivas no definidas dentro de las opciones del host virtual, se usan los valores predeterminados.

  • El DirectoryIndex es la página servida por defecto por el servidor cuando un usuario solicita el índice de un directorio añadiendo la barra de división (/) al final del nombre del directorio.

    For example, when a user requests the page http://www.example.com/this_directory/, he or she will get either the DirectoryIndex page if it exists, a server-generated directory list if it does not and the Indexes option is specified, or a Permission Denied page if neither is true. The server will try to find one of the files listed in the DirectoryIndex directive and will return the first one it finds. If it does not find any of these files and if Options Indexes is set for that directory, the server will generate and return a list, in HTML format, of the subdirectories and files in the directory. The default value, found in /etc/apache2/apache2.conf is " index.html index.cgi index.pl index.php index.xhtml". Thus, if Apache2 finds a file in a requested directory matching any of these names, the first will be displayed.

  • The ErrorDocument directive allows you to specify a file for Apache to use for specific error events. For example, if a user requests a resource that does not exist, a 404 error will occur, and per Apache2's default configuration, the file /usr/share/apache2/error/HTTP_NOT_FOUND.html.var will be displayed. That file is not in the server's DocumentRoot, but there is an Alias directive in /etc/apache2/apache2.conf that redirects requests to the /error directory to /usr/share/apache2/error/. To see a list of the default ErrorDocument directives, use this command: grep ErrorDocument /etc/apache2/apache2.conf

  • By default, the server writes the transfer log to the file /var/log/apache2/access.log. You can change this on a per-site basis in your virtual host configuration files with the CustomLog directive, or omit it to accept the default, specified in /etc/apache2/apache2.conf. You may also specify the file to which errors are logged, via the ErrorLog directive, whose default is /var/log/apache2/error.log. These are kept separate from the transfer logs to aid in troubleshooting problems with your Apache2 server. You may also specify the LogLevel (the default value is "warn") and the LogFormat (see /etc/apache2/apache2.conf for the default value).

  • Algunas opciones son especificadas por directorio en lugar de por servidor. Una de estas directivas es Option. Un parrafo Directory es encerrado entre etiquetas XML, como estas:

                      
                        
                          <Directory /var/www/mynewsite>↵
    				...↵
    			</Directory>
                        
                      
                    

    La directiva Options dentro del parrafo Directory acepta un o más de los siguientes valores (entre otros), separados por espacios:

    • ExecCGI - Permite la ejecución de scripts CGI. Los scripts CGI no serán ejecutados si esta opción no fue escojida.

      Sugerencia

      Muchos archivos no deberían ser ejecutados como scripts CGI. Esto podría resultar muy peligroso. Los scripts CGI deberían mantenerse en un directorio separado fuera de su DocumentRoot, y dicho directorio debería ser el único que tuviese activada la opción ExecCGI. Así está establecido desde el principio, y la ubicación predeterminada para los scripts CGI es /usr/lib/cgi-bin.

    • Includes - Permite «server-side includes». Éstos, permiten a un fichero HTML incluir otros ficheros. No es una opción muy común, consulte el Cómo - Apache2 SSI para más información.

    • IncludesNOEXEC - Permite «server-side includes», pero deshabilita los #exec y #include en los scripts CGI.

    • Indexes - Muestra una lista formateada del contenido de los directorios, si no existe el DirectoryIndex (como el index.html) en el directorio solicitado.

      Atención

      For security reasons, this should usually not be set, and certainly should not be set on your DocumentRoot directory. Enable this option carefully on a per-directory basis only if you are certain you want users to see the entire contents of the directory.

    • Multiview - Support content-negotiated multiviews; this option is disabled by default for security reasons. See the Apache2 documentation on this option.

    • SymLinksIfOwnerMatch - Solo seguirá enlaces simbólicos si el directorio de destino es del mismo usuario que el enlace.

Configuración de Servidores Virtuales

Virtual hosts allow you to run different servers for different IP addresses, different host names, or different ports on the same machine. For example, you can run the website for http://www.example.com and http://www.anotherexample.com on the same Web server using virtual hosts. This option corresponds to the <VirtualHost> directive for the default virtual host and IP-based virtual hosts. It corresponds to the <NameVirtualHost> directive for a name-based virtual host.

The directives set for a virtual host only apply to that particular virtual host. If a directive is set server-wide and not defined within the virtual host settings, the default setting is used. For example, you can define a Webmaster email address and not define individual email addresses for each virtual host.

Establezca la directiva DocumentRoot apuntando al directorio que contenga el documento raíz (como el index.html) para el host virtual. El DocumentRoot por defecto es /var/www.

La directiva ServerAdmin, dentro de una estrofa VirtualHost, es la dirección de correo usada en el pie de página de las páginas de error (si es que eligió mostrar un pie de página con la dirección de correo en las páginas de error).

Configuración del Servidor

Esta sección explica como configurar básicamente un servidor.

LockFile - The LockFile directive sets the path to the lockfile used when the server is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or USE_FLOCK_SERIALIZED_ACCEPT. It must be stored on the local disk. It should be left to the default value unless the logs directory is located on an NFS share. If this is the case, the default value should be changed to a location on the local disk and to a directory that is readable only by root.

PidFile - The PidFile directive sets the file in which the server records its process ID (pid). This file should only be readable by root. In most cases, it should be left to the default value.

User - The User directive sets the userid used by the server to answer requests. This setting determines the server's access. Any files inaccessible to this user will also be inaccessible to your website's visitors. The default value for User is www-data.

Aviso

Hasta que no sepa exactamente lo que esta haciendo, no ponga en la directiva User al root. Usar el root como usuario puede crear grandes agujeros de seguridad en su servidor Web.

La directiva Group es similar a la directiva User. Group establece el grupo sobre el que el servidor aceptará las peticiones. El grupo por defecto es también www-data.

Módulos de Apache

Apache es un servidor modular. Esto supone que en el núcleo del servidor sólo está incluida la funcionalidad más básica. Las características extendidas están disponibles a través de módulos que se pueden cargar en Apache. De forma predeterminada, durante la compilación se incluye un juego básico de módulos en el servidor. Si el servidor se compila para que use módulos cargables dinámicamente, los módulos se podrán compilar por separado y se podrán añadir posteriormente usando la directiva LoadModule. En caso contrario, habrá que recompilar Apache para añadir o quitar módulos. Ubuntu compila Apache2 para que permita la carga dinámica de módulos. Las directivas de configuración ser pueden incluir condicionalmente en base a la presencia de un módulo en particular, encerrándolas en un bloque <IfModule>. Puede instalar módulos adicionales de Apache2 y usarlos con su servidor web. Puede instalar los módulos de Apache2 usando la orden apt-get. Por ejemplo, para instalar el módulo de Apache2 que proporciona autenticación por MySQL, puede ejecutar lo siguiente en la línea de órdenes de una terminal:

sudo apt-get install libapache2-mod-auth-mysql

Una vez instalado el módulo, este estará disponible en el directorio /etc/apache2/mods-available. Puede utilizar el comando a2enmod para activar el módulo. Puede utilizar el comando a2dismod para desactivar el módulo. Una vez que active el módulo, este estará disponible en el directorio /etc/apache2/mods-enabled.

Configuración HTTPS

El módulo mod_ssl añade una importante característica al servidor Apache2 - la habilidad de encriptar las comunicaciones. De esta forma, cuando su navegador se esta comunicando utilizando la encriptación SSL, se utilizará el prefijo https:// al principio del Localizador de Recursos Uniformes (URL) en la barra de direcciones del navegador.

El módulo mod_ssl esta disponible en el paquete apache2-common. Si tiene instalado este paquete, podrá ejecutar el siguiente comando en un terminal para activar el módulo mod_ssl:

sudo a2enmod ssl

Certificados y Seguridad

Para configurar un servidor seguro, utilice criptografía de clave pública para crear un par de claves pública y privada. En la mayoría de los casos, usted envía su solicitud de certificado (incluyendo su clave pública), una prueba de la identidad de su compañía, y el pago correspondiente, a una Autoridad de Certificación (Certificate Authority, CA). La CA verifica la solicitud de certificado y su identidad, y posteriormente le envía un certificado para su servidor seguro.

También puede crear su propio certificado auto-firmado. Tenga en cuenta, no obstante, que los certificados auto-firmados no deben usarse en la mayoría de los entornos de producción. Los certificados auto-firmados no son aceptados automáticamente por los navegadores de los usuarios. Los navegadores solicitarán al usuario que acepte el certificado para crear la conexión segura.

Cuando tenga un certificado auto-firmado, o un certificado firmado por una CA de su elección, necesitará instalarlo en su servidor seguro.

Tipos de Certificados

Necesita una clave y un certificado para trabajar con su servidor seguro, lo que significa que deberá generar su propio certificado firmado por usted mismo, o comprar un certificado firmado por una CA. Un certificado firmado por una CA proporciona dos capacidades importantes para su servidor:

  • Los navegadores (habitualmente) reconocen automáticamente el certificado y permiten establecer una conexión segura sin preguntar al usuario.

  • Cuando una CA envía un certificado firmado, está garantizando la identidad de la organización que está suministrando las páginas web al navegador.

Muchos navegadores web que soportan SSL tienen una lista de CAs cuyos certificados aceptan automáticamente. Si un navegador encuentra un certificado autorizado por una CA que no está en su lista, el navegador le preguntará al usuario si desea aceptar o denegar la conexión.

Puede generar un certificado firmado por usted mismo para su servidor seguro, pero tenga en cuenta que un certificado auto-firmado no proporciona la misma funcionalidad que un certificado firmado por una CA. La mayoría de los navegadores web no reconocen automáticamente los certificados auto-firmados, y éstos además no proporcionan ninguna garantía acerca de la identidad de la organización que está proporcionando el sitio web. Un certificado firmado por una CA proporciona estas dos importantes características a un servidor seguro. El proceso para obtener un certificado de una CA es realmente fácil. A grandes rasgos, consta de:

  1. Crear dos llaves encriptadas pública y privada.

  2. Crear una solicitud de certificado basado en la clave pública. La solicitud de certificado contiene información sobre su servidor y la compañía que lo aloja.

  3. Enviar la solicitud de certificado, junto con los documentos que prueban su identidad, a una CA. No podemos decirle qué autoridad de certificación elegir. Su decisión debe basarse en sus experiencias pasadas, o en las experiencias de sus amigos o colegas, o simplemente en factores económicos.

    Una vez se haya decidido por una CA, necesita seguir las instrucciones que ésta le proporcione para obtener un certificado proveniente de ella.

  4. Cuando la CA esté segura de que tiene todo lo que necesita de usted, le enviará un certificado digital.

  5. Instalar este certificado en su servidor seguro, y soportar transacciones seguras.

Cuando obtenga un certificado de una CA, o genere su propio certificado auto-firmado, el primer paso es generar una clave.

Generar una Petición de Firma de Certificado (Certificate Signing Request, CSR)

Para generar la Solicitud de Firma de Certificado (Certificate Signing Request, CSR), deberá crear su propia clave. Para ello, puede ejecutar la siguiente orden en la línea de órdenes de una terminal:

openssl genrsa -des3 -out server.key 1024

↵
Generating RSA private key, 1024 bit long modulus↵
.....................++++++↵
.................++++++↵
unable to write 'random state'↵
e is 65537 (0x10001)↵
Enter pass phrase for server.key:↵

Ahora puede introducir su frase de paso. Para mayor seguridad, ésta debería contener, al menos, ocho caracteres. La longitud mínima al especificar -des3 es de cuatro caracteres. Debe incluir números y/o signos de puntuación, y no debería ser una palabra que se pudiera encontrar en un diccionario. Además, recuerde que su frase de paso distingue mayúsculas de minúsculas.

Vuelva a escribir la frase de paso para verificarla. Cuando la haya vuelto a escribir correctamente, se generará la clave del servidor y se almacenará en el archivo server.key.

Aviso

También puede ejecutar su servidor web seguro sin una frase de paso. Esto puede ser conveniente porque así no tendrá que introducir la frase de paso cada vez que vaya a arrancar su servidor web seguro. Pero también resulta altamente inseguro y comprometer la clave significa también comprometer al servidor.

En todo caso, puede escoger ejecutar su servidor web seguro sin frase de paso quitando la opción -des3 en la fase de generación, o ejecutando la siguiente orden en una terminal:

openssl rsa -in server.key -out server.key.insecure

Una vez haya ejecutado la orden anterior, la clave insegura se almacenará en el archivo server.key.insecure. Puede usar este archivo para generar el CSR sin frase de paso.

Para crear el CSR, ejecute el siguiente comando en un terminal:

openssl req -new -key server.key -out server.csr

Se le pedirá que introduzca la frase de paso. Si la introduce correctamente, se le solicitará que introduzca el nombre de la empresa, el nombre del sitio, la dirección de correo electrónico, etc. Cuando haya introducido todos esos detalles, se creará su CSR y se almacenará en el archivo server.csr. Puede enviar ese archivo CSR a una AC para que lo procese. La AC usará ese archivo CSR y emitirá el certificado. Por otra parte, también puede crear un certificado auto-firmado usando este CSR.

Creación de un certificado auto-firmado

Para crear un certificado auto-firmado, ejecute la siguiente orden en una terminal:

openssl·x509·-req·-days·365·-in·server.csr·-signkey·server.key·-out·server.crt

La orden anterior le solicitará que introduzca la frase de paso. Cuando la haya introducido, se creará su certificado y se almacenará en el archivo server.crt.

Aviso

Si su servidor seguro se va a usar en un entorno de producción, probablemente necesitará un certificado firmado por una CA. No se recomienda el uso de certificados auto-firmados.

Instalar el Certificado

Puede instalar el archivo de la clave server.key y el archivo del certificado server.crt o el archivo de certificado enviado por su CA ejecutando las siguientes órdenes en la línea de órdenes de una terminal:

sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

You should add the following four lines to the /etc/apache2/sites-available/default file or the configuration file for your secure virtual host. You should place them in the VirtualHost section. They should be placed under the DocumentRoot line:

↵
SSLEngine on↵
↵
SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire↵
↵
SSLCertificateFile /etc/ssl/certs/server.crt↵
SSLCertificateKeyFile /etc/ssl/private/server.key↵

El HTTPS suele escuchar en el puerto número 443. Podría añadir la siguiente línea al archivo /etc/apache2/ports.conf:

↵
Listen 443↵

Accediendo al Servidor

Una vez haya instalado su certificado, debería reiniciar su servidor web. Puede ejecutar la siguiente orden en la línea de órdenes de una terminal para reiniciar su servidor web.

            
sudo /etc/init.d/apache2 restart

Nota

Debería memorizar e introducir su contraseña cada vez que inicie una sesión segura en su navegador.

Se le pedirá que introduzca la frase de paso. Cuando haya introducido la frase de paso correcta, se arrancará el servidor web seguro. Puede acceder a las páginas del servidor seguro tecleando https://su_equipo/url en la barra de direcciones de su navegador.

Referencias

Documentación de Apache2

Documentación de Mod SSL

Anterior
Siguiente
Inicio