Cómo configurar un firewall iptable para habilitar el acceso remoto a los servicios en Linux - Parte 8

Cómo configurar un firewall iptable para habilitar el acceso remoto a los servicios en Linux - Parte 8
Ingeniero certificado de la Fundación Linux - Parte 8

Presentación del programa de certificación de la Fundación Linux

Recordarás de la Parte 1 - sobre iptables de este LFCE (Ingeniero certificado de la Fundación Linux ) Serie que dimos una descripción básica de lo que es un firewall: un mecanismo para administrar paquetes que entran y dejando la red. Por "gestionar" realmente queremos decir:

  1. Para permitir o evitar que ciertos paquetes ingresen o salgan de nuestra red.
  2. Para reenviar otros paquetes de un punto de la red a otro.

Basado en criterios predeterminados.

En este artículo discutiremos cómo implementar el filtrado básico de paquetes y cómo configurar el firewall con iptables, un frontend to netfilter, que es un módulo nativo de kernel utilizado para firewalling.

Tenga en cuenta que el firewalling es un tema vasto y este artículo no pretende ser una guía integral para comprender todo lo que hay que saber al respecto, sino como un punto de partida para un estudio más profundo de este tema. Sin embargo, volveremos a visitar el tema en Parte 10 de esta serie cuando exploramos algunos casos de uso específicos de un firewall en Linux.

Puede pensar en un firewall como un aeropuerto internacional donde los aviones de pasajeros van y vienen casi las 24 horas, los 7 días de la semana. Basado en una serie de condiciones, como la validez del pasaporte de una persona, o su país de origen (por nombrar algunos ejemplos), puede, o no, puede ingresar o dejar un cierto país.

Al mismo tiempo, los oficiales del aeropuerto pueden instruir a las personas que se muden de un lugar del aeropuerto a otro si es necesario, por ejemplo, cuando necesitan pasar por servicios aduaneros.

Podemos encontrar útil la analogía del aeropuerto durante el resto de este tutorial. Solo tenga en cuenta las siguientes relaciones a medida que avanzamos:

  1. Personas = paquetes
  2. Firewall = aeropuerto
  3. País #1 = Red #1
  4. País #2 = Red #2
  5. Regulaciones del aeropuerto Funcionadas por oficiales = Reglas de firewall

Iptables - los conceptos básicos

En el nivel bajo, es el núcleo mismo el que "decidir"Qué hacer con los paquetes basados ​​en reglas agrupadas en cadenas, o oraciones. Estas cadenas definen qué acciones deben tomarse cuando un paquete coincide con los criterios especificados por ellos.

La primera acción tomada por iptables consistirá en decidir qué hacer con un paquete:

  1. Acéptalo (déjalo pasar a nuestra red)?
  2. Rechazarlo (evitar que acceda a nuestra red)?
  3. Reenviarlo (a otra cadena)?

En caso de que te estés preguntando por qué se llama a esta herramienta iptables, Es porque estas cadenas están organizadas en tablas, con el mesa de filtro Ser el más bien conocido y el que se utiliza para implementar el filtrado de paquetes con sus tres cadenas predeterminadas:

1. El APORTE La cadena maneja paquetes que entran en la red, que están destinados a programas locales.

2. El PRODUCCIÓN La cadena se utiliza para analizar paquetes originados en la red local, que se enviarán al exterior.

3. El ADELANTE La cadena procesa los paquetes que deben enviarse a otro destino (como en el caso de un enrutador).

Para cada una de estas cadenas hay una política predeterminada, que dicta lo que debe hacerse de forma predeterminada cuando los paquetes no coinciden con ninguna de las reglas de la cadena. Puede ver las reglas creadas para cada cadena y la política predeterminada ejecutando el siguiente comando:

# iptables -l 

Las políticas disponibles son las siguientes:

  1. ACEPTAR → Deja pasar el paquete. Cualquier paquete que no coincida con ninguna regla en la cadena esté permitida en la red.
  2. GOTA → Deja caer el paquete en silencio. Cualquier paquete que no coincida con ninguna regla en la cadena puede ingresar a la red.
  3. RECHAZAR → rechaza el paquete y devuelve un mensaje informativo. Este en particular no funciona como una política predeterminada. En cambio, está destinado a complementar las reglas de filtrado de paquetes.
