Apache2 en GNU/Linux

Escrito el 25 junio 2012 por Luis Ignacio Díaz Martínez


De alguna forma tenemos que empezar… Primero de todo decir que Apache2 es un servicio que proporciona acceso remoto a nuestra máquina por medio del protocolo HTTP, en síntesis, convierte nuestra máquina en un servidor web.

Un grandioso porcentaje de servidores web a lo largo del mundo están montados con Apache2 ( ya que es de los más antiguos y de los que han ofrecido mayor rendimiento por su versatilidad y funcionalidad ) tenemos que destacar que es software libre.

Podríamos haber elejido otros servicios como puede llegar a ser lighttpd o thttpd que son más sencillos pero más rápidos… el caso es que apache2 nos ofrece un amplio soporte debido a la gran cantidad de información que se encuentra en la red.

Bien, empezaremos instalando los paquetes necesarios aun que no tiene mucha dificultad y podremos ver como administrar apache2 de una forma muy sencilla por medio de un «pequeño» script que he realizado yo mismo.

Es importante destacar que vamos a modificar ciertos campos que «iredmail» ya instalado.

Entorno:

Trabajaremos nuevamente en una VPS con un sistema operativo Debian Squeeze. Tenemos que tener claro que la instalación de apache ha sido anterior a la documentación y que la configuración ha sido posterior a la ejecución del script iRedMail.

También tendremos que tener ciertos conceptos básicos y medios en GNU/Linux para entender y realizar correctamente todas las explicaciones que se encuentran aquí presentes.

Todo lo escrito a continuación no pretende ser instructivo si no orientativo y por lo tanto puede causar que personas sin los conocimientos adecuados puedan llegar a confundir algunos términos.

Si necesitáis ayuda siempre podéis contar con migo dejando un comentario =)

Instalando Apache2

Instalación desde repositorios

Creo que esto es lo más sencillo de todo, ya que tan solo tenemos que teclear en el terminar lo siguiente:

 Así es, apache2 como no está en los repositorios de nuestra Debian Squeeze ( muy lógico ).

Implementando PHP5

Ahora tenemos que implementar el soporte para PHP que desde hace unas versiones no me lo configura automáticamente y no entiendo el motivo.

Primero de todo instalaremos PHP5:

Ahora habilitaremos el módulo en apache2.

Y como no… reiniciamos apache2

Como instalación… ya está no hace falta nada más para tenerlo funcionando, ahora nos tocará configurar cosillas! =)

Referencias iRedmail

Quitar referencias por defecto

Como hemos comentado más arriba si venimos de instalar el servidor de correo por medio del script iredmail tendremos que reconfigurar una serie de campos que este script nos marca por defecto.

Tendremos que borrar los siguientes ficheros de configuración:

Ahora tendríamos que eliminar o vaciar el fichero «index.html» que genera en el directorio público por defecto de apache2 en Debian.

Por último reiniciamos el servicio de apache para cargar con las modificaciones en la configuración.

Sites por defecto

Un «site» simplemente como su nombre indica es un sitio, un pequeño fichero donde nosotros le indicamos el dominio de acceso y la carpeta a la cual se refiere.

Vale, los hemos deshabilitado, ahora tocará eliminarlos:

Ahora que los tenemos limpios nos tocará poner el nuestro.

Nuevas referencias

Ahora tenemos que añadir nuevas referencias para las configuraciones que nos hemos cargado. De momento tenemos que hacer que funcione PHPMyAdmin y RoundCube.

PHPMyAdmin

Añadiremos un nuevo VirtualHost ( site ) de la siguiente forma:

Y ahora insertamos lo siguiente:

 Como podemos ver el ServerAlias está definido como «pma.midominio.org» que será la dirección de acceso al servicio. Si nos fijamos también en otros dos detalles podemos observar que PHPMyAdmin se encuentra en la ruta «/usr/share» y que los logs son personalizados.

RoundCube

Ahora vamos con el Webmail. Así que seguiremos los pasos anteriores:

Donde su contenido será:

Podemos observar los mismos datos que el fichero anterior pero con una nueva característica, hemos creado dos «ServerAlias» para que hagan también referencia a la entrada del correo.

Finalizando

Ahora solo nos queda habilitar los sitios y reiniciar apache:

