Práctica 7: Configuración de un firewall de red con pfSense#


Objetivo#

El alumno realizará la instalación y configuración de una máquina virtual pfSense con los servicios de red NAT, DHCP, DMZ y Port Forwarding para permitir que otras máquinas tengan salida a Internet, así como que otros dispositivos de Internet tengan acceso a servicios en la DMZ.

Elementos de apoyo#

Restricciones#

  • La fecha límite de entrega es el viernes 11 de noviembre de 2022 a las 23:59 horas *
  • Esta actividad debe ser entregada en equipo de acuerdo al flujo de trabajo para la entrega de tareas y prácticas
  • Crear una nueva rama llamada practica-7
  • Utilizar la carpeta docs/practicas/practica-7/Equipo-ABCD-EFGH-IJKL-MNOP para entregar la práctica
    • Donde Equipo-ABCD-EFGH-IJKL-MNOP representa el nombre del equipo que debió anotarse previamente en la lista del grupo
  • Crear un merge request en el repositorio de tareas para entregar la actividad

Entregables#

  • Archivo README.md

    • Explicación de la topología de red utilizada
    • Procedimiento de configuración de NAT, Port Forwarding, servidor DHCP y DMZ
    • Procedimiento para reservar una dirección IP en el servidor DHCP
    • Explicación de las bitácoras generadas
    • Explicación de las reglas
    • Procedimiento básica de seguridad del pfsense
      • Nombre del host: debe ser el del equipo
      • Visualización del nombre completo
      • Acceso a consola solicitando credenciales de seguridad (agregar las nuevas credenciales)
      • Configuración segura del servicio SSH
      • Limitación de acceso a la WEB de administración, solo desde la DMZ
    • Visualizar la configuración de pfSense al conectarse via SSH:
      • Reglas PF (pfctl -sr)
      • Tablas (pfctl -s Tables)
      • Estados de NAT (pfctl -ss)
      • Reglas de NAT (pfctl -s NAT)
    • Conclusiones sobre las capturas de tráfico de red
  • Carpeta files

    • Archivo de configuración config.xml del pfSense
    • Cliente DHCP (CentOS, Debian o Alpine/otro)
      • Tabla ARP
      • Tabla de rutas
      • Salida de los comandos de configuración de red
      • Salida de los comandos con las pruebas de conectividad local
      • Salida de los comandos con las pruebas de conectividad externa
        • Salida (imágenes) de las consultas mediante los navegadores del cliente WAN a servicios de la DMZ HTTP, HTTPS y de acceso al servicio SSH
        • Estados del pfsense donde se indiquen las conexiones de NAT

Introducción#

PfSense versión Community Edition es una plataforma de la compañía Netgate, desarrollada en el sistema FreeBSD UNIX con licencia de código libre, que proporciona servicios como firewall, router, red privada virtual (VPN por sus siglas en inglés),sistema de prevención/detección de Intrusos (IPS/IDS). DNS entre otros.

Procedimiento#

Se presentan los pasos para elaborar la configuración de un NAT, forwarder de DNS, DHCP y DMZ utilizando la plataforma pfSense con base en la topología de red que se muestra a continuación:

Diagrama de Red
Topología

Diagrama de interfaces de red en VirtualBox

Para la red WAN, crear una NatNetwork, donde se debe conectar la interfaz em0 del pfSense y cliente Alpine/etc (eth0).

Warning

  • Crear un snapshot de la máquina virtual pfSense antes de realizar la configuración de los servicios de red.

Configuración de redes en VirtualBox#

Esta es la configuración de red que necesitas en esta práctica

Red Nombre Dirección IP / Máscara Servidor DHCP
WAN (verde) NAT-Network 10.0.2.0/24 Habilitado
LAN (azul) vboxnet0 192.168.56.1/24 Deshabilitado
DMZ (naranja) vboxnet1 172.16.1.10/24 Deshabilitado

Red NAT-Network#

Crea la red NAT-Network de VirtualBox para simular la red WAN

  • Abre las preferencias de VirtualBox
Menú principal
  • Ve a la pestaña de configuración de redes NAT
Configuración de redes NAT
  • Agrega una red NAT con el CIDR 10.0.2.0/24 y asegúrate de que el DHCP se encuentre activo
