InicioLinuxPequeño Tutorial sobre Apache en Gnu/Linux

Pequeño Tutorial sobre Apache en Gnu/Linux

Linux7/15/2011



¿Que es Apache?


Este pequeña Aplicacion/Servicio es muy conocida en el ambiente Gnu/Linux y muy utilizada por muchos.
Y si estamos pensado trabajar o simplemente montar nuestras propias paginas web eh a aqui la herramientas que estabas buscando. Gracias a Apache podremos montar nuestro propio Servidor Web , y con ello poder administrar o crear nuestras propias paginas web, ya sea en html,php,ruby,perl,etc.

No solo es un Servidor Web, ya que gracias sus módulos podemos realizar otras cosas mas como poder acceder a ficheros,ejecutar nuestros script's, usar distintos métodos de autenticacion para aumentar la seguridad,trabajar con cifrado a través de SSL,etc.

Naturalmente con solo instalar Apache ya basta para tener nuestro propio servidor web, pero tenerlo así solamente seria un desperdicio de toda su potencia y ademas seguramente llegara un punto que te darás cuenta que no te alcanza, por eso se suele combinar con otras aplicaciones como php , mysql,etc.

Ahora...

¿Como hago para tener mi propio servidor web?

Primero que nada seria cuestion de instalar la aplicacion y el metodo dependera de la distribucion con la cual estes trabajando.

Algunos Ejemplos :

* Aptitude install nombre_paquete

* Yum install nombre_paquete

* Pacman -S nombre_paquete

* Emerge nombre_paquete

Nota : Naturalmente el paquete se llama : Apache2 pero para mas seguridad o para cotejar que asi es como realmente se llama la aplicacion con tomarse 5 segundos haciendo un search no se nos va a caer el mundo.

Una vez terminado el proceso de instalacion se nos crearan los archivos de configuracion de apache y los correspondientes script's del mismo.

- Los Archivos de configuracion seguramente esten en /etc/apache2

- El Directorio Raiz por defecto sera /var/www

Algo a tener en cuenta que por ahí algun día lo ven o algunos ya lo vieron es que apache corre como ROOT y sabemos que todo servicio de red no DEBE ejecutarse como ROOT.
Pero para todo esto ahí un porque ya que esto no es tan así. Si bien apache corre como root solo lo hace para inicializar el servicio ya que toda servicio debajo del puerto 1000 debido a lo establecido en POSIX debe ser ejecutado como root, pero una vez que el servicio esta online apache se encarga de generar procesos hijos(www-data) los cuales serán los que realmente atiendan a las peticiones del servidor.

Ahora con apache instalado si vamos a nuestro browser y tipeamos localhost.com nos mostrara nuestro propia pagina web montada en nuestro servidor sin que tengamos que hacer nada de nada, ya que por defecto viene configurado un VirtualHost y también un index en el Directorio Raíz.


¿VirtualHost , Index?


El index sera el arhivo que contenga nuestra pagina web que puede estar diseñada en html,php,etc. y lo vamos a encontrar en /var/www que es el DocumentRoot por defecto.

Y nuestro VirtualHost sera aquel que nos permita administrar/Configurar NUESTRAS paginas web's ya que gracias a el podemos tener distintos sites en una misma ip cada una totalmente independiente.
Podemos encontrar nuestros VirtualHost en 2 lugares que no son iguales , ya que depende del lugar donde se encuentren va a funcionar nuestro site o no.


Lo encontramos en :

- /etc/apache2/sites-avalaible/nombre_Vhost

-/etc/apache2/sites-enabled/nombre_Vhost

En /Sites-avalaible vamos a encontrar nuestros sites en etapa de elaboracion.

y

En /Sites-enabled vamos a encontrar nuestros sites en producción.

-----------------------------------------------------------------------------------------------

En nuestro archivo /etc/apache2/apache.conf vamos a tener nuestra configuración global, ya que podemos tener una configuración independiente por cada Vhost.
Seguramente alguna de las opciones con las cuales nos encontremos sean :

- ServerName : : Establece el nombre con el cual se conoce el servidor así mismo.

- ServerRoot : Directorio/s donde van a estar los archivos de configuración.

- DocumentRoot : Directorio donde se encuentra los archivos que apache servirá a los clientes.

- PidFile : Fichero donde se almacena el PID (Process ID).

- User/Group : Estable el usuario y el grupo con el cual se ejecuta apache.

- ErrorLog : Fichero donde se almacenan los errores.

- Listen : Puerto en el que escucha apache.

