Configuración de un servidor Apache2
Procedimiento
Para hacer este ejercicio, crea un escenario en Vagrant, que tenga una máquina (servidorweb) conectada a una red “externa” (que podamos acceder desde nuestro host, puede ser una red pública o una red privada NAT), y una privada (aislada o muy aislada) y un clientee conectada a esta nueva red.
Vagrant.configure("2") do |config|
config.vm.box = "debian/bullseye64"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.define :servidorweb do |servidorweb|
servidorweb.vm.hostname = "servidorweb"
servidorweb.vm.network :public_network,
:dev => "br0",
:mode => "bridge",
:type => "bridge"
servidorweb.vm.network :private_network,
:libvirt__network_name => "redaislada",
:libvirt__dhcp_enabled => false,
:ip => "10.0.0.1",
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :cliente do |cliente|
cliente.vm.hostname = "cliente"
cliente.vm.network :private_network,
:libvirt__network_name => "redaislada",
:libvirt__dhcp_enabled => false,
:ip => "10.0.0.2",
:libvirt__forward_mode => "veryisolated"
end
end
*Nota: será necesario crear un bridge br0 en /etc/network/interfaces
, después se ejecuta ifup br0
para activarlo (si eso hacer ifup eno1
para porsiaca). El fichero /etc/network/interfaces
quedaría así:
auto eno1
iface eno1 inet dhcp
auto br0
iface br0 inet dhcp
bridge_ports eno1
1. Instala un servidor web apache2 en servidorweb.
sudo apt update
sudo apt install apache2
2. Crea un virtualhost con el que accederemos con el nombre www.taller2.com. En este virtualhost realizaremos los siguientes ejercicios.
Para crearlo editamos el fichero /etc/apache2/sites-available/taller2.conf
y le ponemos el siguiente contenido:
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
Creamos el directorio /home/vagrant/taller2
:
mkdir /home/vagrant/taller2
Cambiamos el propietario del directorio:
chown -R vagrant:vagrant /home/vagrant/taller2
Cambiamos los permisos del directorio:
chmod -R 755 /home/vagrant/taller2
Activamos el virtualhost:
sudo a2ensite taller2.conf
Reiniciamos el servicio:
sudo systemctl restart apache2
Editamos el fichero /etc/hosts
y añadimos la siguiente línea:
{ip_servidor} www.taller2.com
3. Cuando se entre a la dirección www.taller2.com se redireccionará automáticamente a www.taller2.com/principal, donde se mostrará el mensaje de bienvenida.
Hacemos el directorio principal:
mkdir /home/vagrant/taller2/principal
Creamos el fichero index.html
:
echo "<h1>Bienvenido a la pagina principal :)</h1>" > /home/vagrant/taller2/principal/index.html
Hacemos que el directorio principal sea el directorio por defecto:
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
RedirectMatch ^/$ /principal
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
<Directory /home/vagrant/taller2/principal>
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
4. Si accedes a la página www.taller2.com/principal/documentos se visualizarán los documentos que hay en home/usuario/doc. Por lo tanto se permitirá el listado de ficheros (opción Indexes).
Creamos el directorio para visualizar los documentos:
mkdir /home/vagrant/doc
Creamos algunos ficheros:
echo "Fichero1" > /home/vagrant/doc/fichero1.txt
echo "Fichero2" > /home/vagrant/doc/fichero2.txt
echo "Fichero 3" > /home/vagrant/doc/fichero3.txt
Modificamos:
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
RedirectMatch ^/$ /principal
Alias /principal/documentos /home/vagrant/doc
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
<Directory /home/vagrant/taller2/principal>
Require all granted
</Directory>
<Directory /home/vagrant/doc>
Options Indexes
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
*Nota: El redirectmacth se hace cuando es una redireccion dentro documentroot, mientras que el alias es cuando es una redireccion fuera del documentroot.
5. A la URL www.taller2.com/intranet sólo se debe tener acceso desde el cliente de la red interna, y no se pueda acceder desde la anfitriona por la red pública. A la URL www.taller2.com/internet, sin embargo, sólo se debe tener acceso desde la anfitriona por la red pública, y no desde la red interna.
Para esto hay que cambiar el fichero /etc/apache2/sites-available/taller2.conf
:
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
RedirectMatch ^/$ /principal
Alias /principal/documentos /home/vagrant/doc
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
<Directory /home/vagrant/taller2/principal>
Require all granted
</Directory>
<Directory /home/vagrant/doc>
Options Indexes
Require all granted
</Directory>
<Directory /home/vagrant/taller2/intranet>
Require ip 10.0.0.0/24
</Directory>
<Directory /home/vagrant/taller2/internet>
Require ip 192.168.1.0/24
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
Creamos unos ficheros para probar:
mkdir /home/vagrant/taller2/intranet
mkdir /home/vagrant/taller2/internet
echo "<h1>Welcome a Intranet</h1>" > /home/vagrant/taller2/intranet/index.html
echo "<h1>Welcome a Internet</h1>" > /home/vagrant/taller2/internet/index.html
6. Autentificación básica. Limita el acceso a la URL www.taller2.com/secreto.
Creamos el directorio:
mkdir /home/vagrant/taller2/secreto
Creamos el fichero index.html
:
echo "<h1>Acceso restringido</h1>" > /home/vagrant/taller2/secreto/index.html
Creamos el directorio para las claves:
mkdir /etc/apache2/claves
Creamos el fichero de contraseñas:
htpasswd -c /etc/apache2/claves/contra.txt usuario
Modificamos el fichero /etc/apache2/sites-available/taller2.conf
:
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
RedirectMatch ^/$ /principal
Alias /principal/documentos /home/vagrant/doc
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
<Directory /home/vagrant/taller2/principal>
Require all granted
</Directory>
<Directory /home/vagrant/doc>
Options Indexes
Require all granted
</Directory>
<Directory /home/vagrant/taller2/intranet>
Require ip 10.0.0.0/24
</Directory>
<Directory /home/vagrant/taller2/internet>
Require ip 192.168.1.0/24
</Directory>
<Directory /home/vagrant/taller2/secreto>
AuthType Basic
AuthName "Acceso restringido"
AuthUserFile /etc/apache2/claves/contra.txt
Require valid-user
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
7. Vamos a combinar el control de acceso (ejercicio 5) y la autentificación (ejercicio 6), y vamos a configurar el virtual host para que se comporte de la siguiente manera: el acceso a la URL www.taller2.com/secreto se hace forma directa desde la intranet, desde la red pública te pide la autentificación.
Modificamos el fichero /etc/apache2/sites-available/taller2.conf
:
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
RedirectMatch ^/$ /principal
Alias /principal/documentos /home/vagrant/doc
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
<Directory /home/vagrant/taller2/principal>
Require all granted
</Directory>
<Directory /home/vagrant/doc>
Options Indexes
Require all granted
</Directory>
<Directory /home/vagrant/taller2/intranet>
Require ip 10.0.0.0/24
</Directory>
<Directory /home/vagrant/taller2/internet>
Require ip 192.168.1.0/24
</Directory>
<Directory /home/vagrant/taller2/secreto>
AuthType Basic
AuthName "Acceso restringido"
AuthUserFile /etc/apache2/claves/contra.txt
Require valid-user
Require ip 10.0.0.0/24
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
En el cliente editamos el fichero /etc/hosts
:
10.0.0.1 www.taller2.com
Para probarlo, desde la red interna:
curl http://www.taller2.com/secreto/
8. El módulo rewrite nos va a permitir acceder a una URL e internamente estar accediendo a otra. Esto nos puede ayudar a hacer URL amigables y hacer redirecciones. Por ejemplo para redireccionar a otra URL:
RewriteEngine On
RewriteRule ^(.*)$ http://www.nueva.com/$1 [R=301,L]
Usando un fichero .htaccess haz que al acceder a la URL www.taller2.com/documentos se produce una redirección a www.taller2.com/principal/documentos usando el modulo rewrite (recuerda que tienes que activarlo). Además, deniega el acceso desde la red interna.
Activamos el módulo rewrite:
a2enmod rewrite
Creamos el directorio:
mkdir /home/vagrant/taller2/documentos
Creamos el fichero .htaccess
:
echo "RewriteEngine On" > /home/vagrant/taller2/documentos/.htaccess
echo "RewriteRule ^(.*)$ /principal/documentos/$1 [R=301,L]" >> /home/vagrant/taller2/documentos/.htaccess
Modificamos el fichero /etc/apache2/sites-available/taller2.conf
:
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
RedirectMatch ^/$ /principal
Alias /principal/documentos /home/vagrant/doc
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
<Directory /home/vagrant/taller2/principal>
Require all granted
</Directory>
<Directory /home/vagrant/doc>
Options Indexes
Require all granted
</Directory>
<Directory /home/vagrant/taller2/intranet>
Require ip 10.0.0.0/24
</Directory>
<Directory /home/vagrant/taller2/internet>
Require ip 192.168.1.0/24
</Directory>
<Directory /home/vagrant/taller2/secreto>
AuthType Basic
AuthName "Acceso restringido"
AuthUserFile /etc/apache2/claves/contra.txt
Require valid-user
Require ip 10.0.0.0/24
</Directory>
<Directory /home/vagrant/taller2/documentos>
Require all granted
AllowOverride All
Options Indexes FollowSymLinks
Deny from 10.0.0.0/24
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
Y reiniciamos el servicio:
systemctl restart apache2
Entrega
1. Configuración completa del virtualhost.
<VirtualHost *:80>
ServerName www.taller2.com
DocumentRoot /home/vagrant/taller2
RedirectMatch ^/$ /principal
Alias /principal/documentos /home/vagrant/doc
<Directory /home/vagrant/taller2>
Require all granted
</Directory>
<Directory /home/vagrant/taller2/principal>
Require all granted
</Directory>
<Directory /home/vagrant/doc>
Options Indexes
Require all granted
</Directory>
<Directory /home/vagrant/taller2/intranet>
Require ip 10.0.0.0/24
</Directory>
<Directory /home/vagrant/taller2/internet>
Require ip 192.168.1.0/24
</Directory>
<Directory /home/vagrant/taller2/secreto>
AuthType Basic
AuthName "Acceso restringido"
AuthUserFile /etc/apache2/claves/contra.txt
Require valid-user
Require ip 10.0.0.0/24
</Directory>
<Directory /home/vagrant/taller2/documentos>
Require all granted
AllowOverride All
Options Indexes FollowSymLinks
</Directory>
ErrorLog ${APACHE_LOG_DIR}/taller2_error.log
CustomLog ${APACHE_LOG_DIR}/taller2_access.log combined
</VirtualHost>
2. Comprobación de que al acceder a www.taller2.com se produce una redirección.
3. Pantallazo accediendo a www.taller2.com/principal/documentos (pon algunos ficheros para que se vea la lista).
4. Pantallazos de accesos a www.taller2.com/intranet desde el host y el cliente interno. Pantallazos de acceso a www.taller2.com/internet desde el host y el clientee interno.
Host:
Cliente interno:
5. Pantallazos de la autentificación básica.
6. Pantallazos de acceso a www.taller2.com/secreto desde el host y el cliente interno.
Host:
Cliente interno:
7. Contenido del fichero .htaccess. Acceso a www.taller2.com/documentos comprobando que se produce una redirección desde el exterior y prueba de acceso desde el cliente interno para comprobar que no tiene permiso de acceso.
Contenido del fichero .htaccess
:
RewriteEngine On
RewriteRule ^(.*)$ /principal/documentos/ [R=301,L]