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 |
 |
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
- Descargar el sistema operativo pfSense, estableciendo el parametro DVD Image (ISO) y l arquitectura AMD64, posteriormente descomprimir el archivo.
Descarga pfSense |
 |
- 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
- 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
- Seleccionar del menú la opción 1, para asignar las interfaces.
- Establecer que no se necesitan VLANs
- Definir interfaz WAN:
em0
- Definir interfaz LAN:
em1
- Definir interfaz OPT1:
em2
- Aceptar los cambios
- Seleccionar del menú la opción 2, establecer las direcciones IP a cada interfaz.
- Seleccionar la interfaz 1 (WAN)
- Establecer dirección IP estática, máscara de red y gateway.
- No permitir el DHCP v6
- No permitir revertir al protocolo http.
- Finalizar
- Repetir pasos del 2 al 13 para las interfaces LAN.
- Establecer en la interfaz LAN el servidor DHCP y un rango de 10 IPs
- Repetir pasos del 2 al 13 para las interfaces OPT1 (DMZ).
- Cambiar nombre a la interfaz OPT1
Consola pfSense |
 |
Asignación de interfaces de red |
 |
Estado final de las interfaces de red |
 |
- 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) |
 |
- 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
- 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 |
 |
- 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 |
 |
- 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 |
 |
- 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 |
 |
- 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 |
 |
- 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
- Identificar la dirección MAC del cliente en la red LAN.
Dirección MAC del Cliente Debian |
 |
- Ingresar al pfsense Services>DHCP Server> LAN
- En el apartado del final DHCP Static Mappings for this Interface, hacer clic en el botón add.
- 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> │
│ │
└─────────────────────────┘
┌─────────────────────────────────────┐
│ │
│ ┌────────────────────┐ │
│ │ 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> │
│ │
└─────────────────────────┘
┌───────────────────────────┤ 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> │
│ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────┐
│ │
│ ┌───────────────┐ │
│ │ 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> │
│ │
└──────────────────────────────────────────────────────────────┘
┌───────────────────────────┤ 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
[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
[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?
- [Video de la topología de red utilizada 📼](https://youtu.be/0123456789ABCDEF)