Específicos de apache

1.Paquetes y Módulos:

a) Buscar los paquetes instalables cuyo nombre empiece por “apache”.

Para buscar los paquetes solamente hay que usar el comando aptitude search
aptitude search ~iapache2
i   apache2                         - Apache HTTP Server metapackage
i A apache2-mpm-worker              - Apache HTTP Server - high speed threaded m
i A apache2-utils                   - utility programs for webservers
i A apache2.2-common                - Apache HTTP Server common files
 

b) Ver el listado de los paquetes instalados de apache2, y ver su contenido.

Para ver el listado de lo paquetes utilizamos el comando dpkg -l apache*
La opción -l sirve para buscar en la lista de paquetes un patrón y el patrón apache* sirve para indicar todos los que empiecen por apache, ya que el * significa cualquier número de caracteres.
$ dpkg -l apache*
Deseado=Desconocido(U)/Instalar(I)/Eliminar(R)/Purgar(P)/Mantener(H)
| Estado=No(N)/Inst(I)/Arch-conf(C)/Descomp(U)/Fallo-conf(F)/Medio-inst(H)/Espera-trig(W)/Pendiente-trig(T)
|/ Err?=(nada)/Mantener(H)/Reinst-requerida(R)/X=ambos-problemas (Estado,Err: mayúsculas=malo)
||/ Nombre                      Versión                   Descripción
+++-===========================-==========================-================================================
un  apache-common               <ninguna>                 (no hay ninguna descripción disponible)
un  apache-utils                <ninguna>                 (no hay ninguna descripción disponible)
ii  apache2                     2.2.9-7ubuntu3.6          Apache HTTP Server metapackage
un  apache2-common              <ninguna>                 (no hay ninguna descripción disponible)
un  apache2-doc                 <ninguna>                 (no hay ninguna descripción disponible)
un  apache2-mpm                 <ninguna>                 (no hay ninguna descripción disponible)
un  apache2-mpm-event           <ninguna>                 (no hay ninguna descripción disponible)
un  apache2-mpm-perchild        <ninguna>                 (no hay ninguna descripción disponible)
un  apache2-mpm-prefork         <ninguna>                 (no hay ninguna descripción disponible)
un  apache2-mpm-threadpool      <ninguna>                 (no hay ninguna descripción disponible)
ii  apache2-mpm-worker          2.2.9-7ubuntu3.6          Apache HTTP Server - high speed threaded model
un  apache2-suexec              <ninguna>                 (no hay ninguna descripción disponible)
un  apache2-suexec-custom       <ninguna>                 (no hay ninguna descripción disponible)
ii  apache2-utils               2.2.9-7ubuntu3.6          utility programs for webservers
ii  apache2.2-common            2.2.9-7ubuntu3.6          Apache HTTP Server common files
 
Y para ver su contenido utilizamos el comando dpkg de la siguiente forma para los paquetes de la lista anterior.
dpkg -L apache2
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/apache2
/usr/share/doc/apache2/copyright
/usr/share/doc/apache2/NEWS.Debian.gz
/usr/share/doc/apache2/changelog.Debian.gz
/usr/share/bug
/usr/share/bug/apache2
/usr/share/bug/apache2/control
/usr/share/doc/apache2/README.Debian.gz
/usr/share/bug/apache2/script
 

dpkg -L apache2-mpm-worker
/.
/usr
/usr/sbin
/usr/sbin/apache2
/usr/share
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/apache2-mpm-worker
/usr/share/bug
/usr/share/bug/apache2-mpm-worker
/usr/share/doc
/usr/share/doc/apache2-mpm-worker
/usr/share/doc/apache2-mpm-worker/copyright
/usr/share/doc/apache2-mpm-worker/NEWS.Debian.gz
/usr/share/doc/apache2-mpm-worker/changelog.gz
/usr/share/doc/apache2-mpm-worker/changelog.Debian.gz
/usr/share/bug/apache2-mpm-worker/script
 

