La comprensión y el uso de iptables en Linux

1. Introducción

        iptables es un software de firewall para el sistema operativo Linux que controla las comunicaciones de red al filtrar, modificar y redirigir el tráfico de red. iptables es un subsistema en el kernel de Linux, que puede configurar firewalls de red ingresando reglas en la línea de comando. iptables puede controlar el tráfico entrante y saliente, permitiendo o bloqueando direcciones IP, protocolos y puertos específicos. Es uno de los software de firewall y seguridad de red más utilizados para sistemas Linux.       

 Las iptables de Linux son muy útiles en aplicaciones empresariales, los ejemplos son los siguientes:

1. Las pequeñas y medianas empresas y los cibercafés tienen iptables como el enrutador NAT de la empresa, que se puede usar para reemplazar los enrutadores tradicionales y ahorrar costos.

2. La sala de computadoras de IDC generalmente no tiene un firewall de hardware, y el servidor en la sala de computadoras de IDC puede usar un firewall de Linux en lugar de un firewall de hardware.

3. iptables se puede combinar con squid como un proxy transparente para el acceso a Internet interno de la empresa. El proxy tradicional necesita configurar la información del servidor proxy en el navegador, pero el proxy transparente de iptables+squid puede redirigir la solicitud del cliente al puerto del servidor proxy. El cliente no necesita realizar ninguna configuración, pero no siente la existencia del proxy.

4. Al usar iptables como un enrutador NAT empresarial, puede usar el módulo de extensión de iptables para proteger el tráfico P2P y también puede prohibir las páginas web ilegales.

5.iptables se puede utilizar para asignar IP de red externa a IP de red interna.

6.iptables puede prevenir fácilmente ataques de DOS ligeros, como ataques de ping y ataques de inundación SYN.

        Por lo tanto, Iptables tiene principalmente dos modos de aplicación: firewall de host y enrutador NAT .

2. netfilter e iptables

        Netfilter es un marco de firewall del núcleo Linux 2.4 propuesto por Rusty Russell. Este marco es conciso y flexible, y puede realizar muchas funciones en la aplicación de políticas de seguridad, como filtrado de paquetes, procesamiento de paquetes, enmascaramiento de direcciones, proxy transparente, traducción dinámica de direcciones de red. (Traducción de direcciones de red, NAT) y control de acceso de usuarios y medios (Control de acceso a medios, MAC), filtrado basado en direcciones y filtrado basado en estado, limitación de velocidad de paquetes, etc. Estas reglas de Iptables/Netfilter se pueden combinar de manera flexible para formar muchas funciones y cubrir todos los aspectos, todo gracias a sus excelentes ideas de diseño.

  Netfilter es un módulo de procesamiento de paquetes dentro de la capa central del sistema operativo Linux, tiene las siguientes funciones:

1. Traducir dirección de red

2. Modificación del contenido del paquete de datos

3. Cortafuegos de filtrado de paquetes

La plataforma Netfilter ha formulado cinco puntos de montaje para paquetes de datos (Punto de enganche, podemos entenderlo como un punto de función de devolución de llamada, cuando el paquete de datos llega a estas ubicaciones, llamará activamente a nuestra función, de modo que tengamos la oportunidad de cambiar su dirección, contenido), estos cinco puntos de montaje son PRE_ROUTING, INPUT, OUTPUT, FORWARD, respectivamente POST_ROUTING.

 

Las reglas establecidas por Netfilter se almacenan en la memoria del kernel, e iptables es una aplicación de capa de aplicación que modifica las XXtables (tabla de configuración de Netfilter) almacenadas en la memoria del kernel a través de la interfaz lanzada por Netfilter. Este XXtables consta de tablas tables, cadenas chainsy reglas rules, e iptables es responsable de modificar este archivo de reglas en la capa de aplicación. Una aplicación similar es firewalld.

3. Componentes básicos de iptables

3.1 Tabla de la Regla 4

Las cuatro tablas de la regla son: tabla de filtro, tabla nat, tabla mangle, tabla raw.

3.1.1  tabla de filtros

Se utiliza principalmente para filtrar paquetes de datos y decidir si liberar los paquetes de datos de acuerdo con reglas específicas (como DROP, ACCEPT, REJECT, LOG). El módulo del núcleo correspondiente a la tabla de filtros es iptable_filter, que contiene tres cadenas de reglas:

INPUTcadena: ENTRADA para paquetes cuyo destino es local

FORWARDCadena: FORWARD filtra todos los que no se generan localmente y el destino no es local (es decir, la máquina local solo se encarga del reenvío)

OUTPUTcadena: OUTPUT se usa para filtrar todos los paquetes generados localmente    

3.1.2 tabla nacional

Se utiliza principalmente para modificar la dirección IP, el número de puerto y otra información del paquete de datos (traducción de direcciones de red, como SNAT, DNAT, MASQUERADE, REDIRECT). Los paquetes que pertenecen a un flujo (datos que se pueden dividir en varios paquetes debido a las limitaciones de tamaño de los paquetes) solo pasarán por esta tabla una vez. Si se permite que el primer paquete sea NAT o Enmascarado, entonces el resto de los paquetes automáticamente harán lo mismo, es decir, el resto de los paquetes no pasarán por esta tabla. El módulo del núcleo correspondiente a la tabla es iptable_nat, que contiene tres cadenas de reglas:

PREROUTINGCadena: La función es cambiar la dirección de destino del paquete cuando recién llega al firewall

OUTPUTcadena: cambiar la dirección de destino de un paquete generado localmente

POSTROUTINGEncadenamiento: cambiar la dirección de origen de un paquete justo antes de que abandone el cortafuegos

3.1.3 mangle tabla

Se utiliza principalmente para modificar el índice TOS (Tipo de servicio, tipo de servicio), TTL (Tiempo de vida, ciclo de vida) del paquete de datos y establecer la marca Mark para que el paquete de datos realice Qos (Calidad de servicio, calidad del servicio). ) Ajuste y enrutamiento de políticas Y otras aplicaciones, debido a la necesidad de soporte de equipo de enrutamiento correspondiente, por lo que la aplicación no es extensa. Contiene cinco cadenas de reglas: PRE-ENRUTAMIENTO, POST ENRUTAMIENTO, ENTRADA, SALIDA, ADELANTE

3.1.4 tabla sin procesar

Es una tabla de iptables recientemente agregada desde la versión 1.2.9 Se utiliza principalmente para determinar si el paquete de datos es procesado por el mecanismo de seguimiento de estado. Al hacer coincidir los paquetes, las reglas de la tabla sin procesar tienen prioridad sobre otras tablas. Contiene dos cadenas de reglas: OUTPUT, PREROUTING.

3.2 Cinco cadenas de reglas

Al procesar varios paquetes de datos, de acuerdo con los diferentes tiempos de intervención de las reglas del firewall, iptables proporciona 5 cadenas de reglas predeterminadas y comprende estas cadenas desde la perspectiva del tiempo de la aplicación.

INPUTCadena: aplica las reglas de esta cadena cuando se recibe un paquete (entrante) para la dirección nativa del cortafuegos.

OUTPUTCadena: las reglas de esta cadena se aplican cuando el cortafuegos envía paquetes de forma nativa (salientes).

FORWARDCadena: Las reglas de esta cadena se aplican cuando se reciben paquetes que deben enviarse a otras direcciones a través del firewall (reenvío).

PREROUTINGCadena: aplique las reglas de esta cadena, como DNAT, antes de enrutar el paquete.

POSTROUTINGCadena: aplica las reglas de esta cadena, como SNAT, después de enrutar el paquete.

Las cadenas INPUT y OUTPUT se utilizan principalmente en el "servidor de seguridad del host", que tiene como objetivo principal el control de seguridad de los datos entrantes y salientes del propio servidor.

Las cadenas de FORWARD , PREROUTING y POSTROUTING se aplican principalmente en "firewall de red", especialmente cuando el servidor de firewall se utiliza como puerta de enlace.

4. El principio del enrutamiento de paquetes de datos

¿Cómo funciona esta tabla de Xtables en el enrutamiento de paquetes de la pila de protocolos del kernel?

Proceso de trabajo:

El paquete de datos del puerto de red es recibido por la NIC de la tarjeta de red subyacente y, después de desempaquetarse a través de la capa de enlace de datos (eliminando el encabezado del marco del enlace de datos), ingresa a la pila de protocolos TCP/IP (esencialmente, un controlador del kernel que procesa los paquetes de datos de la red) y el flujo de procesamiento de paquetes mixtos de Netfilter. El proceso de recepción, procesamiento y reenvío de paquetes de datos constituye una máquina vectorial de estado finito, que pasa a través de una serie de funciones de procesamiento del kernel y puntos Netfilter Hook, y finalmente es reenviado o digerido por la aplicación de la capa superior.

Encontré una buena imagen, de la siguiente manera:

De la figura anterior, podemos concluir las siguientes reglas

1. Cuando un paquete de datos ingresa a la tarjeta de red, el paquete de datos ingresa primero a la cadena PREROUTING.En la cadena PREROUTING, tenemos la oportunidad de modificar el DestIP (IP de destino) del paquete de datos, y luego el "módulo de enrutamiento" de el kernel de acuerdo con la "IP de destino del paquete de datos" y "La tabla de enrutamiento en el kernel" determina si es necesario reenviarlo (tenga en cuenta que es posible que nosotros hayamos modificado la DestIP del paquete de datos en este momento)

2. Si el paquete de datos ingresa a la máquina (es decir, la IP de destino del paquete de datos es la IP del puerto de red de la máquina), el paquete de datos descenderá a lo largo del gráfico y llegará a la cadena de ENTRADA . Una vez que un paquete llega a la cadena INPUT, cualquier proceso lo recibirá.

3. El programa que se ejecuta en esta máquina también puede enviar paquetes de datos, estos paquetes de datos pasan por la cadena de SALIDA y luego llegan a la salida de la cadena POSTROTING (tenga en cuenta que el SrcIP del paquete de datos puede haber sido modificado por nosotros en este momento )

