Diferencia entre revisiones de «Iptables»

De La Wiki de KiVi
 
(No se muestran 3 ediciones intermedias del mismo usuario)
Línea 7: Línea 7:
=== ¿Qué es iptables? ===
=== ¿Qué es iptables? ===
<code>iptables</code> es una utilidad de línea de comandos que permite al usuario configurar las reglas de filtrado de paquetes en el kernel de Linux. Funciona examinando los paquetes de red entrantes y salientes y tomando decisiones en función de un conjunto de reglas predefinidas.
<code>iptables</code> es una utilidad de línea de comandos que permite al usuario configurar las reglas de filtrado de paquetes en el kernel de Linux. Funciona examinando los paquetes de red entrantes y salientes y tomando decisiones en función de un conjunto de reglas predefinidas.
Para entender su concepto debemos saber que primero disponemos de '''tablas''' que  definen las acciones que llevan a cabo los paquetes de información, dentro tenemos las '''cadenas''' que definen la dirección del tráfico de red y dentro de cada cadena tendremos un conjunto de '''reglas'''.


=== Componentes clave ===
=== Componentes clave ===
Línea 15: Línea 17:
* '''Tabla <code>filter</code>''': Utilizada para filtrar paquetes y decidir si permitirlos o denegarlos.
* '''Tabla <code>filter</code>''': Utilizada para filtrar paquetes y decidir si permitirlos o denegarlos.
* '''Tabla <code>nat</code>''': Utilizada para modificar las direcciones de origen o destino de los paquetes.
* '''Tabla <code>nat</code>''': Utilizada para modificar las direcciones de origen o destino de los paquetes.
* '''Tabla <code>mangle</code>''': Utilizada para modificar los campos de los paquetes.
* '''Tabla <code>mangle</code>''': Utilizada para modificar los campos específicos de los paquetes.


==== 2. Cadenas ====
==== 2. Cadenas ====
Dentro de cada tabla, <code>iptables</code> utiliza cadenas para organizar las reglas. Las cadenas determinan en qué momento del proceso de red se aplican las reglas. Algunas cadenas comunes son:
En la tabla '''FILTER''' se aplican tren tipos de cadenas que contienen reglas. Las cadenas permiten el sentido y otros detalles de red.
 
Las cadenas son:


* '''Cadena <code>INPUT</code>''': Se aplica a paquetes entrantes.
* '''Cadena <code>INPUT</code>''': Se aplica a paquetes entrantes.
* '''Cadena <code>OUTPUT</code>''': Se aplica a paquetes salientes.
* '''Cadena <code>OUTPUT</code>''': Se aplica a paquetes salientes a la red o al mismo firewall.
* '''Cadena <code>FORWARD</code>''': Se aplica a paquetes que se están reenviando a través del sistema.
* '''Cadena <code>FORWARD</code>''': Se aplica a paquetes que se están reenviando a través del sistema.
En la tabla '''NAT''' tendremos las siguientes cadenas:


==== 3. Objetivos y criterios ====
* Cadena '''OUTPUT''': Permite alterar o modificar paquete generados localmente y antes de enrutar.
Cada regla de iptables tiene un objetivo y un conjunto de criterios que determinan si se aplica a un paquete específico. Algunos objetivos comunes incluyen <code>ACCEPT</code>, <code>DROP</code> y <code>REJECT</code>, que permiten, deniegan o rechazan el tráfico, respectivamente. Los criterios pueden incluir direcciones IP, puertos, interfaces de red, etc.
* Cadena '''PREROUTING''': Permite alterar paquetes tan pronto llegan al firewall, antes de tomar decisión de enrutamiento.
* Cadena '''POSTROUTING''': Permite alterar paquetes al salir del firewall, luego de tomar decisión de enrutamiento.
 
==== 3. Objetivos y criterios, o reglas. ====
Cada regla de iptables tiene un objetivo y un conjunto de criterios que determinan si se aplica a un paquete específico. Algunos objetivos comunes incluyen '''<code>ACCEPT</code>, <code>DROP</code> y <code>REJECT</code>''', que permiten, deniegan o rechazan el tráfico, respectivamente. Los criterios pueden incluir direcciones IP, puertos, interfaces de red, etc.


