Błąd portu przesyłania dalej iptables - Brak łańcucha / celu / dopasowania o tej nazwie

11

Usiłuję skonfigurować iptables na moim serwerze LTS Ubuntu 12.04, aby przekierować port 443 na 8443.

Ale kiedy uruchomię to polecenie:

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

Otrzymuję następujący błąd:

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

Obecna konfiguracja moich 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 

Czego mi brakuje lub robię źle?

Roy Hinkley
źródło

Odpowiedzi:

18

Ponieważ PREROUTINGłańcuch należy do NATtabeli, a nie do FILTERtabeli. Jeśli nie wspominasz wyraźnie o żadnej tabeli z -topcją, FILTERzakłada się.

Musisz więc wspomnieć o typie tabeli za pomocą -t nat:

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

Należy zauważyć, że MANGLEi RAWtabele mają również PREROUTINGłańcuch ale jak jesteś tylko przekierowanie portów, jesteś prawdopodobnie patrząc na NATstole.

heemayl
źródło
Nadal daje mi ten sam błąd. Czy ta odpowiedź jest nadal aktualna?
piepi
@piepi Tak. Powinien być ważny. Być może powinieneś szczegółowo zadać nowe pytanie z problemem.
heemayl
Upvoting i być może mógłbyś odpowiedzieć na ten podobny: askubuntu.com/questions/1140644/…
WinEunuuchs2Unix
3

Łańcuch PREROUTING dostępny tylko dla tabel nat, mangle i raw.
iptables zakłada tabelę filtrów, więc musisz podać jedną z nich, np.iptables -t nat ...

Ven3k
źródło
3

Pojawia się podobny błąd, gdy uruchamiam polecenie dokera

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).

Udało mi się to naprawić, instalując silnik dokera

apt-get remove docker-engine
apt-get install docker-engine
Rockie Yang
źródło
0

Możesz zainstalować (Config Server Security & Firewall) i użyć następujących ustawień.

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."

Uwaga: ta konfiguracja zapobiega również atakowi DDOS.

Akinjiola Toni
źródło