Linux iptables rechazado - ¿Cómo lo habilito de nuevo?

8

entonces tengo un cliente en mi red conectado al enrutador a través de mi computadora con arpspoof. Cuando sé que quiero detener el reenvío de paquetes, ejecuto:

iptables -A FORWARD -j REJECT

eso está funcionando como esperaba. Pero cuando trato de hacer algo como:

iptables -A FORWARD -j ACCEPT

No puedo lograr que los paquetes pasen como al principio.

¿Estoy haciendo algo mal o hay algún otro argumento que debería usar diferente de "ACEPTAR"?

Snipy
fuente
44
Por cierto que está utilizando -A, tal vez desee utilizar -Ppara establecer la P olítica (acción por defecto cuando no hay otra regla de la cadena se aplica). Por ejemplo, iptables -P FORWARD DROP(no puede ser REJECT).
JoL
¿Qué significa "la pregunta debe demostrar habilidades razonables de gestión del sistema"? :)
Marco

Respuestas:

35

IPtables tiene una lista de reglas y, para cada paquete, verifica la lista de reglas en orden. Una vez que se encuentra una regla que coincide con el paquete y especifica una política (ACEPTAR, RECHAZAR, BAJAR), se determina el destino del paquete coincidente; No se examinan más reglas.

Esto significa que el orden en el que ejecuta los comandos es importante. Cuando lo usa iptables -A, agrega una regla al final de la lista de reglas, por lo que terminará con una lista de reglas similar a esta:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     all  --  anywhere             anywhere

Dado que la REJECTregla viene antes que la ACCEPTregla, se activa primero y, por lo tanto, el reenvío no sucederá.

Por lo tanto, deberá eliminar la REJECTregla en lugar de agregar una ACCEPTregla. Para eliminar la regla RECHAZAR, ejecute

iptables -D FORWARD -j REJECT 

Para obtener más información, lea la página de manual de iptables.

Jenny D
fuente
18

La -Abandera le dice a iptables que agregue la regla a la cadena, lo que significa que termina bajo su REJECTregla, y dado que la primera regla coincide, nunca se usa.

Enumeras tus reglas iptables -L FORWARDy lo verás tú mismo. Para deshacerse de la regla que agregó, ejecute

iptables -D FORWARD -j REJECT 

Hasta que ya no haya tales reglas en la cadena.

Petter H
fuente
1

¿Qué hay de jugar al final de la FORWARDregla para saltar a una nueva cadena en la que solo habrá una regla? Puede ser ACCEPTo REJECT. Decir...

iptables -N accept-chain
iptables -A accept-chain -j ACCEPT
iptables -A FORWARD -j accept-chain

Después de eso, puedes cambiar esta regla en accept-chainalgo como

iptables -R accept-chain 1 -j REJECT

para deshabilitar el tráfico o -j ACCEPTpara habilitar.

También lo que abunda para activar y desactivar el enrutamiento por

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

para deshabilitar el reenvío de paquetes y "1"- para habilitar.

gooamoko
fuente
0

El orden importa. Esto insertará su regla en la parte superior en lugar de agregar.

iptables -I FORWARD 1 -j ACCEPT

-I es insertar y # 1 es la posición

operaciones de chandru
fuente