Agregar red NAT
  • Reinicia tu máquina física para aplicar la configuración de las redes de VirtualBox
tonejito@laptop ~ % reboot

Redes host-only#

Permite que VirtualBox configure los segmentos adecuados en las redes host-only.

  • Crea el directorio /etc/vbox en caso de que no exista
tonejito@laptop ~ % test -d /etc/vbox || mkdir -v /etc/vbox
mkdir: Created directory '/etc/vbox'
  • Edita el archivo /etc/vbox/networks.conf con el siguiente contenido
* 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
* 2001::/64
  • Reinicia tu máquina física para aplicar la configuración de las redes de VirtualBox
tonejito@laptop ~ % reboot
  • Abre la consola de VirtualBox y lanza el administrador de redes
Menú principal
  • Configura las redes sólo anfitrión (host-only) para que queden de la siguiente manera
Red Nombre Dirección IP / Máscara Servidor DHCP
LAN vboxnet0 192.168.56.1/24 Deshabilitado
DMZ vboxnet1 172.16.1.10/24 Deshabilitado
Administrador de redes host-only

Interfaces de red en la máquina física#

Después de completar la configuración de las redes de VirtualBox, la máquina física tendrá dos adaptadores de red. Cada adaptador de red está directamente conectado a las redes LAN y DMZ por lo que la máquina física es capaz de comunicarse con los clientes de estas redes sin necesidad de ruteo

  • El adaptador de la red host-only LAN (azul) tiene la dirección IP 192.168.56.1
tonejito@laptop ~ % ip addr show dev vboxnet0
5: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
       valid_lft forever preferred_lft forever
    inet6 fe80::800:27ff:fe00:0/64 scope link
       valid_lft forever preferred_lft forever

tonejito@laptop ~ % ip route show dev vboxnet0
192.168.56.0/24 dev vboxnet0 proto kernel scope link src 192.168.56.1
  • El adaptador de la red host-only DMZ (naranja) tiene la dirección IP 172.16.1.1
tonejito@laptop ~ % ip addr show dev vboxnet1
6: vboxnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 0a:00:27:00:00:01 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.1/24 brd 172.16.1.255 scope global vboxnet1
       valid_lft forever preferred_lft forever
    inet6 fe80::800:27ff:fe00:1/64 scope link
       valid_lft forever preferred_lft forever

tonejito@laptop ~ % ip route show dev vboxnet1
172.16.1.0/24 dev vboxnet1 proto kernel scope link src 172.16.1.1

pfSense#

Instalación#

  1. Descargar el sistema operativo pfSense, estableciendo el parametro DVD Image (ISO) y l arquitectura AMD64, posteriormente descomprimir el archivo.
Descarga pfSense
  1. Crear una máquina virtual en Virtualbox con 3 interfaces de red:
Propiedades MV pfSense
Arranque del ISO
Términos y condiciones de la Política de uso
Instalación del sistema
Distribución de teclado
Sistema de archivos
Resumen de las opciones de instalación
Instalación
Solicitud de reinicio

Configuración inicial#

  1. Ingresar a la consola y establecer las direcciones IP de acuerdo a los parámetros indicados a continuación:
Interfaz Red Tipo Dirección IP DHCP VirtualBox
em0 - WAN NAT-Network ¹ DHCP 10.0.2.Y Habilitado
em1 - LAN Host-Only (vboxnet0)² Estática 192.168.56.254 Deshabilitado
em2 - DMZ Host-Only (vboxnet1)³ Estática 172.16.1.254 Deshabilitado

Warning

  • ¹: Crear la red NAT-Network con el direccionamiento adecuado
  • ²: La red vboxnet0 ya debería estar creada
  • ³: Crear la red vboxnet1 con el direccionamiento adecuado
  1. Seleccionar del menú la opción 1, para asignar las interfaces.
  2. Establecer que no se necesitan VLANs
  3. Definir interfaz WAN: em0
  4. Definir interfaz LAN: em1
  5. Definir interfaz OPT1: em2
  6. Aceptar los cambios
  7. Seleccionar del menú la opción 2, establecer las direcciones IP a cada interfaz.
  8. Seleccionar la interfaz 1 (WAN)
  9. Establecer dirección IP estática, máscara de red y gateway.
  10. No permitir el DHCP v6
  11. No permitir revertir al protocolo http.
  12. Finalizar
  13. Repetir pasos del 2 al 13 para las interfaces LAN.
  14. Establecer en la interfaz LAN el servidor DHCP y un rango de 10 IPs
  15. Repetir pasos del 2 al 13 para las interfaces OPT1 (DMZ).
  16. Cambiar nombre a la interfaz OPT1
