TFC: Add DNS setup section

Signed-off-by: Nicolás Ortega Froysa <nicolas@ortegas.org>
This commit is contained in:
Nicolás A. Ortega Froysa 2023-05-07 17:57:16 +02:00
parent 0185488e99
commit e7e2e45e8c
3 changed files with 138 additions and 9 deletions

View File

@ -82,3 +82,10 @@
date={2023-04-27}, date={2023-04-27},
keywords={info} keywords={info}
} }
@online{bind-sinkhole,
author={{Jisc}},
title={How to block or sinkhole domains in BIND | Jisc community},
url={https://community.jisc.ac.uk/library/janet-services-documentation/how-block-or-sinkhole-domains-bind},
date={2023-05-07},
keywords={info}
}

Binary file not shown.

View File

@ -4,6 +4,7 @@
\usepackage{hyperref} \usepackage{hyperref}
\usepackage{graphicx} \usepackage{graphicx}
\usepackage{subcaption} \usepackage{subcaption}
\usepackage{xcolor}
\usepackage{minted} \usepackage{minted}
\usepackage{enumerate} \usepackage{enumerate}
\usepackage{fancyhdr} \usepackage{fancyhdr}
@ -15,6 +16,8 @@
]{biblatex} ]{biblatex}
\pagestyle{fancy} \pagestyle{fancy}
\definecolor{LightGray}{gray}{0.9}
\addbibresource{tfc-naortega.bib} \addbibresource{tfc-naortega.bib}
\fancyfoot[LO]{{\it Angelus Custos}\linebreak} \fancyfoot[LO]{{\it Angelus Custos}\linebreak}
@ -394,7 +397,12 @@ Si nuestra máquina de pruebas es también un sistema de Debian GNU/Linux,
entonces podemos asegurarnos de que hemos pedido información del servidor DHCP entonces podemos asegurarnos de que hemos pedido información del servidor DHCP
utilizando el comando siguiente: utilizando el comando siguiente:
\begin{minted}{console} \begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
]{console}
# dhclient -v # dhclient -v
Internet Systems Consortium DHCP Client 4.4.1 Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium. Copyright 2004-2018 Internet Systems Consortium.
@ -406,17 +414,22 @@ Sending on LPF/enp0s8/08:00:27:5f:48:3a
Listening on LPF/enp0s3/08:00:27:16:c6:22 Listening on LPF/enp0s3/08:00:27:16:c6:22
Sending on LPF/enp0s3/08:00:27:16:c6:22 Sending on LPF/enp0s3/08:00:27:16:c6:22
Sending on Socket/fallback Sending on Socket/fallback
DHCPREQUEST for 192.168.0.104 on enp0s8 to 255.255.255.255 port DHCPREQUEST for 192.168.0.104 on enp0s8 to 255.255.255.255
67 (xid=0x4dcd9939) port 67 (xid=0x4dcd9939)
DHCPREQUEST for 192.168.0.108 on enp0s3 to 255.255.255.255 port DHCPREQUEST for 192.168.0.108 on enp0s3 to 255.255.255.255
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 podemos 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}{console} \begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
]{console}
# cat /etc/resolv.conf # cat /etc/resolv.conf
nameserver 192.168.1.135 nameserver 192.168.1.135
\end{minted} \end{minted}
@ -432,7 +445,12 @@ red quisiera acceder a una de las páginas prohibidas en nuestra red. Debería d
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 de
nuestro servidor es {\tt 192.168.1.135}: nuestro servidor es {\tt 192.168.1.135}:
\begin{minted}{console} \begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
]{console}
# nslookup porn.com # nslookup porn.com
Server: 192.168.1.135 Server: 192.168.1.135
Address: 192.168.1.135#53 Address: 192.168.1.135#53
@ -471,7 +489,12 @@ de la tarjeta SD corresponde al fichero especial {\tt /dev/mmcblk1}:
\footnotetext{\url{https://www.armbian.com/rock64/}} \footnotetext{\url{https://www.armbian.com/rock64/}}
\begin{minted}{console} \begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
]{console}
# unxz Armbian_<version>_Rock64_<codename>_current_<version>.img.xz # unxz Armbian_<version>_Rock64_<codename>_current_<version>.img.xz
# dd if=Armbian_<version>_Rock64_<codename>_current_<version>.img \ # dd if=Armbian_<version>_Rock64_<codename>_current_<version>.img \
of=/dev/mmcblk1 bs=1M of=/dev/mmcblk1 bs=1M
@ -511,8 +534,104 @@ 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
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á el paquete que precisamos además de todas sus dependencias:
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
]{console}
# apt install bind9
\end{minted}
Como estamos utilizando un sistema basado en Debian, el servicio se inicializará
solo, con la configuración que viene por defecto.
Para la configuración de Bind9, nos interesa incluir desde nuestro archivo de
configuración un archivo que contendrá todos los dominios que nos interesan
bloquear. El archivo de configuración ha de ser como lo siguiente
(\cite{bind-sinkhole}):
\begin{minted}[
frame=lines,
bgcolor=LightGray,
linenos,
framesep=2mm,
baselinestretch=1.2
]{text}
include "/etc/bind/blacklisted.zones";
zone "example.local" {
type master;
file "/etc/bind/zones/master/example.local.db";
};
\end{minted}
La línea que más nos interesa es la línea de {\tt include}. Esta línea incluye
el archivo que crearemos con todos los dominios que queremos bloquear.
En aquel archivo queremos tener una lista actualizada de todos los dominios en
la lista negra. Para esto haría falta crear un {\it script} capaz de actualizar
esta lista, haciendo lo siguiente:
\begin{enumerate}[i]
\item Descargar la lista de internet.
\item Manipular el contenido del fichero descargado para conformarse a lo
que espera Bind9.
\item Hacer una copia de respaldo del archivo que se encuentra allí
actualmente.
\item Instalarlo en su localización correspondiente.
\item Reiniciar el servicio de DNS Bind9.
\end{enumerate}
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
(\cite{bind-sinkhole}):
\begin{minted}[
frame=lines,
bgcolor=LightGray,
framesep=2mm,
baselinestretch=1.2
]{text}
zone "<dominio>" {type master; file "/etc/bind/zones/master/
blockeddomains.db";};
\end{minted}
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
tráfico de nuestra red a la dirección IP de nuestro servidor. Su contenido sería
de la manera siguiente (\cite{bind-sinkhole}):
\begin{minted}[
frame=lines,
bgcolor=LightGray,
linenos,
framesep=2mm,
baselinestretch=1.2
]{text}
;
; BIND data file for example.local
;$
$TTL 3600
@ IN SOA ns1.example.local. info.example.local. (
2014052101 ; Serial
7200 ; Refresh
120 ; Retry
2419200 ; Expire
3600) ; Default TTL
A 192.168.1.135
* IN A 192.168.1.135
AAAA ::1
* IN AAAA ::1
\end{minted}
% TODO: % TODO:
% - Servidor DNS
% - Servidor Web % - Servidor Web
% - Script PHP % - Script PHP
@ -530,6 +649,9 @@ 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 de nuestro
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.
\subsubsection{Instalación y Configuración del Servicio HTTP}
\subsubsection{Instalación de la Página PHP}
\section{Conclusiones y Propuestas de Mejora} \section{Conclusiones y Propuestas de Mejora}
\pagebreak \pagebreak