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, frame=lines,
bgcolor=LightGray, bgcolor=LightGray,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{console} ]{console}
# dhclient -v # dhclient -v
Internet Systems Consortium DHCP Client 4.4.1 Internet Systems Consortium DHCP Client 4.4.1
@ -428,7 +428,7 @@ mirando el archivo {\tt /etc/resolv.conf}:
frame=lines, frame=lines,
bgcolor=LightGray, bgcolor=LightGray,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{console} ]{console}
# cat /etc/resolv.conf # cat /etc/resolv.conf
nameserver 192.168.1.135 nameserver 192.168.1.135
@ -449,7 +449,7 @@ nuestro servidor es {\tt 192.168.1.135}:
frame=lines, frame=lines,
bgcolor=LightGray, bgcolor=LightGray,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{console} ]{console}
# nslookup porn.com # nslookup porn.com
Server: 192.168.1.135 Server: 192.168.1.135
@ -493,7 +493,7 @@ de la tarjeta SD corresponde al fichero especial {\tt /dev/mmcblk1}:
frame=lines, frame=lines,
bgcolor=LightGray, bgcolor=LightGray,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{console} ]{console}
# unxz Armbian_<version>_Rock64_<codename>_current_<version>.img.xz # unxz Armbian_<version>_Rock64_<codename>_current_<version>.img.xz
# dd if=Armbian_<version>_Rock64_<codename>_current_<version>.img \ # 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, frame=lines,
bgcolor=LightGray, bgcolor=LightGray,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{console} ]{console}
# apt install bind9 # apt install bind9
\end{minted} \end{minted}
@ -561,7 +561,7 @@ bloquear. El archivo de configuración ha de ser como lo siguiente
bgcolor=LightGray, bgcolor=LightGray,
linenos, linenos,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{text} ]{text}
include "/etc/bind/blacklisted.zones"; include "/etc/bind/blacklisted.zones";
@ -588,6 +588,38 @@ esta lista, haciendo lo siguiente:
\item Reiniciar el servicio de DNS Bind9. \item Reiniciar el servicio de DNS Bind9.
\end{enumerate} \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 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 línea. El dominio de ha de definir de la forma siguiente
(\cite{bind-sinkhole}): (\cite{bind-sinkhole}):
@ -596,7 +628,7 @@ línea. El dominio de ha de definir de la forma siguiente
frame=lines, frame=lines,
bgcolor=LightGray, bgcolor=LightGray,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{text} ]{text}
zone "<dominio>" {type master; file "/etc/bind/zones/master/ zone "<dominio>" {type master; file "/etc/bind/zones/master/
blockeddomains.db";}; blockeddomains.db";};
@ -612,11 +644,11 @@ de la manera siguiente (\cite{bind-sinkhole}):
bgcolor=LightGray, bgcolor=LightGray,
linenos, linenos,
framesep=2mm, framesep=2mm,
baselinestretch=1.2 baselinestretch=1
]{text} ]{text}
; ;
; BIND data file for example.local ; BIND data file for example.local
;$ ;
$TTL 3600 $TTL 3600
@ IN SOA ns1.example.local. info.example.local. ( @ IN SOA ns1.example.local. info.example.local. (
2014052101 ; Serial 2014052101 ; Serial
@ -631,10 +663,6 @@ $TTL 3600
* IN AAAA ::1 * IN AAAA ::1
\end{minted} \end{minted}
% TODO:
% - Servidor Web
% - Script PHP
\begin{figure}[h] \begin{figure}[h]
\centering \centering
\includegraphics[width=0.75\textwidth]{imgs/router-dns.png} \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 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 \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. 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} \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} \subsubsection{Instalación de la Página PHP}
\section{Conclusiones y Propuestas de Mejora} \section{Conclusiones y Propuestas de Mejora}