Políticas de Linux iptables

Cuando se trata de decidir qué política implementará, debe considerar el pros y contras de cada enfoque como se explicó anteriormente: tenga en cuenta que no existe una solución única para todos.

Agregar reglas

Para agregar una regla al firewall, invoque el comando iptables de la siguiente manera:

# iptables -A CRITERIA CRITERIAL -NAME -J Target 

dónde,

  1. -A significa append (adjuntar la regla actual hasta el final de la cadena).
  2. Nombre de la cadena es entrada, salida o avance.
  3. objetivo es la acción, o la política, para aplicar en este caso (aceptar, rechazar o soltar).
  4. criterios es el conjunto de condiciones contra las cuales se deben examinar los paquetes. Se compone de al menos uno (muy probablemente más) de las siguientes banderas. Las opciones interiores entre paréntesis, separados por una barra vertical, son equivalentes entre sí. El resto representa interruptores opcionales:
[-PROTOCOL | -p] protocolo: especifica el protocolo involucrado en una regla. [--source-puerto | -sport] puerto: [puerto]: Define el puerto (o rango de puertos) donde se originó el paquete. [--destination-puerto | -dport] puerto: [puerto]: Define el puerto (o el rango de puertos) al que está destinado el paquete. [--surce | -s] dirección [/máscara]: representa la dirección fuente o la red/máscara. [--Destinación | -d] dirección [/máscara]: representa la dirección de destino o la red/máscara. [--estado] estado (precedido por -metro Estado): Administre paquetes dependiendo de si son parte de una conexión estatal, donde el estado puede ser nuevo, establecido, relacionado o inválido. [--In-Interfaz | -i] interfaz: especifica la interfaz de entrada del paquete. [--out-interfaz | -o] interfaz: la interfaz de salida. [-Jump | -J] objetivo: Qué hacer cuando el paquete coincide con la regla. 

Nuestro entorno de prueba

Peguemos todo eso en 3 ejemplos clásicos utilizando el siguiente entorno de prueba para los dos primeros:

Firewall: Debian Wheezy 7.5 Nombre de host: Dev2.Gabrielcanepa.COM Dirección IP: 192.168.0.15 
Fuente: CentOS 7 Nombre de host: Dev1.Gabrielcanepa.COM Dirección IP: 192.168.0.17 

Y esto para el último ejemplo

NFSV4 Server y Firewall: Debian Wheezy 7.5 Nombre de host: Dirección IP de Debian: 192.168.0.10 
Fuente: Debian Wheezy 7.5 Nombre de host: Dev2.Gabrielcanepa.COM Dirección IP: 192.168.0.15 
Ejemplo 1: Analizar la diferencia entre las políticas de caída y rechazo

Definiremos un GOTA Política primero para los pings de entrada a nuestro firewall. Es decir, los paquetes ICMP se dejarán caer en silencio.

# ping -c 3 192.168.0.15 
# iptables -a entrada --protocol ICMP -In -Interface Eth0 -J Drop 
Solicitud de ping ICMP de soltar

Antes de continuar con el RECHAZAR Parte, eliminaremos todas las reglas de la cadena de entrada para asegurarnos de que nuestros paquetes sean probados por esta nueva regla:

# iptables -f entrada # iptables -a entrada --protocol icmp -in -interfaz eth0 -j rechazar 
# ping -c 3 192.168.0.15 
Rechazar la solicitud de ping ICMP en firewall
Ejemplo 2: Desactivar / volver a habilitar los inicios de sesión SSH de Dev2 a Dev1

Estaremos lidiando con el PRODUCCIÓN cadena mientras manejamos el tráfico saliente:

# iptables -a salida --protocol tcp --destination-puerto 22 --out-interfaz eth0-jump rechazos 
Bloque SSH Iniciar sesión en Firewall
Ejemplo 3: Permitir / prevenir clientes NFS (desde 192.168.0.4/24) para montar acciones NFS4

Ejecute los siguientes comandos en el servidor / firewall NFSV4 para cerrar los puertos 2049 y 111 para todo tipo de tráfico:

