error de puerto de reenvío de iptables: sin cadena / destino / coincidencia con ese nombre

11

Estoy tratando de configurar iptables en mi servidor Ubuntu 12.04 LTS para reenviar el puerto 443 al 8443.

Pero cuando ejecuto este comando:

sudo iptables -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443

Obtuve el siguiente error:

iptables: No chain/target/match by that name.

Mi configuración actual de iptables:

$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
DROP       tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

¿Qué me estoy perdiendo o haciendo mal?

Roy Hinkley
fuente

Respuestas:

18

Porque la PREROUTINGcadena pertenece a la NATmesa, no a la FILTERmesa. Si no menciona ninguna tabla explícitamente por -topción, entonces FILTERse supone.

Por lo tanto, debe mencionar el tipo de tabla con -t nat:

sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443

Tenga en cuenta que, MANGLEy las RAWtablas también tienen PREROUTINGcadena, pero como está redirigiendo puertos solamente, presumiblemente está buscando la NATtabla.

heemayl
fuente
Todavía me está dando el mismo error. ¿Esta respuesta sigue siendo válida?
piepi
@piepi Sí. Debe ser valido. Quizás debería hacer una nueva pregunta con su problema en detalles.
heemayl
Votación y tal vez podría responder a una similar: askubuntu.com/questions/1140644/…
WinEunuuchs2Unix
3

La cadena PREROUTING solo está disponible para tablas nat, mangle y raw.
iptables asume la tabla de filtro, por lo que debe especificar uno de estos, por ejemplo.iptables -t nat ...

Ven3k
fuente
3

Me sale un error similar cuando ejecuto un comando docker

docker run -d -p 8084:8080 knockdata/zeppelin-highcharts


d9c5d34f500d621585470b0e70b915395fcb6b3437859e0f610dbb58d51faf25
docker: Error response from daemon: driver failed programming external connectivity on endpoint elegant_jang  
(7ca0f5ad689f5443ce7533f66b4a86c34d2dbd9d076bac4812288dd3f6a76698):  
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8084 -j DNAT --to-destination 172.17.0.2:8080 
! -i docker0: iptables: No chain/target/match by that name.
(exit status 1).

Pude solucionarlo reinstalando docker-engine

apt-get remove docker-engine
apt-get install docker-engine
Rockie Yang
fuente
0

Puede instalar (Config Server Security & Firewall) y usar la siguiente configuración.

nano /etc/csf/csf.conf
SYNFLOOD = "" => SYNFLOOD = "1"
CONNLIMIT = "" => CONNLIMIT = "80;75,443;75,21;50”
PORTFLOOD = "" => PORTFLOOD = "80;tcp;5;250"
SYSLOG = “0” => SYSLOG = "1"
DOCKER = “0” => DOCKER = "1"

nano /etc/csf/csfpost.sh

#!/bin/sh

echo "[DOCKER] Setting up FW rules."

iptables -N DOCKER

iptables -t nat -N DOCKER

iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

iptables -t nat -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

# Masquerade outbound connections from containers
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

# Accept established connections to the docker containers
iptables -t filter -N DOCKER
iptables -t filter -A FORWARD -o docker0 -j DOCKER
iptables -t filter -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j 
ACCEPT

# Allow docker containers to communicate with themselves & outside world
iptables -t filter -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
iptables -t filter -A FORWARD -i docker0 -o docker0 -j ACCEPT

echo "[DOCKER] Done."

Nota: Esta configuración también evita que sufras un ataque DDOS básico.

Akinjiola Toni
fuente