== Uso básico de iptables ==
== Uso básico de iptables ==
Línea 32: Línea 41:
Para ver las reglas actuales de iptables, puedes usar el comando:
Para ver las reglas actuales de iptables, puedes usar el comando:


<code>iptables -L</code>
<code>iptables -Ln</code>


Este comando mostrará las reglas actuales en cada tabla, así como la política predeterminada para cada cadena.
Este comando mostrará las reglas actuales en cada tabla, así como la política predeterminada para cada cadena.
Línea 39: Línea 48:
Para agregar una nueva regla, puedes utilizar el comando <code>iptables</code> seguido del objetivo y los criterios deseados. Por ejemplo, para permitir el tráfico entrante en el puerto 80 (HTTP), puedes usar:
Para agregar una nueva regla, puedes utilizar el comando <code>iptables</code> seguido del objetivo y los criterios deseados. Por ejemplo, para permitir el tráfico entrante en el puerto 80 (HTTP), puedes usar:
  iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Este comando añadirá una nueva regla a la cadena <code>INPUT</code> que permite el tráfico TCP entrante en el puerto 80.
Este comando añadirá una nueva regla a la cadena <code>INPUT</code> que permite el tráfico TCP entrante en el puerto 80. Si no especificamos la tabla, por defecto apicará la tabla FILTER.


=== Ejemplo completo ===
=== Ejemplo completo sobre el mismo equipo. ===
Supongamos que deseas configurar un cortafuegos básico que permita el tráfico SSH (puerto 22) y HTTP (puerto 80), pero bloquee todo lo demás. Puedes lograrlo con las siguientes reglas:<blockquote># Limpiar todas las reglas existentes
Supongamos que deseas configurar un cortafuegos básico que permita el tráfico SSH (puerto 22) y HTTP (puerto 80,443), pero bloquee todo lo demás sobre el mismo equipo.  
 
Puedes lograrlo con las siguientes reglas:<blockquote># Limpiar todas las reglas existentes


iptables -F
iptables -F


iptables -Z


#Establecer la política predeterminada a DROP (denegar todo)
iptables -t nat -F


iptables -P INPUT DROP


iptables -P FORWARD DROP
#Establecer la política predeterminada a DROP (denegar todo), en las tres cadenas de la tabla FILTER.


iptables -P OUTPUT ACCEPT
iptables -P INPUT -j DROP


iptables -P FORWARD -j DROP
iptables -P OUTPUT - jACCEPT
#Aquí ya empezamods permitir los puertos que permitimos a la entrada del firewall:


#Permitir tráfico SSH (puerto 22)
#Permitir tráfico SSH (puerto 22)
Línea 60: Línea 77:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT


#Permitir tráfico HTTP (puerto 80 y 443)


#Permitir tráfico HTTP (puerto 80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 
 


iptables -A INPUT -p tcp --dport 80 -j ACCEPT</blockquote>Con estas reglas, el tráfico SSH y HTTP será permitido, mientras que todo lo demás será bloqueado.
iptables -A INPUT -p tcp --dport 443 -j ACCEPT</blockquote>Con estas reglas, el tráfico SSH y HTTP será permitido, mientras que todo lo demás será bloqueado.


=== Guardar configuraciones ===
=== Guardar configuraciones ===
Para guardar las configuraciones de iptables y asegurarte de que se apliquen después de reiniciar el sistema, puedes usar el comando:
Para guardar las configuraciones de iptables y asegurarte de que se apliquen después de reiniciar el sistema, puedes usar el comando:

Revisión actual - 09:25 28 ago 2024

Introducción

En el mundo digital actual, la seguridad es una preocupación primordial. Un cortafuegos es una herramienta esencial para proteger los sistemas informáticos contra amenazas externas e internas. En el entorno de Linux, iptables es una herramienta poderosa y flexible para configurar y administrar cortafuegos. En esta entrada de la wiki, exploraremos en detalle cómo funciona iptables y cómo se puede utilizar para asegurar un sistema Linux.