# iptables -f # iptables -a entrada -i eth0 -s 0/0 -p tcp --dport 2049 -j rechazar # iptables -a entrada -i eth0 -s 0/0 -p tcp --dport 111 -j rechazar 
Bloquear puertos NFS en firewall

Ahora abramos esos puertos y veamos qué pasa.

# iptables -a entrada -i eth0 -s 0/0 -p tcp --dport 111 -j Aceptar # iptables -a entrada -i eth0 -s 0/0 -p tcp --dport 2049 -j aceptar 
Abrir puertos NFS en firewall

Como puede ver, pudimos montar la compartir NFSV4 después de abrir el tráfico.

Insertar, agregar y eliminar reglas

En los ejemplos anteriores mostramos cómo agregar reglas al APORTE y PRODUCCIÓN cadenas. Si queramos insertarlos en su lugar en una posición predefinida, debemos usar el -I (Eppercase i) Cambie en su lugar.

Debe recordar que las reglas se evaluarán una tras otra, y que la evaluación se detiene (o salta) cuando un GOTA o ACEPTAR La política se combina. Por esa razón, puede encontrarse en la necesidad de mover las reglas hacia arriba o hacia abajo en la lista de la cadena según sea necesario.

Usaremos un ejemplo trivial para demostrar esto:

Verifique las reglas del firewall iptable

Colocemos la siguiente regla,

# iptables -i Entrada 2 -P TCP - -DPORT 80 -J Aceptar 

en la posición 2) en la cadena de entrada (moviendo así el #2 anterior como #3)

Iptables aceptar regla

Usando la configuración de arriba, se verificará el tráfico para ver si está dirigido al puerto 80 Antes de revisar el puerto 2049.

Alternativamente, puede eliminar una regla y cambiar el objetivo de las reglas restantes a RECHAZAR (utilizando el -Riñonal cambiar):

# iptables -d entrada 1 # iptables -nl -v --line -numbers # iptables -r entrada 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j rechazar # iptables -r entrada 1 -p tcp --dport 80 -j rechazar 
Regla de caída de iptables

Por último, pero no menos importante, deberá recordar que para que las reglas del firewall sean persistentes, deberá guardarlas en un archivo y luego restaurarlas automáticamente al arranque (utilizando el método preferido de su elección o el que está disponible para su distribución).

Guardar reglas de firewall:

# iptables-save>/etc/iptables/reglas.v4 [en ubuntu] # iptables-save> /etc /sysconfig /iptables [en centos /openSuse] 

Restauración de reglas:

# iptables-restaure < /etc/iptables/rules.v4 [On Ubuntu] # iptables-restore < /etc/sysconfig/iptables [On CentOS / OpenSUSE] 

Aquí podemos ver un procedimiento similar (guardar y restaurar reglas de firewall a mano) usando un archivo ficticio llamado iptables.vertedero en lugar del predeterminado como se muestra arriba.

# iptables-Save> iptables.vertedero 
Dump Linux iptables

Para hacer que estos cambios sean persistentes a través de las botas:

Ubuntu: Instala el iptable-Persistente paquete, que cargará las reglas guardadas en el /etc/iptables/reglas.v4 archivo.

# apt-get install iPtables-Persistente 

Cento: Agregue las siguientes 2 líneas a /etc/sysconfig/iptables-config archivo.

Iptables_save_on_stop = "Yes" iptables_save_on_restart = "Sí" 

Usura de apertura: Lista permitida puertos, protocolos, direcciones, etc. (separados por comas) en /etc/sysconfig/susefirewall2.

Para obtener más información, consulte el archivo en sí, que se comenta fuertemente.

Conclusión

Los ejemplos proporcionados en este artículo, aunque no cubren todas las campanas y silbatos de iptables, tienen el propósito de ilustrar cómo habilitar y deshabilitar el tráfico entrante o saliente del tráfico saliente.

Para aquellos de ustedes que son fanáticos del firewall, tenga en cuenta que volveremos a visitar este tema con aplicaciones más específicas en Parte 10 de esta LFCE serie.

No dude en avisarme si tiene alguna pregunta o comentario.

Convertirse en ingeniero certificado de Linux