Consola pfSense
Asignación de interfaces de red
Estado final de las interfaces de red
  1. Configurar los clientes disponibles CentOS, Debian, etc., a la interfaz LAN para obtener una dirección IP mediante el DHCP:
Servidor CentOS (Red DMZ)
Cliente Debian (Red LAN)
Cliente Alpine (Red LAN)
  1. Abrir un navegador WEB en el cliente de su elección e ingresar a la interfaz WEB de administración
    • Las credenciales de acceso por defecto son admin/pfsense:
Administración web
Configuración inicial
Información general
Cambio de contraseña
Finalizar configuración
Terminos y condiciones
Dashboard principal

Configuración de las reglas para la DMZ#

  1. Generar regla de bloqueo de tráfico de la DMZ a la LAN, en la interfaz DMZ.
    • Firewall->Rules->DMZ.
    • Hacer clic en el botón add para agregar nuevas reglas, considerar los siguientes parámetros :
      • Action: Block
      • Interface: DMZ.
      • Address Family: IPv4
      • Protocol: Any.
      • Source : DMZ Net.
      • Destination : LAN net.
    • Al finalizar hacer clic en el botón save, posteriormente aplicar cambios con el botón apply Changes.
Regla DMZ parámetros
Reglas DMZ
  1. Generar Alias para los puertos de acceso de internet al servidor WEB y conexión remota segura
    • Firewall -> Alias->Ports.
    • Hacer clic en el botón add para agregar alias, considerar los siguientes parámetros :
      • Name: WEB_SSH.
      • Description : Acceso servidor WEB y SSH.
      • Puertos y descripcion: http, https, DNS y SSH
      • Click en el botón add ports.
    • Al finalizar hacer clic en el botón save, posteriormente aplicar cambios con el botón apply Changes.
Alias Puertos
  1. Generar Alias para los servidores WEB que tendrán acceso desde Internet
    • Firewall -> Alias->IP.
    • Hacer clic en el botón add para agregar alias, considerar los siguientes parámetros :
      • Name: DMZ_WEB_ACCESO
      • Description : Dispositivos DMZ Acceso.
      • Host: dirección IP y descripción
    • Al finalizar hacer clic en el botón save, posteriormente aplicar cambios con el botón apply Changes.
Alias IP
  1. Generar regla de acceso de internet al servidor WEB
    • Firewall->Rules->DMZ.
    • Hacer clic en el botón add para agregar nuevas reglas, considerar los siguientes parámetros :
      • Action: Pass
      • Interface: DMZ.
      • Address Family: IPv4
      • Protocol: TCP/UDP
      • Source : DMZ Net.
      • Destination : Any.
    • Al finalizar hacer clic en el botón save, posteriormente aplicar cambios con el botón apply Changes.
Regla Acceso Internet
  1. Configuración de Port forwarding para acceso a la DMZ
    • Firewall->NAT->Port Forward
    • Hacer clic en el botón add para agregar nuevas reglas, considerar los siguientes parámetros :
      • Interface: WAN.
      • Address Family: IPv4
      • Protocol: TCP
      • Destination : WAN address
      • Destination port range: http
      • Redirect target IP: 172.16.1.101
      • Redirect target port: http
      • Description: Port forwarding DMZ Web Server
    • Al finalizar hacer clic en el botón save, posteriormente aplicar cambios con el botón apply Changes.
    • Replicar configuración de Port Forwarding para los servicios https y ssh.
Port Forwarding servicio http
Regla en interfaz WAN para Port Forwarding http
  1. Pruebas de conectividad desde la WAN a los servicios de la DMZ
Conexión desde cliente WAN al servicio http
Conexión desde cliente WAN al servicio https
Conexión desde cliente WAN al servicio SSH
Estados de conexión en el pfSense

Configuración de DHCP Reservado#

  1. Identificar la dirección MAC del cliente en la red LAN.
