Una vez que configuro iptables para redirigir un puerto, ¿cómo lo deshago?

13

He estado leyendo en muchos sitios cómo usar iptables para redirigir un puerto a otro en Linux. Por ejemplo, el redireccionamiento del puerto 80 al 8080 se vería así ...

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080

Mi preocupación es, ¿qué pasa si cambio de opinión? No he leído en ninguna parte que da sintaxis para corregirlo. Supongo que hay una manera (¿simple?) De hacerlo, pero soy demasiado nuevo en Linux para descubrir intuitivamente cómo restaurar el puerto 80 a su comportamiento original sin reinstalar el sistema operativo.

Syndog
fuente

Respuestas:

6

Puede usar la opción -D para iptables para eliminar las reglas de sus cadenas. Por ejemplo

Primero enumere la cadena de la que desea eliminar una regla, use --line-numbers

sudo iptables -L RH-Firewall-1-INPUT  -n --line-numbers

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
4    ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0
5    ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0
6    ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353
7    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631
8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:631
9    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
10   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
11   REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Para borrar la línea 6

sudo iptables -D RH-Firewall-1-INPUT 6
sudo iptables -L RH-Firewall-1-INPUT  -n --line-numbers

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
4    ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0
5    ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0
6    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:631
8    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
10   REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Si tiene su configuración de iptables guardada en un archivo, no olvide actualizar el archivo ( iptables-save, service iptables saveetc.)

Iain
fuente
23

Si está creando scripts, es más fácil eliminarlos por definición:

Ejemplo:

Para agregar:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080

Observe el -A ? significa agregar .

Para eliminar:

iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080

Observe el -D ? Significa eliminar .

bithavoc
fuente
¡Esto fue muy útil!
MadPhysicist
3

http://linux.die.net/man/8/iptables :

Ejem

iptables -L, --list [chain]
    List all rules in the selected chain. If no chain is selected, all chains are listed. As every other iptables command, it applies to the specified table (filter is the default), so NAT rules get listed by

    iptables -t nat -n -L

    Please note that it is often used with the -n option, in order to avoid long reverse DNS lookups. It is legal to specify the -Z (zero) option as well, in which case the chain(s) will be atomically listed and zeroed. The exact output is affected by the other arguments given. The exact rules are suppressed until you use

    iptables -L -v

...

iptables -D, --delete chain rule-specification
iptables -D, --delete chain rulenum
    Delete one or more rules from the selected chain. There are two versions of this command: the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match. 
Hola71
fuente
0

La respuesta de bithavoc es la correcta. Como todavía no tengo suficientes puntos para comentarlo, agrego la información adicional como una nueva respuesta:

Agregar una nueva regla de redireccionamiento

$ sudo iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to 5671

Lista de reglas NAT

$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:https redir ports 5671

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination     

El -t natcambio es necesario para poder enrutar las reglas.

Eliminar la regla

$ sudo iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to 5671
[ec2-user@ip-172-31-27-46 ~]$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
Vaibhaw
fuente