4. Si se va a reenviar el paquete de datos (es decir, la dirección IP de destino ya no está en la subred actual) y el kernel permite el reenvío, el paquete de datos se moverá hacia la derecha, pasará por la cadena FORWARD y luego llegue a la salida de la cadena POSTROUTING (seleccione el puerto de red de subred correspondiente para enviar)

         Al escribir reglas de iptables, puede configurar las reglas de manera flexible de acuerdo con el diagrama de secuencia de enrutamiento y de acuerdo con los diferentes puntos de enlace.

5. Reglas de escritura de iptables

 Formato de comando:

 Ejemplo:

iptables -I INPUT -s 0/0 -d 192.168.42.153 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
iptables -t filter -I INPUT -d 192.168.42.153 -p tcp --dport 80 -j ACCEPT 

5.1 tabla + comando

[-t 表名]: Qué tabla es operada por la regla, puede usar filter, nat, etc., si no se especifica, el valor predeterminado es filter

    • -A: agregue una nueva regla a la última línea de la lista de cadenas de reglas
    • -I: inserte una regla, la regla original en esta posición se moverá hacia atrás secuencialmente, si no se especifica un número, será 1
    • -D: elimine una regla de la cadena de reglas, ingrese la regla completa o especifique el número de regla para eliminar
    • -R: Reemplace una determinada regla, el reemplazo de la regla no cambiará el orden y se debe especificar el número.
    • -P: establece la acción predeterminada de una cadena de reglas
    • -nL: -L, -npara ver la lista de reglas de firewall actualmente en ejecución

5.2 cadena + parámetro

chain名: especifica qué cadena de la tabla de reglas, como INPUT, OUPUT, FORWARD, PREROUTING, etc.

    • [规则编号]: Se usa al insertar, eliminar y reemplazar reglas, --line-numbersmostrando el número
    • [-i|o 网卡名称]: i especifica de qué tarjeta de red entra el paquete de datos y o especifica de qué tarjeta de red sale el paquete de datos
    • [-p 协议类型]: puede especificar el protocolo al que se aplica la regla, incluidos tcp, udp e icmp, etc.
    • [-s 源IP地址]: dirección IP o dirección de subred del host de origen
    • [--sport 源端口号]: El número de puerto de origen de la IP del paquete
    • [-d目标IP地址]: dirección IP o dirección de subred del host de destino
    • [--dport目标端口号]: El número de puerto de destino de la IP del paquete

5.2.1 m

-m: extender coincidencias, esta opción se utiliza para proporcionar más parámetros coincidentes, como:

    • -m estado --estado ESTABLECIDO, RELACIONADO
    • -m tcp --puerto 22
    • -m multipuerto --dports 80,8080
    • -m icmp --icmp-tipo 8

5.3 objetivo

<-j 动作>: Acciones para procesar paquetes de datos, incluyendo ACEPTAR, ELIMINAR, RECHAZAR, etc.

    • ACCEPT: Permitir el paso de paquetes
    • DROP: descartar directamente el paquete de datos sin dar ninguna información de respuesta
    • REJECT: Rechace el paquete de datos, si es necesario, enviará un mensaje de respuesta al remitente de datos.

    • SNAT: traducción de la dirección de origen. Después de ingresar la ruta en el nivel de enrutamiento y antes de salir de la pila de la red local, la dirección de origen se reescribe, la dirección de destino permanece sin cambios y se establece una entrada NAT en la máquina local. Cuando los datos regresan, los datos de la dirección de destino se reescriben como datos de acuerdo con la tabla NAT y enviados cuando la dirección de origen, y enviados al host. Resolver el problema de que los usuarios de la intranet utilizan la misma dirección pública para acceder a Internet.
      MASQUERADE, es una forma especial de SNAT, adecuada para el cambio temporal de ip como adsl

    • DNAT: Traducción de la dirección de destino. A diferencia de SNAT, antes de que el paquete IP pase por la ruta, la dirección de destino se vuelve a modificar, la dirección de origen permanece sin cambios y se establece una entrada NAT en la máquina local. Cuando se devuelven los datos, la dirección de origen se modifica para la dirección de destino cuando los datos se envían de acuerdo con la tabla NAT y al mismo tiempo al host remoto. La dirección real del servidor backend se puede ocultar. (Gracias al internauta por sugerir que este lugar y SNAT se invirtieron)
      REDIRECT: es una forma especial de DNAT, que reenvía paquetes de red al host local (independientemente de la dirección de destino especificada en el encabezado IP), lo cual es conveniente para el puerto reenvío en la máquina local.

    • LOG: registre la información de registro en el archivo /var/log/messages y luego pase el paquete a la siguiente regla

        Excluyendo la última LOG, después de que las primeras 3 reglas coincidan con el paquete de datos, el paquete de datos no seguirá coincidiendo, por lo que el orden de las reglas escritas es extremadamente crítico.

5.3.1 SNAT y DNAT

        Los cortafuegos de Linux a menudo son responsables de conectar las redes internas y externas de la empresa.Además de proporcionar funciones de filtrado de paquetes, a veces también necesitan proporcionar algunas aplicaciones de puerta de enlace básicas. Antes de configurar SNAT y DNAT, debe habilitar la función de reenvío de direcciones en el sistema Linux; de lo contrario, los datos no se pueden reenviar a través del firewall.