dpkg -L apache2-utils
/.
/usr
/usr/bin
/usr/bin/dbmmanage
/usr/bin/htdbm
/usr/bin/htdigest
/usr/bin/htpasswd
/usr/sbin
/usr/sbin/ab
/usr/sbin/checkgid
/usr/sbin/logresolve
/usr/sbin/rotatelogs
/usr/sbin/htcacheclean
/usr/sbin/check_forensic
/usr/sbin/split-logfile
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/htdbm.1.gz
/usr/share/man/man1/htpasswd.1.gz
/usr/share/man/man1/dbmmanage.1.gz
/usr/share/man/man1/htdigest.1.gz
/usr/share/man/man8
/usr/share/man/man8/rotatelogs.8.gz
/usr/share/man/man8/htcacheclean.8.gz
/usr/share/man/man8/checkgid.8.gz
/usr/share/man/man8/ab.8.gz
/usr/share/man/man8/logresolve.8.gz
/usr/share/man/man8/check_forensic.8.gz
/usr/share/doc
/usr/share/doc/apache2-utils
/usr/share/doc/apache2-utils/copyright
/usr/share/doc/apache2-utils/changelog.gz
/usr/share/doc/apache2-utils/changelog.Debian.gz
 

dpkg -L apache2.2-common
/.
/etc
/etc/apache2
/etc/apache2/mods-enabled
/etc/apache2/sites-enabled
/etc/apache2/conf.d
/etc/apache2/conf.d/security
/etc/apache2/conf.d/charset
/etc/apache2/apache2.conf
/etc/apache2/envvars
...

c) Listar los módulos del apache2 instalado, tanto los estáticos como los dinámicos.

Los módulos estáticos son los módulos que se compilan con el binario httpd y, por el contrario, los dinámicos se almacenan de forma separada y pueden ser cargados opcionalmente.
Para ver los módulos estáticos hay que ver la lista de los módulos compilados.
apache2 -l
Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  worker.c
  http_core.c
  mod_so.c
 
Para ver los módulos dinámicos solamente hay que ver el contenido de la carpeta donde se encuentran almacenados.
ls /etc/apache2/mods-available/
actions.conf          dav_fs.conf        mime.load
actions.load          dav_fs.load        mime_magic.conf
alias.conf            dav.load           mime_magic.load
alias.load            dav_lock.load      negotiation.conf
asis.load             dbd.load           negotiation.load
auth_basic.load       deflate.conf       proxy_ajp.load
auth_digest.load      deflate.load       proxy_balancer.load
authn_alias.load      dir.conf           proxy.conf
authn_anon.load       dir.load           proxy_connect.load
authn_dbd.load        disk_cache.conf    proxy_ftp.load
authn_dbm.load        disk_cache.load    proxy_http.load
authn_default.load    dump_io.load       proxy.load
authn_file.load       env.load           rewrite.load
authnz_ldap.load      expires.load       setenvif.conf
authz_dbm.load        ext_filter.load    setenvif.load
authz_default.load    file_cache.load    speling.load
authz_groupfile.load  filter.load        ssl.conf
authz_host.load       headers.load       ssl.load
authz_owner.load      ident.load         status.conf
authz_user.load       imagemap.load      status.load
autoindex.conf        include.load       substitute.load
autoindex.load        info.conf          suexec.load
cache.load            info.load          unique_id.load
cern_meta.load        ldap.load          userdir.conf
cgid.conf             log_forensic.load  userdir.load
cgid.load             mem_cache.conf     usertrack.load
cgi.load              mem_cache.load     version.load
charset_lite.load     mime.conf          vhost_alias.load
Los ficheros .load son los módulos y los .conf su correspondiente configuración.

d) Ver la versión y las opciones de compilación del apache2 instalado.


apache2 -V
Server version: Apache/2.2.9 (Ubuntu)
Server built:   Mar  9 2010 20:58:37
Server's Module Magic Number: 20051115:15
Server loaded:  APR 1.2.12, APR-Util 1.2.12
Compiled using: APR 1.2.12, APR-Util 1.2.12
Architecture:   32-bit
Server MPM:     Worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/worker"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT=""
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"

2.Procesos:

