Archivo de la categoría: Apache

Configurar SSL en Apache

Introducción

Hola a los muy pocos que leen, en este tutorial vamos a aprender a configurar nuestro servidor Apache para que soporte SSL.

Vamos a configurar Apache bajo Ubuntu, aunque ya sabéis, podéis usar cualquier otra distro GNU/Linux. De paso digo que en este tutorial no voy a explicar cómo instalar Apache ni cómo crear host virtuales basados en nombre. Si queréis saber cómo se hace echadle un ojo a mi otro tutorial.

¿Qué es SSL?

SSL (Secure Socket Layer) es un protocolo criptográfico que proporciona una comunicación segura en internet. El protocolo SSL intercambia registros y cada registro puede ser comprimido, cifrado y empaquetado, se ejecuta en una capa entre los protocolos HTTP, SMTP, NNTP y sobre el protocolo de transporte TCP.

Comenzó a usarse en 1996 por Netscape y actualmente es aprobado por la mayoría de entidades financieras para el comercio por internet.

Habilitando el módulo SSL y creando el certificado

Para habilitar el módulo SSL, tecleamos en un terminal lo siguiente:

sudo a2enmod ssl

Y después habilitamos este módulo también:

sudo a2enmod rewrite

Una vez habilitados los módulos anteriormente mencionados, reiniciamos Apache:

sudo apache2ctl restart

Bien, ahora pasamos a la creación del certificado SSL. Antes de empezar, necesitamos instalar unos paquetes necesarios, en un terminal tecleamos lo siguiente:

sudo aptitude install openssl openssl-blacklist openssl-blacklist-extra

Una vez instalado el paquete, en el terminal tecleamos lo siguiente para crear el certificado SSL:

sudo openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

Ahora nos hará una serie de preguntas, las respondemos y ya tendremos nuestro certificado creado.

Configurando SSL

Ya tenemos el certificado creado e instalado en /etc/apache2/apache.pem. Ahora vamos a modificar el fichero /etc/apache2/sites-available/websegura. Nos vamos a un terminal y escribimos:

sudo gedit /etc/apache2/sites-available/websegura

Una vez con el archivo abierto, lo dejamos de esta forma:

<VirtualHost *:443>
    ServerName www.websegura.com
    LogLevel warn
    ErrorLog /var/log/apache2/www.websegura.com.error.log
    CustomLog /var/log/apache2/www.websegura.com.access.log combined

    DocumentRoot /var/www/www.websegura.com

    <Directory /var/www/www.websegura.com>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    SSLEngine On
    SSLCertificateFile    /etc/apache2/apache.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
</VirtualHost>

Vamos ahora configurar Apache para que escuche también por el puerto 443. En un terminal tecleamos:

sudo gedit /etc/apache2/ports.conf

Borramos todo el contenido del archivo, y lo dejamos de la siguiente forma:

NameVirtualHost *:80
Listen 80
NameVirtualHost *:443
Listen 443

Ahora toca modificar el archivo /etc/apache2/sites-available/default. En un terminal escribimos:

sudo gedit /etc/apache2/sites-available/default

Y ahora comenzamos a introducir estos fragmentos de código al archivo, en las zonas especificadas.

Al principio:


NameVirtualHost   *:80
NameVirtualHost   *:443

Después de DocumentRoot  /var/www:

DocumentRoot /var/www
RewriteEngine On
RewriteLog /var/log/apache2/https_rewrite.log
RewriteLogLevel 1
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

<Directory />

Al final del fichero:

</VirtualHost>
<VirtualHost *:443>
    DocumentRoot /var/www/websegura
    ErrorLog /var/log/apache2/error.log
    SSLEngine on
    SSLCertificateFile /etc/apache2/apache.pem
</VirtualHost>

NOTA: No olvides modificar el fichero /etc/hosts. En el tutorial Apache: Configuración de hosts basados en nombres explico qué hay que hacer.

Ahora sólo queda reiniciar Apache para que la configuración se aplique. Desde el terminal:

sudo apache2ctl restart

Verificando el funcionamiento

