TFC: apply revision

Signed-off-by: Nicolás Ortega Froysa <nicolas@ortegas.org>
This commit is contained in:
Nicolás A. Ortega Froysa 2023-05-12 15:13:07 +02:00
parent 31c3d3f9a6
commit 324f48cfa1
2 changed files with 191 additions and 191 deletions

Binary file not shown.

View File

@ -20,6 +20,7 @@
\addbibresource{tfc-naortega.bib} \addbibresource{tfc-naortega.bib}
\fancyhead[LO]{}
\fancyfoot[LO]{{\it Angelus Custos}\linebreak} \fancyfoot[LO]{{\it Angelus Custos}\linebreak}
\fancyfoot[RO]{\includegraphics[width=0.2\linewidth]{imgs/CEU-Logo-CEP-web.png}} \fancyfoot[RO]{\includegraphics[width=0.2\linewidth]{imgs/CEU-Logo-CEP-web.png}}
\setlength{\headheight}{15pt} \setlength{\headheight}{15pt}
@ -32,7 +33,7 @@
\author{ \author{
Alumno: Nicolás A. Ortega Froysa \\ Alumno: Nicolás A. Ortega Froysa \\
Tutor: Indalecio García Mateos \\ Tutor: Indalecio García Mateos \\
Centro: CEU San Pablo Andalucía \\ Centro: Fundación San Pablo CEU Andalucía \\
Ciclo: Administración de Sistemas Informáticos en Red Ciclo: Administración de Sistemas Informáticos en Red
} }
@ -45,6 +46,8 @@
\maketitle \maketitle
\tableofcontents \tableofcontents
\listoffigures
\listoftables
\pagebreak \pagebreak
\section{Introducción} \section{Introducción}
@ -56,14 +59,14 @@ conocimiento técnico lo puede montar en su casa para proteger a sus hijos, y
también compartir la misma tecnología con otros padres, en espíritu solidario también compartir la misma tecnología con otros padres, en espíritu solidario
cristiano, para que ellos también puedan proteger a los suyos. cristiano, para que ellos también puedan proteger a los suyos.
También optaremos, en este mismo espíritu colaborativo, por soluciones software También se optará, en este mismo espíritu colaborativo, por soluciones software
que sean libres y gratuitos, ya que el objetivo es proveer una solución para que sean libres y gratuitos, ya que el objetivo es proveer una solución para
personas particulares, y no un plan de negocio. personas particulares, y no un plan de negocio.
\section{Contexto} \section{Contexto}
\subsection{Situación Actual} \subsection{Situación Actual}
Vivimos en un mundo muy digitalizado donde los niños están expuestos a Actualmente el mundo está muy digitalizado, y los niños están expuestos a la
pornografía desde una edad muy temprana (\cite{avg-age}). Aunque hay muchos pornografía desde una edad muy temprana (\cite{avg-age}). Aunque hay muchos
factores que contribuyen a esto, uno de ellos es la facilidad de acceso: que un factores que contribuyen a esto, uno de ellos es la facilidad de acceso: que un
niño puede encontrarse con contenido pornográfico en la web sin querer, haciendo niño puede encontrarse con contenido pornográfico en la web sin querer, haciendo
@ -82,9 +85,9 @@ adicción a la pornografía, un amigo o familiar que se responsabiliza. Muchos d
mejoras y desarrollos a sus productos. (\cite{blocker-alts}) mejoras y desarrollos a sus productos. (\cite{blocker-alts})
Aunque existen todas estas soluciones, parece que hay pocos que se interesan por Aunque existen todas estas soluciones, parece que hay pocos que se interesan por
el daño que provoca la pornografía en nuestra salud mental, particularmente en el daño que provoca la pornografía en la salud mental, particularmente en la
la salud de los menores de edad. Una parte puede ser la falta de información: es salud de los menores de edad. Una parte puede ser la falta de información: es un
un asunto que se habla poco debido a su naturaleza clandestina y pervertida. asunto que se habla poco debido a su naturaleza clandestina y pervertida.
% TODO: efectos negativos de la pornografía % TODO: efectos negativos de la pornografía
@ -97,7 +100,7 @@ el mundo de hoy.
\subsection{Justificación} \subsection{Justificación}
Como explicamos anteriormente, es necesario una solución para protegernos -- a Como se explicó anteriormente, es necesario una solución para protegernos -- a
nuestros hijos, pero también a nosotros mismos -- de la presencia y facilidad de nuestros hijos, pero también a nosotros mismos -- de la presencia y facilidad de
acceso a la pornografía en {\it internet}. Pero la mayoría de las soluciones son acceso a la pornografía en {\it internet}. Pero la mayoría de las soluciones son
comerciales y en base a una suscripción, que constituye una barrera para muchos comerciales y en base a una suscripción, que constituye una barrera para muchos
@ -114,9 +117,9 @@ los clientes un peso innecesario de suscripciones para poder protegerse a ellos
mismos y a sus familias. mismos y a sus familias.
\section{Planificación y Costes} \section{Planificación y Costes}
\subsection{Metodología}
\subsection{Fases del Proyecto} \subsection{Fases del Proyecto}
\subsection{Planificación Temporal}
\subsection{Estimación de Costes} \subsection{Estimación de Costes}
Este proyecto implica pocos gastos para su creación y mantenimiento, ya que en Este proyecto implica pocos gastos para su creación y mantenimiento, ya que en
@ -140,16 +143,11 @@ saldría el presupuesto de la manera siguiente:
\label{tbl:budget} \label{tbl:budget}
\end{table} \end{table}
% TODO:
% - Rock64
% - SD card
% - +20% (security)
\section{Desarrollo} \section{Desarrollo}
\subsection{Análisis de Requisitos} \subsection{Análisis de Requisitos}
Podemos dividir los requisitos de nuestro proyecto en dos categorías Se puede dividir los requisitos del proyecto en dos categorías principales: {\it
principales: {\it hardware} y {\it software}. hardware} y {\it software}.
\subsubsection{Requisitos Hardware} \subsubsection{Requisitos Hardware}
@ -171,19 +169,20 @@ Los requisitos son muy básicos, y casi cualquier ordenador (incluso uno antiguo
que ya no se usa) serviría para la implementación de esta solución. En caso de que ya no se usa) serviría para la implementación de esta solución. En caso de
que no haya un ordenador libre a su disposición, convendría más comprar un que no haya un ordenador libre a su disposición, convendría más comprar un
ordenador {\it monoplaca}, como sería un {\it Raspberry Pi}, {\it Rock64}, o ordenador {\it monoplaca}, como sería un {\it Raspberry Pi}, {\it Rock64}, o
{\it Pine64}. Lo importante para nuestros propósitos es que sea posible instalar {\it Pine64}. Lo importante para los propósitos de este proyecto es que sea
en él un sistema operativo basado en UNIX tal como sería una de las posible instalar en él un sistema operativo basado en UNIX tal como sería una de
distribuciones de BSD o Linux. las distribuciones de BSD o Linux.
Para la instalación sistemática de este producto no nos conviene utilizar un Para la instalación sistemática de este producto no conviene utilizar un
ordenador con demasiados componentes, ya que esto crearía demasiados puntos de ordenador con demasiados componentes, ya que esto crearía demasiados puntos de
fallo, y haría más difícil la instalación. Lo más simple y rápido es utilizar, fallo, y haría más difícil la instalación. Lo más simple y rápido es utilizar,
como mencionamos anteriormente, un ordenador {\it monoplaca}. De esta manera el como se mencionaba anteriormente, un ordenador {\it monoplaca}. De esta manera
consumo eléctrico será mínimo y la instalación será más simple. La instalación el consumo eléctrico será mínimo y la instalación será más simple. La
de un sistema operativo es también más fácil ya que la mayoría de este tipo de instalación de un sistema operativo es también más fácil ya que la mayoría de
ordenadores utilizan una tarjeta SD para almacenamiento y arranque de sistema; este tipo de ordenadores utilizan una tarjeta SD para almacenamiento y arranque
implica que se puede instalar anteriormente nuestra solución en una tarjeta SD y de sistema; implica que se puede instalar anteriormente la solución en una
luego simplemente insertarlo en su lugar en la placa e iniciar el ordenador. tarjeta SD y luego simplemente insertarlo en su lugar en la placa e iniciar el
ordenador.
\begin{table}[h] \begin{table}[h]
\centering \centering
@ -199,41 +198,40 @@ luego simplemente insertarlo en su lugar en la placa e iniciar el ordenador.
\label{tbl:compare-boards} \label{tbl:compare-boards}
\end{table} \end{table}
Entre las distintas opciones para ordenadores {\it monoplaca}, tenemos algunos Entre las distintas opciones para ordenadores {\it monoplaca}, existen algunos
ejemplos como los que mencionamos anteriormente y muchos más. Realmente hay poca ejemplos como los que se mencionaron anteriormente y muchos más. Realmente hay
diferencia entre las opciones -- especialmente respecto a los requisitos tan poca diferencia entre las opciones -- especialmente respecto a los requisitos
simples --, y algunos componentes (como el almacenamiento) dependen más bien del tan simples --, y algunos componentes (como el almacenamiento) dependen más bien
tamaño de tarjeta SD que compremos. La diferencia principal viene a ser cuál es del tamaño de tarjeta SD que se compra. La diferencia principal viene a ser cuál
el precio de cada placa respecto a las características que tiene. Entre estas es el precio de cada placa respecto a las características que tiene. Entre las
opciones que mencionamos, el Pine64 ya no está disponible, así que las opciones opciones mencionadas, el Pine64 ya no está disponible, así que las opciones que
que vamos a considerar serán el Rock64 y el Raspberry Pi. se pueden considerar serán el Rock64 y el Raspberry Pi.
En la tabla \ref{tbl:compare-boards} podemos ver una comparación entre dos En la tabla \ref{tbl:compare-boards} se puede ver una comparación entre dos
modelos similares, uno de Rock64 y otro de Raspberry Pi, comparando sólo modelos similares, uno de Rock64 y otro de Raspberry Pi, comparando sólo
aquellas características que nos interesan. Teniendo que elegir uno de éstos aquellas características que sean de interés. Teniendo que elegir uno de éstos
para nuestra solución, vemos que el {\it RPi 4 Model B} proporciona una mejora para la solución, se ve que el {\it RPi 4 Model B} proporciona una mejora
de rendimiento pequeña respecto al {\it Rock64-4GB SBC} en cuestión de CPU -- de rendimiento pequeña respecto al {\it Rock64-4GB SBC} en cuestión de CPU --
0,3GHz más -- pero tiene un precio mucho más alto, con 41,2€ de diferencia, o el 0,3GHz más -- pero tiene un precio mucho más alto, con 41,2€ de diferencia, o
doble de precio. Esto seguramente se debe a que el {\it RPi 4 Model B} el doble de precio. Esto seguramente se debe a que el {\it RPi 4 Model B}
proporciona muchas más características y capacidades en otros aspectos que el proporciona muchas más características y capacidades en otros aspectos que el
{\it Rock64-4GB SBC}, particularmente en cuestión de capacidad gráfica (e.g.\ {\it Rock64-4GB SBC}, particularmente en cuestión de capacidad gráfica (e.g.\
tiene dos puertos de HDMI para utilizar dos monitores a la vez). Pero esto no tiene dos puertos de HDMI para utilizar dos monitores a la vez). Pero esto no
nos interesa, y son cosas que no merece la pena pagarlas si no las vamos a interesa, y son cosas que no merece la pena pagarlas si no se van a utilizar.
utilizar. Por este motivo, el modelo que vamos a utilizar sera el {\it Por este motivo, el modelo que se utilizará será el {\it Rock64-4GB SBC}.
Rock64-4GB SBC}.
\subsubsection{Requisitos Software} \subsubsection{Requisitos Software}
Luego, en cuestión de requisitos {\it software} haría falta, en primer lugar, un Luego, en cuestión de requisitos {\it software} haría falta, en primer lugar, un
sistema operativo tipo UNIX que soporte a todo el {\it software} que sistema operativo tipo UNIX que soporte a todo el {\it software} que se
mencionaremos después. Se puede utilizar este guía para montar la solución con mencionará después. Se puede utilizar este guía para montar la solución con
cualquier otra distribución de Linux (o incluso de BSD), aunque modificando cualquier otra distribución de Linux (o incluso de BSD), aunque modificando
ciertas instrucciones para ajustarse a los estándares y herramientas disponibles ciertas instrucciones para ajustarse a los estándares y herramientas disponibles
en cada distribución (e.g.\ si quisiera instalarlo en un servidor de Fedora, en cada distribución (e.g.\ si quisiera instalarlo en un servidor de Fedora,
utilizaría el comando {\tt dnf}, mientras que en un servidor Ubuntu utilizaría utilizaría el comando {\tt dnf}, mientras que en un servidor Ubuntu utilizaría
{\tt apt}). {\tt apt}).
En nuestro caso, los criterios para la selección de una distribución son los En este caso, los criterios para la selección de una distribución son los
siguientes: siguientes:
\begin{itemize} \begin{itemize}
@ -242,10 +240,10 @@ siguientes:
se encuentra, es más probable que otra persona con el mismo entorno (o se encuentra, es más probable que otra persona con el mismo entorno (o
similar) lo haya encontrado también y hayan publicado una solución. similar) lo haya encontrado también y hayan publicado una solución.
\item {\bf Estable:} Nuestra solución ha de ser algo que el administrador de \item {\bf Estable:} Nuestra solución ha de ser algo que el administrador de
la red puede instalar y luego mantener la más mínima interacción. Luego la red puede instalar y luego mantener con la más mínima interacción.
entonces no son buenas las distribuciones que tengan muchas Luego entonces no son buenas las distribuciones que tengan muchas
actualizaciones, poco probadas, o propensas a romper el sistema. actualizaciones, poco probadas, o propensas a romper el sistema.
\item {\bf Soporte amplio de plataformas:} Es mejor que nuestra solución se \item {\bf Soporte amplio de plataformas:} Es mejor que la solución se
pueda instalar en casi cualquier ordenador con las capacidades pueda instalar en casi cualquier ordenador con las capacidades
expresadas en el apartado anterior. Y hoy en día se hayan muchos expresadas en el apartado anterior. Y hoy en día se hayan muchos
ordenadores de arquitecturas distintas a la conocida x86 y x86\_64; la ordenadores de arquitecturas distintas a la conocida x86 y x86\_64; la
@ -253,23 +251,23 @@ siguientes:
por muchas arquitecturas contribuiría a la universalidad de la solución. por muchas arquitecturas contribuiría a la universalidad de la solución.
\item {\bf Minimalista:} No ha de ocupar mucho espacio de disco/memoria, ni \item {\bf Minimalista:} No ha de ocupar mucho espacio de disco/memoria, ni
tampoco utilizar demasiados recursos. En primer lugar, porque así tampoco utilizar demasiados recursos. En primer lugar, porque así
facilita que se pueda instalar nuestra solución en ordenadores más facilita que se pueda instalar la solución en ordenadores más
viejos o de pocos recursos. En segundo lugar, porque este dispositivo viejos o de pocos recursos. En segundo lugar, porque este dispositivo
sólo hará una cosa, y es mejor reservar recursos para eso en vez de sólo hará una cosa, y es mejor reservar recursos para eso en vez de
añadir más componentes a un sistema complejo que puede causar fallos añadir más componentes a un sistema complejo que puede causar fallos
inesperados e innecesarios. inesperados e innecesarios.
\item {\bf Utilizada en servidores:} Realmente la solución que proponemos es \item {\bf Utilizada en servidores:} Realmente la solución que se propone es
un servidor, específicamente un servidor de DNS con algunos mecanismos un servidor, específicamente un servidor de DNS con algunos mecanismos
de filtrado. La distribución que usemos ha de ser conocida por ser de filtrado. La distribución que se usa ha de ser conocida por ser
utilizada en servidores. Esto también ayudará a la hora de evaluar los utilizada en servidores. Esto también ayudará a la hora de evaluar los
criterios anteriores, ya que las distribuciones ampliamente utilizadas criterios anteriores, ya que las distribuciones ampliamente utilizadas
en servidores suelen cumplir también aquellos criterios. en servidores suelen cumplir también aquellos criterios.
\end{itemize} \end{itemize}
Para simplificar, en cumplimiento con el primer criterio nos centraremos Para simplificar, en cumplimiento con el primer criterio las opciones se
solamente en las distribuciones de Linux. Esto se debe a que, de los demás limitarán solamente a las distribuciones de Linux. Esto se debe a que, de los
sistemas operativos basados en UNIX (e.g.\ BSD) no hay un uso tan extenso, y demás sistemas operativos basados en UNIX (e.g.\ BSD) no hay un uso tan extenso,
realmente forman una parte mínima del mercado, aunque tengan especialidad y realmente forman una parte mínima del mercado, aunque tengan especialidad
(algunos) en servidores (\cite{srv-market-share}). (algunos) en servidores (\cite{srv-market-share}).
Entre las distribuciones de Linux, los que más se destacan son los siguientes: Entre las distribuciones de Linux, los que más se destacan son los siguientes:
@ -282,17 +280,18 @@ Entre las distribuciones de Linux, los que más se destacan son los siguientes:
\item Fedora Server \item Fedora Server
\end{itemize} \end{itemize}
De todas estas opciones, la que más se ajusta a nuestros criterios viene a ser De todas estas opciones, la que más se ajusta a los criterios de este proyecto
Debian GNU/Linux. Aunque otras opciones, como Ubuntu Server o CentOS son más viene a ser Debian GNU/Linux. Aunque otras opciones, como Ubuntu Server o CentOS
corporativas, y Ubuntu también siendo muy conocida, Debian nos trae estabilidad, son más corporativas, y Ubuntu también siendo muy conocida, Debian proporciona
pero sobre todo un soporte amplio de plataformas -- soporte oficial para diez estabilidad, pero sobre todo un soporte amplio de plataformas -- soporte oficial
arquitecturas, y no oficial para otras diez (\cite{debian-archs}) --, además de para diez arquitecturas, y no oficial para otras diez (\cite{debian-archs}) --,
ser una distribución que permite una instalación mínima (particularmente sin además de ser una distribución que permite una instalación mínima
entorno gráfico). Por este motivo, avanzamos utilizando Debian GNU/Linux. Dicho (particularmente sin entorno gráfico). Por este motivo, se continuará utilizando
esto, Debian en sí no tiene mucha documentación acerca de su instalación en Debian GNU/Linux. Dicho esto, Debian en sí no tiene mucha documentación acerca
dispositivos ARM (como lo es nuestra placa Rock64) y por lo tanto seleccionamos de su instalación en dispositivos ARM (como lo es la placa Rock64) y por lo
un derivado de Debian GNU/Linux que se denomina Armbian, que distribuye lo que tanto es necesario seleccionar un derivado de Debian GNU/Linux que se denomina
son básicamente imágenes de Debian especializadas para distintas placas. Armbian, que distribuye lo que son básicamente imágenes de Debian especializadas
para distintas placas.
En cuanto a los programas que se precisan, haría falta un programa para En cuanto a los programas que se precisan, haría falta un programa para
gestionar las peticiones DNS y redirigirlas, otro para recibir las peticiones y gestionar las peticiones DNS y redirigirlas, otro para recibir las peticiones y
@ -300,40 +299,40 @@ responder con una página de aviso, además de disparar un mecanismo para avisar
al administrador de la red acerca del intento de acceso. al administrador de la red acerca del intento de acceso.
Para la gestión de peticiones DNS existen muchos programas alternativos a Para la gestión de peticiones DNS existen muchos programas alternativos a
nuestra disposición, como podrían ser PowerDNS, MaraDNS, NSD, KnotDNS, y Bind9. disposición, como podrían ser PowerDNS, MaraDNS, NSD, KnotDNS, y Bind9.
Aquí hay una variedad muy amplia de opciones, y lo que nosotros precisamos es Aquí hay una variedad muy amplia de opciones, y lo que se precisa para esta
realmente muy sencillo. La única funcionalidad que nos hace falta es redirigir solución es realmente muy sencillo. La única funcionalidad que hace falta es
ciertas direcciones DNS al mismo servidor con una página estándar, y que las redirigir ciertas direcciones DNS al mismo servidor con una página estándar, y
demás peticiones sean adelantadas a un servidor de DNS normal como la de Google, que las demás peticiones sean adelantadas a un servidor de DNS normal como la
con dirección {\tt 8.8.8.8}. Por este motivo seleccionamos la más familiar y de Google, con dirección {\tt 8.8.8.8}. Por este motivo se seleccionará la más
sencillo, siendo Bind9, también denominado {\it Named}. Está presente en todas familiar y sencillo, siendo Bind9, también denominado {\it Named}. Está
las distribuciones más conocidas de Linux bajo el nombre de {\it bind}, {\it presente en todas las distribuciones más conocidas de Linux bajo el nombre de
bind9}, o {\it named}. {\it bind}, {\it bind9}, o {\it named}.
También nos hace falta tener un recurso que contenga una lista de páginas También hace falta tener un recurso que contenga una lista de páginas
prohibidas que se vaya actualizando, y que nosotros opdamos ir descargando y prohibidas que se vaya actualizando, y que se pueda ir descargando y
actualizando de manera sistemática y frecuente. Esto es necesario ya que siempre actualizando de manera sistemática y frecuente. Esto es necesario ya que
pueden haber nuevos dominios que queramos bloquear, y no es posible mantener una siempre pueden haber nuevos dominios que se quieren bloquear, y no es posible
lista estática de este género. En esto podemos hacer uso de las listas negras de mantener una lista estática de este género. En esto se puede hacer uso de las
la Universidad de Toulouse (\cite{blacklists}), que contiene varias categorías listas negras de la Universidad de Toulouse (\cite{blacklists}), que contiene
de dominios que se pueden bloquear, entre ellas las categorías que nos interesan varias categorías de dominios que se pueden bloquear, entre ellas las
serían las de <<adult>>, <<lingerie>>, <<mixed\_adult>>, y categorías que son de interés serían las de <<adult>>, <<lingerie>>,
<<sexual\_education>>, además de otras categorías que podrían ser de interés al <<mixed\_adult>>, y <<sexual\_education>>, además de otras categorías que
usuario (e.g.\ <<agressif>>). podrían ser de interés al usuario (e.g.\ <<agressif>>).
Entre los programas de servidores HTTP existen dos candidatos principales: Nginx Entre los programas de servidores HTTP existen dos candidatos principales: Nginx
y Apache. Aunque si quisiésemos instalar nuestra solución en una máquina de y Apache. Aunque si alguien quisiera instalar esta solución en una máquina de
{\it Microsoft Windows} se podría contemplar {\it Microsoft Internet Information {\it Microsoft Windows} se podría contemplar {\it Microsoft Internet Information
Services} (IIS), pero esta opción no esta disponible en Debian GNU/Linux -- o Services} (IIS), pero esta opción no esta disponible en Debian GNU/Linux -- o
realmente cualquier sistema operativo que no sea {\it Microsoft Windows}. Para realmente cualquier sistema operativo que no sea {\it Microsoft Windows}. Para
lo poco que hará nuestro servidor HTTP local, tanto Nginx como Apache podrán lo poco que hará el servidor HTTP local, tanto Nginx como Apache podrán
cumplir con los requisitos: servir páginas HTML y pasar peticiones (i.e.\ {\it cumplir con los requisitos: servir páginas HTML y pasar peticiones (i.e.\ {\it
requests}) HTTP a un {\it script} para gestionarla; así que la elección es requests}) HTTP a un {\it script} para gestionarla; así que la elección es
arbitraria. Es verdad que, en cuestión de gestión de contenidos estáticos, Nginx arbitraria. Es verdad que, en cuestión de gestión de contenidos estáticos, Nginx
tiene una ventaja sobre Apache, pero en cuanto a la gestión de contenidos tiene una ventaja sobre Apache, pero en cuanto a la gestión de contenidos
dinámicos (i.e.\ páginas dinámicas que se gestionan a partir de {\it scripts}) dinámicos (i.e.\ páginas dinámicas que se gestionan a partir de {\it scripts})
apenas hay diferencia entre las dos opciones (\cite{nginx-vs-apache}). apenas hay diferencia entre las dos opciones (\cite{nginx-vs-apache}).
Escogeremos a Nginx simplemente por el criterio de mayor conocimiento y Se escoge a Nginx simplemente por el criterio de mayor conocimiento y
experiencia con su uso y administración. experiencia con su uso y administración.
\begin{figure}[h] \begin{figure}[h]
@ -344,27 +343,27 @@ experiencia con su uso y administración.
\label{fig:ss-lang-stats} \label{fig:ss-lang-stats}
\end{figure} \end{figure}
Finalmente, precisamos un lenguaje de programación por el cual podemos enviar un Finalmente, se precisa un lenguaje de programación por el cual se podría enviar
correo al administrador de la red con la información pertinente del intento de un correo al administrador de la red con la información pertinente del intento
acceso a un sitio web prohibido (i.e.\ pornográfico). Para esto existen varias de acceso a un sitio web prohibido (i.e.\ pornográfico). Para esto existen
alternativas hoy en día, las principales siendo PHP, Ruby, Python, y JavaScript varias alternativas hoy en día, las principales siendo PHP, Ruby, Python, y
(por medio de NodeJS). De estas opciones la más utilizada en servidores, sin JavaScript (por medio de NodeJS). De estas opciones la más utilizada en
competición alguna -- ocupando un 77,5\% del mercado -- es PHP (figura servidores, sin competición alguna -- ocupando un 77,5\% del mercado -- es PHP
\ref{fig:ss-lang-stats}). Es muy fácil de incorporar a un servidor HTTP, la (figura \ref{fig:ss-lang-stats}). Es muy fácil de incorporar a un servidor HTTP,
mayoría (como Nginx) tienen formas de incorporarlo como un módulo, y otros la mayoría (como Nginx) tienen formas de incorporarlo como un módulo, y otros
servidores lo tienen directamente incorporado (como el caso de Apache). Tiene servidores lo tienen directamente incorporado (como el caso de Apache). Tiene
también un interprete ligero, y es muy estable. Por estos motivos, el lenguaje también un interprete ligero, y es muy estable. Por estos motivos, el lenguaje
que utilizaremos será PHP. que se utilizará será PHP.
Con el lenguaje de programación PHP existen varios métodos de enviar correos, y Con el lenguaje de programación PHP existen varios métodos de enviar correos, y
aunque existe la función por defecto de PHP, {\tt mail()}, no queremos aunque existe la función por defecto de PHP, {\tt mail()}, no sirve utilizarlo
utilizarlo ya que es demasiado simple y no soporta el protocolo SMTP, que sería para esta solución, ya que es demasiado simple y no soporta el protocolo SMTP,
útil para enviar correos a una dirección personal sin que aparecieran como {\it que sería útil para enviar correos a una dirección personal sin que aparecieran
spam}. Lo que quiere decir que tendremos que utilizar un módulo de terceros para como {\it spam}. Lo que quiere decir que habría que utilizar un módulo de
gestionar el envío de correos. Para esto conviene un módulo que esté disponible terceros para gestionar el envío de correos. Para esto conviene un módulo que
y de fácil instalación en nuestro sistema. En esto la opción más conveniente esté disponible y de fácil instalación en el sistema. En esto la opción más
sería {\it PHPMailer}. Aunque {\it Symfony Mailer} sería otra opción que se conveniente sería {\it PHPMailer}. Aunque {\it Symfony Mailer} sería otra opción
utiliza mucho con PHP, no esta disponible en los repositorios de Debian que se utiliza mucho con PHP, no esta disponible en los repositorios de Debian
GNU/Linux, como PHPMailer, y por lo tanto sería más difícil de instalar y GNU/Linux, como PHPMailer, y por lo tanto sería más difícil de instalar y
actualizar, sobre todo el proceso de una actualización automática. actualizar, sobre todo el proceso de una actualización automática.
(\cite{mail-methods}; \cite{debian-pkgs}) (\cite{mail-methods}; \cite{debian-pkgs})
@ -379,7 +378,7 @@ actualizar, sobre todo el proceso de una actualización automática.
\end{figure} \end{figure}
Nuestra solución consiste en tener un servidor que sirve de {\em filtro} para Nuestra solución consiste en tener un servidor que sirve de {\em filtro} para
todas las peticiones DNS de nuestra red local. Generalmente se puede dividir en todas las peticiones DNS de la red local. Generalmente se puede dividir en
dos partes esenciales: dos partes esenciales:
\begin{itemize} \begin{itemize}
@ -390,20 +389,20 @@ dos partes esenciales:
conectarse al dominio prohibido, y qué dominio ha sido. conectarse al dominio prohibido, y qué dominio ha sido.
\end{itemize} \end{itemize}
Como visualización gráfica, podemos fijarnos en la figura \ref{fig:network-map}, Como visualización gráfica, se fijar en la figura \ref{fig:network-map}, que
que muestra una distribución básica de la red. El servicio DHCP de nuestra red muestra una distribución básica de la red. El servicio DHCP de la red ha de
ha de tener configurado a la dirección IP de nuestro servidor {\it Angelus tener configurado a la dirección IP del servidor {\it Angelus Custos}
Custos} como servidor DNS. Esto generalmente se encuentra dentro de la como servidor DNS. Esto generalmente se encuentra dentro de la configuración del
configuración del {\it router}, que suele encargarse en el mismo dispositivo de {\it router}, que suele encargarse en el mismo dispositivo de las tareas de
las tareas de servidor DNS, DHCP, {\it switch}, y enrutador. servidor DNS, DHCP, {\it switch}, y enrutador.
Cada vez que un cliente de nuestra red quiera acceder a un servidor por su Cada vez que un cliente de la red quiera acceder a un servidor por su
nombre de dominio (e.g.\ example.com) pedirá a nuestro servidor la resolución de nombre de dominio (e.g.\ example.com) pedirá al servidor la resolución de
aquel nombre a una dirección IP. Si el dominio no se encuentra dentro de la aquel nombre a una dirección IP. Si el dominio no se encuentra dentro de la
lista negra de sitios prohibidos se adelantará la petición a un servidor DNS lista negra de sitios prohibidos se adelantará la petición a un servidor DNS
externo (e.g.\ Google en la dirección {\tt 8.8.8.8}) y seguirá la ruta normal. externo (e.g.\ Google en la dirección {\tt 8.8.8.8}) y seguirá la ruta normal.
Mas en el caso de que estuviera el nombre en la lista negra, nuestro servidor Mas en el caso de que estuviera el nombre en la lista negra, el servidor
devolvería su propia dirección IP para que así se conecte el cliente a nuestro devolvería su propia dirección IP para que así se conecte el cliente a el
{\it script} que avisará al administrador y bloqueará el contenido, mostrando {\it script} que avisará al administrador y bloqueará el contenido, mostrando
nada más que una página estática con un texto predeterminado, avisando de que la nada más que una página estática con un texto predeterminado, avisando de que la
página está bloqueada y el administrador ha sido avisado. página está bloqueada y el administrador ha sido avisado.
@ -411,18 +410,18 @@ página está bloqueada y el administrador ha sido avisado.
\section{Pruebas y Despliegue} \section{Pruebas y Despliegue}
\subsection{Plan de Pruebas} \subsection{Plan de Pruebas}
Una vez montada la solución, hemos de probar que funciona correctamente. Sería Una vez montada la solución, se ha de probar que funciona correctamente. Sería
también conveniente hacerlo sin necesidad de visitar ninguna página {\it web} también conveniente hacerlo sin necesidad de visitar ninguna página {\it web}
prohibida. prohibida.
Lo primero sería verificar que se ha configurado correctamente nuestro servidor Lo primero sería verificar que se ha configurado correctamente el servidor
DHCP (normalmente en el propio {\it router}) para asignar nuestra solución como DHCP (normalmente en el propio {\it router}) para asignar la solución como
servidor DNS de la red. Para verificar esto nos conectamos a la red por medio de servidor DNS de la red. Para verificar esto se ha de conectar a la red por medio
un ordenador ajeno y vemos cuál es el servidor DNS que nos ha dado. de un ordenador ajeno y ver cuál es el servidor DNS que haya sido proporcionado.
Si nuestra máquina de pruebas es también un sistema de Debian GNU/Linux, Si la máquina de pruebas es también un sistema de Debian GNU/Linux, entonces se
entonces podemos asegurarnos de que hemos pedido información del servidor DHCP puede asegurar que la información ha venido del servidor DHCP utilizando el
utilizando el comando siguiente: comando siguiente:
\begin{minted}[ \begin{minted}[
frame=lines, frame=lines,
@ -446,9 +445,10 @@ port 67 (xid=0x4dcd9939)
DHCPREQUEST for 192.168.0.108 on enp0s3 to 255.255.255.255 DHCPREQUEST for 192.168.0.108 on enp0s3 to 255.255.255.255
port 67 (xid=0x606bc4b3) port 67 (xid=0x606bc4b3)
DHCPACK of 192.168.0.104 from 192.168.0.1 (xid=0x3999cd4d) DHCPACK of 192.168.0.104 from 192.168.0.1 (xid=0x3999cd4d)
...
\end{minted} \end{minted}
Luego podemos verificar cuál es la dirección IP del servidor DNS configurado Luego se puede verificar cuál es la dirección IP del servidor DNS configurado
mirando el archivo {\tt /etc/resolv.conf}: mirando el archivo {\tt /etc/resolv.conf}:
\begin{minted}[ \begin{minted}[
@ -461,16 +461,16 @@ mirando el archivo {\tt /etc/resolv.conf}:
nameserver 192.168.1.135 nameserver 192.168.1.135
\end{minted} \end{minted}
Si la dirección IP que muestra coincide con aquella que corresponde a nuestro Si la dirección IP que muestra coincide con aquella que corresponde al servidor
servidor entonces sabemos que el servicio de DHCP se ha montado correctamente. entonces se sabe que el servicio de DHCP se ha montado correctamente.
Ahora, para asegurarnos de que se ha configurado correctamente nuestro servidor Ahora, para asegurar de que se ha configurado correctamente el servidor
también como filtro de DNS, tan sólo hace falta correr el comando {\tt también como filtro de DNS, tan sólo hace falta correr el comando {\tt
nslookup}, que se puede encontrar en el paquete de Debian denominado {\tt nslookup}, que se puede encontrar en el paquete de Debian denominado {\tt
bind9-dnsutils}. Con esto verificamos cuál sería la respuesta si alguien de la bind9-dnsutils}. Con esto se verifica cuál sería la respuesta si alguien de la
red quisiera acceder a una de las páginas prohibidas en nuestra red. Debería de red quisiera acceder a una de las páginas prohibidas en la red. Debería de
devolver una respuesta de la forma siguiente, asumiendo que la dirección IP de devolver una respuesta de la forma siguiente, asumiendo que la dirección IP del
nuestro servidor es {\tt 192.168.1.135}: servidor es {\tt 192.168.1.135}:
\begin{minted}[ \begin{minted}[
frame=lines, frame=lines,
@ -487,15 +487,15 @@ Name: porn.com
Address: 192.168.1.135 Address: 192.168.1.135
\end{minted} \end{minted}
Si la salida sale así, hemos podido verificar el funcionamiento correcto de Si la salida sale así, se ha podido verificar el funcionamiento correcto de
nuestra solución, y sin conectarnos siquiera a un servidor que provee el la solución, y sin conectar siquiera a un servidor que provee el contenido
contenido bloqueado. bloqueado.
\subsection{Manuales Técnicos y de Usuario} \subsection{Manuales Técnicos y de Usuario}
\subsection{Plan de Despliegue} \subsection{Plan de Despliegue}
Para desplegar nuestra solución haría falta seguir los siguientes pasos: Para desplegar la solución haría falta seguir los siguientes pasos:
\begin{enumerate}[i.] \begin{enumerate}[i.]
\item Instalar el sistema operativo (Armbian). \item Instalar el sistema operativo (Armbian).
@ -507,10 +507,10 @@ Para desplegar nuestra solución haría falta seguir los siguientes pasos:
\subsubsection{Instalación de Armbian} \subsubsection{Instalación de Armbian}
Para la instalación de Debian GNU/Linux en nuestro servidor, como utilizamos la Para la instalación de Debian GNU/Linux en el servidor, como se utiliza la placa
placa de Rock64 es tan fácil como preparar la tarjeta SD con una imagen de de Rock64 es tan fácil como preparar la tarjeta SD con una imagen de Armbian,
Armbian, que se puede descargar en su sitio web en la página que se puede descargar en su sitio web en la página dedicada a la placa
dedicada a la placa Rock64.\footnotemark{} Una vez descargada lo podemos descomprimir e instalar Rock64.\footnotemark{} Una vez descargada se puede descomprimir e instalar
utilizando los comandos siguientes, asumiendo que en tu ordenador el dispositivo utilizando los comandos siguientes, asumiendo que en tu ordenador el dispositivo
de la tarjeta SD corresponde al fichero especial {\tt /dev/mmcblk1}: de la tarjeta SD corresponde al fichero especial {\tt /dev/mmcblk1}:
@ -527,15 +527,15 @@ de la tarjeta SD corresponde al fichero especial {\tt /dev/mmcblk1}:
of=/dev/mmcblk1 bs=1M of=/dev/mmcblk1 bs=1M
\end{minted} \end{minted}
Al acabar este paso ya podemos insertar la tarjeta SD en nuestro Rock64 y Al acabar este paso ya se puede insertar la tarjeta SD en el Rock64 y
empezar a configurar la red. empezar a configurar la red.
\subsubsection{Configuración de Red} \subsubsection{Configuración de Red}
Cuando hayamos inicializado nuestro servidor y estemos dentro, lo primero que Cuando se haya inicializado el servidor y conectado, lo primero que se
queremos hacer es configurar la red para utilizar una dirección estática. Esto quiere hacer es configurar la red para utilizar una dirección estática. Esto se
se hace manipulando el fichero {\tt /etc/network/interfaces}. Ahí nos aparecerá hace manipulando el fichero {\tt /etc/network/interfaces}. Allí aparecerá algo
algo parecido a lo siguiente: parecido a lo siguiente:
\begin{minted}[ \begin{minted}[
frame=lines, frame=lines,
@ -549,9 +549,9 @@ iface eth0 inet dhcp
\end{minted} \end{minted}
El nombre de la interfaz (en este caso, {\tt eth0}) puede ser distinto, pero se El nombre de la interfaz (en este caso, {\tt eth0}) puede ser distinto, pero se
refiere a la interfaz de {\it ethernet} (por cable). Queremos cambiarlo para refiere a la interfaz de {\it ethernet} (por cable). Es necesario cambiarlo para
establecer explícitamente una dirección IP estática que siempre lo va a establecer explícitamente una dirección IP estática que siempre lo va a
utilizar. Para esto cambiamos estas líneas para ser de la forma siguiente: utilizar. Para esto se cambian estas líneas para ser de la forma siguiente:
\begin{minted}[ \begin{minted}[
frame=lines, frame=lines,
@ -566,17 +566,17 @@ iface eth0 inet static
gateway 192.168.1.1 gateway 192.168.1.1
\end{minted} \end{minted}
Esto hará que nuestro servidor tome la dirección IP {\tt 192.168.1.2} de forma Esto hará que el servidor tome la dirección IP {\tt 192.168.1.2} de forma
estática, y define el acceso a internet a través de la IP {\tt 192.168.1.1} estática, y define el acceso a internet a través de la IP {\tt 192.168.1.1}
(Ésta es la dirección IP del {\it router}, se supone. Si en aquella red el {\it (Ésta es la dirección IP del {\it router}, se supone. Si en aquella red el {\it
router} tiene otra dirección, utilizar aquella). router} tiene otra dirección, utilizar aquella).
\subsubsection{Configuración e Instalación del Servicio DNS} \subsubsection{Configuración e Instalación del Servicio DNS}
Como mencionamos en un apartado anterior, para esta solución vamos a implementar Como se mencionó en un apartado anterior, para esta solución se va a implementar
el servicio de resolución DNS Bind9 (también conocido como Named). Esto se tiene el servicio de resolución DNS Bind9 (también conocido como Named). Esto se tiene
que instalar en el servidor por medio del administrador de paquetes {\tt apt}, que instalar en el servidor por medio del administrador de paquetes {\tt apt},
que instalará el paquete que precisamos además de todas sus dependencias: que instalará el paquete que se precisa además de todas sus dependencias:
\begin{minted}[ \begin{minted}[
frame=lines, frame=lines,
@ -587,11 +587,11 @@ que instalará el paquete que precisamos además de todas sus dependencias:
# apt install bind9 # apt install bind9
\end{minted} \end{minted}
Como estamos utilizando un sistema basado en Debian, el servicio se inicializará Como se está utilizando utilizando un sistema basado en Debian, el servicio se
solo, con la configuración que viene por defecto. inicializará solo, con la configuración que viene por defecto.
Para la configuración de Bind9, nos interesa incluir desde nuestro archivo de Para la configuración de Bind9, interesa incluir desde el archivo de
configuración un archivo que contendrá todos los dominios que nos interesan configuración un archivo que contendrá todos los dominios que sean de interés
bloquear. El archivo de configuración ha de ser como lo siguiente bloquear. El archivo de configuración ha de ser como lo siguiente
(\cite{bind-sinkhole}): (\cite{bind-sinkhole}):
@ -610,10 +610,10 @@ zone "example.local" {
}; };
\end{minted} \end{minted}
La línea que más nos interesa es la línea de {\tt include}. Esta línea incluye La línea de más interés es la línea de {\tt include}. Esta línea incluye el
el archivo que crearemos con todos los dominios que queremos bloquear. archivo que se creará más tarde con todos los dominios que se quieren bloquear.
En aquel archivo queremos tener una lista actualizada de todos los dominios en En aquel archivo se quiere tener una lista actualizada de todos los dominios en
la lista negra. Para esto haría falta crear un {\it script} capaz de actualizar la lista negra. Para esto haría falta crear un {\it script} capaz de actualizar
esta lista, haciendo lo siguiente: esta lista, haciendo lo siguiente:
@ -627,11 +627,11 @@ 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 Una vez creado el {\it script}, será de interés correrlo de forma periódica.
periódica. Para esto lo más útil es un {\it cronjob}. Como es poco probable que Para esto lo más útil es un {\it cronjob}. Como es poco probable que se
se actualice con frecuencia esta lista, podemos permitirnos actualizarla una vez actualice con frecuencia esta lista, se puede permitir actualizarla una vez al
al mes. Para hacer esto, lo primero que hacemos es mover el {\it script} al mes. Para hacer esto, lo primero que se tiene que hacer es mover el {\it script}
directorio {\tt /usr/local/bin} con permisos de ejecución (asumimos que se al directorio {\tt /usr/local/bin} con permisos de ejecución (se asume que se
denomina {\tt update-blacklist.sh}): denomina {\tt update-blacklist.sh}):
\begin{minted}[ \begin{minted}[
@ -643,7 +643,7 @@ denomina {\tt update-blacklist.sh}):
# install -m 755 ./update-blacklist.sh /usr/local/bin # install -m 755 ./update-blacklist.sh /usr/local/bin
\end{minted} \end{minted}
Una vez instalado, podemos configurar el {\it crontjob} con el comando {\tt Una vez instalado, se puede 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: crontab -e}, y en el archivo añadir una línea que sea de la manera siguiente:
\begin{minted}[ \begin{minted}[
@ -655,9 +655,9 @@ crontab -e}, y en el archivo añadir una línea que sea de la manera siguiente:
0 0 1 * * /usr/local/bin/update-blacklist.sh 0 0 1 * * /usr/local/bin/update-blacklist.sh
\end{minted} \end{minted}
Esta línea lo que hace es correr nuestro {\it script} a la media noche (00:00) Esta línea lo que hace es correr el {\it script} a la media noche (00:00) cada
cada día 1 de cualquier mes y cualquier día de la semana (estos últimos día 1 de cualquier mes y cualquier día de la semana (estos últimos parámetros se
parámetros se especifican utilizando el símbolo {\tt *}). 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
@ -675,7 +675,7 @@ blockeddomains.db";};
Se hace notar que esta línea hace referencia a un archivo con nombre de Se hace notar que esta línea hace referencia a un archivo con nombre de
fichero {\tt blockeddomains.db}. Este fichero es el que redireccionará el fichero {\tt blockeddomains.db}. Este fichero es el que redireccionará el
tráfico de nuestra red a la dirección IP de nuestro servidor. Su contenido sería tráfico de la red a la dirección IP del servidor. Su contenido sería
de la manera siguiente (\cite{bind-sinkhole}): de la manera siguiente (\cite{bind-sinkhole}):
\begin{minted}[ \begin{minted}[
@ -709,11 +709,11 @@ $TTL 3600
\label{fig:router-dns} \label{fig:router-dns}
\end{figure} \end{figure}
Una vez configurado el servicio DNS en nuestro servidor, podemos ya cambiar la Una vez configurado el servicio DNS en el servidor, se puede ya cambiar la
configuración DHCP de nuestra red para especificar el servidor DNS por defecto. configuración DHCP de la red para especificar el servidor DNS por defecto.
Para hacer esto, en el panel de control del {\it router} se puede encontrar esta 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 del
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: Tan sólo es necesario reinicar el servicio de la forma siguiente:
@ -728,7 +728,7 @@ Tan sólo es necesario reinicar el servicio de la forma siguiente:
\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 La configuración del servicio HTTP requiere, en primer lugar, la
instalación del {\it software} requerido, siendo este Nginx, pero también 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, 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: enviándolos a un CGI que lo interpretará con el intérprete de PHP:
@ -742,14 +742,14 @@ enviándolos a un CGI que lo interpretará con el intérprete de PHP:
# apt install nginx php php-fpm # apt install nginx php php-fpm
\end{minted} \end{minted}
Al instalar estos paquetes, encontraremos, igual que con Bind9, que los Al instalar estos paquetes, se encontrará, igual que con Bind9, que los
servicios de Nginx y PHP-FPM ya están en funcionamiento. Queremos hacer una servicios de Nginx y PHP-FPM ya están en funcionamiento. Hay que hacer una
modificación del archivo por defecto de configuración; el sitio {\it default} 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 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 archivo sirve generalmente como está escrito, ya que toda petición HTTP que
recibe el servidor lo interpretará esta configuración, y como tiene 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. responder a cualquier petición a cualquier dominio bloqueado, funciona para las
Sólo hay tres cosas importantes que cambiar: intenciones propuestas. Sólo hay tres cosas importantes que cambiar:
\begin{enumerate}[i] \begin{enumerate}[i]
\item Eliminar la línea que contiene la directiva {\tt server\_name}. \item Eliminar la línea que contiene la directiva {\tt server\_name}.
@ -777,8 +777,8 @@ location ~ \.php$ {
} }
\end{minted} \end{minted}
Una vez que esté bien configurado, podemos reiniciar el servicio con el comando Una vez que esté bien configurado, se puede reiniciar el servicio con el
siguiente: comando siguiente:
\begin{minted}[ \begin{minted}[
frame=lines, frame=lines,
@ -789,17 +789,17 @@ siguiente:
# systemctl reload nginx # systemctl reload nginx
\end{minted} \end{minted}
Una vez configurado podemos verificar que funciona correctamente corriendo un Una vez configurado se puede verificar que funciona correctamente corriendo un
comando {\tt curl} sobre la IP de nuestro servidor. Si responde sin error un comando {\tt curl} sobre la IP del servidor. Si responde sin error un
código HTML entonces todo ha funcionado correctamente. código HTML entonces todo ha funcionado correctamente.
\subsubsection{Instalación de la Página PHP} \subsubsection{Instalación de la Página PHP}
Nuestra página PHP no sólo precisa el uso de PHP, sino adicionalmente la Nuestra página PHP no sólo precisa el uso de PHP, sino adicionalmente la
librería PHP denominada PHPMailer (como vimos en un apartado anterior). Para librería PHP denominada PHPMailer (como se ha visto en un apartado anterior).
esto lo primero necesario es instalar esta librería. Gracias a haber elegido una Para esto lo primero necesario es instalar esta librería. Gracias a haber
librería que se encuentra en los repositorios de Debian, esto será tan fácil elegido una librería que se encuentra en los repositorios de Debian, esto será
como un comando de {\tt apt}: tan fácil como un comando de {\tt apt}:
\begin{minted}[ \begin{minted}[
frame=lines, frame=lines,
@ -810,7 +810,7 @@ como un comando de {\tt apt}:
# apt install libphp-phpmailer # apt install libphp-phpmailer
\end{minted} \end{minted}
Al instalarse podemos encontrar los archivos correspondientes al código que nos Al instalarse se puede encontrar los archivos correspondientes al código que
hará falta en un directorio de sistema: hará falta en un directorio de sistema:
\begin{minted}[ \begin{minted}[
@ -822,13 +822,13 @@ hará falta en un directorio de sistema:
/usr/share/php/libphp-phpmailer/src/ /usr/share/php/libphp-phpmailer/src/
\end{minted} \end{minted}
Conociendo esta ruta, podemos seguir el tutorial de Mailtrap Conociendo esta ruta, se puede seguir el tutorial de Mailtrap
(\cite{phpmailer-tutorial}) para nuestro {\it script} de PHP. Haría falta (\cite{phpmailer-tutorial}) para el {\it script} de PHP. Haría falta
escribirlo en un archivo {\tt index.php} en el directorio {\tt /var/www/html}. escribirlo en un archivo {\tt index.php} en el directorio {\tt /var/www/html}.
Se debería de configurar utilizando una cuenta y servicio SMTP ajeno. Se debería de configurar utilizando una cuenta y servicio SMTP ajeno.
Lo que más nos interesa en este {\it script} es escribir el contenido del Lo que más interesa en este {\it script} es escribir el contenido del correo, ya
correo, ya que debería de contener la siguiente información importante: que debería de contener la siguiente información importante:
\begin{itemize} \begin{itemize}
\item Qué dispositivo ha intentado conectarse. \item Qué dispositivo ha intentado conectarse.
@ -853,9 +853,9 @@ $mailbody = "Intento de acceso a página prohibida." .
"Fecha: " . date("l jS \of F Y h:i:s A"); "Fecha: " . date("l jS \of F Y h:i:s A");
\end{minted} \end{minted}
Una vez que tengamos hecho el {\it script} de PHP, hemos de borrar el archivo Una vez que se haya hecho el {\it script} de PHP, se ha de borrar el archivo
{\tt index.html} que viene por defecto en el directorio {\tt /var/www/html} para {\tt index.html} que viene por defecto en el directorio {\tt /var/www/html} para
que Nginx sepa utilizar nuestro archivo de PHP. que Nginx sepa utilizar el archivo de PHP.
\section{Conclusiones y Propuestas de Mejora} \section{Conclusiones y Propuestas de Mejora}