\documentclass[11pt,a4paper,titlepage]{article}
\usepackage[spanish]{babel}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{fancyhdr}
\pagestyle{fancy}

\fancyfoot[LO]{{\it Angelus Custos}\linebreak}
\fancyfoot[RO]{\includegraphics[width=0.2\linewidth]{imgs/CEU-Logo-CEP-web.png}}
\setlength{\headheight}{15pt}
\setlength{\footskip}{45pt}

\renewcommand{\familydefault}{\sfdefault}
\renewcommand{\baselinestretch}{1.5}

\title{Sistema de Protección Parental: Angelus Custos}
\author{
	Alumno: Nicolás A. Ortega Froysa \\
	Tutor: Indalecio García Mateos \\
	Centro: CEU San Pablo Andalucía \\
	Ciclo: Administración de Sistemas Informáticos en Red
}

\date{
	\today \\ \bigskip \bigskip
	\includegraphics[width=0.5\textwidth]{imgs/CEU-Logo-CEP-web.png}
}

\begin{document}
\maketitle

\tableofcontents
\pagebreak

\section{Introducción}

{\it Angelus Custos} (i.e.\ Ángel de la Guarda) es un proyecto para facilitar a
los padres la protección de la inocencia de sus hijos ante la degeneración de la
pornografía. Se trata de una solución que cualquier persona con un mínimo de
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
cristiano, para que ellos también puedan proteger a los suyos.

También optaremos, en este mismo espíritu colaborativo, por soluciones software
que sean libres y gratuitos, ya que el objetivo es proveer una solución para
personas particulares, y no un plan de negocio.

\section{Contexto}
\subsection{Situación Actual}

% SRC: https://thehill.com/changing-america/well-being/mental-health/3806794-most-teenagers-exposed-to-online-pornography-by-age-13-survey/

Vivimos en un mundo muy digitalizado donde los niños están expuestos a
pornografía desde una edad muy temprana. Aunque hay muchos 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 una
búsqueda completamente inocente o incluso por culpa de anuncios inapropiados.
Aunque diferentes organismos han intentado mitigar esta posibilidad con
soluciones como las {\em búsquedas seguras} en los buscadores, no ha sido
suficiente.

% SRC: https://edlatimore.com/best-porn-blocker/

A causa de esto se han creado muchas alternativas para bloquear pornografía en
entornos familiares, educativos, religiosos, etc. Estas alternativas han llegado
incluso a ser muy avanzados, pudiendo reconocer contenido pornográfico con
reconocimiento de imágenes, y enviando reportes a los responsables, que pueden
ser los padres o, en casos de adultos que quieren ayuda para librarse de su
adicción a la pornografía, un amigo o familiar que se responsabiliza. Muchos de
éstos han conseguido convertirlo en un negocio para poder así hacer este tipo de
mejoras y desarrollos a sus productos.

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
la salud de los menores de edad. Una parte puede ser la falta de información: es
un asunto que se habla poco debido a su naturaleza clandestina y pervertida.

% TODO: efectos negativos de la pornografía

Otra barrera que puede aparecer es también que estos productos/servicios suelen
funcionar en base a una suscripción mensual. Si fuera un producto que se compra
una sola vez entonces quizá habría más padres dispuestos a instalarlo en sus
casas para proteger a sus hijos. Pero al ser una suscripción, pone una barrera
innecesaria a la hora de facilitar a los padres este servicio tan necesario en
el mundo de hoy.

\subsection{Justificación}

Como explicamos anteriormente, es necesario una solución para protegernos -- a
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
comerciales y en base a una suscripción, que constituye una barrera para muchos
padres aunque sea tan sólo una inconveniencia. Por este motivo el objetivo de
este documento es explicar cómo montar y configurar un ordenador cualquiera para
servir de monitor y bloquear las páginas pornográficas, además de añadir otras
funcionalidades para mejor administrarlo. De este modo, siguiendo la filosofía
de compartir del {\em movimiento software libre}, se puede conseguir facilitar a
muchos el acceso a esta clase de soluciones o directamente en el caso de las
personas que tengan algún conocimiento técnico, o de manera indirecta con el
caso de alguien que se lo monta para sus familiares, amigos, y vecinos, o
incluso si una empresa lo quiere comercializar de una forma que no ponga sobre
los clientes un peso innecesario de suscripciones para poder protegerse a ellos
mismos y a sus familias.

\section{Planificación y Costes}
\subsection{Metodología}
\subsection{Fases del Proyecto}
\subsection{Planificación Temporal}
\subsection{Estimación de Costes}
\section{Desarrollo}
\subsection{Análisis de Requisitos}

Podemos dividir los requisitos de nuestro proyecto en dos categorías
principales: {\it hardware} y {\it software}.

\subsubsection{Requisitos Hardware}