a) Ver los procesos apache lanzados, y comprobar que el usuario es root para el proceso padre y www-data para el resto.


apac21

Los procesos hijo de 4932 tienen como usuario www-data

b) Detener el apache, hacer que escuche por un puerto >1024 e intentar ejecutarlo como usuario no root


Detenemos el proceso.

apac22

apac23

Para resolver este error, tendremos que ir a apache2.conf y modificarlo de la siguiente forma.

apac24

A continuación dejamos el puerto de escucha por defecto el 80 (<1024).

apac25

No tenemos permiso para trabajar con ese puerto.


Cambiamos al puerto 2000 por ejemplo.

apac26prueba

apac27

El error desaparece al trabajar con un puerto mayor que el 1024


3.Comprobar el uso de los siguientes módulos básicos:
a) [*] mod_status: presentar una página con información del servidor.


Escrbimos en el navegador localhost/server-status para acceder a la página y en apache2.conf añadimos al final ExtendedStatus On para una información más detallada.

apache3



b) [*] mod_dir: visualizar un fichero de nombre indice.html con la url http://localhost:8080/


Configuramos el modulo dir que se encuentra en /etc/apache2/mods-enables/dir.conf.
NameVirtualHost *:8080
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www/8080
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/8080/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
 
        DirectoryIndex indice.html
 
       ErrorLog /var/log/apache2/error.log
 
        LogLevel warn
 
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On
</VirtualHost>
 

c) Logs de acceso: modificar algún parámetro del formato del fichero de logs e acceso y comprobarlo.

Si dejamos %h y %t unicamente, en el log solo se almacenará el host remoto y la fecha.
apache3.png

d) Logs de errores: comprobar el fichero de log de errores tras acceder a una url inexistente.


Nos indica que el fichero no existe.

apache3c.png

4. Definir hosts virtuales que conduzcan a distintas páginas locales:


a) [*] En base a nombres. Para ello, definir dos servidores de la forma www.host1.com y www.host2.com en el fichero /etc/hosts que apunten a la dirección IP actual. Además, habrá de ser posible acceder a los mismos contenidos de www.host1.com con la url http://host1.com


Solamente hará falta añadir en la linea que define a localhost los servidores arriba mencionados.
127.0.0.1       localhost www.host1.com host1.com www.host2.com host2.com
pr3.4a.png
También habrá que definir estos servidores en el archivo de configuración 000-default
<VirtualHost *:80>
ServerName www.host1.com
ServerAlias host1.com *.host1.com
DocumentRoot /var/www/host1/
</VirtualHost>
 
<VirtualHost *:80>
ServerName www.host2.com
ServerAlias host2.com *.host2.com
DocumentRoot /var/www/host2/
</VirtualHost>

b) [*] En base a IPs. Para ello, configurar dos ips virtuales en la interfaz física.


Para crear dos ips virtuales introducimos los siguientes comandos.
# ifconfig eth2:1 192.168.50.1
# ifconfig eth2:2 192.168.50.2
 
Comprobamos que ha funcionado correctamente
$ ifconfig
eth2      Link encap:Ethernet  direcciónHW 00:0c:29:c5:b6:aa
          inet dirección:172.16.193.146  Difusión:172.16.193.255  Máscara:255.255.255.0
          dirección inet6: fe80::20c:29ff:fec5:b6aa/64 Alcance:Vínculo
          ARRIBA DIFUSIÓN CORRIENDO MULTICAST  MTU:1500  Métrica:1
          RX packets:7934 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6186 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:1000
          RX bytes:6763145 (6.7 MB)  TX bytes:1760023 (1.7 MB)
          Interrupción:18 Dirección base: 0x2000
 
eth2:1    Link encap:Ethernet  direcciónHW 00:0c:29:c5:b6:aa
          inet dirección:192.168.50.1  Difusión:192.168.50.255  Máscara:255.255.255.0
          ARRIBA DIFUSIÓN CORRIENDO MULTICAST  MTU:1500  Métrica:1
          Interrupción:18 Dirección base: 0x2000
 
eth2:2    Link encap:Ethernet  direcciónHW 00:0c:29:c5:b6:aa
          inet dirección:192.168.50.2  Difusión:192.168.50.255  Máscara:255.255.255.0
          ARRIBA DIFUSIÓN CORRIENDO MULTICAST  MTU:1500  Métrica:1
          Interrupción:18 Dirección base: 0x2000
 
eth3      Link encap:Ethernet  direcciónHW 00:0c:29:c5:b6:b4
          dirección inet6: fe80::20c:29ff:fec5:b6b4/64 Alcance:Vínculo
          ARRIBA DIFUSIÓN CORRIENDO MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:1836 (1.8 KB)
          Interrupción:17 Dirección base: 0x2080
 
lo        Link encap:Bucle local
          inet dirección:127.0.0.1  Máscara:255.0.0.0
          dirección inet6: ::1/128 Alcance:Anfitrión
          ARRIBA LOOPBACK CORRIENDO  MTU:16436  Métrica:1
          RX packets:272 errors:0 dropped:0 overruns:0 frame:0
          TX packets:272 errors:0 dropped:0 overruns:0 carrier:0
          colisiones:0 txqueuelen:0
          RX bytes:24452 (24.4 KB)  TX bytes:24452 (24.4 KB)

A continuación editamos el archivo de configuración de apache para que de una respuesta si se accede a estos servidores virtuales que acabamos de crear, ya que lo resuelve dando la respuesta de localhost.

/etc/apache2/sites-enabled/000-default
 
<VirtualHost 192.168.50.1>
DocumentRoot /var/www/192.168.50.1/
</VirtualHost>
 
<VirtualHost 192.168.50.2>
DocumentRoot /var/www/192.168.50.2/
</VirtualHost>

Para finalizar creamos los directorios que hemos indicado en 000-default y un index.html diferente en cada uno de ellos y por ultimo reiniciamos apache

c) [*] En base a puertos. Ej: 80 y 8080


Editamos el archivo de configuracion de apache ports.conf para que escuche por el puerto 8080. Para ello añadimos las siguientes lineas.
NameVirtualHost *:8080
Listen 8080
 

Añadimos una nueva entrada al archivo de configuración 000-default

<VirtualHost *:8080>
DocumentRoot /var/www/8080/
</VirtualHost>
 
Al igual que antes creamos el directorio que hemos configurado así como su index.html y reiniciamos apache

5. Reescritura de URLs.


[*]Mediante mod_rewrite presentar dos páginas distintas según el tipo de navegador.

Primero de todo activamos el módulo rewrite (a2enmod rewrite), tras esto configuramos el host virtual para que según el navegador nos muestre una página u otra.



practica5bis.png
apache5.png


Específicos del protocolo http


6. Análisis de tráfico:

a) Establecer una conexión a la página www.fsf.org con un navegador, y examinar el tráfico con wireshark.

pr3.6a.png

b) Hacer lo mismo con: U=www.fsf.org; curl -v -H “cabecera: c1” $U 2>&1 | less


* Input domain encoded as `UTF-8'
* getaddrinfo(3) failed for xn--c1-02t:80
* Couldn't resolve host 'c1”'
* Closing connection #0
 
curl: (6) Couldn't resolve host 'c1”'
* About to connect() to www.fsf.org port 80 (#0)
*   Trying 140.186.70.131... connected
* Connected to www.fsf.org (140.186.70.131) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.8
> Host: www.fsf.org
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: nginx/0.6.35
< Date: Mon, 26 Apr 2010 07:59:42 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 27901
< Content-Language: en
< Expires: Sat, 1 Jan 2000 00:00:00 GMT
< Set-Cookie: I18N_LANGUAGE="en"; Path=/
< Set-Cookie: _ZopeId="05742021A4W4n7QKhd0"; Path=/
< X-Cache: MISS from 140.186.70.131
< X-Cache-Lookup: MISS from 140.186.70.131:80
< Via: 1.0 140.186.70.131:80 (squid/2.6.STABLE18)
< Connection: close
<
{ [data not shown]
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
^M  7 27901    7  2296    0     0   5152      0  0:00:05 --:--:--  0:00:05  5152
 
 
<!DOCTYPE html>
 
<html lang="en">
 
 
 
 
 
 
 
 
 
 
  <head>
<base href="http://www.fsf.org/welcome/" />
 
 
 

pr3.6b.png

Como vemos la captura es similar a la anterior, con la única diferencia de que al usar curl, la respuesta es solamente la página índice, no se recibe ninguna imagen.

7. [*] Negociación de contenidos: accediendo a una URL única, presentar dos páginas distintas según el idioma seleccionado en el navegador.


Editamos el archivo de configuración apache2.conf para que acepte las type-maps
AddHandler type-map .var
Creamos un nuevo directorio en /var/www llamado idioma que es el directorio que contendrá el archivo que responderá según el idioma. El archivo lo hemos llamado index.var.
URI: index
 
URI: index_es.html
Content-type: text/html
Content-language: es
 
URI: index_en.html
Content-type: text/html
Content-language: en
 
Es importante escribir el código tal cual se indica ya que de no escribir las líneas en blanco no funcionará. Tambien creamos las páginas de respues según el idioma y reiniciamos apache2.
pr3.7_en.png
pr3.7_en_nav.png
pr3.7_es.png
pr3.7_es_nav.png

Contenidos dinámicos

8.[*] Hacer un CGI en bash llamado info.sh y ubicado en /srv/cgis/ que muestre las conexiones TCP que están escuchando en el servidor, y el usuario con el que se ejecuta dicho script. La cabecera de respuesta http será una única línea que indica el tipo mime text/plain.


Creamos el directorio cgis en /srv donde guardamos el script y luego configuramos el 000-default de sites-enabled para indicarle al apache donde se guarda.

apache8.png

apache5_b.png

Comprobamos su funcionamiento.

Pantallazo-Mozilla_Firefox.png

9. [*] Hacer un CGI en C ubicado en /homedelusuario/cgis/ que genere una página web con las variables de entorno del sistema. Lanzarlo con la url:

http://localhost/cgi-bin/c.cgi?a=1.

Pista: emplear int main (int argc, char argv[], char **ep) y un bucle while.

Creamos el directorio cgis en nuestro home.
$ mkdir cgis
A continuación creamos el script cgi en la carpeta que acabamos de crear.
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char argv[], char **ep)
{
        int cont=0;
        printf ("Content-type: text/plain\n\n");
        while (ep[cont])
        {
                puts(ep[cont]);
                cont++;
        }
        return 0;
}
 
Y compilamos.
$ gcc cgi.c -o c.cgi
A continuación editamos el archivo 000-default del directorio /etc/apache2/sites-enabled/ para modificar la ruta de los cgi.
ScriptAlias /cgi-bin/ /home/alumno/cgis/
<Directory "/home/alumno/cgis">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
</Directory>
 
Para finalizar reinicamos apache y comprobamos.
pr3.9.png

10. [*]Hacer una página html con un formulario que tenga un único campo de tipo textarea a procesar por el CGI anterior. Empleando los métodos GET y POST ver las salidas del CGI, en especial las variables: CONTENT_TYPE, CONTENT_LENGTH, QUERY_STRING, REQUEST_URI

Lo único que hay que hacer es crear una página html llamada formulario.html con el siguiente código y que esté ubicada en el directorio /var/www/
<html>
<body>
<form action=http://localhost/cgi-bin/c.cgi method=get>
<input type=text name=metodo_get></input>
<input type=submit value=GET></input>
</form>
<br>
<br>
<form action=http://localhost/cgi-bin/c.cgi method=post>
<input type=text name=metodo_post></input>
<input type=submit value=POST></input>
</form>
</body>
</html>
Comprobamos su funcionamiento
GET:
pr3.10_get.png
POST:
pr3.10_post.png

11. [*] Hacer una página que tenga un SSI básico (ej. mostrar la fecha).

Para poder utilizar SSIs debemos activar el módulo INCLUDE de apache.
# a2enmod include
También editamos el fichero de configuración apache2.conf de apache para que incluya las siguientes líneas
AddType text/html .shtml
AddHandler server-parsed .shtml
AddOutputFilter INCLUDES .shtml
Y para finalizar añadimos al directorio /var/www/ la capacidad de trabajar con SSIs. Para ello hay que editar las líneas correspondientes a dicho directorio en el fichero 000-default del directorio /etc/apache2/sites-enabled, quedando de la siguiente aspecto.
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews +Includes
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
A continuación creamos la página que mostrará la fecha en el directorio mencionado.
<html>
<body>
<h1>SSI</h1><hr>
<!--#echo var="DATE_LOCAL" -->
</body>
</html>
 
Reiniciamos apache2 y comprobamos su funcionamiento.
pr3.11.png

12. [*] Hacer un programa php sencillo del tipo “Kaixo mundu”.

Para implementar la capacidad de ejecutar código php debemos instalar la librería libapache2-mod-php5.
# aptitude install libapache2-mod-php5
A continuación creamos el programa kaixomundu.php en el directorio /var/www/ y reiniciamos apache2.
<?php echo "Kaixo Mundu"; ?>
pr3.12.png

Seguridad


13. Autenticación y autorización básicas:

a) Listar los módulos del apache2 instalado que contengan la cadena “auth”


apache13

b) [*] Autorizar el acceso con usuario y password mediante digest md5.


Activamos el modulo y a continuación con el comando "htdigest -c" creamos una contraseña (con su usuario) para una carpeta.

apache13b
Configuramos httpd.conf como vemos
apache13c

Y comprobamos que funciona.

apache13final


14. Control de Acceso:

a) [*] Denegar el acceso a la página ejemplo según la IP de cliente. Para ello, configurar un rango no autorizado, y comprobar el funcionamiento cambiando la IP local a una dentro de dicho rango.

Para denegar el acceso a una página debemos editar el archivo de configuración 000-default añadiendo las reglas de las IP que queremos denegar. En nuestro caso como accedemos desde localhost vamos a configurarlo para que deniegue la dirección 127.0.0.1.
<Directory /var/www/restrict/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    deny from 127.0.0.1
</Directory>
Como vemos arriba hemos restringido el acceso al directorio restrict
Para terminar reiniciamos apache, modificamos la dirección IP de la interfaz actual y comprobamos su funcionamiento.
# ifconfig eth0 127.0.0.1
pr3.14a.png

b) [*] Denegar el acceso con mod_authz_host en base al navegador.

Vamos a configurar apache de tal forma que deniegue el acceso a la página si se utiliza el navegador Lynx. Para ello editamos el archivo de configuración 000-default de esta forma:
SetEnvIf User-Agent ^Lynx* denegar
 
<Directory /var/www/restrict_lynx>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        allow from all
        deny from env=denegar
</Directory>
Reiniciamos apache y comprobamos su funcionamiento.
pr3.14b_fire.png
pr3.14b_lynx.png

c) [*] Denegar el acceso con mod_rewrite en base al navegador.


Añadimos lo siguiente en 000-default:

14c.jpg

14c2.jpg

d) [*] Denegar el acceso con mod_rewrite en base a la fecha.


Añadimos lo siguiente en 000-default:
14d.jpg
14d.jgg

15. https:

a) [*] Configurar un host virtual basado en IP, y crear un certificado autofirmado a partir de una clave privada sin password, para comprobar el acceso https.


Instalamos el modulo SSL y reiniciamos el apache, acto seguido creamos el certificado.

15A1.jpg
Ponemos a escuchar el apache por el puerto 443 ya que es el puerto del SSL y añadimosel siguiente host virtual.

15A.jpg

Accedemos a localhost mediante ssl con la url https://localhost/

15a3.jpg

b) Idem siendo la clave privada con password.


15B.jpg

Cambiamos las claves en el host virtual que hemos escrito antes, luego reiniciamos el servidor apache.

15b1.jpg

c) Comprobar el protocolo con: openssl s_client -connect localhost:443 -state -debug


15c.jpg
15c2.jpg
15c3.jpg
15c4.jpg
.

d) Comprobar el protocolo con:

curl https://localhost/


15ultimo.jpg