Funcionamiento de iptables

¿Qué es iptables?

iptables es una utilidad de línea de comandos que permite al usuario configurar las reglas de filtrado de paquetes en el kernel de Linux. Funciona examinando los paquetes de red entrantes y salientes y tomando decisiones en función de un conjunto de reglas predefinidas.

Para entender su concepto debemos saber que primero disponemos de tablas que definen las acciones que llevan a cabo los paquetes de información, dentro tenemos las cadenas que definen la dirección del tráfico de red y dentro de cada cadena tendremos un conjunto de reglas.

Componentes clave

1. Tablas

iptables organiza las reglas en diferentes tablas, cada una de las cuales se utiliza para un propósito específico. Las tres tablas principales son:

  • Tabla filter: Utilizada para filtrar paquetes y decidir si permitirlos o denegarlos.
  • Tabla nat: Utilizada para modificar las direcciones de origen o destino de los paquetes.
  • Tabla mangle: Utilizada para modificar los campos específicos de los paquetes.

2. Cadenas

En la tabla FILTER se aplican tren tipos de cadenas que contienen reglas. Las cadenas permiten el sentido y otros detalles de red.

Las cadenas son:

  • Cadena INPUT: Se aplica a paquetes entrantes.
  • Cadena OUTPUT: Se aplica a paquetes salientes a la red o al mismo firewall.
  • Cadena FORWARD: Se aplica a paquetes que se están reenviando a través del sistema.

En la tabla NAT tendremos las siguientes cadenas:

  • Cadena OUTPUT: Permite alterar o modificar paquete generados localmente y antes de enrutar.
  • Cadena PREROUTING: Permite alterar paquetes tan pronto llegan al firewall, antes de tomar decisión de enrutamiento.
  • Cadena POSTROUTING: Permite alterar paquetes al salir del firewall, luego de tomar decisión de enrutamiento.

3. Objetivos y criterios, o reglas.

Cada regla de iptables tiene un objetivo y un conjunto de criterios que determinan si se aplica a un paquete específico. Algunos objetivos comunes incluyen ACCEPT, DROP y REJECT, que permiten, deniegan o rechazan el tráfico, respectivamente. Los criterios pueden incluir direcciones IP, puertos, interfaces de red, etc.

Uso básico de iptables

Visualizar reglas

Para ver las reglas actuales de iptables, puedes usar el comando:

iptables -Ln

Este comando mostrará las reglas actuales en cada tabla, así como la política predeterminada para cada cadena.

Agregar reglas

Para agregar una nueva regla, puedes utilizar el comando iptables seguido del objetivo y los criterios deseados. Por ejemplo, para permitir el tráfico entrante en el puerto 80 (HTTP), puedes usar:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Este comando añadirá una nueva regla a la cadena INPUT que permite el tráfico TCP entrante en el puerto 80. Si no especificamos la tabla, por defecto apicará la tabla FILTER.

Ejemplo completo sobre el mismo equipo.

Supongamos que deseas configurar un cortafuegos básico que permita el tráfico SSH (puerto 22) y HTTP (puerto 80,443), pero bloquee todo lo demás sobre el mismo equipo.

Puedes lograrlo con las siguientes reglas:

# Limpiar todas las reglas existentes

iptables -F

iptables -Z

iptables -t nat -F


  1. Establecer la política predeterminada a DROP (denegar todo), en las tres cadenas de la tabla FILTER.

iptables -P INPUT -j DROP

iptables -P FORWARD -j DROP

iptables -P OUTPUT - jACCEPT


  1. Aquí ya empezamods permitir los puertos que permitimos a la entrada del firewall:
  1. Permitir tráfico SSH (puerto 22)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

  1. Permitir tráfico HTTP (puerto 80 y 443)

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Con estas reglas, el tráfico SSH y HTTP será permitido, mientras que todo lo demás será bloqueado.

Guardar configuraciones

Para guardar las configuraciones de iptables y asegurarte de que se apliquen después de reiniciar el sistema, puedes usar el comando: