CÓMO INSTALAR Y CONFIGURAR APACHE WEB SERVER EN GNU/LINUX I

apache-logo¿Qué es Apache web server?

Es un servidor web de código abierto, para plataformas Unix (BSD, GNU/Linux, etc.), Microsoft Windows, Macintosh y otras, que implementa el protocolo HTTP/1.1 y la noción de sitio virtual. Cuando comenzó su desarrollo en 1995 se basó inicialmente en el código del popular NCSA HTTPd 1.3 (Servidor web desarrollado originalmente en el National Center for Supercomputing Applications), pero más tarde fue reescrito casi por completo.

Este servidor web es una de las aplicaciones más conocidas del mundo GNU/Linux además de ser el más implantado entre los distintos servidores que ofertan servicios web en Internet.

Entre las características más significativas podemos destacar:

  • Es modular.
  • Nos proporciona la posibilidad de crear servidores virtuales.
  • Podemos crear webs seguras “https”.
  • Ofrece la creación de sitios web de usuario.
  • LAMP (Linux, Apache, MySQL, PHP).

https://httpd.apache.org

 

Organización de un sitio web

La organización que podemos realizar de nuestro servidor Apache, puede ser muy variada. Una configuración clásica en los sistemas Unix podría ser:

  • La página web de una intranet/internet que se almacene en la carpeta raíz del servidor web.
  • Las páginas webs de los usuarios que se almacenarán en las carpetas home de cada uno de ellos.

 

Espacio web para la Intranet/internet

Por defecto, la carpeta raíz del servidor web es “/var/www” (DocumentRoot). Todos los documentos que se encuentren dentro de la carpeta raíz del servidor, serán accesibles vía web. Dentro del raíz de documentos crearemos la página web de nuestra intranet/internet.

El acceso a la web principal sería “http://ip-del-servidor” ó “http://nombre-del-servidor”. En el caso de no tener el servidor DNS funcionando, podemos añadir el nombre y la dirección IP en el fichero “/etc/hosts” tanto en el servidor como en el resto de PC’s de nuestra LAN, para resolver localmente.

 

Espacio web para cada usuario

En este caso, cada usuario del sistema dispondrá de un espacio web que se almacenará dentro de su carpeta “home” en un directorio llamado “public_html”. Si dicha carpeta no existe, el propio usuario puede crearla y copiar dentro de ella su página web. Los permisos recomendados son 644 para los ficheros y 755 para el directorio “public_html” de esta forma el “grupo” y el “resto” de usuarios tendrán acceso de lectura y podrán visualizar las páginas.

Para acceder vía web a la página de un usuario, desde un navegador deberemos escribir:

http://ip-del-servidor/~login-usuario/

El carácter ‘~’ (virgulilla) se obtiene con “Alt Gr + 4” (para usuarios de Mac “Alt + ñ”) y sirve para indicarle a apache que debe servir la página web desde el home del usuario. Por ejemplo, si hemos creado un usuario llamado “vagrant” y éste ha creado la carpeta “/home/vagrant/public_html” y copiado en ella su página web, podremos acceder a ésta con la siguiente URL:

http://192.168.1.224/~vagrant/

 

Espacio web seguro

Tenemos la posibilidad de crear un sitio web virtual, al cual tengamos acceso vía SSL, es decir, será navegable mediante el protocolo «https». Dentro de esta estructura la mayoría de los contenidos pueden ser públicos y cualquier usuario podrá acceder a ellos. Sin embargo, si queremos, existe la posibilidad de hacer que algunas carpetas sean privadas y que solo tengan acceso a ellas determinadas personas identificándose con un nombre de usuario y una contraseña.

 

Instalación del servidor web Apache

Como siempre, dependiendo de la distribución usada, utilizaremos nuestro gestor de paquetes para tal fin (apt-get, dnf, yast).

En mi caso, bajo Ubuntu:

# apt-get install apache2

 

Configuración