Dirección MAC del Cliente Debian
  1. Ingresar al pfsense Services>DHCP Server> LAN
  2. En el apartado del final DHCP Static Mappings for this Interface, hacer clic en el botón add.
  3. Llenar los siguientes parámetros:
    • MAC Address
    • IP Address
    • Hostname
    • Descripción: un nombre descriptivo
    • Seleccionar la casilla Create an ARP Table Static para enlazar la IP y MAC.
    • Al finalizar hacer clic en el botón save, posteriormente aplicar cambios con el botón apply Changes.
DHCP Static Mapping parámetros
DHCP Static Mapping Verificación
Estado del servicio DHCP
Validar dirección IP en virtual.

Cliente Alpine#

Dirección IP por DHCP#

Configurar el equipo para solicitar una dirección IP por DHCP en la interfaz NAT-Network que está en la red WAN (ver diagrama de red)

Note

Recuerda que el equipo alpine inicia desde LiveCD, por lo que tendrás que ejecutar estos comandos cada vez que inicies la máquina virtual

  • Activa la interfaz de red
alpine:~# ip link set eth0 up
  • Ejecuta el cliente de DHCP para pedir una dirección de la red WAN (NAT Network)
alpine:~# udhcpc eth0
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting select for 10.0.2.6, server 10.0.2.3
udhcpc: lease of 10.0.2.6 obtained from 10.0.2.3, lease time 600
  • Verifica que el proceso del cliente DHCP se esté ejecutando en segundo plano
alpine:~# ps ax | egrep '^PID|udhcpc'
PID   USER      TIME  COMMAND
1024  root      0:00  udhcpc eth0
  • Verifica los parámetros de red
alpine:~# ip route
default via 10.0.2.1 dev eth0 metric 202
10.0.2.0/24 dev eth0 scope link src 10.0.2.6

alpine:~# cat /etc/resolv.conf
search local
nameserver 10.0.2.1

alpine:~# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:93:60:13 brd ff:ff:ff:ff:ff:ff
    altname enp0s8
    inet 10.0.2.6/24 scope global eth0  ⬅
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe9e:6013/64 scope link
       valid_lft forever preferred_lft forever

Cliente Debian#

Dirección IP por DHCP#

Configurar el equipo para solicitar una dirección IP por DHCP en la interfaz host-only que está en la red LAN (ver diagrama de red)

  • Configura de la siguiente manera el archivo /etc/network/interfaces para pedir una dirección IP por medio de DHCP.
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto eth1
allow-hotplug eth1
iface eth1 inet dhcp

Servidor CentOS#

Dirección IP estática#

Configurar una dirección IP estática en la interfaz host-only que está en la red DMZ (ver diagrama de red)

  • Ejecutar nmtui para editar las conexiones de red de Network Manager