- DirectoryIndex : Establece los nombres de fichero que serviran como indice al acceder a un directorio.

Estos son algunos de los que pueden llegar a encontrarse pero no son todos.

Ahora ,antes de empezar a trabajar con nuestros Vhost tenemos que tener en cuenta que como comentaba antes tener apache para albergar un sitio web seria un desperdicio de toda su potencia ya que atravez de una misma ip podemos albergar muchos sitios.

Y como sabemos cada sitio tendra un nombre pero todos siempre responderan a la misma ip y para eso vamos a tener que tener configurado un servidor DNS , aunque tampoco es necesario ya que podemos hacer que nuestros /etc/hosts mapee nuestra ip a x cantidad de nombres, un ejemplo de ellos seria :

- cat /etc/hosts

127.0.0.1 localhost

10.0.0.1 www.dominio1.com www.dominio2.com www.dominiox.com

Después tenemos distintas maneras de configurar nuestros Vhost los cuales pueden ser configurados por IP,Puerto,Nombre o una combinación de ellos.


Vhost Configurados por IP


Supongamos que nuestro servidor web atiende 2 ip (Podríamos tener 2 Placas de Red) y acá una de ella le queremos asignar un sitio web.

Abrimos el archivo Vhost de configuracion situado en :

- vim /etc/apache2/sites-avalaible/default

Nota : default es el nombre por defecto pero podemos ponerle el que mas nos guste.

<VirtualHost 10.0.0.10>

ServerName www.dominio1.com --> Nombre del Dominio.

DocumentRoot /var/www/dominio1 --> Directorio de Archivos.

ErrorLog /var/log/apache2/error.log --> Archivo Log de Errores.

TransferLog /var/log/apache2/access.log --> Archivo Log de Accesos.

</VirtualHost>

<VirtualHost 10.0.0.20>

ServerName www.dominio2.com

DocumentRoot /var/www/dominio2

ErrorLog /var/log/apache2/error.log

TransferLog /var/log/apache2/access.log

</VirtualHost>


Vhost Configurados por Puerto



<VirtualHost 10.0.0.10:80> --- > Puerto de Escucha 80

ServerName www.dominio1.com --> Nombre del Dominio.

DocumentRoot /var/www/dominio1 --> Directorio de Archivos.

ErrorLog /var/log/apache2/error.log --> Archivo Log de Errores.

TransferLog /var/log/apache2/access.log --> Archivo Log de Accesos.

</VirtualHost>

<VirtualHost 10.0.0.10:8080> --- > Puerto de Escucha 8080

ServerName www.dominio1.com

DocumentRoot /var/www/dominio1/intranet

ErrorLog /var/log/apache2/error.log

TransferLog /var/log/apache2/access.log

</VirtualHost>

Vhost Configurados por Nombre

NameVirtualHost 10.0.0.10

<VirtualHost www.dominio1.com>

ServerName www.dominio1.com

DocumentRoot /var/www/dominio2

ErrorLog /var/log/apache2/error.log

TransferLog /var/log/apache2/access.log

</VirtualHost>


Y también podemos tener una mezcla de ellos.


NameVirtualHost 10.0.0.10

<VirtualHost www.dominio1.com>

ServerName www.dominio1.com

DocumentRoot /var/www/dominio1

ErrorLog /var/log/apache2/error.log

TransferLog /var/log/apache2/access.log

</VirtualHost>

<VirtualHost 10.0.0.20:80>

ServerName www.dominio2.com

DocumentRoot /var/www/dominio2

ErrorLog /var/log/apache2/error.log

TransferLog /var/log/apache2/access.log

</VirtualHost>

<VirtualHost 10.0.0.20:8080>

ServerName www.dominio2.com

DocumentRoot /var/www/dominio2/intranet

ErrorLog /var/log/apache2/error.log

TransferLog /var/log/apache2/access.log

</VirtualHost>

<VirtualHost 10.0.0.3o>

ServerName www.dominio3.com

DocumentRoot /var/www/dominio3

ErrorLog /var/log/apache2/error.log

TransferLog /var/log/apache2/access.log

</VirtualHost>


Autenticacion



Ahora que ya sabemos como definir un Vhost , lo unico que restaria seria modificar nuestro index situado en DocumentRoot a nuestro criterio. Pero que pasa si yo tengo varias paginas web y quiero restringir el acceso a ellas porque no quiero que todos los usuarios de mi compania,por ej logren acceder a ellos. Tengan en cuenta que esa otra pagina va a ser un Vhost distinto y va a contener otro otro index o quizas no , simplemente sea un contenedor de archivos para que puedan hacer uso ciertas personas.