En cuestión de requisitos {\it hardware}, será necesario un ordenador tan sólo
lo suficientemente potente como para responder a peticiones DNS en una red
local, responder a una petición a una página pornográfica con una página
personalizada del usuario, y enviar correos electrónicos para avisar al
responsable del dispositivo y de la red. Luego entonces, para una red normal, un
requisito mínimo para el dispositivo podría ser como a continuación:

\begin{itemize}
	\item Ancho de banda de red: % TODO
	\item Rendimiento de la CPU: % TODO
	\item Memoria: % TODO
	\item Almacenamiento: % TODO
\end{itemize}

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 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
{\it Pine64}. Lo importante para nuestros propósitos es que sea posible instalar
en él un sistema operativo basado en UNIX tal como sería una de las
distribuciones de BSD o Linux.

\subsubsection{Requisitos Software}

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
mencionaremos 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
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,
utilizaría el comando {\tt dnf}, mientras que en un servidor Ubuntu utilizaría
{\tt apt}).

En nuestro caso, los criterios para la selección de una distribución son los
siguientes:

\begin{itemize}
	\item {\bf Conocida:} Es importante que sea una distribución conocida y de
		uso amplio. Esto aumentará la probabilidad de que cualquier problema que
		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.
	\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
		entonces no son buenas las distribuciones que tengan muchas
		actualizaciones, poco probadas, o propensas a romper el sistema.
	\item {\bf Soporte amplio de plataformas:} Es mejor que nuestra solución se
		pueda instalar en casi cualquier ordenador con las capacidades
		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
		más popular de éstas siendo ARM. Una distribución que tenga un soporte
		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
		tampoco utilizar demasiados recursos. En primer lugar, porque así
		facilita que se pueda instalar nuestra solución en ordenadores más
		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
		añadir más componentes a un sistema complejo que puede causar fallos
		inesperados e innecesarios.
	\item {\bf Utilizada en servidores:} Realmente la solución que proponemos es
		un servidor, específicamente un servidor de DNS con algunos mecanismos
		de filtrado. La distribución que usemos ha de ser conocida por ser
		utilizada en servidores. Esto también ayudará a la hora de evaluar los
		criterios anteriores, ya que las distribuciones ampliamente utilizadas
		en servidores suelen cumplir también aquellos criterios.
\end{itemize}

Para simplificar, en cumplimiento con el primer criterio nos centraremos
solamente en las distribuciones de Linux. Esto se debe a que, de los demás
sistemas operativos basados en UNIX (e.g.\ BSD) no hay un uso tan extenso, y
realmente forman una parte mínima del mercado, aunque tengan especialidad
(algunos) en servidores.
% SRC: https://www.enterpriseappstoday.com/stats/linux-statistics.html

Entre las distribuciones de Linux, los que más se destacan son los siguientes:

\begin{itemize}
	\item Ubuntu Server
	\item Debian GNU/Linux
	\item OpenSUSE
	\item CentOS
	\item Fedora Server
\end{itemize}

De todas estas opciones, la que más se ajusta a nuestros criterios viene a ser
Debian GNU/Linux. Aunque otras opciones, como Ubuntu Server o CentOS son más
corporativas, y Ubuntu también siendo muy conocida, Debian nos trae estabilidad,
pero sobre todo un soporte amplio de plataformas -- soporte oficial para diez
arquitecturas, y no oficial para otras diez --, además de ser una distribución
que permite una instalación mínima (particularmente sin entorno gráfico). Por
este motivo, avanzamos utilizando Debian GNU/Linux. La versión actual estable es
Bullseye (11).
% SRC: https://wiki.debian.org/SupportedArchitectures

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
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.

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.
% TODO: finish

Entre los programas de servidores HTTP existen dos candidatos principales: Nginx
y Apache.
% TODO: finish

Finalmente, precisamos un lenguaje de programación por el cual podemos enviar un
correo al administrador de la red con la información pertinente.
% TODO: finish

% Software Dependencies:
%  - Bind9/Named [PowerDNS,MaraDNS,NSD,KnotDNS]
%    https://en.wikipedia.org/wiki/Comparison_of_DNS_server_software
%  - Nginx [Apache]
%    https://kinsta.com/blog/nginx-vs-apache/
%  - PHP [Ruby,Python]
%    - PHPMailer [mail() function, Symfony Mailer]
%      https://mailtrap.io/blog/php-email-sending/

\subsection{Diseño de Solución}
\section{Pruebas y Despliegue}
\subsection{Plan de Pruebas}
\subsection{Manuales Técnicos y de Usuario}
\subsection{Plan de Despliegue}
\section{Conclusiones y Propuestas de Mejora}
\section{Bibliografía}

\pagebreak

\section{Derechos de Autor y Licencia}

\noindent
Copyright \copyright\ \the\year\ Nicolás A. Ortega Froysa
<nicolas@ortegas.org> \\
\\
Este documento se distribuye bajo los términos y condiciones de la licencia
Creative Commons Attribution No Derivatives 4.0 International.

\end{document}