Los archivos de configuración de apache se encuentran en la carpeta “/etc/apache2”. El archivo principal de configuración es “/etc/apache2/apache2.conf”. Antes de realizar cualquier cambio en este archivo, es conveniente realizar una copia de seguridad del mismo ya que si apache encuentra algún error en el archivo de configuración, no arrancará.

# cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak

Se pueden configurar infinidad de parámetros, para poner en marcha el servidor editaremos el fichero “apache2.conf” y añadiremos el siguiente:

ServerName http://www.midominio.com

Para que los PC’s de la red local sepan que “www.midominio.com” es nuestro servidor web, debemos crear una entrada “www” hacia su dirección IP en el servidor DNS (si disponemos de uno), o bien editar el archivo “/etc/hosts” agregando la línea “192.168.1.224 http://www.midominio.com” (como es mi caso en este HowTo), pero lo más fácil y seguro para acceder es utilizar la dirección IP del servidor.

 

Arranque y parada del servidor web

# /etc/init.d/apache2 start

ó

# service apache2 start

Podremos usar cualquier otro parámetro como “stop”, “restart”, “reload”, “status”.

 

Arranque automático del servidor web al iniciar el sistema.

Para hacer que el servicio arranque automáticamente al iniciar el sistema, debemos crear los enlaces simbólicos correspondientes a los niveles de ejecución, tal y como indicamos en el “HowTo” referente al servidor DHCP. Aunque lo más rápido y cómodo en este caso es instalar la utilidad “sysv-rc-conf” como explicamos en ese mismo post.

Verificamos en que “runlevels” se está ejecutando apache:

# sysv-rc-conf

niveles_ejecucion_apache

Como podemos observar se ejecutará automáticamente en los niveles 2, 3, 4, 5. Ahora verificaremos que el servidor esta corriendo, para ello, tendremos que poner en el navegador web la dirección IP del servidor.

SERVER_IP_LOCAL

En este caso, al no disponer de servidor DNS, editaremos el archivo “/etc/hosts” y añadiremos la dirección IP del servidor y su nombre, tal que así:

192.168.1.224   http://www.midominio.com

Si quisiéramos que todas las máquinas de la red resolvieran el nombre de dominio, tendríamos que agregar la misma entrada en cada PC (no es lo más cómodo, pero no trataremos por ahora la resolución de nombres con DNS). En mi caso lo he hecho en mi “Mac”, y aquí podéis ver el resultado en “Safari”.

SAFARI

Lo que siempre funcionará es ir con la dirección IP y obtendremos el mismo resultado. Podemos personalizar nuestra página modificando el archivo “index.html” que hay dentro del directorio “/var/www”.

 

Activar el espacio web de los usuarios

Como hemos comentado anteriormente, cada usuario dispone de un espacio web que se almacena en la carpeta “public_html” dentro de su carpeta “home”. Si el directorio “public_html” no existe, el propio usuario la puede crear y almacenar en ella su sitio web. Dicha carpeta deberá tener permisos 755.

CONSEJO: Para nuestra comodidad como administradores del sistema, si queremos que ésta se genere de forma automática al dar de alta al usuario, deberíamos crearla previamente en el directorio “/etc/skel”.

NOTA: Para que apache procese los espacios web de los usuarios, es necesario activar el módulo “userdir” mediante el siguiente comando:

# a2enmod userdir

activar_modulo_userdir

Como podemos ver en la captura de la SHELL, para activar la nueva configuración habrá que reiniciar apache y accederemos a la web del usuario escribiendo en el navegador:

http://192.168.1.224/~vagrant/

Al escribir la URL en mi navegador “Safari”, podemos ver la web del usuario.

web_usuario_vagrant

NOTA: En mi caso he tenido que crear el directorio “public_html”, como comentamos anteriormente y un archivo “index.html”.

 

Acceso a carpetas seguras

Una página web segura es un sitio web que utiliza el protocolo “https” en lugar de utilizar “http”. Ambos protocolos son idénticos, con la excepción de que la transferencia de información entre el cliente (navegador web) y el servidor (servidor web) viaja a través de la red de forma cifrada utilizando algoritmos proporcionados por el paquete “OpenSSL”.