[root@centos ~]# nmtui
  • Seleccionar Activate a connection

                           ┌─┤ NetworkManager TUI ├──┐
                           │                         │
                           │ Please select an option │
                           │                         │
                           │ Edit a connection       │
                           │ Activate a connection   │  ⬅   ⬅   ⬅
                           │ Set system hostname     │
                           │                         │
                           │ Quit                    │
                           │                         │
                           │                    <OK> │
                           │                         │
                           └─────────────────────────┘

  • Desactivar la conexión para la interfaz eth1 (a veces aparece como Wired network 2)

    • Regresar al menú anterior con Back

                     ┌─────────────────────────────────────┐
                     │                                     │
                     │ ┌────────────────────┐              │
                     │ │ Ethernet (eth0)  ↑ │ <Deactivate> │    ⬅   ⬅
                     │ │   eth0           ▒ │              │
                     │ │                  ▒ │              │
                     │ │ Ethernet (eth1)  ▒ │              │
                     │ │ * eth1           ▒ │              │    ⬅   ⬅
                     │ │                  ▒ │              │
                     │ │                  ▮ │              │
                     │ │                  ↓ │ <Back>       │
                     │ └────────────────────┘              │
                     │                                     │
                     └─────────────────────────────────────┘

  • Seleccionar Edit a connection

                           ┌─┤ NetworkManager TUI ├──┐
                           │                         │
                           │ Please select an option │
                           │                         │
                           │ Edit a connection       │  ⬅   ⬅   ⬅
                           │ Activate a connection   │
                           │ Set system hostname     │
                           │                         │
                           │ Quit                    │
                           │                         │
                           │                    <OK> │
                           │                         │
                           └─────────────────────────┘

  • Seleccionar eth1 (o Wired connection 2)

    • Desmarcar la casilla [ ] Automatically connect para evitar que se conecte automáticamente al iniciar el sistema
    • Seleccionar OK para regresar al menú anterior

   ┌───────────────────────────┤ Edit Connection ├───────────────────────────┐
   │                                                                         │
   │         Profile name eth1____________________________________           │
   │               Device eth1 (08:00:27:A5:A6:6E)________________           │
   │                                                                         │
   │ ═ ETHERNET                                                    <Show>    │
   │                                                                         │
   │ ═ IPv4 CONFIGURATION <Automatic>                              <Show>    │
   │ ═ IPv6 CONFIGURATION <Automatic>                              <Show>    │
   │                                                                         │
   │ [ ] Automatically connect                                               │  ⬅
   │ [X] Available to all users                                              │
   │                                                                         │
   │                                                           <Cancel> <OK> │
   │                                                                         │
   └─────────────────────────────────────────────────────────────────────────┘

  • Seleccionar Add

                         ┌─────────────────────────────┐
                         │                             │
                         │ ┌───────────────┐           │
                         │ │ Ethernet    ↑ │ <Add>     │    ⬅   ⬅
                         │ │   eth0      ▒ │           │
                         │ │   eth1      ▒ │ <Edit...> │
                         │ │             ▒ │           │
                         │ │             ▒ │ <Delete>  │
                         │ │             ▮ │           │
                         │ │             ↓ │ <Back>    │
                         │ └───────────────┘           │
                         │                             │
                         └─────────────────────────────┘

  • Seleccionar Ethernet y luego Create

         ┌──────────────────────┤ New Connection ├──────────────────────┐
         │                                                              │
         │ Select the type of connection you wish to create.            │
         │                                                              │
         │                        DSL         ↑                         │
         │                        Ethernet    ▮                         │   ⬅
         │                        InfiniBand  ▒                         │
         │                        Wi-Fi       ▒                         │
         │                        Bond        ↓                         │
         │                                                              │
         │                                            <Cancel> <Create> │
         │                                                              │
         └──────────────────────────────────────────────────────────────┘

  • Establecer estos parámetros y seleccionar OK

    • El dispositivo para la conexión es eth1
    • La dirección IP que tendrá el equipo CentOS es 172.16.1.10
    • La dirección IP del equipo pfSense es 172.16.1.254 y funge como servidor DNS y gateway
    • Marcar la casilla [X] Require IPv4 addressing for this connection para forzar la conectividad por IPv4
    • Marcar la casilla [X] Automatically connect para permitir que se conecte automáticamente al iniciar el sistema

   ┌───────────────────────────┤ Edit Connection ├───────────────────────────┐
   │                                                                         │
   │         Profile name eth1-dmz________________________________           │
   │               Device eth1 (08:00:27:A5:A6:6E)________________           │  ⬅
   │                                                                         │
   │ ═ ETHERNET                                                    <Show>    │
   │                                                                         │
   │ ╤ IPv4 CONFIGURATION <Manual>                                 <Hide>    │
   │ │          Addresses 172.16.1.10/24___________ <Remove>                 │  ⬅
   │ │                    <Add...>                                           │
   │ │            Gateway 172.16.1.254_____________                          │  ⬅
   │ │        DNS servers 172.16.1.254_____________ <Remove>                 │  ⬅
   │ │                    <Add...>                                           │
   │ │     Search domains <Add...>                                           │
   │ │                                                                       │
   │ │            Routing (No custom routes) <Edit...>                       │
   │ │ [ ] Never use this network for default route                          │
   │ │ [ ] Ignore automatically obtained routes                              │
   │ │ [ ] Ignore automatically obtained DNS parameters                      │
   │ │                                                                       │
   │ │ [X] Require IPv4 addressing for this connection                       │  ⬅
   │ └                                                                       │
   │                                                                         │
   │ ═ IPv6 CONFIGURATION <Automatic>                              <Show>    │
   │                                                                         │
   │ [X] Automatically connect                                               │  ⬅
   │ [X] Available to all users                                              │  ⬅
   │                                                                         │
   │                                                           <Cancel> <OK> │
   └─────────────────────────────────────────────────────────────────────────┘

  • Seleccionar Back para regresar al menú anterior

                         ┌─────────────────────────────┐
                         │                             │
                         │ ┌───────────────┐           │
                         │ │ Ethernet    ↑ │ <Add>     │
                         │ │   eth0      ▒ │           │
                         │ │   eth1      ▒ │ <Edit...> │
                         │ │   eth1-dmz  ▒ │           │
                         │ │             ▒ │ <Delete>  │
                         │ │             ▮ │           │
                         │ │             ↓ │ <Back>    │    ⬅   ⬅
                         │ └───────────────┘           │
                         │                             │
                         └─────────────────────────────┘

  • Seleccionar Quit para salir de nmtui

                           ┌─┤ NetworkManager TUI ├──┐
                           │                         │
                           │ Please select an option │
                           │                         │
                           │ Edit a connection       │
                           │ Activate a connection   │
                           │ Set system hostname     │
                           │                         │
                           │ Quit                    │  ⬅   ⬅   ⬅
                           │                         │
                           │                    <OK> │
                           │                         │
                           └─────────────────────────┘

  • Reiniciar el equipo para verificar que la configuración de IP estática se realiza de manera automática
