\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!] \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} % STUB \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} \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}