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.

[[email protected] 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.

[[email protected]]# firewall-cmd --state 
running 
[[email protected]]#

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.

[[email protected]]# firewall-cmd --get-zones 
 work drop internal external trusted home dmz public block

[[email protected]]# firewall-cmd --get-default-zone 
public
[[email protected]]#

¿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.

[[email protected]]# firewall-cmd --get-default-zone 
public
[[email protected]]#

Luego, configure la regla que permite al puerto 80 a la zona predeterminada actual.

[[email protected]]# firewall-cmd --zone=public --add-port = 80/tcp 
success
[[email protected]]#

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.

[[email protected]]# firewall-cmd --set-default-zone=drop 
success

[[email protected]]# firewall-cmd --get-default-zone 
drop

[[email protected]]#

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.

[[email protected]]# firewall-cmd --set-default-zone=public 
success

[[email protected]]# firewall-cmd --get-default-zone 
public

[[email protected]]#

Ahora revisemos nuestro conjunto de reglas de filtrado actual en público .

[[email protected]]# 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:

[[email protected] 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:

[[email protected]]# firewall-cmd --zone=public --add-port=80/tcp --permanent 
success

[[email protected]]# systemctl restart firewalld

[[email protected]]#

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.