Administrador de Linux: configuración del cortafuegos
firewalld es el controlador de front-end predeterminado para iptables en CentOS. El front-end de firewalld tiene dos ventajas principales sobre iptables sin procesar:
Utiliza zonas fáciles de configurar e implementar que abstraen cadenas y reglas.
Los conjuntos de reglas son dinámicas, lo que significa que las conexiones con estado no se interrumpen cuando se cambian y / o modifican las configuraciones.
Recuerde, firewalld es el contenedor de iptables, no un reemplazo. Si bien los comandos personalizados de iptables se pueden usar con firewalld , se recomienda usar firewalld para no romper la funcionalidad del firewall.
Primero, asegurémonos de que firewalld esté iniciado y habilitado.
[root@CentOS rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago
Docs: man:firewalld(1)
Main PID: 712 (firewalld)
Memory: 34.7M
CGroup: /system.slice/firewalld.service
└─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Podemos ver que firewalld está activo (para comenzar al arrancar) y en ejecución. Si está inactivo o no se inicia podemos usar -
systemctl start firewalld && systemctl enable firewalld
Ahora que tenemos nuestro servicio firewalld configurado, asegurémonos de que esté operativo.
[root@CentOS]# firewall-cmd --state
running
[root@CentOS]#
Podemos ver que el servicio firewalld es completamente funcional.
Firewalld trabaja en el concepto de zonas . Se aplica una zona a las interfaces de red a través de Network Manager. Discutiremos esto en la configuración de redes . Pero por ahora, de forma predeterminada, cambiar la zona predeterminada cambiará cualquier adaptador de red que quede en el estado predeterminado de "Zona predeterminada".
Echemos un vistazo rápido a cada zona que viene lista para usar con firewalld .
No Señor. | Zona y descripción |
---|---|
1 | drop Nivel de confianza bajo. Todas las conexiones y paquetes entrantes se descartan y solo las conexiones salientes son posibles a través de statefullness |
2 | block Las conexiones entrantes se responden con un mensaje icmp que le informa al iniciador que la solicitud está prohibida |
3 | public Todas las redes están restringidas. Sin embargo, las conexiones entrantes seleccionadas se pueden permitir explícitamente |
4 | external Configura firewalld para NAT. La red interna sigue siendo privada pero accesible |
5 | dmz Solo se permiten determinadas conexiones entrantes. Utilizado para sistemas en aislamiento DMZ |
6 | work De forma predeterminada, confíe en más computadoras en la red asumiendo que el sistema se encuentra en un entorno de trabajo seguro |
7 | hone De forma predeterminada, hay más servicios sin filtrar. Suponiendo que un sistema está en una red doméstica donde se utilizarán servicios como NFS, SAMBA y SSDP |
8 | trusted Todas las máquinas de la red son de confianza. La mayoría de las conexiones entrantes se permiten sin restricciones.This is not meant for interfaces exposed to the Internet |
Las zonas más comunes para usar son: público, drop, work y home.
Algunos escenarios donde se usaría cada zona común son:
public- Es la zona más utilizada por un administrador. Le permitirá aplicar la configuración personalizada y cumplir con las especificaciones RFC para las operaciones en una LAN.
drop- Un buen ejemplo de cuándo usar drop es en una conferencia de seguridad, en una red WiFi pública o en una interfaz conectada directamente a Internet. drop asume que todas las solicitudes no solicitadas son maliciosas, incluidas las sondas ICMP. Por lo que cualquier solicitud fuera del estado no recibirá respuesta. La desventaja de la caída es que puede romper la funcionalidad de las aplicaciones en ciertas situaciones que requieren un estricto cumplimiento de RFC.
work- Se encuentra en una LAN corporativa semisegura. Donde todo el tráfico puede asumirse como moderadamente seguro. Esto significa que no es WiFi y posiblemente tengamos IDS, IPS y seguridad física o 802.1x en su lugar. También debemos estar familiarizados con las personas que utilizan la LAN.
home- Estás en una LAN doméstica. Usted es personalmente responsable de cada sistema y usuario de la LAN. Conoce todas las máquinas de la LAN y ninguna se ha visto comprometida. A menudo, surgen nuevos servicios para compartir contenido multimedia entre personas de confianza y no es necesario dedicar tiempo adicional por motivos de seguridad.
Las zonas y las interfaces de red funcionan en un nivel de uno a varios. Una interfaz de red solo puede tener una zona aplicada a la vez. Mientras, una zona se puede aplicar a muchas interfaces simultáneamente.
Veamos qué zonas están disponibles y cuál es la zona aplicada actualmente.
[root@CentOS]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
¿Listo para agregar algunas reglas personalizadas en firewalld?
Primero, veamos cómo se ve nuestra caja, para un explorador de puertos desde el exterior.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00046s latency).
Not shown: 1023 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds
bash-3.2#
Permitamos que las solicitudes entrantes lleguen al puerto 80.
Primero, verifique qué zona se aplica por defecto.
[root@CentOs]# firewall-cmd --get-default-zone
public
[root@CentOS]#
Luego, configure la regla que permite al puerto 80 a la zona predeterminada actual.
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp
success
[root@CentOS]#
Ahora, marquemos nuestra casilla después de permitir las conexiones del puerto 80.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00053s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
bash-3.2#
Ahora permite el tráfico no solicitado a 80.
Pongamos la zona predeterminada para eliminar y veamos qué sucede con el escaneo de puertos.
[root@CentOS]# firewall-cmd --set-default-zone=drop
success
[root@CentOS]# firewall-cmd --get-default-zone
drop
[root@CentOs]#
Ahora escaneemos el host con la interfaz de red en una zona más segura.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00094s latency).
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered
Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds
bash-3.2#
Ahora todo está filtrado desde fuera.
Como se demuestra a continuación, el host ni siquiera responderá a las solicitudes de ping ICMP cuando esté en caída .
bash-3.2# ping 10.211.55.1
PING 10.211.55.1 (10.211.55.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Establezcamos la zona predeterminada en pública nuevamente.
[root@CentOs]# firewall-cmd --set-default-zone=public
success
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
Ahora revisemos nuestro conjunto de reglas de filtrado actual en público .
[root@CentOS]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@CentOS rdc]#
Tal como está configurado, nuestra regla de filtro del puerto 80 está solo dentro del contexto de la configuración en ejecución. Esto significa que una vez que se reinicia el sistema o se reinicia el servicio firewalld, nuestra regla se descartará.
Pronto configuraremos un demonio httpd , así que hagamos que nuestros cambios sean persistentes:
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@CentOS]# systemctl restart firewalld
[root@CentOS]#
Ahora, nuestra regla del puerto 80 en la zona pública es persistente entre reinicios y reinicios del servicio.
A continuación se muestran los comandos de firewalld comunes que se aplican con firewall-cmd .
Mando | Acción |
---|---|
firewall-cmd --get-zones | Enumera todas las zonas que se pueden aplicar a una interfaz. |
firewall-cmd —status | Devuelve el estado actual del servicio firewalld |
firewall-cmd --get-default-zone | Obtiene la zona predeterminada actual |
firewall-cmd --set-default-zone = <zona> | Establece la zona predeterminada en el contexto actual |
firewall-cmd --get-active-zone | Obtiene las zonas actuales en contexto según se aplica a una interfaz |
firewall-cmd --zone = <zone> --list-all | Muestra la configuración de la zona suministrada |
firewall-cmd --zone = <zone> --addport = <puerto / protocolo de transporte> | Aplica una regla de puerto al filtro de zona |
--permanente | Hace que los cambios en la zona sean persistentes. La bandera se usa en línea con los comandos de modificación |
Estos son los conceptos básicos para administrar y configurar firewalld .
Configurar servicios de firewall basados en host en CentOS puede ser una tarea compleja en escenarios de redes más sofisticados. El uso y la configuración avanzados de firewalld e iptables en CentOS pueden requerir un tutorial completo. Sin embargo, hemos presentado los conceptos básicos que deberían ser suficientes para completar la mayoría de las tareas diarias.