¿Por qué iptables no recibe el paquete marcado?

¿Por qué iptables no recibe el paquete marcado?

Estaba aprendiendo las opciones del comando ping. En eso encontré la opción -m para establecer la marca para un paquete.

El siguiente comando envía el paquete con la marca 10 al 192.168.2.65.

ping -m 10 192.168.2.65

Usando el siguiente comando puedo recibir ese paquete en el destino.

iptables -A INPUT -m mark --mark 0xa -j ACCEPT

Pero el comando anterior no recibe el paquete marcado. El comando iptables anterior no devuelve nada.

Nota: Ambos tenemos permiso de root.

Respuesta1

Esa marca es interna y no está incluida en ninguna parte del paquete ni en ninguno de sus encabezados.

Eso significa que se pierde al realizar la conexión saliente real y no sería visible en la INPUTtabla del servidor de destino, pero sí lo vería en la OUTPUTtabla de la máquina iniciadora.

El objetivo de admitir una marca en ping es permitir reglas de enrutamiento salientes.

Respuesta2

La respuesta de @Julie Pelletier es 100% correcta, pero probablemente no la entienda muy bien.

Primero, como se mencionó varias veces en los comentarios, la marca esnoponer en el paquete de ethernet en el cable. Entonces, si hace ping al servidor B desde el servidor A, el servidor B nunca podrá detectar la marca. Si quieres hacer algo, tendrás que usar solo el servidor A. Entonces, tendrás que insertar/añadir una regla a la cadena de SALIDA delremitentepara ver cualquier cosa.

Ahora, veamos cómo usarlo iptables. Primero, queremos ver qué reglas están activas en SALIDA:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
root@roran:~#

Vale, no hay reglas. Definamos una regla:

root@roran:~# iptables -I OUTPUT -m mark --mark 0xa -j ACCEPT
root@roran:~#

Como ves, no hay salida. Pero la tabla del núcleo ahora tiene una entrada:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 177 packets, 120K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Las columnas "pkts" y "bytes" son ambas 0, ya que aún no se ha enviado ningún paquete. Ahora, haga ping a un servidor diferente,sinponiendo una marca:

root@roran:~# ping -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.331 ms
[... some more lines omitted]

Después de eso, la tabla del kernel todavía no coincide con nada:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 348 packets, 160K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

A continuación, intente hacer ping con una marca establecida:

root@roran:~# ping -m 10 -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.324 ms
[... some more lines omitted]

y mira la tabla de nuevo:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 631 packets, 319K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    1    84 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Ahora, la regla ha encontrado un paquete que tenía 84 bytes.

Si quieres experimentar, después de esto, iptables -F OUTPUTlimpia la mesa; iptables -I OUTPUT -m mark --mark 0x0a -j REJECTpara evitar que los paquetes marcados salgan de su máquina, luego haga ping a la otra máquina con y sin marca. Verá que los paquetes marcados no reciben respuesta ahora, ya que la regla los descarta.

información relacionada