Los algoritmos de cifrado utilizados reúnen las características necesarias para garantizar que la información que sale desde el servidor hacia el cliente, esté cifrada y solamente pueda ser descifrada por el cliente y viceversa. Si durante la transferencia de la información un ‘hacker’ hiciera copia de los paquetes de datos e intentara descifrarlos, los algoritmos garantizarían que no pudiera hacerlo por fuerza bruta (probando todas las claves posibles). Durante la transmisión, se utilizan algoritmos de cifrado simétricos, pero para intercambiar las claves de cifrado, hay una sesión inicial de cifrado asimétrico.

 

Módulo SSL para apache

Al instalar apache2, se instala también el módulo “SSL”, por lo que no es necesario instalar ningún paquete adicional. Tan solo debemos generar un certificado para el servidor y activar el módulo. Dicho certificado, permitirá que nuestro servidor utilice cifrado asimétrico para intercambiar las claves con los clientes antes de iniciar una trasmisión segura de información. Inicialmente, el cliente deberá aceptar el certificado del servidor ya que generaremos uno auto-firmado.

Para generar nuestro certificado ejecutaremos el comando:

# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/apache2.pem

Después, se creará el archivo “/etc/ssl/certs/apache2.pem” que contiene la claves que permitirán al servidor utilizar cifrado asimétrico. El siguiente paso será configurar un servidor virtual para que utilice dicho certificado.

certificado

 

Crear un servidor virtual seguro

Primero crearemos una carpeta de nombre “websegura” dentro de “/var/www” y a su vez dentro de ella el correspondiente fichero “index.html”. Dicha carpeta será el raíz de documentos (DocumentRoot) de nuestro servidor virtual seguro, de modo que todo lo que coloquemos en dicho directorio deberá ser accedido vía “https”. Eso lo indicaremos más adelante mediante el parámetro “SSLRequireSSL”. El protocolo “https” utiliza el puerto 443, por lo tanto, tendremos que habilitar dicho puerto para que apache lo utilice (en el caso de que estuviera habilitado no tendríamos que hacer nada de lo siguiente).

Para habilitar la escucha en el puerto 443, añadiremos el siguiente parámetro al archivo “/etc/apache2/ports.conf”:

Listen 443

Después debemos crear el servidor virtual en apache. Dicho servidor dispondrá de una URL de acceso diferente a la de nuestra web principal “www.midominio.com” y se llamará “websegura.midominio.com”. Ésta, será accesible mediante “https”, por tanto tendremos que habilitar “SSL” e indicar la ruta del archivo que contiene el certificado. Todo ello lo haremos editando el archivo “/etc/apache2/sites-available/default”:

Para ello añadiremos al final del fichero “/etc/apache2/sites-available/default” lo siguiente:

 

NameVirtualHost websegura.midominio.com:443

<VirtualHost websegura.midominio.com:443>

ServerName websegura.midominio.com

DocumentRoot /var/www/websegura

SSLEngine On

SSLCertificateFile /etc/ssl/certs/apache2.pem

ErrorLog /var/log/apache2/error.log

CustomLog /var/log/apache2/access.log combined

</VirtualHost>

 

<Directory «/var/www/websegura»>

Options Indexes FollowSymlinks MultiViews

AllowOverride None

Order allow,deny

Allow from all

SSLRequireSSL

</Directory>

 

Posteriormente debemos habilitar el módulo “SSL” del servidor apache:

# a2enmod ssl

Finalmente reiniciamos el servidor apache:

# /etc/init.d/apache2 restart

ó

# service apache2 restart

Ahora, probaremos el acceso a la página web segura. Lo primero que se muestra es la alerta de seguridad que nos indica que el certificado no está emitido por una CA en la que confiamos:

1-certificado

Aceptaremos el certificado ya que lo hemos creado nosotros mismo y acto seguido vemos en el navegador la pagina “https://websegura.midominio.com”.

web_segura

 

Archivos log de apache

Por defecto, apache utiliza dos archivos de registro “access.log” y “error.log” que están almacenados en la carpeta “/var/log/apache2”. En el archivo “/var/log/apache2/access.log”, apache va registrando todos los accesos que los PC’s hacen al servidor web y en cada línea de dicho archivo va almacenando la IP, la fecha y la hora, el comando HTTP enviado por el cliente, la URL solicitada, la versión del navegador y el sistema operativo. Analizando este archivo podemos ver las veces que se ha descargado una página o un archivo, o las IP’s más activas. Este archivo de registro es utilizado por los programas que presentan estadísticas de acceso al servidor web como “AWStats”.

NOTA: “AWStats” es una herramienta open source de informes de análisis web, apta para analizar datos de servicios de Internet como un servidor web, streaming, mail y FTP. AWStats analiza los archivos log del servidor, y basándose en ellos produce informes HTML. Los datos son presentados visualmente en informes de tablas y gráficos de barra.

http://www.awstats.org

En el archivo “/var/log/apache2/error.log”, apache registra todas las incidencias o errores que se van produciendo. Por ejemplo, cuando un cliente solicita una página inexistente o intenta entrar en una carpeta protegida. Si estamos configurando algo en apache (carpetas privadas, carpetas seguras, servidores web virtuales, alias, etc…) y no funciona, una buena idea es examinar el archivo “error.log” ya que nos puede dar pistas para encontrar la solución a nuestro problema.

# tail -n 20 /var/log/apache2/access.log

 

Comandos del servidor apache

“apachectl” ó “apache2ctl”, es un “front-end” para el servidor Apache. Está diseñado para ayudar al administrador a controlar el funcionamiento del demonio “httpd” de Apache.

La secuencia de comandos “apachectl” puede funcionar en dos modos. En primer lugar, puede actuar como un simple “front-end” para el comando “httpd” que simplemente establece las variables de entorno necesarias y luego invoca “httpd”, pasando por los argumentos de línea de comandos. En segundo lugar, “apachectl” puede actuar como un guión de inicio “SysV”, tomando simples argumentos de una sola palabra, como “start”, “restart” y “stop”, y traducirlos en las señales apropiadas a “httpd”.

Esto quiere decir que los parámetros que pasamos a “apachectl”, se los podríamos pasar al demonio “httpd” y hay cierta costumbre a hacerlo, pero no es lo más conveniente según la documentación de Apache:

“In general, “httpd” should not be invoked directly, but rather should be invoked via “apachectl”.

Algunos de los parámetros son:

a2enmod        Activa un modulo de apache que indiquemos.

a2dismod       Activa un modulo de apache que indiquemos.

a2ensite         Habilita un sitio virtual.

a2dissite         Deshabilita un sitio virtual.

apachectl –v   Muestra la versión de apache.

apachectl –V  Muestra la versión y ajustes de compilación.

apachectl –M  Muestra los módulos disponibles.

apachectl –l    Muestra módulos compilados.

apachectl –t   Ejecuta una revisión de sintaxis para los archivos de configuración.

apachectl –L   Listar las directivas de configuración disponibles.

apachectl –f   Especificar un fichero de configuración alternativo.

apachectl –d  Especificar un ServerRoot alternativo.

apachectl –h  Listar las opciones en línea de comandos.

 

LAMP

Conocemos por “LAMP” en el lenguaje de las TI como la combinación de GNU/Linux, Apache, MySQL y PHP. Para poder aprovechar al máximo las características del servidor web apache, es muy conveniente que pueda ejecutar scripts en el lado del servidor (PHP) y que pueda acceder a bases de datos (MySQL). Las aplicaciones web más interesantes como los gestores de contenidos para crear y mantener blogs, foros-web, repositorios de archivos, etc… requieren de lenguaje script ejecutándose en el servidor y de un sistema gestor de bases de datos, lo que conocemos como webs dinámicas.

Pero todo esto lo veremos en el siguiente post:

CÓMO INSTALAR Y CONFIGURAR APACHE WEB SERVER EN GNU/LINUX II

 

 

 

Deja un comentario