Imaginemos el siguiente escenario :

- ls /home/user1/web

index.php --> archivo

privado --> Directorio

- ls /home/user1/web/privado

tux.jpg

backup.tar.gz

prueba.sh

Lo que vamos a hacer es que cuando algun usuario quiera acceder a /privado tenga que autenticarse de alguna manera y para ello trabajaremos con alguna de nuestros 2 tipos de autenticaciones (Basica/Digest).


Vhost con una Autenticacion basica



- vim /etc/apache2/sites-avalaible/misitio

<VirtualHost *:80> --> El * es equivalente a todos/as

ServerName www.misitio.com

DocumentRoot ~/web --> ~ hace referencia a /home/usuario

<Directory ~/web/privado>

AuthType Basic

AuthName "Zona Restringida"

AuthUserFile /etc/apache2/usuarios

AuthGroupFile /etc/apache2/grupos

require valid-user

</Directory>

</VirtualHost>

Analizemos un poquito lo que acabamos de hacer, con el directorio ya creado en ~/web/privado definimos que este mismo no sea accedido por cualquiera sino que sea a travez de un usuario y contraseña.

Aunque todo esto va a viajar por texto plano(tener en cuenta ya que con cualquier sniffer podemos capturar la misma).

- AuthType : Define el tipo de autenticacion puede ser Basica o Digest.

- AuthName : Define una leyenda a aparecer en el cuadro de dialogo al intentar acceder.

- AuthUserFile : Define la ruta del archivo donde estan almacenado los usuarios.

- AuthGroupFiel : Idem AuthUserFile pero para los grupos.

- Require : El metodo de validacion que puede ser :

* valid-user

* user user1 user2 userx

* group grp1 grp2 grpx

* user user1 user2 grp1 grp2

Para crear los usuarios vamos a necesitar de htpasswd que ya viene con apache.

- htpasswd -c (crea el archivo sino existe) /etc/apache2/usuarios user1 (nombre.usuario)

Para crear los grupos creamos el archivo manualmente con la siguiente estructura :

nombre_grupo1 : user1 user2

nombre_grupo2 : user3 user4


Vhost con una Autenticacion Digest


Veiamos antes que nuestro contraseña iba a viajar por texto plano que era algo totalmente inseguro , asi como dejar el archivo /etc/apache2/usuarios sea accedido y/o modificado por cualquiera.

Ahora en lugar de enviar la contraseña por texto plano o en base 64 con Digest las contraseñas no viajan por la red. Al pedir un recurso compartido, el servidor envia un numero (noonce) y con ese numero , la URI y la contraseña el browser realiza el Digest. Es Decir, un calculo basado en MD5 que le da un numero muy raro y dificil de obtener sin la contraseña y con esto se reduce el riesgo de captura de contraseña.

Lo 1r0 que tenemos que hacer es cargar el modulo con a2enmod nombre_modulo o directamente llamarlo desde el Vhost.

- vim /etc/apache2/sites-avalaible/misitio

<VirtualHost *:80>

ServerName www.misitio.com

DocumentRoot ~/web

<Directory ~/web/privado>

AuthType Digest

AuthName "privado"

AuthUserFile /etc/apache2/usuarios

Require valid-user

</Directory>

</VirtualHost>

Para crear los usuarios vamos a necesitar de htdigest.

- htdigest -c /etc/apache2/usuarios nombre_entorno_protegido usuario

Nota : Tener en cuenta que para que digest funcione a la hora de la creacion el nombre del entorno protegido tiene que ser igual al mismo. En nuestro caso seria :

- nombre_entorno_protegido = privado.

Aunque estos son los 2 metodos de autenticacion podemos hacer un poquito mas fuerte nuestra configuracion dando permisos especiales a nuestros entornos de la siguiente manera :

<VirtualHost *:80>

ServerName www.misitio.com

DocumentRoot ~/web

<Directory ~/web/privado>

AuthType Digest

AuthName "privado"

AuthUserFile /etc/apache2/usuarios

Require valid-user

Order Deny,Allow --> Establece un Orden.

Deny From all --> También se puede hacer por ip/nombre.

Allow From 10.0.0.x (IP) www.google.com (nombre).

</Directory>

</VirtualHost>

Como hemos visto pudimos montar nuestra propia web , pudimos montar una sección donde almacenamos ficheros entre otros y lo combinamos con Basic/Digest y a través de unos permisos especiales.

Ademas de esto podemos mejorar la configuracion de nuestros indices para hacernos la vida un poco mas sencilla.
<VirtualHost *:80>

ServerName www.misitio.com

DocumentRoot ~/web

<Directory ~/web/privado>

AuthType Digest

AuthName "privado"

AuthUserFile /etc/apache2/usuarios

Require valid-user

Order Deny,Allow

Deny From all

Allow From 10.0.0.x www.google.com

IndexOptions FancyIndexing --> Establece las opciones para los indices.

IndexIgnore *.jpg *.rar *.sh --> Establece que ficheros no aparecen.

AddDescription "Script's del Sistema" *.sh --> Añade una descripcion.

AddIcon --> Asocia un icono a un fichero o tipos de ficheros.

</Directory>

</VirtualHost>

¡¡¡¡Pero esto no es todo Gente!!!!

Tambien tenemos la posibilidad de trabajar con script's via web gracias a CGI (Common Gateway Interface).

Es una herramienta que nos perminte ejecutar contenido dinamico, a través de ello podemos ejecutar cualquier programa del OS del server.
Sera la aplicacion quien se encargue de generar el html o lo que querramos que el servidor web entrege al cliente.

Es IMPORTANTE que en todo CGI se especifique la cabecera y despues se deje un espacio en blanco :

- echo "content-type : text/plain"

echo

Ahora generaremos nuestro script, lo que yo hice para probar fue algo muy sencillo.

- vim ~/web/info.cgi

------------------------------------------------

#!/bin/bash

echo "content-type : text/plain"

echo

tail -f /var/log/apache2/error.log

------------------------------------------------

Ahora nos queda configurar nuestro Vhost para informarle como trabajar con CGI de la siguiente manera.

Include /etc/apache2/mods-avalaible/cgi.load

ScripAlias /cgi/ ~/web/

<VirtualHost *:80>

ServerName www.misitio.com

DocumentRoot ~/web

</VirtualHost >

Ahora cuando vallamos a www.misitio.com/cgi/info.cgi veremos como esta corriendo un tail del error.log de apache.

Otra posibilidad puede ser que necesitemos que nuestros usuarios ejecuten/suban script ,lo cual es obviamente muy PELIGROSO!!! pero si no nos queda otra configuraremos el Vhost de la siguiente manera.

<Location /cgi>

AddHandler cgi-script cgi

Options +ExecCgi --> Permite la ejecución de Script's para el directorio.

</Location>


Logging


Algo a tener muy en cuenta a la hora de trabajar con Apache es que podemos y debemos darle importancia a los logs del sistema o de cada site , ya que se pueden configurar indivualmente y esto nos va a ayudar a poder resolver nuestros problemas de manera mucho mas rapida y evitarnos dolores de cabeza y evitar hacer preguntas sin sentido que a veces molestan un poco ya que la gente no se toma el tiempo para averiguar lo que realmente pasa. Tengan en cuenta que nosotros somos como ustedes y tenemos las mismas herramientas que ustedes.

- ErrorLogin --> Fichero con informacion de Errores.

- TransferLog --> Fichero con informacion de los accesos.

- LogLevel --> Establece el nivel de detalle para el log de Errores y sus variantes son:

. Emerg - Alert - Crit - Error - Warn - Notice - Info - Debug

- LogFormat --> Define un formato para log de Acceso o Personalizado

- CustomLog --> Establece fichero y formato para Log Personalizado.


Re-direcciones


En ocaciones nos va a pasar que por ahi es necesario mover las cosas de sitio. Hay que mover directorios de un lado a otro , transladar ficheros,etc, pero queremos que nuestros cliente sigan accediendo a nuestro site. Por ello justamente es que nacen las redirecciones y tenemos varias maneras de hacerlo.


Alias


- Con ello podemos acceder a directorios que estan dentro o fuera del mismisimo DocumentRoot de la siguiente manera.

* Alias /publico /var/www/sitio_fuera_DocumentRoot

* Alias /tesoreria ~/web/privado/bancos/tesorería


Redirect


- Asocia una URL vieja con una URL nueva

* Redirect /publico http://www.taringa.net

Rewrite


- Es una herramienta mas completa ya que nos permite aplicar las 2 configuraciones vistas anteriormente y mucho mas. Sirve mucho para cuando tenemos una URL del tipo: http://www.test.com/prog.php?opcion=1... y verlas como www.test.com/opc

La configuracion seria la siguiente (Todo dentro del Vhost):

* Cargamos el modulo : Include /etc/apache2/mods-avalaible/rewrite.load o a2enmod rewrite.

RewriteEngine on

RewriteLog /ruta/nombre_log

RewriteLogLevel 9

RewriteRule /opc http://www.taringa.net

RewriteRule /opc prog.php?opcion=1

La indica que es un proceso final, si se aplica no se seguiran aplicando mas reglas.


SSL(Secure Socket Layer)


Llega un momento en donde depende el ambiente en el cual estemos trabajando necesitamos hacer que la informacion viaje de tal manera que no sea legible, de poder cifrar la misma por si ahi algun sniffer por ahi y tambien para garantizar la privacidad y la identidad de las comunicaciones web. Tengan en cuenta que no es lo mismo tener un site como un blog que tener un site que administre los usuarios, las cuentas bancarias,etc.

El modulo SSL ya viene por defecto con la instalacion de Apache , solo ahi que chequear si esta activo en /etc/mods-enabled/SSL.load

Ahora lo siguiente, vamos a necesitar de OpenSSL para poder generar nuestros propios certificados y auto-firmados ya que en mi caso estoy en un entorno de pruebas y no necesito de una CA(Entidad Certificadora) pero llegado al caso que estemos en un ambiente de produccion sera recomendable poder trabajar con alguna CA (Verisign , Thawte, CertSign,FNMT,etc) que nos provea de un certificado ya que de no ser asi nuestros browser nos emergeran una alerta sobre el certificado que esta siendo usado por ese site ya que no puede reconocer dicho certificado, podemos aceptar ese certificado si queremos pero ahi que tener en cuenta puede ser un pishing y nosotros al aceptar el certificado y ingresando en la misma web podemos estar regalando toda nuestra informacion sensible a un tercero que dios sabe que hara con esa informacion.
De todas maneras , si queremos generar nuestro propio certificado y auto-firmarlo lo haremos de la siguiente manera :

1ro - Generamos nuestra llave para poder firmar nuestro certificado.

* openssl genrsa -des3 -out millave.key 2048

2d0 - Generamos nuestro certificado

* openssl req -new -key millave.key -out cert.csr

3ro - Ahora con nuestra llave y nuestro certificado creamos el certificado auto-firmado.

* openssl x509 -req -days 365 in cert.csr -signkey millave.key -out cert.crt

Ahora con nuestro propio certificado podemos pasar a configurar el Vhost.

Cargamos los modulos en el Vhost o con a2enmod y dsp en el Vhost :

<VirtualHost *:443>

- Activamos SSL --> SSLEngine ON

- Le decimos donde se almacena nuestro certificado --> SSLCertificateFile /ruta_cert

- Le decimos donde se almacena nuestra llave --> SSLCertificateKeyFile /ruta_key

</VirtualHost>

Consejos

Apache es un servidor muy seguro pero todo siempre va a depender de nosotros mismo por mas seguro que sea una aplicacion/servicio si esta mal configurada no sirve de nada, bueno , con apache pasa lo mismo.

Mantenerse al Dia

Como todos sabemos nada es perfecto y puede fallar pero justamente aqui lo bueno de poder disponer el codigo fuente del programa y de la gran comunidad que hay detras de todo esto ,que al reportarse un agujero de seguridad no se tarda mucho en poder solucionar ese inconveniente.

Protege los ficheros de configuracion

Asi como sus archivos de configuracion y sus sub-directorios solo necesitan ser accedidos por ROOT y nadie mas.

Vigila los Logs

Una de las grandes herramientas que tiene un administrador es poder hacer uso de los logs y sacarle el maximo provecho para poder revertir la situacion.

CGI y SSI

Estos no son mas que dolores de cabeza y solo se recomienda usarlo en el caso que sea extremadamente necesario. Una mala configuración podria provocar un gran agujero de seguridad.

Back-up

Ten en cuenta que lo mas importante con todo lo que trabajamos es la informacion sensible que manejamos , una denegacion de servicio DDOS nos puede dejar congelado nuestro server por un par de horas ,pero eso no seria tan grave , lo peor seria que gracias a un tercero nuestra informacion sensible se viera corrompida , por eso es muy IMPORTANTE! que siempre tengas 1 o 2 back-up's en medios distintos de ser posible de tu informacion sensible.
Datos archivados del Taringa! original
9puntos
2,179visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
5visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

k
kyd1980🇦🇷
Usuario
Puntos0
Posts8
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.