[root@centos ~]# reboot
  • Verificar la configuración una vez que el equipo se haya reiniciado
[root@centos ~]# nmcli connection
NAME      UUID                                  TYPE      DEVICE
eth1-dmz  3de1d762-337e-430f-b322-33adc0910b09  ethernet  eth1  ⬅   ⬅
enp0s3    11ace166-e0bc-3e7a-a12d-e8aabdc6776f  ethernet  --
eth0      cda21fd0-6977-36bb-afce-9fecf21dc695  ethernet  --
eth1      2a51a8ce-619d-3da8-a93e-ed46c3ced639  ethernet  --

[root@centos ~]# hostname -I
172.16.1.10

[root@centos ~]# ip route
default via 172.16.1.254 dev eth1 proto static metric 100
172.16.1.0/24 dev eth1 proto kernel scope link src 172.16.1.10 metric 100

[root@centos ~]# cat /etc/resolv.conf
nameserver 172.16.1.254

[root@centos ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> 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: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 08:00:27:eb:e3:a1 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:a5:a6:6e brd ff:ff:ff:ff:ff:ff
    altname enp0s8
    inet 172.16.1.10/24 brd 172.16.1.255 scope global noprefixroute eth1    ⬅
       valid_lft forever preferred_lft forever
    inet6 fe80::8ec5:5a15:6d74:e8c0/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Reglas de firewalld#

Agregar las excepciones para los servicios de red que tiene el equipo

[root@centos ~]# firewall-cmd --permanent --zone=public --add-service=ssh
[root@centos ~]# firewall-cmd --permanent --zone=public --add-service=http
[root@centos ~]# firewall-cmd --permanent --zone=public --add-service=https

Recargar las reglas

[root@centos ~]# firewall-cmd --reload

Listar los servicios permitidos en firewalld

[root@centos ~]# firewall-cmd --list-services
cockpit dhcpv6-client http https ssh    ⬅   ⬅   ⬅   ⬅   ⬅

[root@centos ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth1
  sources:
  services: cockpit dhcpv6-client http https ssh    ⬅   ⬅   ⬅
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  • Habilitar el servicio de firewalld
[root@centos ~]# systemctl enable --now firewalld

Note

Deshabilitar el servicio de firewalld si hay problemas de conectividad entre los equipos.

  • systemctl disable --now firewalld

Servicio HTTP y HTTPS#

  • Instalar los paquetes httpd y mod_ssl
[root@centos ~]# dnf -y install httpd mod_ssl

    ...
  • Reiniciar el servicio httpd
[root@centos ~]# systemctl restart httpd
  • Revisar que mod_ssl esté instalado y configurado
[root@centos ~]# cat /etc/httpd/conf.modules.d/00-ssl.conf
LoadModule ssl_module modules/mod_ssl.so

[root@centos ~]# grep '^SSLCertificate*' /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

[root@centos ~]# ls -la /etc/pki/tls/certs/localhost.crt /etc/pki/tls/private/localhost.key
-rw-r--r--. 1 root root 3871 Nov  1 12:13 /etc/pki/tls/certs/localhost.crt
-rw-------. 1 root root 1704 Nov  1 12:13 /etc/pki/tls/private/localhost.key

[root@centos ~]# apachectl -M | grep ssl
 ssl_module (shared)

Note

  • En esta práctica no importa que el certificado sea auto-firmado
  • Verificar que los puertos estén abiertos
[root@centos ~]# netstat -ntulp | egrep '^Proto|httpd'
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::80                   :::*                    LISTEN      3310/httpd
tcp6       0      0 :::443                  :::*                    LISTEN      3310/httpd
  • Habilitar el servicio
[root@centos ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
  • Crea el archivo index.html en el directorio /var/www/html, esta es la raíz del sitio.
[root@centos ~]# echo '<html><body><h1>It works</h1></body></html>' > /var/www/html/index.html
  • Verifica que puedas ver el archivo en localhost utilizando curl

  • Conexión HTTP al puerto 80

[root@centos ~]# curl -vk# 'http://localhost/'
*   Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.76.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 11 Nov 2022 06:19:08 GMT
< Server: Apache/2.4.53 (CentOS Stream) OpenSSL/3.0.1
< Last-Modified: Fri, 11 Nov 2022 06:18:35 GMT
< ETag: "2d-5ed2bdc1cf211"
< Accept-Ranges: bytes
< Content-Length: 45
< Content-Type: text/html; charset=UTF-8
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host localhost left intact
  • Conexión HTTPS al puerto 443 (no importa que el certificado sea auto-firmado)
[root@centos ~]# curl -vk# 'https://localhost/'
*   Trying ::1:443...
* Connected to localhost (::1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.2 (OUT), TLS header, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS header, Unknown (23):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=US; O=Unspecified; CN=centos.local; emailAddress=root@centos.local
*  start date: Nov 11 01:03:10 2022 GMT
*  expire date: Nov 11 01:03:10 2023 GMT
*  issuer: C=US; O=Unspecified; OU=ca-156703581440990179; CN=centos.local; emailAddress=root@centos.local
*  SSL certificate verify result: self-signed certificate in certificate chain (19), continuing anyway.
* TLSv1.2 (OUT), TLS header, Unknown (23):
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.76.1
> Accept: */*
>
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Unknown (23):
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 11 Nov 2022 06:19:18 GMT
< Server: Apache/2.4.53 (CentOS Stream) OpenSSL/3.0.1
< Last-Modified: Fri, 11 Nov 2022 06:18:35 GMT
< ETag: "2d-5ed2bdc1cf211"
< Accept-Ranges: bytes
< Content-Length: 45
< Content-Type: text/html; charset=UTF-8
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host localhost left intact
  • Edita los archivos HTML que necesites en el directorio /var/www/html, estos serán visibles en la URL http://IP-CENTOS/ARCHIVO.html

Conclusiones#

  • Comparar las ventajas y desventajas de utilizar pfSense contra realizar la configuración manual en GNU/Linux
    • Comparar la configuración de un appliance de firewall como pfSense utilizando la consola web contra hacer la configuración de cada servicio a mano en un sistema operativo GNU/Linux de propósito general (router con sysctl, NAT con iptables, DNS forwarder, servidor DHCP) y mencionar las ventajas y desventajas de cada opción
  • Al analizar las reglas de pfSense, ¿Cuándo se usa reject o block?
  • ¿Qué tipo de política se usa en la práctica: permisiva o restrictiva? Justifica la respuesta
    • ¿Cúal se considera mejor?

Extra#

  • Elabora un video donde expliquen la topología de red utilizada y realicen las pruebas de conectividad.

    • Subir el video a YouTube y agregar la referencia de este video al archivo README.md
- [Video de la topología de red utilizada 📼](https://youtu.be/0123456789ABCDEF)
  • Agregar el servicio de VPN:

    • Conectar un cliente desde la red WAN a la VPN de tal manera que pueda acceder a los dispositivos de la red LAN por SSH, HTTP y HTTPS.