Ошибка прямого порта iptables - нет цепочки / цели / совпадения с этим именем

11

Я пытаюсь настроить iptables на моем сервере Ubuntu 12.04 LTS для переадресации порта с 443 на 8443.

Но когда я запускаю эту команду:

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

Я получаю следующую ошибку:

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

Моя текущая конфигурация 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 

Что я пропускаю или делаю неправильно?

Рой Хинкли
источник

Ответы:

18

Потому что PREROUTINGцепочка принадлежит NATтаблице, а не FILTERтаблице. Если вы не упомянули какую-либо таблицу в явном виде по -tвыбору, то FILTERпредполагается.

Итак, вам нужно указать тип таблицы с помощью -t nat:

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

Обратите внимание, что MANGLEи RAWтаблицы также имеют PREROUTINGцепочку, но поскольку вы перенаправляете только порты, вы, вероятно, ищете NATтаблицу.

heemayl
источник
Это все еще дает мне ту же ошибку. Этот ответ остается в силе?
piepi
@piepi Да. Должен быть действительным. Возможно, вам следует задать новый вопрос с вашей проблемой в деталях.
Heemayl
Проголосование и, возможно, вы могли бы ответить на этот похожий вопрос: askubuntu.com/questions/1140644/…
WinEunuuchs2Unix
3

Цепочка PREROUTING доступна только для таблиц nat, mangle и raw.
iptables предполагает таблицу фильтров, поэтому вы должны указать один из них, например.iptables -t nat ...

Ven3k
источник
3

Я получаю похожую ошибку при запуске команды 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).

Я смог это исправить переустановив докер-движок

apt-get remove docker-engine
apt-get install docker-engine
Роки Ян
источник
0

Вы можете установить (Config Server Security & Firewall) и использовать следующие настройки.

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

Примечание: эта конфигурация также защищает вас от базовой DDOS-атаки.

Акинджиола Тони
источник