Así que ya tendríamos acceso a los servicios desde las direcciones:

  1. pma.midominio.org
  2. mail.midominio.org

Ahora nos quedará configurar todo lo demás! ( juas 😀 )

Nuestros VirtualHost’s

Vale, está muy bien que tengamos configurados los sites de los servicios.. pero… ¿los nuestros?. Bien, empezaremos configurando nuestro site principal de la siguiente forma:

Donde su contenido será:

Como podemos ver este site contiene todos los parámetros de un sitio principal, para crear otro tan solo tendremos que indicar el nombre del VirtualHost poner el mismo contenido que este ( cambiándole el ServerAlias.. los logs el directorio y esas cosas 😛 ) y habilitarlo de la siguiente forma:

Por lo tanto no tiene mucha más dificultad de uso tan solo tenemos que leer un poquito 😛

Organización de directorios

Bueno, digamos que esta parte es muy libre y que cada uno se lo puede montar como quiera. Durante mucho tiempo he ido cambiando la forma de organizar mis directorios en los servidores web hasta que he encontrado una forma fácil y rápida con la que me siento cómodo para trabajar. Como he dicho esto solamente será una base para el que la quiera utilizar.

Bien primero mostrare un «tree» del directorio:

Nota: Para realizar esto he utilizado el paquete «tree» que se encuentra en los repositorios.

 Vale, podemos ver con el tree anterior como se organiza todo el «tinglao». Tengo que decir que los directorios principales «srv» y «web» se encuentran como enlaces simbióticos en otro directorio. Eso es sencillo. Simplemente el directorio /home/ no es un directorio público para apache ( ni quiero que lo sea ) por lo tanto web y srv se encuentran en el directorio público que es /var/www/ a continuación podemos ver un tree de el:

Aquí lo vemos claro verdad? bien, aquí tengo que explicar una pequeña cosa. Por que se encuentran dos guiones bajos delante del directorio? ( __org )… sencillamente, no es nada técnico si no, una nomenclatura que utilizo para indicar que el directorio es un contenedor de otros por lo tanto para mi sus definiciones son estas:

  • __org = Indica que es un directorio organizativo ( dentro se encuentran los dominios )
  • __srv = Indica que es un directorio de servicios ( como por ejemplo el webmail o el phpmyadmin )

¿Y luego como se organizan los dominios? bien, esta autopregunta es interesante. Dentro de «__org» se encuentran los dominios y dentro de estos los subdominios ( un árbol bien echo ) podemos verlo a continuación con el tree:

 Vale aquí podemos observar una serie de dominios y unas carpetas dentro de ellos. Podemos observar que dentro del dominio «luigdima.name» tenemos el directorio «www_». El directorio «www_» hace referencia a la raíz del dominio. Es donde estaría toda la información de este. El guión bajo indica que la ruta sería equivalente a www.luigdima.name ( la raíz ).

Para entendernos, «www_» lo utilizo sencillamente para almacenar el contenido del dominio luigdima.name y no tenerlo esparcido conjunto a los subdominios que pueda tener en un futuro, digamos que es el «home».

Si nos fijamos en otro dominio por ejemplo sdsbdn.org podemos observar que esta vez tenemos el directorio demo_ esto indica que demo_ es un subdominio de sdsbdn.org quedando la ruta declarada como demo.sdsbdn.org.

Nota: Simplemente el guión bajo indica que detrás de el tiene un dominio.

Por lo tanto esta sería la organización de directorios que utilizo yo. Como ya he dicho esto solamente es orientativo.

Nota importante: Creo que tendría que quedar clara la organización es un punto muy importante en la administración, en parte todos los scripts que veréis más adelante están basados en una organización de este estilo.

Logs independientes

Apache2 por defecto almacena los logs en los archivos «access.log» y «error.log» generalmente. Claro, esto no nos es util si queremos monitorizar bien cada dominio por separado ( o subdominio ). Así que por lo tanto crearemos logs independientes.

Esto es muy sencillo, tan solo tendremos que indicarle donde estará el log en nuestro VirtualHost.

Como podemos ver en el ejemplo anterior hemos cambiado los logs por defecto a «error_mail_midominio_org.log». Bien como podemos observar el log contiene el nombre del dominio con la exclusividad que no tiene puntos si no guiones bajos. Esto es mejor ya que nos dará menos problemas.