修改/etc/sysctl.conf配置文件件,将ip_forward的值设置为1即可。

[root@localhost /]#vim /etc/sysctl.conf
......//省略部分内容
net.ipv4.ip_forwaed=1 //将此行中的0改为1

[root@localhost /]#sysctl -p //重新读取修改后的配置

也可以开启临时的路由转发,可以执行以下操作。
[root@localhost /]#echo 1> /proc/sys/net/ipv4/ip_forward
或者
[root@localhost /]#sysctl -w net.ipv4.ip_forward=1

5.3.1.1 Estrategia y aplicación de SNAT

SNAT: Source Address Translation es una operación de traducción de direcciones del firewall de Linux y un tipo de control de paquetes en el comando iptables Su función es modificar la dirección IP de origen del paquete de acuerdo con las condiciones especificadas.
La estrategia SNAT solo se puede usar en la cadena POSTROUTING de la tabla nat.Al usar el comando iptables para escribir la estrategia SNAT, debe combinar la opción "--to-source IP address" para especificar la dirección IP de origen modificada.

Ejemplo de escenario: el servidor de puerta de enlace de Linux está conectado a Internet y a la LAN a través de eth0 y eth1 respectivamente, donde la dirección IP de eth0 es 218.29.30.31 y la dirección IP de eth1 es 192.168.1.1. Ahora es necesario configurar reglas en el servidor de puerta de enlace de Linux, de modo que todos los usuarios de la LAN puedan acceder a Internet mediante el uso compartido. Puedes hacer lo siguiente:

1) Active el enrutamiento y el reenvío, consulte la sección anterior.
2) Escriba las reglas de SNAT en POSTROUTING de iptables.

[root@localhost /]#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31


3) En algunos casos, la dirección IP de la red externa de la puerta de enlace puede no ser fija. Por ejemplo, cuando se utiliza el acceso de banda ancha ADSL, iptables proporciona un tipo de control de paquetes de datos llamado MASQUERASE (masquerading), MASQUERADE es equivalente a un caso especial de SNAT También modifica la dirección IP de origen del paquete de datos, pero puede obtener automáticamente la dirección IP de la interfaz de red externa.
En referencia al caso SNAT anterior, si desea utilizar la estrategia de enmascaramiento MASQUERADE, solo necesita eliminar "--a la dirección IP de origen" en la estrategia SNAT. En cambio, "-j MASQUERADE" especifica el tipo de control del paquete. Para las conexiones de banda ancha ADSL, los nombres de conexión suelen ser ppp0, ppp1, etc. El funcionamiento es el siguiente

[root@localhost /]#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE


4) Probar el resultado del acceso compartido SNAT
Igual que la configuración anterior, ahora la dirección IP utilizada por la LAN interna para acceder a Internet es la dirección de interfaz de red externa del servidor de puerta de enlace. Podemos ejecutar "tcpdump -i eth0" en el cliente externo para monitorear y acceder al flujo de datos local, luego hacer ping al cliente de la red externa en la red interna y luego verificar el estado de monitoreo del cliente de la red externa. acceso al cliente de red externo La dirección IP es la dirección de la interfaz de red externa del servidor de puerta de enlace, no la dirección LAN interna.

5.3.1.2 Estrategia y aplicación de DNAT

DNAT: La traducción de direcciones de destino es otra operación de traducción de direcciones del firewall de Linux. También es un tipo de control de paquetes en el comando iptables. Su función es modificar la dirección IP de destino y el puerto de destino del paquete de datos de acuerdo con las condiciones especificadas.

La estrategia DNAT es muy similar a la estrategia SNAT, pero se invierte la dirección de aplicación.

SNAT se usa para modificar la dirección IP de origen, mientras que DNAT se usa para modificar la dirección IP de destino y el puerto de destino;

SNAT solo se puede usar en la cadena POSTROUTING de la tabla nat, y DNAT solo se puede usar en la cadena PREROUTING y OUTPUT de la tabla nat.

Ejemplo 1: con la ayuda del entorno de red anterior, se configura un servidor web en la LAN interna de la empresa con una dirección IP de 192.168.1.7. Ahora debe publicarse en Internet, con la esperanza de acceder al servidor web a través del Internet. Entonces podemos hacer lo siguiente

[root@localhost /]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.7:80

Ejemplo 2: El servidor web de la empresa 192.168.1.7 necesita ser administrado de forma remota a través de Internet. Por cuestiones de seguridad, el administrador no quiere usar el puerto predeterminado para acceder. En este momento, podemos usar DNAT para modificar el puerto predeterminado. del servicio El funcionamiento es el siguiente

[root@localhost /]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.7:22

Después de hacer esto, acceda a la interfaz de red externa del servidor de la puerta de enlace en el navegador del cliente de la red externa, y puede encontrar que la página web a la que se accede es en realidad el servidor web de la red interna 192.168.1.7. Al usar sshd para conectarse al puerto 2346, es posible conectarse de forma remota al servidor 192.168.1.7.

6. Ejemplos

6.1 Método de configuración de un requisito

