[Red Linux] Firewall de Linux iptables

00. Tabla de contenidos

01. Descripción general de iptables

Insertar descripción de la imagen aquí

En los primeros sistemas Linux, el servicio de administración de firewall iptables se usaba de forma predeterminada para configurar el firewall. Aunque el nuevo servicio de administración de firewall firewalld se ha utilizado durante muchos años, una gran cantidad de empresas continúan utilizando iptables en entornos de producción por varias razones. iptables todavía tiene una vitalidad tenaz en el entorno de producción actual. Las ideas de configuración de cada herramienta de administración de firewall son consistentes y también tienen importancia de referencia al aprender otras herramientas de administración de firewall después de dominar iptables.

02. Estrategia y cadena de reglas.

El firewall leerá las reglas de política configuradas en orden de arriba a abajo. Una vez que se encuentre una coincidencia, finalizará inmediatamente el trabajo de coincidencia y realizará el comportamiento definido en la coincidencia (es decir, permitir o bloquear). Si no hay ninguna coincidencia después de leer todas las reglas de la política, se ejecuta la política predeterminada. En términos generales, existen dos tipos de configuraciones de reglas de política de firewall: "aprobar" (es decir, permitir) y "bloquear" (es decir, bloquear). Cuando la política predeterminada del firewall es denegar (bloquear), debe establecer la regla de permitir (pasar); de lo contrario, nadie podrá ingresar; si la política predeterminada del firewall es permitir, debe establecer la regla de denegar; de lo contrario, nadie puede entrar y el cortafuegos no. Pierde su efecto preventivo.

El servicio iptables llama a las entradas de política utilizadas para procesar o filtrar el tráfico como reglas. Varias reglas pueden formar una cadena de reglas, y la cadena de reglas se clasifica según la ubicación del procesamiento de paquetes de datos, de la siguiente manera:

  • Procesar paquetes antes de enrutarlos (PREROUTING);
  • Procesar paquetes entrantes (ENTRADA);
  • Procesar paquetes de datos salientes (SALIDA);
  • Procesar paquetes reenviados (FORWARD);
  • Procesamiento de paquetes después del enrutamiento (POSTROUTING).

En términos generales, el tráfico enviado desde la red interna a la red externa es generalmente controlable y benigno, por lo que la cadena de reglas más utilizada es la cadena de reglas INPUT, que puede aumentar la dificultad para que los piratas informáticos invadan la red interna desde la red externa.

Por ejemplo, en la comunidad donde usted vive, la empresa administradora de propiedades tiene dos regulaciones: los pequeños comerciantes y vendedores tienen prohibido ingresar a la comunidad; todo tipo de vehículos deben estar registrados al ingresar a la comunidad. Evidentemente, estas dos normas deberían aplicarse en la entrada principal de la comunidad (por donde debe pasar el tráfico), no en las puertas de seguridad de cada vivienda. Dependiendo del orden de coincidencia de las políticas de firewall mencionadas anteriormente, pueden existir varios escenarios. Por ejemplo, si el visitante es un pequeño empresario o un vendedor ambulante, la seguridad de la empresa administradora de la propiedad lo rechazará directamente y no será necesario registrar el vehículo. Si un visitante ingresa por la entrada principal de la comunidad en un automóvil, la primera regla de "prohibido el ingreso de vendedores y vendedores a la comunidad" no coincide, por lo que la segunda política coincide en secuencia, es decir, el vehículo debe estar registrado. . Si un residente de la comunidad desea ingresar por la entrada principal, ninguna de estas dos regulaciones coincidirá, por lo que se implementará la política de liberación predeterminada.