Para comprobar que todo el proceso está correcto, debemos abrir el navegador y visitar www.websegura.com, si todo está correcto, veremos algo así:

Ahora debemos dar la excepción de seguridad al navegador, para poder acceder al sitio web. Pulsamos en Entiendo los riesgos.

Ahora hacemos click en Añadir excepción.

Se nos abre una ventana nueva, esta vez pulsamos en Confirmar excepción de seguridad.

Una vez hecho eso, sorpresa. Nuestra web con SSL.

Un candado en la esquina inferior derecha, nos proporciona información acerca la entidad que ha firmado el certificado, en este caso, nosotros mismos.

Bibliografía

Autenticación en servidor Apache

Introducción

Hoy vamos a aprender a establecer un nivel de seguridad en nuestro servidor Apache, corriendo bajo Ubuntu, aunque como siempre digo podemos usar cualquier distribución para seguir el tutorial. Constará de una autenticación mediante un usuario y contraseña. Para este tutorial voy a crear un nuevo Host basado en IP. Dicho esto, vamos a ello.

Creando el nuevo Host

Como ya he comentado antes, voy a crear un nuevo Host basado en IP, para ello abrimos el terminal y tecleamos lo siguiente:

sudo mkdir /var/www/passwordhost

Una vez creado el directorio que alojará el nuevo Host, vamos a crear el index.html, por lo que tecleamos en el terminal:

sudo gedit /var/www/passwordhost/index.html

Una vez con gedit abierto, escribimos un código HTML básico, como el siguiente:

<html>
     <head>
          <title>Ejemplo de host con password</title>
     </head>
     <body bgcolor="#008080">
          <h1>Ejemplo de host con seguridad básica</h1>
     </body>
</html>

Genial, ya tenemos creado el Host con su index. Como lo estamos haciendo mediante IP, ahora debemos crear una interfaz virtual. Si mal no recuerdo, nuestra interfaz se llamaba eth2, para comprobarlo tecleamos en el terminal:

ifconfig

Ahora ya sabemos que estaba en lo cierto, nuestra interfaz se llama eth2 (en amarillo ), eth2:1 y eth2:2 (en azul) son las interfaces virtuales que creamos en el anterior tutorial, dicho esto, vamos a crear la interfaz nueva a partir de eth2, nos vamos al terminal y escribimos:

sudo ifconfig eth2:3 172.16.100.30 netmask 255.255.0.0

En la imagen he marcado en rojo la nueva intrfaz, eth2:3.

Ahora vamos a crear el archivo propio del Host dentro del directorio de configuración de Apache. Nos vamos a un terminal y escribimos:

sudo gedit /etc/apache2/sites-available/passwordhost

Y dentro de este archivo escribimos lo siguiente:

<VirtualHost 172.16.100.30>
     ServerName www.passwordhost.com
     DocumentRoot /var/www/passwordhost
</VirtualHost>

Una vez creado el Host, con su archivo de configuración y demás, vamos a darlo de alta, para ello tecleamos en el terminal:

sudo a2ensite passwordhost

Estableciendo los niveles de seguridad

Una vez con el Host creado, vamos a establecer un nivel de seguridad básico para la página web. Antes de nada debemos crear el directorio que alojará la información referente a los usuarios y sus contraseñas. Vamos a crear tres usuarios y dos grupos, cada uno en su respectivo grupo. Los usuarios y grupos serán:

  • policia, del grupo buenos.
  • testigo, del grupo buenos.
  • ladron, del grupo malos.

A ser posible, para prevenir posibles problemas de compatibilidad, evitaremos poner tildes y carácteres raros (ñ, %, &…) en el nombre del usuario.

Pasemos ahora a crear dicho directorio, en el terminal tecleamos:

sudo mkdir /var/password

Estupendo, una vez creado el directorio vamos a crear el primer usuario, volvemos al terminal y tecleamos:

sudo htpasswd -c /var/password/.pass_user policia

Ya tenemos creado el primer usuario, policia. Ahora crearemos los siguientes usuarios.

