\documentclass[12pt,a4paper,titlepage]{article} \usepackage[spanish]{babel} \usepackage{hyperref} \usepackage{graphicx} \usepackage{subcaption} \usepackage{minted} \title{Proyecto Final ASO} \author{Nicolás A. Ortega Froysa} \begin{document} \maketitle \tableofcontents \listoffigures \listoftables \pagebreak \section{Resumen de Topología} \begin{figure}[ht!] \centering \includegraphics[width=0.75\textwidth]{imgs/intranet-map.png} \caption{Mapa de intrenet.} \label{fig:intranet-map} \end{figure} El objetivo será montar una red interna que se asemeja a lo visto en la figura \ref{fig:intranet-map}. Se ha decido montar el servidor LDAP con Windows Server 2019, ya que ya tuvimos una máquina de este tipo, y nuestro superior aconsejaba el uso de Active Directory para servir de LDAP. Todo lo demás hemos decidido usar Debian, ya que es una distribución estable, y así evitamos que las actualizaciones rompan nuestras máquinas. También tiene una comunidad muy grande para proveer soporte, aunque éste no sea de carácter profesional. Para servidor web hemos decidido por Nginx por familiaridad y también por facilidad de uso. Para nuestro servidor de bases de datos se ha elegido a MariaDB, también por familiaridad, pero también por facilidad de instalación en Debian respecto a otros más comerciales como Oracle. Finalmente nuestro terminal administrador, que también corre Debian, servirá para conectarse y administrar los demás dispositivos por medio de SSH, en el caso de los servidores Debian, o VNC en el caso del Windows Server. En cuanto a la identificación de cada dispositivo, usaremos las direcciones IP y los nombres de {\it host} que aparecen en la tabla \ref{tbl:ip-table}. \begin{table}[ht!] \centering \begin{tabular}{|c|c|c|} \hline {\bf Nombre} & {\bf Servicio} & {\bf Dirección IP} \\ \hline {\tt ad-serv} & Active Directory & 10.0.2.50 \\ {\tt web0} & Servidor Web & 10.0.2.5 \\ {\tt db-serv} & Base de Datos & 10.0.2.10 \\ {\tt admin} & Administración & 10.0.2.2 \\ \hline \end{tabular} \caption{Tabla de direcciones IP.} \label{tbl:ip-table} \end{table} Para nuestra red, usaremos el dominio de {\tt nortega.local}. Todos nuestros dispositivos tendrán un nombre por debajo de este dominio de acuerdo a su nombre de {\it host}. A todos nuestros dispositivos tendremos al menos una tarjeta de red para conectarse a la red local <>. Esto se hará en forma de una Red NAT. El servidor web ({\tt web0}) en particular tendrá otra tarjeta red configurado como Adaptador Puente Promiscuo, que habilitará la conexión a él desde el exterior. \section{Configuración Inicial Windows Server} El servidor Windows necesita más recursos, ya que consume más por causa de todo lo que tiene instalado por defecto -- no es una instalación mínima, por así decirlo. Así que asignaremos a él las especificaciones siguientes: \begin{itemize} \item Procesadores: 2 \item Memoria: 4096 MB \item Disco: 50 GB \end{itemize} Instalaremos Windows Server utilizando las opciones por defecto. No hay mucho misterio. Es darle para adelante en cada paso. \section{Configuración Inicial Linux} Nuestros servidores Debian no ocupan mucho espacio en sí, como lo hace Windows Server, por eso nos podemos permitir reducir los recursos alojados a éstos. A estas máquinas alojaremos los recursos siguientes a todos: \begin{itemize} \item Procesadores: 1 \item Memoria: 1024 MB \item Disco: 10 GB \end{itemize} \subsection{Instalación} En la instalación de Debian, queremos modificar varias cosas de forma particular. Primero, el dominio que queremos configurar es, como se mencionó anteriormente, {\tt nortega.local}. También, a la hora de especificar un {\it hostname}, usamos el especificado anteriormente para cada servidor. Esto se hará en la configuración de red. Cuando llega la hora de escribir las particiones al disco, vamos a usar una tabla de LVM para permitir más flexibilidad en cuanto a modificación del tamaño de las distintas particiones, y sobre todo poder ampliar su tamaño con facilidad, y poder hacerlo {\it en caliente}. Asignaremos todo el disco a un mismo grupo, y crearemos las particiones de acuerdo a la tabla \ref{tbl:debian-partitions}. \begin{table}[ht!] \centering \begin{tabular}{|l|l|} \hline {\bf Mountpoint} & {\bf Tamaño} \\ \hline {\tt /} & 1.9 GB \\ {\tt /boot} & 451 MB \\ {\tt /tmp} & 463 MB \\ {\tt /usr} & 3.7 GB \\ {\tt /var} & 2.8 GB \\ Swap & 496 MB \\ \hline \end{tabular} \caption{Tabla de particiones lógicas en los sistemas Debian.} \label{tbl:debian-partitions} \end{table} En cuanto a los usuarios, crearemos un usuario {\it proxy}; es decir, sólo sirve para luego pasarte al usuario root. En el caso este, se ha creado el usuario {\tt nicolas} con contraseña {\tt nicolas} -- en realidad poner otra contraseña más compleja. Para el usuario {\tt root} le asignaremos la contraseña {\tt toor}. \begin{figure}[ht!] \centering \includegraphics[width=0.75\textwidth]{imgs/debian-install-choices.png} \caption{Selección de {\it software} adicional.} \label{fig:debian-install-choices} \end{figure} Cuando nos pregunta si hay otros paquetes que queremos instalar queremos especificar los <> y también el <>. No instalamos <> porque esto instalará Apache, que no nos interesa. Debería de aparecer como en la figura \ref{fig:debian-install-choices}. El resto de la instalación se realizará de forma normal, eligiendo las opciones correspondientes. \subsection{Post-Instalación} Una vez instalado, debemos de configurar nuestros servidores Debian en cuestión de configuración red, sobre todo nuestro servidor DNS -- que será el servidor de Windows con Active Directory -- y también se configurará la dirección IP de forma estática. Primero, para configurar las direcciones IP estáticas. Para esto, debemos de deshabiltar el servicio de NetworkManager que lo tiene Debian por defecto: \begin{minted}{bash} systemctl stop network-manager.service systemctl disable network-manager.service \end{minted} Una vez deshabilitado el NetworkManager, ya podemos empezar a modificar los archivos de configuración de red. El primer paso será definir una dirección IP estática. Para empezar, encontramos cuál es el nombre de nuestro interfaz, que se puede hacer utilizando el comando {\tt ip a}. \begin{minted}{text} 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:31:09:eb brd ff:ff:ff:ff:ff:ff inet 10.0.2.2/24 brd 172.16.40.255 scope global dynamic enp0s3 valid_lft 595981sec preferred_lft 595981sec inet6 fe80::a00:27ff:fe76:1cdf/64 scope link valid_lft forever preferred_lft forever \end{minted} Vemos en este ejemplo que queremos hacer uso de la interfaz {\tt enp0s3}, que es la interfaz red de {\it ethernet}. Luego, en el archivo {\tt /etc/network/interfaces}, vamos a configurarlo de la forma siguiente asumiendo aquel interfaz y que queremos la dirección IP estática 10.0.2.2: \begin{minted}{text} # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enp0s3 iface enp0s3 inet static address 10.0.2.2 netmask 255.255.255.0 \end{minted} También queremos configurar nuestro servidor de DNS, que será el Windows Server 2019 con Active Directory. Para esto hemos de modificar el archivo {\tt /etc/resolv.conf} con el contenido siguiente: \begin{minted}{text} domain nortega.local search nortega.local nameserver 10.0.2.50 \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: \begin{minted}{bash} systemctl restart networking.service ifup enp0s3 \end{minted} \section{Active Directory} En la máquina Windows Server 2019 montaremos el servicio de Active Directory. Este proceso lo podemos dividir en dos partes distintas: la instalación de Active Directory en el servidor de Windows, y su configuración en los demás servidores Linux. \subsection{Instalación} \begin{figure}[ht!] \centering \begin{subfigure}{0.45\textwidth} \includegraphics[width=0.95\textwidth]{imgs/ad-00-add-roles.png} \caption{Añadir un nuevo servicio.} \label{fig:ad-add-roles} \end{subfigure} \hfill \begin{subfigure}{0.45\textwidth} \includegraphics[width=0.95\textwidth]{imgs/ad-01-server-selection.png} \caption{Selección del servidor.} \label{fig:ad-server-selection} \end{subfigure} \hfill \begin{subfigure}{0.45\textwidth} \includegraphics[width=0.95\textwidth]{imgs/ad-02-server-features.png} \caption{Seleccionar características del servidor.} \label{fig:ad-server-features} \end{subfigure} \hfill \begin{subfigure}{0.45\textwidth} \includegraphics[width=0.95\textwidth]{imgs/ad-03-promote-to-controller.png} \caption{Promocionar nuestro servidor a controlador.} \label{fig:ad-promote-to-controller} \end{subfigure} \caption{} \end{figure} Cuando lanzamos el servidor Windows Server 2019, lo primero que nos abrirá será el panel de control de nuestro servidor. Aquí, si nos vamos al apartado <>, queremos dar a <> para poder añadir un nuevo servicio a este (figura \ref{fig:ad-add-roles}). Esto abrirá una nueva interfaz donde podremos comenzar el proceso de instalación. Lo primero que nos preguntará será el tipo de instalación, dándonos dos opciones: \begin{itemize} \item {\it Role-Based or feature-based installation}: configuración de un único servidor en donde instalamos servicios. \item {\it Remote Desktop Services installation}: instalación de requisitos para terminales virtuales. \end{itemize} En nuestro caso, nos interesa el primero, <>, ya que queremos instalar el Active Directory en el mismo servidor, no en una máquina virtualizada encima. Entonces en la página siguiente nos preguntará en qué servidor queremos hacer esta instalación, mostrándonos una lista de servidores Windows en nuestra red (que nosotros tan sólo tenemos uno). Escogemos el nuestro y seguimos (figura \ref{fig:ad-server-selection}). Próximamente nos pedirá qué características queremos para nuestro servicio. Nos interesa escoger <> (figura \ref{fig:ad-server-features}). En la pantalla siguiente veremos una lista de cajas de opciones, pero aquí no hace falta hacer nada. Y ya podremos seguir con el proceso que nos instalará este servicio. \subsection{Configuración en Linux} \section{Terminal de Administración} En este dispositivo lo más importante que debemos instalar, para el propósito de administrar los servidores de la red, es SSH. Esto debería de estar disponible ya si hemos instalado nuestro Debian con la opción <> mencionado antes (que instala el cliente y el servidor). \section{Base de Datos} La base de datos, como se explicó anteriormente, será un servidor con el programa MariaDB. Lo primero es instalar MariaDB como tal: \begin{minted}{bash} apt update apt install mariadb-server \end{minted} Aunque el paquete se llama {\tt mariadb-server}, incluye también un cliente muy espartano: {\tt mysql}. Pero antes de interactuar con la base de datos queremos finalizar la instalación. Esto se hace con el comando siguiente: {\tt mysql\_secure\_installation}. Después de configurar la contraseña de {\tt root}, veremos que nos pide si la autenticación debería de ser por <>. Esto no es nuestro caso ya que queremos conectarnos remotamente desde nuestro servidor web, así que respondemos que no: <>. Luego nos preguntará si queremos eliminar los usuarios anónimos. Esto puede ser buena idea para evitar que aquellos que no tengan la autorización para acceder a nuestro servidor de base de datos no lo puedan hacer, así que respondemos que sí: <>. La próxima pregunta tiene que ver con el acceso remoto al usuario {\tt root} de la base de datos, y si se debería de permitir. Esto puede ser un riesgo de seguridad, ya que {\tt root} tiene privilegios para acceder y manipular todos los datos que tenemos. También, si nosotros queremos acceder a este usuario, lo podemos hacer accediendo primero a la máquina por SSH desde el terminal administrador y luego entrando localmente como el usuario {\tt root} de la base de datos. Por eso lo racional es no permitir (o {\it despermitir}): <>. La próxima opción es para eliminar la base de datos de prueba y todo acceso a ello. Como no tendremos necesidad de utilizarla, podemos eliminarla: <>. Finalmente nos pregunta si queremos actualizar todos los privilegios en este momento. Ya se hará en un futuro (cuando reiniciamos la máquina, por ejemplo), pero si queremos empezar a trabajar ya sobre la base de datos, lo que nos conviene es actualizarlos: <>. Una vez que hayamos terminado, ya podremos conectarnos al servidor de base de datos con el comando {\tt mysql} de la forma siguiente: \begin{minted}{text} # mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 31 Server version: 10.5.18-MariaDB-0+deb11u1 Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> \end{minted} Para salir sólo hemos de insertar el comando {\tt quit;} o usar la combinación de teclas Ctrl+D, como con cualquier otro {\it shell}. \section{Servidor Web} En nuestro servidor web, con nombre {\tt web0} queremos instalar el programa Nginx. Para esto hemos de correr los comandos siguientes: \begin{minted}{bash} apt update apt install nginx \end{minted} Esto no sólo instalará Nginx, sino que también lo inicializará, de tal modo que si intentas acceder a nuestro servidor web en un navegador por el puerto 80, te saldrá la página por defecto de Nginx (figura \ref{fig:default-nginx-page}). \begin{figure}[ht!] \centering \includegraphics[width=0.75\textwidth]{imgs/default-nginx-page.png} \caption{Página de Nginx por defecto.} \label{fig:default-nginx-page} \end{figure} Como nuestra intención es crear una página web de WikiMedia, será necesario instalar PHP además de algunos módulos: \begin{minted}{bash} apt install php php-intl php-xml php-mbstring php-fpm \end{minted} Una vez instalado, ya podemos instalar nuestra aplicación web WikiMedia. Para hacer esto, descargamos primero la aplicación de la página principal\footnotemark\ y pasarlo a nuestro servidor web (que se puede hacer mediante el comando {\tt scp}). Ahí lo pasamos a un directorio que servirá de directorio raíz para nuestro sitio web, que para nosotros será {\tt /var/www/wiki}, y a este directorio le cambiamos el propietario de forma recursiva a {\tt www-data}. Esto lo hacemos para que Nginx -- que corre como este usuario -- pueda editar los archivos y crear algunos nuevos. \footnotetext{\url{https://www.mediawiki.org/wiki/Download}} \begin{minted}{bash} chown -R www-data:www-data /var/www/wiki \end{minted} Ahora, para configurar Nginx para este directorio, hemos de navegar al directorio {\tt /etc/nginx/sites-available}. Ahí crearemos una copia del archivo {\tt default} que se denominará {\tt wiki.conf}. Lo editamos para que sea de la forma siguiente (habilitando PHP): \begin{minted}{text} server { listen 80 default_server; listen [::]:80 default_server; 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; } } \end{minted} Luego, nos pasamos al directorio {\tt /etc/nginx/sites-enabled} y hacemos dos cosas: primero, eliminar el enlace a la configuración por defecto; segundo crear un enlace simbólico a nuestra configuración que acabamos de crear. Una vez hecho esto, podemos verificar si nuestra configuración está bien corriendo una prueba de Nginx. \begin{minted}{bash} # rm default # ln -s ../sites-available/wiki.conf ./ # nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful \end{minted} \pagebreak \section{Derechos de Autor y Licencia} \noindent Copyright \copyright\ \the\year\ Nicolás A. Ortega Froysa \\ \\ Este documento se distribuye bajo los términos y condiciones de la licencia Creative Commons Attribution No Derivatives 4.0 International. \end{document}