necesidad:

1. El puerto de red en 0 (10.0.0.1) es un puerto de red AP falso. Después de que el cliente de destino se conecte al puerto de red AP falso en 0,
   iniciará
   a la dirección IP del cliente..0.100 y establezca la puerta de enlace predeterminada del cliente en 10.0.0.1 (es decir, la dirección IP de at0) y el
   servidor DNS predeterminado en 10.0.0.1 (es decir,
la dirección IP de at0) El tráfico de entrada se dirige a la interfaz de la tarjeta de red
   eth0 (192.168.159.254) que y
se realiza un servicio NAT 3. El tráfico DHCP (difusión de paquetes de datos con el puerto de destino 67) de la red se libera el puerto at0 (10.0.0.1),
   porque necesitamos asumir un servidor DHCP en el servidor donde se encuentra el AP falso
4. Deje que se libere el tráfico DNS (puerto de destino 53) del puerto de red at0 (10.0.0.1) ,
   porque necesitamos asumir un servidor DNS en el servidor donde se encuentra el AP falso

Idea de configuración:

Encienda el interruptor de enrutamiento y reenvío de Linux, porque la máquina reenvía los paquetes de datos

echo "1" > /proc/sys/net/ipv4/ip_forward

NAT el tráfico HTTP del cliente y cambie el SrcIP del paquete de datos

Tenga en cuenta que es POSTROUTING (modificación antes de que el paquete de datos esté a punto de enviarse)

iptables -t nat -A POSTROUTING -p tcp -s 10.0.0.0/24 --dport 80 -j SNAT --to-source 192.168.159.254

Realice NAT en el tráfico HTTP devuelto por el servidor WEB remoto y rediríjalo de vuelta al cliente. Tenga en cuenta que está en PREROUTING (el paquete de datos se modifica inmediatamente después de ingresar a la pila de protocolos)

iptables -t nat -A PREROUTING -p tcp -d 192.168.159.254 -j DNAT --to 10.0.0.100

Especificamos en el servidor DHCP que el servidor DNS predeterminado del cliente es 10.0.0.1 (esta máquina), que es un pseudo-DNS, pero aún no he configurado DNS en esta máquina, por lo que todavía necesito NAT los datos DNS paquetes en el puerto 53. Tracción al DNS de Google: 8.8.8.8

iptables -t nat -A PREROUTING -p udp -s 10.0.0.0/24 --dport 53 -j DNAT --to 8.8.8.8
iptables -t nat -A POSTROUTING -p udp -s 10.0.0.0/24 --dport 53 -j SNAT --to-source 192.168.159.254
iptables -t nat -A PREROUTING -p udp -d 192.168.159.254 --sport 53 -j DNAT --to 10.0.0.100
iptables -t nat -A POSTROUTING -p udp -s 8.8.8.8 --sport 53 -j SNAT --to-source 10.0.0.1

6.2 Escriba iptables para rechazar paquetes que pasan icmp (coincidencia de protocolo)

iptables -A INPUT -p icmp -j DROP

6.3 Escriba iptables para negarse a reenviar paquetes de 192.168.1.0/24 a 202.106.123.0/24 (coincidencia de dirección)

Al escribir reglas de iptables, especifique en forma de "-s dirección de origen" o "-d dirección de destino", que se utiliza para verificar la dirección de origen o la dirección de destino del paquete de datos.

iptables -A FORWARD -s 192.168.1.0/24 -d 202.106.123.0/24 -j DROP

6.4 Negarse a hacer ping al host del cortafuegos desde la interfaz NIC eth1 del cortafuegos (la interfaz de red coincide)

Al escribir reglas de iptables, use las formas de "-i nombre de interfaz" y "-o nombre de interfaz", que se usan para verificar a qué interfaz ingresa o envía el paquete de datos desde el firewall, correspondiente a la tarjeta de red entrante (-- interfaz de entrada) y la tarjeta de red de salida (--interfaz de entrada) respectivamente. NIC de la estación (--interfaz de salida).

iptables -A INPUT -i eth1 -p icmp -j DROP

6.5 Escribir reglas de iptables para permitir el paso de paquetes FTP (coincidencia de puertos)

Al escribir reglas de iptable, use la forma de "--sport source port" o "--dport". El protocolo de destino es TCP o UDP, que se usa para verificar el puerto de origen o el puerto de destino del paquete de datos. Se acepta un solo puerto o un rango de puertos separados por ":", pero no se admiten varios números de puerto discontinuos.

[root@localhost /]#iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost /]#iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT

6.6 Denegar la solicitud TCP de la interfaz de la tarjeta de red externa (eth1) para acceder directamente al propio cortafuegos, pero se deben permitir los paquetes de datos de respuesta TCP enviados por otros hosts al cortafuegos (coincidencia de bandera TCP)

Al escribir reglas de iptables, use la forma de "--tcp-flags check range is set flag", el protocolo para TCP se usa para verificar el bit de bandera del paquete de datos. Entre ellos, el "rango de inspección" indica los bits de la bandera que deben inspeccionarse en el paquete de datos, y la "bandera establecida" coincide claramente con la bandera con un valor correspondiente de 1, y las banderas múltiples están separadas por comas.