Sin embargo, las reglas de política por sí solas no pueden garantizar la seguridad de la comunidad. Los guardias de seguridad también deben saber qué acciones tomar para lidiar con este tráfico coincidente, como "permitir", "denegar", "registrar" e "ignorar". Estas acciones corresponden a la terminología del servicio iptables: ACEPTAR (permitir el paso del tráfico), RECHAZAR (rechazar el paso del tráfico), LOG (registrar información de registro) y DROP (rechazar el paso del tráfico). "Permitir el paso del tráfico" y "registrar información de registro" son más fáciles de entender. Lo que es necesario explicar aquí es la diferencia entre REJECT y DROP. En lo que respecta a DROP, descarta directamente el tráfico y no responde; REJECT responderá con un mensaje de "se recibió información pero se descartó" después de rechazar el tráfico, para que el remitente del tráfico pueda ver claramente que los datos han Se ha rechazado el mensaje de respuesta.

A continuación se muestra un ejemplo para ayudar a los lectores a comprender la diferencia entre estas dos acciones de rechazo de manera más intuitiva. Por ejemplo, un día estás viendo la televisión en casa y de repente escuchas que alguien llama a la puerta, por la mirilla de la puerta de seguridad ves que es alguien que vende mercancías y abrirás la puerta cuando no lo hagas. lo necesita y rechazarlos (REJECT). Pero si lo que ves es que el acreedor ha traído una docena de sus hombres para cobrar las deudas, no sólo debes negarte a abrir la puerta, sino que también debes quedarte en silencio y hacer como si no estuvieras en casa (DROP).

Cuando la política de firewall en el sistema Linux está configurada para RECHAZAR la acción, el remitente del tráfico verá la respuesta de puerto inalcanzable:

[deng@local ~]# ping -c 4 192.168.1.10
PING 192.168.10.10 (192.168.1.10) 56(84) bytes of data.
From 192.168.10.10 icmp_seq=1 Destination Port Unreachable
From 192.168.10.10 icmp_seq=2 Destination Port Unreachable
From 192.168.10.10 icmp_seq=3 Destination Port Unreachable
From 192.168.10.10 icmp_seq=4 Destination Port Unreachable
--- 192.168.10.10 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3002ms

Después de cambiar la política de firewall en el sistema Linux a la acción DROP, el remitente del tráfico verá un recordatorio de tiempo de espera de respuesta. Sin embargo, el remitente del tráfico no puede determinar si el tráfico se rechaza o si el host receptor está actualmente desconectado:

