TFC: add section on Nginx

Signed-off-by: Nicolás Ortega Froysa <nicolas@ortegas.org>
This commit is contained in:
Nicolás A. Ortega Froysa 2023-05-07 19:20:22 +02:00
parent e7e2e45e8c
commit fa5d40e9f6
2 changed files with 117 additions and 13 deletions

Binary file not shown.

View File

@ -401,7 +401,7 @@ utilizando el comando siguiente:
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{console}
# dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
@ -428,7 +428,7 @@ mirando el archivo {\tt /etc/resolv.conf}:
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{console}
# cat /etc/resolv.conf
nameserver 192.168.1.135
@ -449,7 +449,7 @@ nuestro servidor es {\tt 192.168.1.135}:
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{console}
# nslookup porn.com
Server: 192.168.1.135
@ -493,7 +493,7 @@ de la tarjeta SD corresponde al fichero especial {\tt /dev/mmcblk1}:
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{console}
# unxz Armbian_<version>_Rock64_<codename>_current_<version>.img.xz
# dd if=Armbian_<version>_Rock64_<codename>_current_<version>.img \
@ -543,7 +543,7 @@ que instalará el paquete que precisamos además de todas sus dependencias:
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{console}
# apt install bind9
\end{minted}
@ -561,7 +561,7 @@ bloquear. El archivo de configuración ha de ser como lo siguiente
bgcolor=LightGray,
linenos,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{text}
include "/etc/bind/blacklisted.zones";
@ -588,6 +588,38 @@ esta lista, haciendo lo siguiente:
\item Reiniciar el servicio de DNS Bind9.
\end{enumerate}
Una vez creado el {\it script}, será de nuestro interés correrlo de forma
periódica. Para esto lo más útil es un {\it cronjob}. Como es poco probable que
se actualice con frecuencia esta lista, podemos permitirnos actualizarla una vez
al mes. Para hacer esto, lo primero que hacemos es mover el {\it script} al
directorio {\tt /usr/local/bin} con permisos de ejecución (asumimos que se
denomina {\tt update-blacklist.sh}):
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1
]{console}
# install -m 755 ./update-blacklist.sh /usr/local/bin
\end{minted}
Una vez instalado, podemos configurar el {\it crontjob} con el comando {\tt
crontab -e}, y en el archivo añadir una línea que sea de la manera siguiente:
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1
]{console}
0 0 1 * * /usr/local/bin/update-blacklist.sh
\end{minted}
Esta línea lo que hace es correr nuestro {\it script} a la media noche (00:00)
cada día 1 de cualquier mes y cualquier día de la semana (estos últimos
parámetros se especifican utilizando el símbolo {\tt *}).
El fichero de configuración de la lista negra ha de tener un dominio por cada
línea. El dominio de ha de definir de la forma siguiente
(\cite{bind-sinkhole}):
@ -596,7 +628,7 @@ línea. El dominio de ha de definir de la forma siguiente
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{text}
zone "<dominio>" {type master; file "/etc/bind/zones/master/
blockeddomains.db";};
@ -612,11 +644,11 @@ de la manera siguiente (\cite{bind-sinkhole}):
bgcolor=LightGray,
linenos,
framesep=2mm,
baselinestretch=1.2
baselinestretch=1
]{text}
;
; BIND data file for example.local
;$
;
$TTL 3600
@ IN SOA ns1.example.local. info.example.local. (
2014052101 ; Serial
@ -631,10 +663,6 @@ $TTL 3600
* IN AAAA ::1
\end{minted}
% TODO:
% - Servidor Web
% - Script PHP
\begin{figure}[h]
\centering
\includegraphics[width=0.75\textwidth]{imgs/router-dns.png}
@ -648,8 +676,84 @@ Para hacer esto, en el panel de control del {\it router} se puede encontrar esta
configuración en un apartado parecido al que se ve en la figura
\ref{fig:router-dns}. Simplemente se rellena con la dirección IP de nuestro
servidor en la red interna y ya debería de estar configurado como servidor DNS.
Tan sólo es necesario reinicar el servicio de la forma siguiente:
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1
]{console}
# systemctl restart bind9
\end{minted}
\subsubsection{Instalación y Configuración del Servicio HTTP}
La configuración de nuestro servicio HTTP requiere, en primer lugar, la
instalación del {\it software} requerido, siendo este Nginx, pero también
instalando los requisitos para que Nginx pueda tratar con {\it scripts} en PHP,
enviándolos a un CGI que lo interpretará con el intérprete de PHP:
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1
]{console}
# apt install nginx php php-fpm
\end{minted}
Al instalar estos paquetes, encontraremos, igual que con Bind9, que los
servicios de Nginx y PHP-FPM ya están en funcionamiento. Queremos hacer una
modificación del archivo por defecto de configuración; el sitio {\it default}
que se encuentra en el fichero {\tt /etc/nginx/sites-available/default}. Este
archivo nos sirve generalmente como está escrito, ya que toda petición HTTP que
recibe el servidor lo interpretará esta configuración, y como tiene que
responder a cualquier petición a cualquier dominio bloqueado, esto nos interesa.
Sólo hay tres cosas importantes que cambiar:
\begin{enumerate}[i]
\item Eliminar la línea que contiene la directiva {\tt server\_name}.
\item Añadir {\tt index.php} a la lista de archivos que utilizar por defecto
en la directiva {\tt index}.
\item Habilitar la gestión de páginas PHP por medio de PHP-FPM.
\end{enumerate}
El código de configuración para hacer lo segundo está ya dentro del archivo de
configuración {\tt default}, tan sólo hace falta descomentarlo. Al descomentar
ese bloque debería de parecer a lo siguiente:
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
linenos,
baselinestretch=1
]{nginx}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
\end{minted}
Una vez que esté bien configurado, podemos reiniciar el servicio con el comando
siguiente:
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1
]{console}
# systemctl reload nginx
\end{minted}
Una vez configurado podemos verificar que funciona correctamente corriendo un
comando {\tt curl} sobre la IP de nuestro servidor. Si responde sin error un
código HTML entonces todo ha funcionado correctamente.
\subsubsection{Instalación de la Página PHP}
\section{Conclusiones y Propuestas de Mejora}