GNU/Linux >> Tutoriales Linux >  >> Linux

IPTables de Linux:cómo agregar reglas de firewall (con el ejemplo Permitir SSH)

Este artículo explica cómo agregar reglas de firewall de iptables usando el comando “iptables -A” (agregar).

"-A" es para agregar. Si le resulta más fácil recordar "-A" como regla adicional (en lugar de regla adicional), está bien. Pero tenga en cuenta que "-A" agrega la regla al final de la cadena.

Nuevamente, es muy importante recordar que -A agrega la regla al final.

Por lo general, la última regla será descartar todos los paquetes. Si ya tiene una regla para descartar todos los paquetes, y si intenta usar "-A" desde la línea de comandos para crear una nueva regla, terminará agregando la nueva regla después de la regla actual de "eliminar todos los paquetes", lo que hará que tu nueva regla sea bastante inútil.

Una vez que haya dominado las iptables, y cuando las esté implementando en producción, debe usar un script de shell, donde usa el comando -A para agregar todas las reglas. En ese script de shell, su última línea siempre debe ser la regla "eliminar todos los paquetes". Cuando desee agregar nuevas reglas, modifique ese script de shell y agregue sus nuevas reglas encima de la regla "eliminar todos los paquetes".

Sintaxis:

iptables -A chain firewall-rule
  • -Una cadena:especifica la cadena donde se debe agregar la regla. Por ejemplo, use la cadena INPUT para los paquetes entrantes y OUTPUT para los paquetes salientes.
  • regla de firewall:varios parámetros componen la regla de firewall.

Si no sabe qué significa cadena, es mejor que primero lea sobre los fundamentos de iptables.

Parámetros de regla de cortafuegos

Los siguientes parámetros están disponibles para todo tipo de reglas de firewall.

-p es para protocolo

  • Indica el protocolo de la regla.
  • Los valores posibles son tcp, udp, icmp
  • Use "todos" para permitir todos los protocolos. Cuando no especifica -p, por defecto se usarán "todos" los protocolos. No es una buena práctica usar "todos" y especificar siempre un protocolo.
  • Use el nombre (por ejemplo:tcp) o el número (por ejemplo:6 para tcp) para el protocolo.
  • El archivo
  • /etc/protocols contiene todos los nombres y números de protocolo permitidos.
  • También puedes usar –protocol

-s es para la fuente

  • Indica el origen del paquete.
  • Puede ser una dirección IP, una dirección de red o un nombre de host
  • Por ejemplo:-s 192.168.1.101 indica una dirección IP específica
  • Para máscara de red, use /mask. Por ejemplo:“-s 192.168.1.0/24” representa una máscara de red de 255.255.255.0 para esa red. Esto coincide con la red 192.168.1.x.
  • Cuando no especifica una fuente, coincide con todas las fuentes.
  • También puede usar –src o –source

-d es para el destino

  • Indica el destino del paquete.
  • Es lo mismo que "-s" (excepto que representa el host de destino, la dirección IP o la red)
  • También puede usar –dst o –destination

-j es el objetivo

  • j significa "saltar al objetivo"
  • Esto especifica lo que debe suceder con el paquete que coincide con esta regla de firewall.
  • Los valores posibles son ACCEPT, DROP, QUEUE, RETURN
  • También puede especificar otra cadena definida por el usuario como valor objetivo.

-i es para en la interfaz

  • i significa "interfaz de entrada"
  • Puede pasar por alto esto y asumir que "-i" es para interfaz. Tenga en cuenta que tanto -i como -o son para interfaces. Sin embargo, -i para la interfaz de entrada y -o para la interfaz de salida.
  • Indica la interfaz a través de la cual llegan los paquetes entrantes a través de la cadena INPUT, FORWARD y PREROUTING.
  • Por ejemplo:-i eth0 indica que esta regla debe considerar los paquetes entrantes que llegan a través de la interfaz eth0.
  • Si no especifica la opción -i, todas las interfaces disponibles en el sistema se considerarán para los paquetes de entrada.
  • También puede usar –en-interfaz

-o es para nuestra interfaz

  • o significa "interfaz de salida"
  • Indica la interfaz a través de la cual se envían los paquetes salientes a través de la cadena INPUT, FORWARD y PREROUTING.
  • Si no especifica la opción -o, todas las interfaces disponibles en el sistema se tendrán en cuenta para los paquetes de salida.
  • También puede usar la interfaz de salida

Opciones adicionales para parámetros de cortafuegos

Algunos de los parámetros de firewall anteriores, a su vez, tienen sus propias opciones que se pueden pasar junto con ellos. Las siguientes son algunas de las opciones más comunes.

Para usar estas opciones de parámetros, debe especificar el parámetro correspondiente en la regla de firewall. Por ejemplo, para usar la opción “–sport”, debería haber especificado el parámetro “-p tcp” (o “-p udp”) en su regla de firewall.

Nota:Todas estas opciones tienen dos guiones delante de ellas. Por ejemplo, hay dos guiones delante de sport.

–sport es para el puerto de origen (para -p tcp o -p udp)

  • De forma predeterminada, todos los puertos de origen coinciden.
  • Puede especificar el número de puerto o el nombre. Por ejemplo, para usar el puerto SSH en su regla de firewall, use “–sport 22” o “–sport ssh”.
  • El archivo
  • /etc/services contiene todos los nombres y números de puertos permitidos.
  • Usar el número de puerto en la regla es mejor (para el rendimiento) que usar el nombre del puerto.
  • Para hacer coincidir el rango de puertos, use dos puntos. Por ejemplo, 22:100 coincide con el número de puerto del 22 al 100.
  • También puede usar –source-port

