TFC: apply revision
Signed-off-by: Nicolás Ortega Froysa <nicolas@ortegas.org>
This commit is contained in:
parent
31c3d3f9a6
commit
324f48cfa1
Binary file not shown.
@ -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}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user