ServerAlias y Alias

Ahora un poquito de teoria. No vamos a realizar un análisis exhaustivo de estas dos propiedades tan solo las vamos a explicar por encima para que se entienda el concepto.

ServerAlias

Un ServerAlias es un segundo nombre para nuestro servidor. Esto quiere decir que si por ejemplo tenemos una misma web y nosotros queremos que a esa página web se acceda por medio de dos dominios utilizaremos un ServerAlias.

Pongamos un ejemplo en la vida real: Manolito tiene una tienda de reparaciones, esta tienda tiene una página web llamada «reparacionesmanolito.com». Ahora mismo la web de Manolito funciona perfectamente pero a decidido comprar un dominio nuevo «manolitorepara.com» para hacerse más publicidad. Por lo tanto nosotros como administradores tendremos que añadir un ServerAlias para que así «reparacionesmanolito.com» y «manolitorepara.com» apunten a la misma página web.

Alias

Bien, un alias es algo distinto, podríamos decir que es como un enlace simbólico hacía otro directorio. Esto quiere decir que nosotros en la url de nuestro navegador podemos escribir «http://midominio.org/CARNE/» y en verdad nos estamos cargando el contenido que está en el directorio «/home/www/miscosas/carnecita/». Simplemente es un acceso rápido a la ruta que le indicamos.

Esto es de gran utilidad cuando queremos mostrar sites o servicios que no se encuentran en nuestro nivel organizativo ( apache, como hemos visto más arriba ) y mostrar contenidos que estén por ejemplo en «/usr/share» como es el caso de phpmyadmin.

El archivo .htaccess

Ahora vamos a explicar por encima el concepto de .htaccess. Esto es un pequeño fichero que se tiene que crear en la raíz de la carpeta en la cual se quieren determinar ciertas acciones o funciones ( el punto de delante tiene que estar presente ). Que determinadas acciones? bueno, cualquiera que acepte apache, de echo simplemente es una extensión de las configuraciones… esto es de gran utilidad sencillamente por que podemos habilitar módulos que necesitemos o restringir el acceso a una carpeta mediante usuario y contraseña sin necesidad de edita el VirtualHost del dominio.

Seguridad básica

Toda la informática basada en comunicación gira entorno a la seguridad. A continuación vamos a ver algunos aspectos básicos sobre la seguridad en apache. Es algo que tenemos que tener muy presente ya que nuestros datos dependen de ello.

Quitar versión e información delicada

La gran mayoria de ataques informáticos se realiza por medio de bugs que se presentan en las distintas versiones del software en questión. Por lo tanto es un serio problema que el hacker en cuestión sepa de dicha versión. Si no se sabe, tendrá que ir probando distintos bugs hasta que de con uno aleatoriamente.

Para implementar esto tendremos que edita el fichero de configuración de apache.

A continuación introducimos al final de la linea lo siguiente:

Y ahora guardamos el documento.

Listado de directorios

Recuerdo muchas películas en que unos cuantos intrusos consiguen el listado de varios archivos importantes calentitos para su inmediata descarga. Por desgracia esto lo podemos encontrar día a día, muchos servidores tienen por defecto el listado de archivos… esto lo tenemos que evitar!

Para realizar esto tendremos que editar el fichero de configuración de apache ( como hemos visto antes ) y añadir la siguiente linea al final del documento:

Mod_Security ( TODO )

Esto como bien dice el título está por realizar. La verdad es que es algo importante y de mucho peso y que por lo tanto se merece la atención de un post entero. Así que en unos días publicaré sobre este fantástico módulo de apache.

Finalizando

Después de todo esto para finalizar tendremos que reiniciar el servicio de apache como hemos visto en pasos anteriores con tal de que la configuración nueva sea cargada =)

Monitorizando con ApacheTop

[emc2alert type=»error» style=»normal» position=»top» visible=»visible» closebtn=»0″ ]No funciona lo explicado en esta sección… lee atentamente![/emc2alert]

Explicación: El Script utilizado junta las partes del fichero pero!… existe un problema… que apachetop se basa en la hora para realizar esto ( últimas líneas añadidas ) y claro.. como el access.log no tiene un orden lógico la aplicación no es capaz de interpretarlo correctamente.

Queda pendiente generar un nuevo script que realice esta funcionalidad!.