NOTA: Una vez tenemos creado el primer usuario, para los usuarios que creemos posteriormente no debemos poner el -c en la consola, ya que le indicaríamos al comando htpasswd que volvemos a crear el primer usuario, y machacará la entrada del usuario policia.

Ahora que sabemos lo anterior, volvemos a la consola y creamos los demás usuarios:

  • Usuario testigo:
sudo htpasswd /var/password/.pass_user testigo
  • Usuario ladron:
sudo htpasswd /var/password/.pass_user ladron

Ahora ya tenemos creados los tres usuarios a los que daremos (o no) permiso permiso para visualizar el contenido de nuestro sitio web.

Pasemos ahora a crear los dos grupos, buenos y malos. Para crear un grupo nos vamos al terminal y tecleamos lo siguiente:

sudo gedit /var/password/.pass_group

Una vez con el archivo abierto, escribimos lo siguiente:

Guardamos el archivo y listo. Ahora volvemos al terminal, y tecleamos lo siguiente para crear el próximo archivo en el que configuraremos qué grupos y usuarios tienen acceso al Host passwordhost.

sudo gedit /var/www/passwordhost/.htaccess

Una vez con gedit, rellenamos el archivo con lo siguiente:

AuthType         Basic
AuthName         "Acceso a mi host"
AuthUserFile     /var/www/password/.pass_user
AuthGroupFile    /var/www/password/.pass_group
require group    buenos

Pulsamos en guardar, y vamos ahora a editar el último archivo. Volvemos al terminal y tecleamos:

sudo gedit /etc/apache2/sites-available/default

Nos vamos hacia el final del archivo, después de que cierre la última etiqueta <Directory>, escribimos lo mismo que en la imagen:

<Directory /var/www/passwoardhost>
     AllowOverride    AuthConfig
     Order    allow,deny
     Allow    from all
</Directory>

Una vez añadido eso al archivo default, ya sólo queda reiniciar apache, volvemos al terminal y tecleamos:

sudo apache2ctl restart

Verificando el funcionamiento

Ahora ya tenemos nuestro Host protegido, y hemos establecido los permisos para los usuarios que hemos querido, ahora sólo queda comprobar que todo funciona como debe.

Abrimos Firefox (o nuestro navegador habitual), y visitamos la siguiente dirección:

  • 172.16.100.30

Si  todo marcha bien, esto será lo que veamos:

Ahora introducimos cualquier usuario de los que tengan permiso, por ejemplo, policia.

  • En Nombre de Usuario: policia
  • En Contraseña: soypoli

Esos son los datos que yo use para crear el usuario, como es obvio, vosotros debéis introducir los que usasteis.

El usuario policia, al estar definido en el grupo buenos (único grupo autorizado para entrar al Host) pues ha podido entrar sin problemas.

Lo mismo debe de ocurrir con el usuario testigo, sin embargo, al usuario ladron no le permitirá entrar ya que no se encuentra en el grupo buenos, y por lo tanto no está autorizado.

Si el nombre de usuario que introducimos es erróneo o no está autorizado, al pulsar en Aceptar, nos volverá a salir la misma ventana de logeo, sin embargo, al pulsar en Cancelar, obtendremos el siguiente mensaje de error:

Eso significa que nuestro Host está correctamente protegido.

Bibliografía

  • Apuntes de clase.

Apache: Configuración de Hosts basados en IP

Introducción

En este tutorial, vamos a aprender a crear hosts virtuales basados en IP usando Apache bajo Ubuntu. Aunque podemos usar cualquier otra distribución para esto.

Creando los hosts virtuales basados en IP

Creando las interfaces virtuales de red necesarias

Antes de nada, vamos a crear dos interfaces virtuales de red, una para cada web, para ello vamos a usar el comando ifconfig. En primer lugar necesitamos saber el nombre real de nuestra interfaz de red, abrimos un terminal y tecleamos lo siguiente:

$ ifconfig

1

He señalado en rojo el nombre mi interfaz, aunque podemos tenerla con diversos nombres, eth0, eth1, wlan0…

Ahora para crear la interfaz nueva, tecleamos lo siguiente en un terminal:

$ sudo ifconfig eth2:1 172.16.100.10 netmask 255.255.0.0

2

Una vez creada la interfaz número uno, pasaremos a crear la número dos:

$ sudo ifconfig eth2:2 172.16.100.20 netmask 255.255.0.0

3

En la imagen podemos ver nuestras dos interfaces nuevas, ahora forman parte del resultado del comando ifconfig.

Creando los hosts y asignándolos a las interfaces

Voy a usar los hosts virtuales que creé en el tutorial Apache: Configuración de hosts virtuales basados en nombre. Podéis entrar en él y seguirlo para ver como se crean los hosts basados en nombre. En mi caso (y en el vuestro si habéis seguido previamente el tutorial anteriormente mencionado) escribo en el terminal:

$ sudo gedit /etc/apache2/sites-available/pagina1

5656

Ahora para asignar la página 1 a la primera interfaz que creamos (eth2:1) modificamos el archivo de forma que quede así:

<VirtualHost 172.16.100.10>
     ServerName www.pagina1.com
     DocumentRoot /var/www/pagina1
</VirtualHost>

4

Una vez modificado el archivo de la página 1, modificamos ahora el de la página 2, asignándole la IP de la segunda interfaz que creamos (eth2:2). Tecleamos en el terminal:

$ sudo gedit /etc/apache2/sites-available/pagina2
<VirtualHost 172.16.100.20>
     ServerName www.pagina2.com
     DocumentRoot /var/www/pagina2
</VirtualHost>

Modificando el archivo /etc/apache2/sites-available/default

En el anterior tutorial, modificamos el archivo /etc/apache2/sites-available/default para añadir una línea al principio, ahora debemos borrar esa línea. En el terminal tecleamos:

$ sudo gedit /etc/apache2/sites-available/default

hbdshbdf

Borramos la línea marcada y guardamos los cambios.

Reiniciando Apache y verificando el funcionamiento

Ya sólo nos queda reiniciar el servidor de Apache y comprobar que todo funciona, para reiniciar el servicio tecleamos en un terminal:

$ sudo apache2ctl restart

Nota: En el tutorial Apache: Configuración de hosts virtuales basados en nombre explico las diferentes formas de reiniciar Apache.

Vamos ahora a comprobar que las dos webs funcionan, abrimos un navegador (Mozilla Firefox por ejemplo) y entramos en:

  • 172.16.100.10
  • 172.16.100.20

basadosIP_1

basadosIP_2

Bibliografía

  • Apuntes de clase.

Apache: Configuración de hosts basados en nombres

Introducción

En este tutorial vamos a aprender a instalar y configurar un servidor Apache corriendo bajo Ubuntu, aunque podemos usar cualquier distribución de Linux para seguir este turorial.

¿Qué es Apache?

El servidor Apache es un servidor web HTTP con licencia GNU disponible para varias plataformas como por ejemplo Windows, Linux o MacOS. El objetivo del proyecto Apache es proporcionar un servidor seguro, eficiente y extensible. Actualmente, Apache es el servidor web más usado en internet. Según Netcraft, Apache está instalado casi en un 48% de todos los sitios webs.

Instalación

Para instalar Apache en nuestra máquina, tecleamos lo siguiente en un terminal:

$ sudo aptitude install apache2

1

Una vez instalado Apache, podemos iniciarlo con:

$ sudo apache2ctl start

Creando Host Virtuales por nombre

En primer lugar vamos a definir el nombre de los hosts virtuales que vamos a usar:

  • www.pagina1.com
  • www.pagina2.com

Ahora vamos a crear los hosts virtuales con los que Apache va a trabajar. Creamos los archivos de configuración referentes a los host virtuales.

$ sudo gedit /etc/apache2/sites-available/pagina1

2

Y dentro de este archivo, escribimos lo siguiente:

<VirtualHost 172.16.2.37>
   ServerName www.pagina1.com
   DocumentRoot /var/www/pagina1
</VirtualHost>

4

Yo he usado mi IP, como es obvio, en vuestro caso debéis usar la vuestra. Doy por hecho que sabéis cual es vuestra IP. Ahora creamos el segundo archivo, referente a la segunda página:

$ sudo gedit /etc/apache2/sites-available/pagina2
<VirtualHost 172.16.2.37>
   ServerName www.pagina2.com
   DocumentRoot /var/www/pagina2
</VirtualHost>

Ahora debemos crear los directorios que hemos indicado en la directiva ServerRoot:

  • /var/www/pagina1
  • /var/www/pagina2

Escribimos en la consola:

$ sudo mkdir /var/www/pagina1
$ sudo mkdir /var/www/pagina2

6

Dentro de estos directorios van nuestras páginas webs, vamos a crear el index de cada una para comprobar más tarde que funcionan correctamente. Empecemos con el de la primera web, así que tecleamos en el terminal:

$ sudo gedit /var/www/pagina1/index.html

5

Ahora introducimos algún código html básico, como por ejemplo:

<html>
   <head>
      <title>Página1</tile>
   </head>
   <body bgcolor="#CCCCCC">
      <h1>Esta es la página1</h1>
   </body>
</html>
 

7

Guardamos los cambios y vamos ahora a editar la segunda página con un código en HTML similar. Repetimos la operación de antes:

$ sudo gedit /var/www/pagina2/index.html
<html>
   <head>
      <title>Página2</tile>
   </head>
   <body bgcolor="#CCCCCC">
      <h1>Esta es la página2</h1>
   </body>
</html>
 

Una vez creadas las páginas de prueba, vamos a habilitarlas, por lo que ahora tecleamos en un terminal:

$ sudo a2ensite pagina1

8

Hacemos lo mismo con la segunda página:

$ sudo a2ensite pagina2

Si todo ha ido bien, el terminal nos devolverá el siguiente mensaje:
9

Una vez habilitadas las dos páginas, vamos a editar el archivo default en la configuración de Apache, volvemos a la consola y tecleamos lo siguiente:

$ sudo gedit/etc/apache2/sites-available/default

11

Ahora sólo tenemos que incluir la siguiente línea en la primera línea del archivo default:

NameVirtualHost 172.16.2.37

12

Una vez hecho eso, ahora sólo queda guardar los cambios en el archivo y editar el último fichecho de todos. Pulsamos en guardar y volvemos a la consola para teclear:

$ sudo gedit /etc/hosts

13

En este archivo añadiremos nuestras dos páginas para ser nosotros mismos quienes resolvamos su dirección. Añadimos dos líneas con este contenido:

14

172.16.2.37 www.pagina1.com
172.16.2.37 www.pagina2.com

Una vez hecho eso, ya sólo queda reiniciar Apache, lo hacemos de la siguiente manera:

$ sudo apache2ctl restart

Esto hará que nuestro servicio de Apache se reinicie cortando todas las conexiones, si por el contrario queremos reiniciar el servidor sin cortar ninguna conexión, tecleamos lo siguiente:

$ sudo apache2ctl graceful

La ejecución del anterior comando permitirá que los usuarios que estén demandando información de nuestro servidor Apache mantengan su conexión, aunque los cambios realizados en éste no le serán efectivos en el instante, pero sí cuando establezcan de nuevo conexión.

10

Es muy posible que al reiniciar Apache, obtengamos el siguiente mensaje:

15

Para solucionarlo, nos vamos al terminal de nuevo y tecleamos lo siguiente:

$ sudo gedit /etc/apache2/apache2.conf

16

Una vez en el archivo, sólo nos queda añadir la siguiente línea al principio del archivo:

ServerName localhost

17

Guardamos los cambios y ahora podremos reiniciar con tranquilidad y sin problemas.

Verificando el funcionamiento

Para comprobar que nuestras páginas funcionan, sólo tenemos que abrir un navegador (Mozilla Firefox por ejemplo) y teclear la URL de dichas páginas.

Página 1

  • URL: www.pagina1.com

pg1

Página 2

  • URL: www.pagina1.com

pg2

Bibliografía

  • Apuntes de clase.
Seguir

Get every new post delivered to your Inbox.