[root@localhost /]#iptables -A INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP

6.7 Está prohibido hacer ping al firewall desde otros hosts, pero permita que el firewall haga ping a otros hosts (coincidencias de tipo ICMP)

Al escribir reglas de iptables, use la forma "--icmp-type ICMP type", y el protocolo de destino es ICMP, que se usa para verificar el tipo de paquetes de datos ICMP. El tipo ICMP está representado por una cadena o un código numérico, como "Echo-quest" (código 8), "Echo-Reply" (código 0) y "Destino-Unreachable" (código 3), correspondiente al protocolo ICMP solicitudes, se muestra que el objetivo es inalcanzable.

[root@localhost /]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost /]#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost /]#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT

6.8 Permita que la máquina abra puertos como 25, 80, 110, 143, etc., para proporcionar servicios de correo electrónico (coincidencia de múltiples puertos)

Al escribir reglas de iptables, use la forma de "-m multiport --dport port list" o "-m multiport --sport port list" para verificar el puerto de origen y el puerto de destino del paquete de datos, y los puertos múltiples están separados por comas .

[root@localhost /]#iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

6.9 Permitir el reenvío de paquetes TCP cuya IP de origen esté entre 192.168.4.21 y 192.168.4.28 (coincidencia de rango de direcciones IP)

Al escribir reglas de iptables, use la forma de "-m iprange --src-range IP range" y "-m -iprange --dst-range IP address range" para verificar la dirección de origen, la dirección de destino y el rango de IP del paquete de datos Se expresa en forma de "dirección de inicio-dirección de fin".

[root@localhost /]#iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

6.10 Bloquear el host de acuerdo con la dirección MAC, prohibiéndole acceder a cualquier aplicación en la máquina (coincidencia de direcciones MAC)

Al escribir las reglas de iptables, use la forma "-m mac --mac-dirección MAC de origen" para verificar la dirección MAC de origen del paquete de datos. Debido a las limitaciones de la propia dirección MAC, estas condiciones de coincidencia generalmente solo se aplican a las redes internas.

[root@localhost /]#iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP

6.11 Solo se abre el puerto 80 de la máquina local, se permiten los paquetes de datos de respuesta TCP enviados a la máquina local y se rechazan otros paquetes de datos entrantes (coincidencia de estado)

Al escribir reglas de iptables, use la forma "-m state --state connection state", y el mecanismo de seguimiento de estado basado en iptables se usa para verificar el estado de conexión de los paquetes de datos. Los estados de conexión comunes incluyen NUEVO (como irrelevante para cualquier conexión), ESTABLECIDO (correspondiente a una solicitud o establecimiento de una conexión), RELACIONADO (relacionado con una conexión existente, como una conexión de datos FTP).

[root@localhost /]#iptables -A INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[root@localhost /]#iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

6.12 Un ejemplo completo

Suponemos que la interfaz ppp0 conduce a Internet y la interfaz eth0 conduce a la red interna.
La dirección IP de ppp0 es 128.138.101.4, la dirección IP de eth0 es 10.1.1.1 y la máscara de subred de ambas interfaces es 255.255.255.0.
Este ejemplo utiliza el filtrado de paquetes sin estado para proteger un servidor web con la dirección IP 10.1.1.2, que es la forma estándar de proteger los servidores de Internet.
Más adelante en este ejemplo, mostraremos cómo usar mecanismos de filtrado con estado para proteger a los usuarios de escritorio.
Antes de usar iptables, debe habilitar la función de reenvío de IP (reenvío de IP) y asegurarse de que cada módulo de iptables se haya cargado en el kernel. Consulte la sección 5.3.1 de este artículo para la configuración.Todas
las distribuciones con iptables también tienen un script de inicio que habilita y carga.

1. El primer conjunto de reglas es inicializar la tabla de filtros.
Primero, elimine todas las cadenas de la tabla,
luego establezca el destino predeterminado de las cadenas INPUT y FORWARD en DROP.
Al igual que con cualquier otro firewall de red, la política más segura es descartar cualquier paquete que no permita explícitamente.

# iptables -F
# iptables -P INPUT DROP       // 如果是用SSH连接进行设置,不要用这条命令,会导致SSH断开;
# iptables -P FORWARD DROP

2. Las reglas se emparejan en el orden en que aparecen en la cadena, por lo que ponemos las reglas más utilizadas primero.
Las tres primeras reglas de la cadena FORWARD permiten que las conexiones al servicio web en 10.1.1.2 atraviesen el cortafuegos.
Específicamente, permitimos SSH (puerto 22), HTTP (puerto 80) y HTTPS (puerto 443) en nuestro servidor web.
La primera regla permite todas las conexiones de redes confiables a través del firewall.

# iptables -A FORWARD -i eth0 -p ANY -j ACCEPT
# iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 22  -j ACCEPT
# iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 80  -j ACCEPT
# iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 443 -j ACCEPT