ApacheTop es una herramienta muy útil para la monitorización de apache ( entre tantas otras que existen ) pero esta nos resultará de gran utilidad en nuestra consola de comandos.

Instalación

La instalación es bastante sencilla ya que el paquete se encuentra en los repositorios oficiales de Debian. Por lo tanto para la instalación realizaremos lo siguiente:

Así de sencillo la verdad =)

Problema

La verdad es que es una herramienta muy sencilla y nosotros tenemos un gran problema. Como hemos explicado más arriba nosotros almacenamos todos los logs de forma independiente y por lo tanto nuestro apache no contiene los logs genéricos que necesita este programa.

Solución

Una de las que he pensado es crear un pequeño script que agrupe los logs y genere el que necesita la aplicación para funcionar. Por lo tanto el script que he creado sencillamente es el siguiente:

Contiene lo siguiente:

Igual que hicimos con AWStats tenemos que anclar este script al sistema de logs de apache.

Quedando así:

Monitorizado! =)

Script para la gestión de Sites ( Propio )

Este es uno de los puntos quizás en los cuales he dedicado más tiempo. Como ya he dicho anteriormente soy muy bago… demasiado con estas cosas.. y he creado un pequeño Script el cual permite administrar de forma automática toda la organización de sites ( un front-end para administradores??? ).

Este Script cuenta con dos partes, la primera es la plantilla. La plantilla contiene toda la configuración base que queremos que tenga nuestro VirtualHost como por ejemplo «<VirtualHost></VirtualHost>» vendría a ser el fichero en si. La segunda parte ya sería la chicha, lo que viene a ser el Script.

Tengo que decir que el Script tiene algún que otro error sin importancia ( algún escape, o letra mal colocada ), todo funciona pero se tiene que revisar 😛 son +400  líneas de código en shellscript.. así que.. ya se sabe :P.

Este tiene las siguientes características:

  1. Crear dominio ( subdominio )
    1. Automático
    2. Manual
  2. Eliminar dominio
  3. Alias en dominio
    1. ServerAlias
    2. Alias
  4. Listar dominios
  5. Editar dominio
  6. Hab./Des. dominio
  7. Recargar Apache2

La primera caracteristica nos da la posibilidad de crear un dominio o subdominio creando el solo los directorios necesarios en la organización que hemos establecido más arriba ( el modo automático ). Tambien tiene la posibilidad de hacerlo manualmente, esto queire decir que nosotros tras haber introducido el nombre del dominio tendremos que introducirle un ruta en la cual queremos que este enlazado el dominio ( directorio el cual va a ser la raíz de este ).

La segunda caracteristica «Eliminar dominio» nos permite cargarnos el VirtualHost de apcahe peroNUNCAel directorio que contiene la información… simplemente esto es un tema de seguridad, si nos cargamos el dominio por lo que sea el directorio no tendría que ser borrado hasta que no comprobemos su contenido ( podemos tener algo de valor, o quizás algún cliente o nosotros mismos queramos conservar una copia ).

La característica de Alias de dominio es como he explicado más arriba, simplemente generamos los alias que queramos por el dominio introducido sea un ServerAlias o un Alias. **Una vez creado un Alias o ServerAlias si queremos eliminarlo lo tendremos que hacer a mano ( editando el VirtualHost )

La función de listar dominios ya se describe bastante bien, veremos los dominios que hemos creado ( ojo! los alias no son vistos eh! ).

Esta opción nos permitirá lanzar un nano ( editor ) directamente del dominio que nosotros introducimos para editar sus valores.

Ahora una función importante que es la de habilitar deshabilitar los dominios. Cuando creamos un dominio este no se habilita automáticamente por que no lo veo funcional, nosotros podemos crear una serie de dominios y luego no querer habilitarlos por alguna razón… así que lo tendremos que hacer a mano. O en caso contrario deshabilitar un dominio que ya tenemos en funcionamiento.

También es importante la opción de reiniciar apache sobretodo cuando hemos modificado casillas ( cuando acabemos de trabajar con el Script tendríamos que ejcutar esta acción si queremos que los cambios sean efectivos ).

Sin más miramientos os dejo aquí los enlaces de descarga:

Referencias

Aquí como referencias tengo pocas… pero allá van!


Cargando...

Comentarios: