Servidores Openstack. Dns, Web Y Base De Datos

En este post vamos a realizar la instalación de tres servidores: DNS, Web y Base de Datos. Estos servidores se encontrarán en el escenario de OpenStack montado en artículos anteriores. Si quieres saber más acerca del escenario, puedes visitar los siguientes posts:

Servidor DNS

Vamos a instalar un servidor DNS en Freston que nos permita gestionar la resolución directa e inversa de nuestros nombres. Mi subdominio dentro del dominio principal gonzalonazareno.org, se llamará javierpzh.gonzalonazareno.org.

Vamos a instalar el servidor bind9:

apt install bind9 -y

Una vez instalado, vamos a pasar a definir las vistas que vamos a crear posteriormente. Para ello, nos dirigimos al fichero /etc/bind/named.conf.local y añadimos los siguientes bloques que definirán cada una de las vistas:

view red_externa {
        match-clients {172.22.0.0/15; 192.168.202.2;};

        include "/etc/bind/zones.rfc1918";
        include "/etc/bind/named.conf.default-zones";

        zone "javierpzh.gonzalonazareno.org" {
          type master;
          file "db.externa.javierpzh.gonzalonazareno.org";
        };
};

view red_DMZ {
        match-clients {10.0.2.0/24;};

        include "/etc/bind/zones.rfc1918";
        include "/etc/bind/named.conf.default-zones";

        zone "javierpzh.gonzalonazareno.org" {
          type master;
          file "db.DMZ.javierpzh.gonzalonazareno.org";
        };

        zone "1.0.10.in-addr.arpa" {
          type master;
          file "db.1.0.10";
        };

        zone "2.0.10.in-addr.arpa" {
          type master;
          file "db.2.0.10";
        };
};

view red_interna {
        match-clients {10.0.1.0/24; localhost;};

        include "/etc/bind/zones.rfc1918";
        include "/etc/bind/named.conf.default-zones";

        zone "javierpzh.gonzalonazareno.org" {
          type master;
          file "db.interna.javierpzh.gonzalonazareno.org";
        };

        zone "1.0.10.in-addr.arpa" {
          type master;
          file "db.1.0.10";
        };

        zone "2.0.10.in-addr.arpa" {
          type master;
          file "db.2.0.10";
        };
};

Vamos a explicar las líneas que acabamos de añadir.

En primer lugar, vemos que hemos añadido tres vistas distintas, una para cada una de las redes con las que vamos a interaccionar. La primera está destinada a la red externa, la segunda a la red DMZ, y la tercera a la red interna.

Al principio de cada vista, he introducido una línea llamada match-clients. Esta línea identifica desde que red será accesible esa vista.

Podemos ver que he escrito una línea que hacer referencia a un archivo llamado zones.rfc1918, que es un fichero de configuración de las zonas privadas que queremos definir.

Los bloques definen las zonas de las que el servidor tiene autoridad, la zona de resolución directa javierpzh.gonzalonazareno.org, y sus correspondientes zonas de resolución inversa 1.0.10.in-addr.arpa y 2.0.10.in-addr.arpa, además vemos como hemos especificado que actúen como maestro.

Una vez explicado, como vamos a utilizar distintas vistas, debemos dirigirnos al fichero /etc/bind/named.conf y comentar (para comentar se utilizan dos caracteres /) o eliminar la siguiente línea:

include "/etc/bind/named.conf.default-zones";

Hecho esto, tenemos que dirigirnos al fichero /etc/bind/named.conf.options, e introducir las siguientes líneas:

allow-query { 172.22.0.0/15;10.0.1.0/24;10.0.2.0/24;192.168.202.2; };

allow-recursion { any; };

allow-query-cache { any; };

De manera que el contenido total del fichero sería:

options {
        directory "/var/cache/bind";

        dnssec-validation auto;

        listen-on-v6 { any; };

        recursion yes;

        allow-query { 172.22.0.0/15;10.0.1.0/24;10.0.2.0/24;192.168.202.2; };

        allow-recursion { any; };

        allow-query-cache { any; };

        listen-on { any; };

        allow-transfer { none; };

};

Ahora, vamos a configurar las zonas que definimos en el paso anterior. En mi caso copio el fichero /etc/bind/db.empty para utilizarlo como plantilla de los nuevos archivos de configuración.

En primer lugar, voy a definir y configurar la zona que utilizaremos en la vista destinada para la red externa:

root@freston:~# cp /etc/bind/db.empty /var/cache/bind/db.externa.javierpzh.gonzalonazareno.org

Hecho esto, empezamos a editar nuestro archivo db.externa.javierpzh.gonzalonazareno.org:

$TTL    86400
@       IN      SOA     dulcinea.javierpzh.gonzalonazareno.org. root.localhost. (
                        20123001        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      dulcinea.javierpzh.gonzalonazareno.org.

$ORIGIN javierpzh.gonzalonazareno.org.

dulcinea        IN      A       172.22.200.183
www             IN      CNAME   dulcinea

Voy a explicar el bloque añadido.

Vemos que hay un apartado llamado Serial, este apartado es muy importante, ya que es el identificador de la zona, que debemos incrementar cada vez que hagamos un cambio. Se recomienda que el valor sea de este formato YYMMDDNN, es decir, la fecha de modificación y el número de la modificación. En mi caso he establecido 20123001 pues estoy realizando esta práctica el 30 de diciembre de 2020 y es la primera modificación que hago.

Los registros de tipo SOA representan la autoridad sobre la zona.

El registro de tipo NS define el servidor con privilegios sobre la zona.

El registro $ORIGIN se usa para que las líneas que se especifiquen debajo de él, sean autocompletadas con el dominio especificado en dicho registro. Esto nos sirve para evitar poner en cada registro que creemos, la zona, es decir, a los próximos registros que creemos, se les añadirá automáticamente la zona javierpzh.gonzalonazareno.org.

Los registros de tipo A especifican la direcciones IP correspondientes al dominio.

Los registros de tipo CNAME sirven para apuntar hacia otro de los registros de tipo A ya existentes. De manera que es mucho más fácil y cómodo hacer referencia a una dirección a través de un nombre en vez de con la propia dirección en sí.

Explicados estos detalles, vamos a continuar con la siguiente zona que se empleará para la vista de la red DMZ. Vuelvo a copiar el fichero /etc/bind/db.empty para utilizarlo como plantilla:

root@freston:~# cp /etc/bind/db.empty /var/cache/bind/db.DMZ.javierpzh.gonzalonazareno.org

Hecho esto, empezamos a editar nuestro archivo db.DMZ.javierpzh.gonzalonazareno.org:

$TTL    86400
@       IN      SOA     freston.javierpzh.gonzalonazareno.org. root.localhost. (
                        20123001        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      freston.javierpzh.gonzalonazareno.org.

$ORIGIN javierpzh.gonzalonazareno.org.

freston         IN      A       10.0.1.6
dulcinea        IN      A       10.0.2.10
sancho          IN      A       10.0.1.8
quijote         IN      A       10.0.2.6
www             IN      CNAME   quijote
bd              IN      CNAME   sancho
ldap            IN      CNAME   freston

Seguimos con la siguiente zona, esta, se empleará para la vista de la red interna. Vuelvo a copiar el fichero /etc/bind/db.empty para utilizarlo como plantilla:

root@freston:~# cp /etc/bind/db.empty /var/cache/bind/db.interna.javierpzh.gonzalonazareno.org

Hecho esto, empezamos a editar nuestro archivo db.interna.javierpzh.gonzalonazareno.org:

$TTL    86400
@       IN      SOA     freston.javierpzh.gonzalonazareno.org. root.localhost. (
                        20123001        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      freston.javierpzh.gonzalonazareno.org.

$ORIGIN javierpzh.gonzalonazareno.org.

freston         IN      A       10.0.1.6
dulcinea        IN      A       10.0.1.11
sancho          IN      A       10.0.1.8
quijote         IN      A       10.0.2.6
www             IN      CNAME   quijote
bd              IN      CNAME   sancho

Ya hemos creado y configurado las tres zonas de resolución directa que necesitamos, ahora vamos a pasar con las de resolución inversa.

Para estas, podemos tomar como plantilla otro archivo, el /etc/bind/db.127. Lo guardaremos de nuevo en /var/cache/bind con los nombres db.1.0.10 y db.2.0.10.

root@freston:~# cp /etc/bind/db.127 /var/cache/bind/db.1.0.10

root@freston:~# cp /etc/bind/db.127 /var/cache/bind/db.2.0.10

Antes de mostrar como quedarían estos ficheros, hay que decir que por cada registro de tipo A que tengamos en nuestro archivo que contiene la zona directa, tenemos que añadir un registro de tipo PTR.

En mi caso, el fichero /var/cache/bind/db.1.0.10 tendría este aspecto:

$TTL    604800
@       IN      SOA     freston.javierpzh.gonzalonazareno.org. root.localhost. (
                        20123001        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      freston.javierpzh.gonzalonazareno.org.

$ORIGIN 1.0.10.in-addr.arpa.

11     IN      PTR     dulcinea
6      IN      PTR     freston
8      IN      PTR     sancho

En mi caso, el fichero /var/cache/bind/db.2.0.10 tendría este aspecto:

$TTL    604800
@       IN      SOA     freston.javierpzh.gonzalonazareno.org. root.localhost. (
                        20123001        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      freston.javierpzh.gonzalonazareno.org.

$ORIGIN 2.0.10.in-addr.arpa.

10    IN      PTR     dulcinea
6     IN      PTR     quijote

Hemos terminado de crear las diferentes zonas, y tan solo nos quedaría crear la regla DNAT en Dulcinea para poder realizar las consultas a nuestro servidor DNS instalado en Freston.

Añadimos la siguiente regla:

iptables -t nat -A PREROUTING -p udp --dport 53 -i eth0 -j DNAT --to 10.0.1.6:53

Esta regla, lo que hace, es redirigir el tráfico que proviene desde la interfaz eth0 y su destino es el puerto 53, a la dirección 10.0.1.6:53, es decir, la IP de Freston y el puerto 53 de dicha máquina, donde se encontrará nuestro servidor DNS.

Importante: es muy recomendable instalar el paquete iptables-persistent, ya que esto hará que en cada arranque del sistema las reglas que hemos configurado se levanten automáticamente, siempre y cuando las guardemos en el fichero /etc/iptables/rules.v4. Por tanto vamos a guardar esta regla para que se levente en cada inicio:

iptables-save > /etc/iptables/rules.v4

Reiniciamos el servidor DNS para que se apliquen los nuevos cambios:

systemctl restart bind9

Bien, hemos terminado de configurar nuestro servidor DNS, pero debemos configurar nuestros clientes para que hagan uso de este servidor. El fichero que establece e indica que servidores DNS se utilizarán es el /etc/resolv.conf. El contenido de este archivo se obtiene de manera automática por DHCP en cada arranque del sistema, por lo cuál, nos interesa crear una configuración que evite este comportamiento, de manera que el fichero se vuelva estático.

Aunque pensándolo mejor, en mi caso al menos, creo que me interesa más que en vez de volver completamente estático el fichero, siga obteniendo los servidores DNS proporcionados por DHCP, pero con la diferencia de que en primer lugar, es decir, la primera opción siempre sea mi propio servidor DNS.

Esto me servirá para que en el caso, de que en mi DNS ocurra algún error o no se encuentre disponible en algún momento, pueda seguir utilizando otros servidores.

En las máquinas Debian y Ubuntu (Dulcinea, Sancho y Freston) :

Utilizaremos la herramienta resolvconf, para instalarla:

apt install resolvconf -y

Ahora, debemos dirigirnos al fichero /etc/resolvconf/resolv.conf.d/head que inicialmente posee este aspecto:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

Y añadir estas líneas, de manera que el contenido total sería el siguiente:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 10.0.1.6
search javierpzh.gonzalonazareno.org

Si ahora reiniciamos las máquinas y miramos el contenido del fichero /etc/resolv.conf:

En el caso de Dulcinea:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 10.0.1.6
search javierpzh.gonzalonazareno.org
...

En el caso de Sancho:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 10.0.1.6
search javierpzh.gonzalonazareno.org
...

En el caso de Freston:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 10.0.1.6
search javierpzh.gonzalonazareno.org
...

Podemos apreciar como las máquinas además de los servidores obtenidos por DHCP, poseen en primer lugar y por tanto, con prioridad mi DNS, que será al que se le consulte siempre que esté disponible y sea capaz de resolver la petición.

En la máquina CentOS (Quijote) :

No he conseguido encontrar, ni siquiera sé si existe la herramienta que hemos utilizado para las otras máquinas, por lo cuál el proceso será distinto.

He decidido editar el fichero /etc/sysconfig/network-scripts/ifcfg-eth0, que si recordamos ya configuramos en los primeros posts sobre este escenario, y establecer en él los servidores DNS que deseamos utilizar. De manera que las líneas que hacen referencia a los DNS serían las siguientes:

DNS1=10.0.1.6
DNS2=10.0.2.10
DNS3=8.8.8.8

Si reiniciamos la máquina y visualizamos el contenido del fichero /etc/resolv.conf:

# Generated by NetworkManager
nameserver 10.0.1.6
...

Posee el aspecto que deseamos, pero aún nos falta por añadir la línea:

search javierpzh.gonzalonazareno.org

(Aún no he conseguido configurarla para que permanezca a pesar de los reinicios, así que de momento la he añadido hasta que lo consiga.)

Hecho esto, ahora nuestros clientes utilizarán el servidor DNS bind9 ubicado en Freston.

Como ya poseemos un servidor DNS bien configurado, podemos eliminar las entradas referentes a los distintos equipos en el fichero /etc/hosts de manera que no nos hará falta hacer uso de la resolución estática.

Voy a mostrar, como por ejemplo, puedo hacer uso del DNS desde Quijote:

[centos@quijote ~]$ ping dulcinea
PING dulcinea.javierpzh.gonzalonazareno.org (10.0.2.10) 56(84) bytes of data.
64 bytes from dulcinea.2.0.10.in-addr.arpa (10.0.2.10): icmp_seq=1 ttl=64 time=0.735 ms
64 bytes from dulcinea.2.0.10.in-addr.arpa (10.0.2.10): icmp_seq=2 ttl=64 time=0.913 ms
64 bytes from dulcinea.2.0.10.in-addr.arpa (10.0.2.10): icmp_seq=3 ttl=64 time=0.605 ms
^C
--- dulcinea.javierpzh.gonzalonazareno.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 0.605/0.751/0.913/0.126 ms

[centos@quijote ~]$ ping sancho
PING sancho.javierpzh.gonzalonazareno.org (10.0.1.8) 56(84) bytes of data.
64 bytes from sancho.1.0.10.in-addr.arpa (10.0.1.8): icmp_seq=1 ttl=63 time=2.67 ms
64 bytes from sancho.1.0.10.in-addr.arpa (10.0.1.8): icmp_seq=2 ttl=63 time=1.78 ms
64 bytes from sancho.1.0.10.in-addr.arpa (10.0.1.8): icmp_seq=3 ttl=63 time=1.68 ms
^C
--- sancho.javierpzh.gonzalonazareno.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 1.677/2.041/2.666/0.443 ms

[centos@quijote ~]$ ping freston
PING freston.javierpzh.gonzalonazareno.org (10.0.1.6) 56(84) bytes of data.
64 bytes from freston.1.0.10.in-addr.arpa (10.0.1.6): icmp_seq=1 ttl=63 time=1.15 ms
64 bytes from freston.1.0.10.in-addr.arpa (10.0.1.6): icmp_seq=2 ttl=63 time=1.60 ms
64 bytes from freston.1.0.10.in-addr.arpa (10.0.1.6): icmp_seq=3 ttl=63 time=1.73 ms
^C
--- freston.javierpzh.gonzalonazareno.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6ms
rtt min/avg/max/mdev = 1.148/1.492/1.734/0.254 ms

[centos@quijote ~]$ ping www
PING quijote.javierpzh.gonzalonazareno.org (10.0.2.6) 56(84) bytes of data.
64 bytes from quijote.2.0.10.in-addr.arpa (10.0.2.6): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from quijote.2.0.10.in-addr.arpa (10.0.2.6): icmp_seq=2 ttl=64 time=0.106 ms
64 bytes from quijote.2.0.10.in-addr.arpa (10.0.2.6): icmp_seq=3 ttl=64 time=0.100 ms
^C
--- quijote.javierpzh.gonzalonazareno.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 66ms
rtt min/avg/max/mdev = 0.052/0.086/0.106/0.024 ms

[centos@quijote ~]$ ping ldap
PING freston.javierpzh.gonzalonazareno.org (10.0.1.6) 56(84) bytes of data.
64 bytes from freston.1.0.10.in-addr.arpa (10.0.1.6): icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from freston.1.0.10.in-addr.arpa (10.0.1.6): icmp_seq=2 ttl=63 time=1.75 ms
64 bytes from freston.1.0.10.in-addr.arpa (10.0.1.6): icmp_seq=3 ttl=63 time=1.68 ms
^C
--- freston.javierpzh.gonzalonazareno.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 1.226/1.550/1.747/0.230 ms

Vemos que nos resuelve todos los nombres, por tanto habríamos terminado el servidor DNS.

(José Domingo, si quieres el próximo día en clase te muestro cualquier prueba de funcionamiento).

Servidor Web

En Quijote (CentOS) (Servidor que está en la DMZ) vamos a instalar un servidor web Apache. Vamos a configurar el servidor para que sea capaz de ejecutar código PHP (para ello vamos a usar un servidor de aplicaciones php-fpm).

Antes de instalar el servidor web, vamos a dirigirnos a Dulcinea y vamos a crear la regla necesaria para hacer DNAT. La regla es la siguiente:

iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 10.0.2.6:80

Esta regla, lo que hace, es redirigir el tráfico que proviene desde la interfaz eth0 y su destino es el puerto 80, a la dirección 10.0.2.6:80, es decir, la IP de Quijote y el puerto 80 de dicha máquina, donde se encontrará nuestro servidor web.

Importante: es muy recomendable instalar el paquete iptables-persistent, ya que esto hará que en cada arranque del sistema las reglas que hemos configurado se levanten automáticamente, siempre y cuando las guardemos en el fichero /etc/iptables/rules.v4. Por tanto vamos a guardar esta regla para que se levente en cada inicio:

iptables-save > /etc/iptables/rules.v4

Una vez tenemos creada la regla DNAT en Dulcinea, procedemos a instalar el servidor web Apache en Quijote, que lo vamos a instalar con este comando, ya que en CentOS, Apache se incluye en el paquete httpd:

dnf install httpd -y

Una vez instalado, debemos abrir los puertos 80 y 443, que utilizará Apache, ya que por defecto, en el firewall de CentOS, vienen cerrados.

[root@quijote ~]# firewall-cmd --permanent --add-service=http
success

[root@quijote ~]# firewall-cmd --permanent --add-service=https
success

[root@quijote ~]# firewall-cmd --permanent --add-port=80/tcp
success

[root@quijote ~]# firewall-cmd --permanent --add-port=443/tcp
success

[root@quijote ~]# firewall-cmd --reload
success

[root@quijote ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 443/tcp 80/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Habilitamos para que este servicio se inicie en cada arranque del sistema.

[root@quijote ~]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

Hecho esto, si nos dirigimos nuestro navegador e introducimos la dirección www.javierpzh.gonzalonazareno.org, nos debe aparecer una página como esta:

Vemos que accediendo a www.javierpzh.gonzalonazareno.org nos muestra la página servida por nuestro servidor web, que se encuentra en Quijote, por lo que, tanto la regla DNAT creada en Dulcinea, como el servidor httpd, funcionan correctamente.

En Centos, la instalación de un servidor Apache es distinta respecto a lo que estamos acostumbrados a utilizar, Debian. Podemos apreciar que no poseemos ni la carpeta sites-availables ni la carpeta de sites-enabled, por lo que nosotros mismos vamos a proceder a crearlas, para ello nos dirigimos al directorio /etc/httpd y las creamos:

[root@quijote ~]# ls /etc/httpd/
conf  conf.d  conf.modules.d  logs  modules  run  state

[root@quijote ~]# mkdir /etc/httpd/{sites-availables,sites-enabled}

[root@quijote ~]# ls /etc/httpd/
conf  conf.d  conf.modules.d  logs  modules  run  sites-availables  sites-enabled  state

Una vez disponemos de las carpetas donde almacenaremos nuestros virtualhost, debemos dirigirnos al fichero /etc/httpd/conf/httpd.conf e indicar que los virtualhost se almacenan en la carpeta sites-enabled. Para ello añadimos la siguiente línea en dicho fichero:

IncludeOptional sites-enabled/*.conf

Hecho esto, ya procederemos a crear nuestro primer virtualhost. En mi caso recibirá el nombre de javierpzh.gonzalonazareno.conf y poseerá este aspecto:

<\VirtualHost *:80\>

    ServerName www.javierpzh.gonzalonazareno.org
    DocumentRoot /var/www/iesgn

    ErrorLog /var/www/iesgn/log/error.log
    CustomLog /var/www/iesgn/log/requests.log combined

<\/VirtualHost\>

Atención: a esta configuración hay que eliminarle los carácteres \, que he tenido que introducir para escapar los carácteres siguientes, así que en caso de querer copiar la configuración, debemos tener en cuenta esto.

Ahora, vamos a habilitar este nuevo virtualhost, creando un enlace simbólico hacia la ruta /etc/httpd/sites-enabled.

[root@quijote sites-availables]# ln -s /etc/httpd/sites-availables/javierpzh.gonzalonazareno.conf /etc/httpd/sites-enabled/

En este punto, tan solo nos quedaría crear un fichero index.html en la ruta especificada en el apartado DocumentRoot, que en mi caso, es /var/www/iesgn. Mi fichero index.html quedaría así:

<\h1\>Pagina de Javier Perez Hidalgo, alumno del Gonzalo Nazareno<\/h1\>

Atención: a esta configuración hay que eliminarle los carácteres \, que he tenido que introducir para escapar los carácteres siguientes, así que en caso de querer copiar la configuración, debemos tener en cuenta esto.

También debemos crear dentro del directorio /var/www/iesgn, una carpeta llamada log.

Debemos modificar la política de SELinux:

setsebool -P httpd_unified 1

Reiniciamos nuestro servidor web:

systemctl restart httpd

Y accedemos de nuevo a la dirección www.javierpzh.gonzalonazareno.org:

Vemos como nos muestra el nuevo virtualhost.

Por último, vamos a configurar este servidor para que ejecute código PHP. Utilizaremos el servidor de aplicaciones php-fpm, por tanto, lo instalamos:

dnf install php php-fpm -y

Una vez instalado, vamos a habilitar su arranque en cada inicio del sistema:

[root@quijote iesgn]# systemctl enable php-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.

Hecho esto, ya habríamos instalado nuestro servidor de aplicaciones PHP, pero vamos a comprobar que funciona de manera correcta. Para esto, vamos a añadir a nuestro virtualhost los siguientes bloques:

<\Proxy "unix:/run/php-fpm/www.sock|fcgi://php-fpm"\>
    ProxySet disablereuse=off
<\/Proxy\>

<\FilesMatch \.php$\>
    SetHandler proxy:fcgi://php-fpm
<\/FilesMatch\>

Atención: a esta configuración hay que eliminarle los carácteres \, que he tenido que introducir para escapar los carácteres siguientes, así que en caso de querer copiar la configuración, debemos tener en cuenta esto.

En la ruta /var/www/iesgn voy a crear un archivo llamado info.php que contendrá la siguiente línea: <?php phpinfo(); ?>.

Si accedemos a la dirección www.javierpzh.gonzalonazareno.org/info.php:

Vemos como nuestro servidor ejecuta código PHP, por lo que habríamos terminado.

Servidor de base de datos

En Sancho (Ubuntu) vamos a instalar un servidor de base de datos MariaDB bd.javierpzh.gonzalonazareno.org.

El primer paso sería instalar nuestro gestor de base de datos, MySQL, por tanto, lo instalamos:

apt install mariadb-server mariadb-client -y

Una vez lo hemos instalado, vamos a configurar una serie de opciones con el comando mysql_secure_installation. Vamos a especificarle una contraseña de root, vamos a eliminar los usuarios anónimos, vamos a especificar que queremos desactivar el acceso remoto a la base de datos, en resumen, vamos a restablecer la base de datos, con nuestras preferencias. Esta es una manera de asegurar el servicio. Aquí muestro el proceso:

root@sancho:~# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Es el turno de crear un usuario propio, asignarle privilegios y especificarle que sea accesible desde Quijote, es decir, desde 10.0.2.6, ya que éste tiene la IP estática. Para hacer esto debemos conectarnos como root:

root@sancho:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 39
Server version: 10.3.25-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE USER 'javierquijote'@'10.0.2.6' IDENTIFIED BY 'contraseña';
Query OK, 0 rows affected (0.050 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'javierquijote'@'10.0.2.6';
Query OK, 0 rows affected (0.152 sec)

MariaDB [(none)]> exit
Bye

Una vez tenemos el usuario al que accederemos remotamente, nos quedaría configurar el acceso remoto a nuestro servidor MySQL, para ello, debemos modificar el fichero de configuración /etc/mysql/mariadb.conf.d/50-server.cnf y buscar la línea bind-address = 127.0.0.1 y sustituirla por la siguiente:

bind-address = 0.0.0.0

Esto hará que el servidor escuche las peticiones que provienen de todas las interfaces, a diferencia del punto anterior, que estaba configurado para que solo escuchara en localhost.

Hecho esto podemos dirigirnos al cliente, es decir, vamos a comprobar el acceso remoto desde Quijote. Para ello necesitamos instalar MariaDB:

dnf install mariadb -y

Ahora probamos a acceder:

mysql -h sancho -u javierquijote -p

El parámetro -h indica la dirección del servidor (como nuestro DNS resuelve el nombre de Sancho no hace falta indicar su dirección), y los parámetros -u y -p, como ya sabemos, indican el usuario y la autenticación mediante contraseña.

Obtenemos este resultado:

[root@quijote ~]# mysql -h sancho -u javierquijote -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 66
Server version: 10.3.25-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Hemos accedido correctamente por lo que habríamos finalizado este post.