3. El único tráfico TCP que permitimos al servidor de seguridad (10.1.1.1) es SSH, que se utiliza para administrar el servidor de seguridad.
La segunda regla que se enumera a continuación permite el tráfico de bucle invertido, que permanece local para el servidor de seguridad.
Nuestros administradores de sistemas se ponen nerviosos cuando no pueden hacer ping en la ruta predeterminada,
por lo que la tercera regla aquí permite paquetes ICMP ECHO_REQUEST desde direcciones IP internas.

# iptables -A INPUT -i eth0 -d 10.1.1.1  -p tcp --dport 22     -j ACCEPT
# iptables -A INPUT -i lo   -d 127.0.0.1 -p ANY                -j ACCEPT
# iptables -A INPUT -i eth0 -d 10.1.1.1  -p icmp --icmp-type 8 -j ACCEPT 

4. Para que cualquier host TCP/IP funcione correctamente en Internet, se debe permitir que ciertos tipos de paquetes ICMP pasen a través del firewall.
Las siguientes 8 reglas son el conjunto mínimo que permite que los paquetes ICMP se envíen tanto al host del cortafuegos como a la red detrás de él.

# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 5 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
# iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 0 -j ACCEPT
# iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 3 -j ACCEPT
# iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 5 -j ACCEPT
# iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 11 -j ACCEPT

5. A continuación, agregue reglas a la cadena PREROUTING de la tabla NAT. Aunque el propósito de la tabla NAT no es el filtrado de paquetes,
su cadena PREROUTING es especialmente útil para el filtrado contra la suplantación de IP.
Si agregamos elementos DROP en la cadena PREROUTING, no es necesario que aparezcan en las cadenas INPUT y FORWARD,
porque la cadena PREROUTING se aplicará a todos los paquetes que ingresen al servidor de seguridad.
Poner los controles en un solo lugar es mucho más organizado que duplicarlos.

# iptables -t nat -A PREROUTING -i ppp0 -s 10.0.0.0/8 -j DROP
# iptables -t nat -A PREROUTING -i ppp0 -s 172.16.0.0/12 -j DROP
# iptables -t nat -A PREROUTING -i ppp0 -s 192.168.0.0/16 -j DROP
# iptables -t nat -A PREROUTING -i ppp0 -s 127.0.0.0/8 -j DROP
# iptables -t nat -A PREROUTING -i ppp0 -s 224.0.0.0/8 -j DROP

6. Finalmente, finalizamos las cadenas INPUT y FORWARD con una regla que deshabilita todos los paquetes que no están explícitamente permitidos.
Si bien hemos hecho esto antes con el comando iptables -P, el objetivo LOG nos permite ver quién llama a nuestra puerta desde Internet.

# iptables -A INPUT -i ppp0 -j LOG
# iptables -A FORWARD -i ppp0 -j LOG

7. También podemos configurar IP NAT para disfrazar el espacio de direcciones privadas utilizado en la red interna.

8. Una de las funciones más poderosas que Netfilter aporta al firewall de Linux es el mecanismo de filtrado de paquetes con estado.
En lugar de permitir servicios entrantes específicos, un firewall para una computadora cliente conectada a Internet permite respuestas entrantes basadas en la solicitud del cliente.
La cadena FORWARD con estado simple a continuación permite que todo el tráfico salga de nuestra red, pero solo el tráfico entrante relacionado con las conexiones iniciadas por nuestro host.

# iptables -A FORWARD -i eth0 -p ANY -j ACCEPT
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Para rastrear sesiones de red complejas, como FTP e IRC, se deben cargar ciertos módulos del kernel para habilitar iptables.
Si estos módulos no están cargados, iptables simplemente no permitirá esas conexiones. Aunque los filtros de paquetes con estado pueden mejorar la seguridad de un sitio,
también aumentan la complejidad de la red. Así que asegúrese de que realmente necesita la funcionalidad con estado antes de implementarla en su firewall.

7. Exportación, importación y scripting de reglas

Estas reglas de iptables solo son efectivas temporalmente. Cuando se cierra el firewall o se apaga el servidor, todas las reglas se borrarán después de reiniciar. Por lo tanto, necesito guardar las reglas de iptables escritas, para que después de que se cierre el firewall o se reinicie el sistema, las reglas de iptables aún se puedan usar sin volver a escribir.

La copia de seguridad por lotes y la restauración de las reglas de iptables requieren dos comandos iptables-save e iptables-restore, que se utilizan para guardar y restaurar respectivamente.

7.1 Respaldar y guardar reglas de iptables

El comando iptables-save se usa para exportar reglas de firewall de iptables en lotes. Cuando iptables-save se ejecuta directamente, se mostrarán todas las reglas habilitadas actualmente, enumeradas en orden de tablas sin formato, mangle, nat y filtro; si solo desea mostrar una determinada tabla, debe agregar "-t table name" como una opción de comando y luego combinar la entrada de redirección ">" para redirigir la salida a un archivo.
Por ejemplo: las reglas para respaldar todas las tablas, la operación es la siguiente:

[root@localhost /]#iptables-save > /opt/iprules_all.txt

o

[root@localhost /]#service iptables save

Este último guarda todas las reglas en el archivo "/etc/sysconfig/iptables" de forma predeterminada.

7.2 Restauración de las reglas de iptables

