diff --git a/2/ASO/assignments/final-project/web-system-naortega.lof b/2/ASO/assignments/final-project/web-system-naortega.lof index 4adc2ff..d5f157d 100644 --- a/2/ASO/assignments/final-project/web-system-naortega.lof +++ b/2/ASO/assignments/final-project/web-system-naortega.lof @@ -1,10 +1,10 @@ \babel@toc {spanish}{} \contentsline {figure}{\numberline {1}{\ignorespaces Mapa de intrenet.\relax }}{2}{figure.caption.4}% \contentsline {figure}{\numberline {2}{\ignorespaces Selección de {\it software} adicional.\relax }}{5}{figure.caption.7}% -\contentsline {figure}{\numberline {3}{\ignorespaces Proceso instalación de Active Directory.\relax }}{7}{figure.caption.8}% +\contentsline {figure}{\numberline {3}{\ignorespaces Proceso instalación de Active Directory.\relax }}{8}{figure.caption.8}% \contentsline {figure}{\numberline {4}{\ignorespaces Active Directory instalado.\relax }}{9}{figure.caption.9}% \contentsline {figure}{\numberline {5}{\ignorespaces Cambiar contraseña del usuario <>.\relax }}{9}{figure.caption.10}% \contentsline {figure}{\numberline {6}{\ignorespaces Habilitando la opción de crear una carpeta home el entrar.\relax }}{11}{figure.caption.11}% -\contentsline {figure}{\numberline {7}{\ignorespaces Página de Nginx por defecto.\relax }}{13}{figure.caption.12}% -\contentsline {figure}{\numberline {8}{\ignorespaces Instalación de MediaWiki.\relax }}{15}{figure.caption.13}% -\contentsline {figure}{\numberline {9}{\ignorespaces Página inicial de nuestro Wiki.\relax }}{16}{figure.caption.14}% +\contentsline {figure}{\numberline {7}{\ignorespaces Página de Nginx por defecto.\relax }}{14}{figure.caption.12}% +\contentsline {figure}{\numberline {8}{\ignorespaces Instalación de MediaWiki.\relax }}{18}{figure.caption.13}% +\contentsline {figure}{\numberline {9}{\ignorespaces Página inicial de nuestro Wiki.\relax }}{18}{figure.caption.14}% diff --git a/2/ASO/assignments/final-project/web-system-naortega.pdf b/2/ASO/assignments/final-project/web-system-naortega.pdf index 3429962..9bf05ca 100644 Binary files a/2/ASO/assignments/final-project/web-system-naortega.pdf and b/2/ASO/assignments/final-project/web-system-naortega.pdf differ diff --git a/2/ASO/assignments/final-project/web-system-naortega.tex b/2/ASO/assignments/final-project/web-system-naortega.tex index 9589d85..315e5b6 100644 --- a/2/ASO/assignments/final-project/web-system-naortega.tex +++ b/2/ASO/assignments/final-project/web-system-naortega.tex @@ -226,12 +226,6 @@ estos servicios directamente: # systemctl stop systemd-resolved.service \end{minted} -%Una vez acabado debemos de hacer que el archivo sea inmutable, ya que muchos -%servicios intentan modificar este fichero. Para eso corremos simplemente el -%comando {\tt chattr +i /etc/resolv.conf}. Una vez configurado ya podemos -%reiniciar el servicio de {\it networking} y veremos como hace uso de la -%configuración especificada. Esto lo hacemos del modo siguiente: - Ya cuando hayamos configurado esto, podemos reiniciar el servicio de {\it networking} y veremos como hace uso de la configuración especificada. Esto lo hacemos del modo siguiente: @@ -241,6 +235,33 @@ hacemos del modo siguiente: # ifup enp0s3 \end{minted} +Luego también queremos configurar, particularmente en el servidor de web que +estará conectado a {\it internet}, y será el más vulnerable a ataques. Para +esto, hemos de instalar y configurar el programa Firewalld. Usaremos este {\it +firewall} porque es uno de los más conocidos, y es usado (y mantenido) por la +empresa Red Hat. Para esto corremos el comando siguiente para instalar: + +\begin{minted}{console} +# apt install firewalld +\end{minted} + +Ya cuando se instala, estará activado e iniciado, y de hecho vendrá ya con +excepciones para SSH y DHCPv6-client (en la zona {\it public}). Como en nuestra +máquina de servidor web queremos tener abiertos los puertos para acceder a HTTP +y HTTPS, lo activaremos con el comando siguiente: + +\begin{minted}{console} +# firewall-cmd --permanent --zone=public --add-service=http +success +# firewall-cmd --permanent --zone=public --add-service=https +success +# firewall-cmd --reload +success +\end{minted} + +Al hacer esto, ya estará disponible nuestro {\it firewall} para prohibir el +acceso a otro tipo de conexiones que no sean HTTP o HTTPS. + \section{Active Directory} En la máquina Windows Server 2019 montaremos el servicio de Active Directory. @@ -584,8 +605,124 @@ nginx: configuration file /etc/nginx/nginx.conf test is successful \end{minted} +\subsection{Certificado SSL} + +A nosotros también nos interesa que los usuarios tengan acceso a un servicio +seguro, que puedan conectarse por medio de HTTPS. Para eso es necesario crear un +certificado SSL que podamos usar. Normalmente esto se haría desde una entidad +autenticadora (como {\it Let's Encrypt}), pero nosotros vamos a hacer esto de +forma {\it autofirmada}. Para esto hemos de crear el certificado además de la +llave asociada. Esto lo podemos hacer con el comando {\tt openssl} de la forma +siguiente: + +\begin{minted}{console} +# openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ + -keyout /etc/ssl/private/nortega.local.key \ + -out /etc/ssl/certs/nortega.local.crt +\end{minted} + +Esto nos generará tanto el certificado localizado en el directorio {\tt +/etc/ssl/certs}, como la clave {\bf privada} (que no se debe de compartir) en el +directorio {\tt /etc/ssl/private}. + +También queremos generar un grupo Diffie-Hellman para la generación de claves de +sesiones privadas. Esto permite que las sesiones antiguas puedan seguir siendo +privadas aunque haya habido una fuga de la clave de sesión. Este proceso puede +tardar un rato dependiendo de las capacidades del servidor. + +\begin{minted}{console} +# openssl dhparam -out /etc/nginx/dhparam.pem 4096 +\end{minted} + +Una vez que lo hayamos generado, tenemos que añadir esto a nuestro servidor web. +Para esto, primero crearemos un {\it snippet}, que son pequeños trozos de código +de configuración en Nginx reutilizables. En {\tt /etc/nginx/snippets} crearemos +un archivo con el nombre {\tt self-signed.conf} que contendrá lo siguiente: + +\begin{minted}{nginx} +ssl_certificate /etc/ssl/certs/nortega.local.crt; +ssl_certificate_key /etc/ssl/private/nortega.local.key; + +ssl_protocols TLSv1.2; +ssl_prefer_server_ciphers on; +ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512: + DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384: + DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; +ssl_session_timeout 10m; +ssl_session_cache shared:SSL:10m; +ssl_session_tickets off; +ssl_stapling on; +ssl_stapling_verify on; +resolver 8.8.8.8 8.8.4.4 valid=300s; +resolver_timeout 5s; +add_header X-Frame-Options DENY; +add_header X-Content-Type-Options nosniff; +add_header X-XSS-Protection "1; mode=block"; + +ssl_dhparam /etc/nginx/dhparam.pem; +ssl_ecdh_curve secp384r1; +\end{minted} + +Una vez creado este archivo, ya podemos modificar nuestro archivo de +configuración de Nginx, no sólo para utilizar este certificado y proveer un +servicio HTTPS, sino también para redireccionar todo el tráfico HTTP a nuestro +servicio HTTPS (para forzar una conexión segura). Para esto, nuestro archivo +{\tt wiki.conf} que hemos editado anteriormente lo debemos de cambiar para que +se parezca a lo siguiente: + +\begin{minted}{nginx} +server { + listen 443 ssl default_server; + listen [::]:443 ssl default_server; + + include snippets/self-signed.conf; + + root /var/www/wiki; + index index.php index.html index.htm; + server_name nortega.local; + + location / { + try_files $uri $uri/ =404; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php-fpm.sock; + } +} + +server { + listen 80; + listen [::]:80; + + server_name nortega.local; + + return 301 https://$server_name$request_uri; +} +\end{minted} + +Ya con esto podremos reiniciar el servicio y ya se podrá acceder por medio de +HTTPS, y si se intenta acceder por medio de HTTP se redireccionará de forma +permanente (el código {\tt 301}) al servicio HTTPS. + \subsection{MediaWiki} +\begin{figure} + \centering + \begin{subfigure}{0.3\textwidth} + \includegraphics[width=0.95\textwidth]{imgs/mw-00-database-conf.png} + \caption{Configuración de la base de datos.} + \label{fig:mw-database-conf} + \end{subfigure} + \hfill + \begin{subfigure}{0.45\textwidth} + \includegraphics[width=0.95\textwidth]{imgs/mw-01-install-success.png} + \caption{Finalización de la instalación de MediaWiki.} + \label{fig:mw-install-success} + \end{subfigure} + \caption{Instalación de MediaWiki.} +\end{figure} + Ya podemos instalar lo viene a ser nuestro servicio de MediaWiki en nuestro servidor web. Siguiendo las instrucciones de MediaWiki, lo primero que hemos de hacer es descargar el ZIP de su página principal, y extraerlo sobre nuestro @@ -600,22 +737,6 @@ información para conectarse de forma remote a nuestro servidor de base de datos que se ubica en la dirección IP de 10.0.2.10 (figura \ref{fig:mw-database-conf}). -\begin{figure}[ht!] - \centering - \begin{subfigure}{0.45\textwidth} - \includegraphics[width=0.95\textwidth]{imgs/mw-00-database-conf.png} - \caption{Configuración de la base de datos.} - \label{fig:mw-database-conf} - \end{subfigure} - \hfill - \begin{subfigure}{0.45\textwidth} - \includegraphics[width=0.95\textwidth]{imgs/mw-01-install-success.png} - \caption{Finalización de la instalación de MediaWiki.} - \label{fig:mw-install-success} - \end{subfigure} - \caption{Instalación de MediaWiki.} -\end{figure} - Más adelante en el proceso de configuración de MediaWiki nos pedirá la configuración de el usuario administrador. Aquí meteremos un usuario que se llamará <>, por facilidad de uso, y con la contraseña <>. @@ -631,7 +752,7 @@ y nos saldrá la Wiki que acabamos de crear. \begin{figure}[ht!] \centering - \includegraphics[width=0.75\textwidth]{imgs/mw-02-wiki-view.png} + \includegraphics[width=0.5\textwidth]{imgs/mw-02-wiki-view.png} \caption{Página inicial de nuestro Wiki.} \label{fig:wiki-view} \end{figure} diff --git a/2/ASO/assignments/final-project/web-system-naortega.toc b/2/ASO/assignments/final-project/web-system-naortega.toc index afb807c..67af2b8 100644 --- a/2/ASO/assignments/final-project/web-system-naortega.toc +++ b/2/ASO/assignments/final-project/web-system-naortega.toc @@ -6,10 +6,11 @@ \contentsline {subsection}{\numberline {3.2}Post-Instalación}{4}{subsection.3.2}% \contentsline {section}{\numberline {4}Active Directory}{7}{section.4}% \contentsline {subsection}{\numberline {4.1}Instalación}{7}{subsection.4.1}% -\contentsline {subsection}{\numberline {4.2}Configuración en Linux}{8}{subsection.4.2}% -\contentsline {section}{\numberline {5}Terminal de Administración}{10}{section.5}% -\contentsline {section}{\numberline {6}Base de Datos}{10}{section.6}% +\contentsline {subsection}{\numberline {4.2}Configuración en Linux}{10}{subsection.4.2}% +\contentsline {section}{\numberline {5}Terminal de Administración}{11}{section.5}% +\contentsline {section}{\numberline {6}Base de Datos}{11}{section.6}% \contentsline {section}{\numberline {7}Servidor Web}{13}{section.7}% \contentsline {subsection}{\numberline {7.1}Nginx}{13}{subsection.7.1}% -\contentsline {subsection}{\numberline {7.2}MediaWiki}{14}{subsection.7.2}% -\contentsline {section}{\numberline {8}Derechos de Autor y Licencia}{17}{section.8}% +\contentsline {subsection}{\numberline {7.2}Certificado SSL}{15}{subsection.7.2}% +\contentsline {subsection}{\numberline {7.3}MediaWiki}{17}{subsection.7.3}% +\contentsline {section}{\numberline {8}Derechos de Autor y Licencia}{19}{section.8}%