[deng@local ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.

--- 192.168.10.10 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3000ms

03. comando iptables

iptables es una herramienta de gestión de políticas de firewall basada en línea de comandos con una gran cantidad de parámetros. Afortunadamente, para la configuración diaria de la política de firewall, solo necesita dominar los parámetros utilizados comúnmente y combinarlos de manera flexible, lo cual es suficiente para hacer frente al trabajo diario.

Según la definición del modelo OSI de siete capas, iptables es un servicio que funciona en la segunda, tercera y cuarta capa, por lo que puede compararse en función de la dirección de origen, la dirección de destino, el protocolo de transmisión, el tipo de servicio y otra información. del tráfico; una vez que la coincidencia sea exitosa, iptables se basará en la política. Las acciones preestablecidas por reglas se utilizan para manejar este tráfico. Además, recuérdeme nuevamente que el orden coincidente de las reglas de política de firewall es de arriba a abajo, por lo que las reglas de política más estrictas y de mayor prioridad deben colocarse primero para evitar errores.

Parámetros y funciones de uso común en iptables

parámetro efecto
-PAG Establecer política predeterminada
-F Borrar cadena de reglas
-l Ver cadena de reglas
-A Agregar nuevas reglas al final de la cadena de reglas
-Yo si Agregar nuevas reglas al principio de la cadena de reglas
-D si Eliminar una regla
-s Haga coincidir la dirección de origen IP/MASCARA, agregue un signo de exclamación "!" para indicar excepto esta IP
-d Coincidir con la dirección de destino
-i nombre de la tarjeta de red Haga coincidir los datos que fluyen desde esta tarjeta de red
-o nombre de la tarjeta de red Haga coincidir los datos que fluyen desde esta tarjeta de red
-pag Protocolos coincidentes como TCP, UDP, ICMP
–núm de puerto Coincidir con el número de puerto de destino
–número de deporte Coincidir con el número de puerto de origen

04. ejemplo de iptables

4.1 Agregue el parámetro -L después del comando iptables para ver la cadena de reglas de firewall existente.

deng@local:~/code$ sudo iptables -L 
[sudo] deng 的密码: 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/code$ 

4.2 Agregue el parámetro -F después del comando iptables para borrar la cadena de reglas de firewall existente.

deng@local:~/code$ sudo iptables -F 
deng@local:~/code$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/code$ 

4.3 Establezca la política predeterminada de la cadena de reglas INPUT para denegar.

deng@local:~/桌面$ sudo iptables -P INPUT DROP
[sudo] deng 的密码: 
deng@local:~/桌面$ sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/桌面$ 

Hay dos formas de establecer reglas de política de firewall: "aprobar" y "bloquear". Después de configurar la cadena de ENTRADA para que se rechace de forma predeterminada, debe escribir una política de permiso en ella; de lo contrario, todos los paquetes de datos entrantes se rechazarán de forma predeterminada.

La acción de rechazo de política predeterminada de la cadena de reglas solo puede ser DROP, no REJECT.

4.4 Agregar reglas de política que permitan que el tráfico ICMP ingrese a la cadena de ENTRADA

El comando ping se usa a menudo para verificar si el host de la otra parte está en línea. Agregar una regla de política que permita que el tráfico ICMP ingrese a la cadena de reglas de ENTRADA del firewall permite este comportamiento de detección del comando ping de forma predeterminada.

deng@local:~/桌面$ sudo iptables -I INPUT -p icmp -j ACCEPT
deng@local:~/桌面$ sudo iptables -L 
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

deng@local:~/桌面$ ping -c 4 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
64 bytes from 192.168.1.254: icmp_seq=1 ttl=255 time=29.5 ms
64 bytes from 192.168.1.254: icmp_seq=2 ttl=255 time=16.9 ms
64 bytes from 192.168.1.254: icmp_seq=3 ttl=255 time=34.0 ms
64 bytes from 192.168.1.254: icmp_seq=4 ttl=255 time=18.3 ms

--- 192.168.1.254 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 16.895/24.681/34.016/7.282 ms
deng@local:~/桌面$ 


4.5 Elimine la política que acaba de agregar a la cadena de reglas INPUT (permitir tráfico ICMP) y configure la política predeterminada para permitir.

El uso del parámetro -F borrará todas las políticas de firewall existentes; el uso del parámetro -D puede eliminar una política específica, por lo que es más segura y precisa.

deng@local:~/桌面$ sudo iptables -L 
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/桌面$ sudo iptables -D INPUT 1
deng@local:~/桌面$ sudo iptables -L 
Chain INPUT (policy DROP)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/桌面$ 



deng@local:~/桌面$ sudo iptables -P INPUT ACCEPT
deng@local:~/桌面$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/桌面$ 

4.6 Configure la cadena de reglas INPUT para permitir que solo los hosts en el segmento de red especificado accedan al puerto 22 de la máquina local y deniegue el tráfico de todos los demás hosts.

Para hacer coincidir un determinado host, puede escribir directamente su dirección IP; si necesita hacer coincidir un segmento de red, debe escribirlo en forma de máscara de subred (como 192.168.1.0/24).

deng@local:~$ sudo iptables -I INPUT -s 192.168.2.0/24 -p tcp --dport 22 -j ACCEPT
deng@local:~$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

ACCEPT     tcp  --  192.168.2.0/24       anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~$ 
deng@local:~$ 
deng@local:~$ sudo iptables -A INPUT -p tcp --dport 22 -j REJECT
deng@local:~$ 

deng@local:~/桌面$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.2.0/24       anywhere             tcp dpt:ssh
REJECT     tcp  --  anywhere             anywhere             tcp dpt:ssh reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/桌面$ 


deng@local:~/桌面$ sudo iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
deng@local:~/桌面$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.1.0/24       anywhere             tcp dpt:ssh
ACCEPT     tcp  --  192.168.2.0/24       anywhere             tcp dpt:ssh
REJECT     tcp  --  anywhere             anywhere             tcp dpt:ssh reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~/桌面$ 


4.7 Agregue una regla de política que niegue a todos el acceso al puerto local 12345 a la cadena de reglas INPUT.

deng@local:~$ sudo iptables -I INPUT -p tcp --dport 12345 -j REJECT
deng@local:~$ sudo iptables -I INPUT -p udp --dport 12345 -j REJECT
deng@local:~$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     udp  --  anywhere             anywhere             udp dpt:12345 reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             tcp dpt:12345 reject-with icmp-port-unreachable
ACCEPT     tcp  --  192.168.1.0/24       anywhere             tcp dpt:ssh
ACCEPT     tcp  --  192.168.2.0/24       anywhere             tcp dpt:ssh
REJECT     tcp  --  anywhere             anywhere             tcp dpt:ssh reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~$ 

4.8 Agregue una regla de política que niegue al host 192.168.1.5 acceder al puerto local 80 (servicio web) a la cadena de reglas INPUT.

deng@local:~$ sudo iptables -I INPUT -p tcp -s 192.168.1.5 --dport 80 -j REJECT
deng@local:~$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  192.168.1.5          anywhere             tcp dpt:http reject-with icmp-port-unreachable
REJECT     udp  --  anywhere             anywhere             udp dpt:12345 reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             tcp dpt:12345 reject-with icmp-port-unreachable
ACCEPT     tcp  --  192.168.1.0/24       anywhere             tcp dpt:ssh
ACCEPT     tcp  --  192.168.2.0/24       anywhere             tcp dpt:ssh
REJECT     tcp  --  anywhere             anywhere             tcp dpt:ssh reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~$ 

4.9 Agregue una regla de política que niegue a todos los hosts el acceso a los puertos 1000 a 1024 de la máquina local a la cadena de reglas INPUT.

Al agregar la política de firewall anteriormente, se usó el parámetro -I. De forma predeterminada, agregará la regla a la posición superior, por lo que la prioridad es la más alta. Si necesita agregar una regla "secreta" final en su trabajo, use el parámetro -A. El efecto de estos dos parámetros sigue siendo muy diferente:

deng@local:~$ sudo iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
deng@local:~$ sudo iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
deng@local:~$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  192.168.1.5          anywhere             tcp dpt:http reject-with icmp-port-unreachable
REJECT     udp  --  anywhere             anywhere             udp dpt:12345 reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             tcp dpt:12345 reject-with icmp-port-unreachable
ACCEPT     tcp  --  192.168.1.0/24       anywhere             tcp dpt:ssh
ACCEPT     tcp  --  192.168.2.0/24       anywhere             tcp dpt:ssh
REJECT     tcp  --  anywhere             anywhere             tcp dpt:ssh reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             tcp dpts:1000:1024 reject-with icmp-port-unreachable
REJECT     udp  --  anywhere             anywhere             udp dpts:1000:1024 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
deng@local:~$ 

4.10 La política de firewall configurada entra en vigor de forma permanente

De forma predeterminada, las reglas de firewall configuradas con el comando iptables dejarán de ser válidas la próxima vez que se reinicie el sistema. Si desea que la política de firewall configurada entre en vigor de forma permanente, también debe ejecutar el comando guardar:

deng@local:~$ sudo iptables-save 
# Generated by iptables-save v1.8.7 on Sun Sep 24 10:46:55 2023
*filter
:INPUT ACCEPT [1398:218485]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.1.5/32 -p tcp -m tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p udp -m udp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.2.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 1000:1024 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p udp -m udp --dport 1000:1024 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Sun Sep 24 10:46:55 2023
deng@local:~$ 

05. Discusión

06. Apéndice

Supongo que te gusta

Origin blog.csdn.net/dengjin20104042056/article/details/133234474
Recomendado
Clasificación