El comando iptables-retore se usa para importar reglas de firewall de Linux en lotes.Si ya hay un archivo de copia de seguridad exportado con el comando iptable-save, el proceso de restauración de las reglas es solo cuestión de minutos. A diferencia del comando iptables-save, el comando iptables-restore debe combinar la entrada de redirección para especificar la ubicación del archivo de copia de seguridad.
Por ejemplo: para restaurar las reglas de copia de seguridad anteriores a iptables, la operación es la siguiente:

[root@localhost /]#iptables-restore < /opt/iprules_all.txt

o

[root@localhost /]#service iptables start

Este último carga el contenido del archivo "/etc/sysconfig/iptables" en iptables de manera predeterminada, es decir, si la copia de seguridad usa "service iptables save", entonces se debe usar "service iptables start" para la recuperación.

7.3 Uso del servicio iptables


Para habilitar o deshabilitar el servicio iptables use el siguiente comando

[root@localhost /]#service iptables start //开启iptables服务
[root@localhost /]#service iptables stop //关闭iptables服务


El primero habilita el servicio de iptables y carga las reglas en "/etc/sysconfig/iptables" de manera predeterminada, mientras que el último deshabilita el servicio de iptables y borra todas las reglas de iptables de manera predeterminada.

7.4 Ejemplos de secuencias de comandos

En un entorno de producción, rara vez escribo las reglas de iptables una por una. La forma más común es escribirlas en scripts de shell para un procesamiento único. Los scripts de firewall comunes generalmente incluyen varias partes, como la definición de variables, la carga de módulos, el ajuste de /proc, la configuración de reglas, etc. Algunos scripts de firewall simples pueden incluir solo la parte de configuración de reglas. Aprendamos cómo escribir un script a través de un ejemplo de script de firewall de "tipo de red".

[root@loaclhost /]#vim /opt/myipfw.sh
#!/bin/bash
# 1.定义基本变量
INET_IF="eth0" //外网接口
INET_IP="218.29.30.31" //外网接口地址
LAN_IF="eth1" //内网接口
LAN_IP="192.168.1.1" //内网接口地址
LAN_NET="192.168.1.0/24" //内网网段
LAN_WWW_IP="192.168.1.7" //网站服务器的内部地址
IPT="/sbin/iptables" //iptables命令的路径
MOD="/sbin/modprobe" //modprode命令的路径
CTL="/sbin/sysctl" //sysctl命令的路径

# 2.加载内核模块
$MOD ip_tables //iptables基本模块
$MOD ip_conntrack //连接跟踪模块
$MOD ipt_REJECT //拒绝操作模块
$MOD ipt_LOG //日志记录模块
$MOD ipt_iprange //支持IP范围匹配
$MOD xt_tcpudp //支持tcp、udp协议
$MOD xt_state //支持状态匹配
$MOD xt_multiport //支持多端口匹配
$MOD xt_mac //支持MAC地址匹配
$MOD ip_nat_ftp //支持TFP地址转换
$MOD ip_conntrack_ftp //支持TFP连接跟踪 

# 3.调整/porc参数
$CTL -w net.ipv4.ip_forward=1 //打开路由转发功能
$CTL -w net.ipv4.ip_default_ttl=128 //修改ICMP响应超时
$CTL -w net.ipv4.icmp_echo_ignore_all=1 //拒绝响应ICMP请求
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts //拒绝响应ICMP广播
$CTL -w net.ipv4.tcp_syncookies=1 //启用SYN Cookie机制
$CTL -w net.ipv4.tcp_syn_retries=3 //最大SYN请求重试次数
$CTL -w net.ipv4.tcp_synack_retries=3 //最大ACK确认重试次数
$CTL -w net.ipv4.tcp_fin_timeout=60 //TCP连接等待超时
$CTL -w net.ipv4.tcp_max_syn_backlog=3200 //SYN请求的队列长度

# 4.设置具体的防火墙规则
# 4.1删除自定义链、清空已有规则
$IPT -t filter -X //清空各表中定义的链
$IPT -t nat -X
$IPT -t mangel -X
$IPT -t raw -X
$IPT -t filter -F //清空各表中已有的规则
$IPT -t nat -F
$IPT -t mangel -F
$IPT -t raw -F

# 4.2定义默认规则
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCETP

# 4.3设置nat表中的各种策略
$IPT -t nat -A POSTROUTING -s $LAN_NAT -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP

# 4.4设置filter表中的各种规则
$IPT -A INPUT -m state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp -m multiport --dport 20,21,25,80,110,143,443 -j ACCEPT
$IPT -A FORWARD -d $LAN_NET -i $INET_IF -m state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -d $LAN_WWW_IP -p tcp --dport 80 -j ACCEPT
$IPT -A FORWARD -d $LAN_WWW_IP -p tcp --sport 80 -j ACCEPT

8. Finalmente

Referencias:

https://www.cnblogs.com/zllong/p/7236881.html

Firewall_http://192.168.52.14/_Catch the Thief First Capture the King's Blog-CSDN Blog

Supongo que te gusta

Origin blog.csdn.net/qq_33163046/article/details/131993878
Recomendado
Clasificación