–dport es para el puerto de destino (para -p tcp o -p udp)

  • Todo es igual que –sport, excepto que esto es para los puertos de destino.
  • También puede usar –destination-port

–tcp-flags es para indicadores TCP (para -p tcp)

  • Esto puede contener varios valores separados por comas.
  • Los valores posibles son:SYN, ACK, FIN, RST, URG, PSH. También puede usar TODO o NINGUNO

–icmp-type es para el tipo ICMP (para -p icmp)

  • Cuando usa el protocolo icmp "-p icmp", también puede especificar el tipo de ICMP usando el parámetro "–icmp-type".
  • Por ejemplo:use “–icmp-type 0” para “Echo Reply” y “–icmp-type 8” para “Echo”.

Ejemplo de regla de cortafuegos para permitir conexiones SSH entrantes

Ahora que comprende varios parámetros (y sus opciones) de la regla de firewall, construyamos una regla de firewall de muestra.

En este ejemplo, permitamos solo la conexión SSH entrante al servidor. Todas las demás conexiones se bloquearán (incluido el ping).

ADVERTENCIA:Jugar con las reglas del cortafuegos puede hacer que su sistema sea inaccesible. Si no sabe lo que está haciendo, es posible que se bloquee a sí mismo (y a todos los demás) fuera del sistema. Por lo tanto, haga todo su aprendizaje solo en un sistema de prueba que no sea utilizado por nadie, y tenga acceso a la consola para reiniciar las iptables, si se bloquea.

1. Eliminar reglas existentes

Si ya tiene algunas reglas de iptables, realice una copia de seguridad antes de eliminar las reglas existentes.

Elimine todas las reglas existentes y permita que el cortafuegos acepte todo. Use iptables flush como discutimos anteriormente para limpiar todas sus reglas existentes y comenzar desde cero.

Pruebe para asegurarse de que puede usar ssh y hacer ping a este servidor desde el exterior.

Cuando terminemos con este ejemplo, solo podrá usar SSH en este servidor. No podrá hacer ping a este servidor desde el exterior.

2. Permitir solo SSH

Permita solo la conexión SSH entrante a este servidor. Puede ssh a este servidor desde cualquier lugar.

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

El comando iptables anterior tiene los siguientes 4 componentes.

  • “-A INPUT”:esto indica que estamos agregando una nueva regla (o agregando) a la cadena INPUT. Entonces, esta regla es para el tráfico entrante.
  • “-i eth0”:los paquetes entrantes a través de la interfaz eth0 se comprobarán según esta regla.
  • “-p tcp –dport 22”:esta regla es para paquetes TCP. Tiene una opción de tcp llamada “–dport 22”, que indica que el puerto de destino para esta regla en el servidor es 22 (que es ssh).
  • “-j ACCEPT”:salta para aceptar, que solo ACEPTA el paquete.

En términos simples, la regla anterior se puede establecer como:Se aceptarán todos los paquetes entrantes a través de eth0 para ssh.

3. Elimina todos los demás paquetes

Una vez que haya especificado sus reglas personalizadas para aceptar paquetes, también debe tener una regla predeterminada para descartar cualquier otro paquete.

Esta debería ser tu última regla en la cadena de ENTRADA.

Para descartar todos los paquetes entrantes, haga lo siguiente.

iptables -A INPUT -j DROP

4. Ver la regla SSH y probar

Para ver las reglas actuales del cortafuegos de iptables, use el comando "iptables -L".

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

Como puede ver en el resultado anterior, tiene las siguientes dos reglas en secuencia.

  • Aceptar todas las conexiones ssh entrantes
  • Elimine todos los demás paquetes.

En lugar de agregar las reglas del firewall desde la línea de comandos, podría ser mejor crear un script de shell que contenga sus reglas, como se muestra a continuación.

# vi iptables.sh
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# sh -x iptables.sh
+ iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
+ iptables -A INPUT -j DROP

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

Similar al comando iptables append/add, hay algunos otros comandos disponibles para iptables. Los cubriré en los próximos artículos de la serie iptables. También proporcionaré varios ejemplos prácticos de reglas de firewall que serán útiles en escenarios de la vida real.

Artículos anteriores de la serie iptables:

  • Tutorial de cortafuegos de Linux:tablas IPTables, cadenas, fundamentos de reglas
  • IPTables Flush:eliminar/eliminar todas las reglas en RedHat y CentOS Linux

Linux
  1. Agregar usuario a grupo en Linux, cómo hacerlo (con ejemplos)

  2. Cómo agregar reglas de iptables personalizadas en CSF Firewall

  3. Cómo crear subprocesos en Linux (con un programa de ejemplo en C)

  4. CentOS / RHEL:Cómo agregar reglas de iptable

  5. ¿Cómo hacer que caduquen las reglas de iptables?

Cómo configurar un cortafuegos con UFW en Linux

Cómo configurar el cortafuegos con Gufw en el escritorio de Linux

Cómo configurar un cortafuegos con GUFW en Linux

Cómo proteger un firewall de Linux con reglas de IPTables

Cron Vs Anacron:Cómo configurar Anacron en Linux (con un ejemplo)

Cómo configurar un cortafuegos en su servidor Linux