Не удается удалить стандартное правило iptables док-контейнера - PullRequest
0 голосов
/ 29 апреля 2018

Если я наберу iptables -L, в выводе будет следующая строка:

Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:http-alt

Мой контейнер открыт для всех, и я могу запросить фиктивный http-сервер отовсюду (проверено). Я пытаюсь удалить это правило, чтобы на моем сервере отображалось только 80 (localhost:80). Я попробовал:

root@ns25252:~# iptables -D DOCKER  --destination 172.17.0.2 -p tcp --dport 80 -j ACCEPT
iptables: Bad rule (does a matching rule exist in that chain?).

Как следует из ошибки, он не может найти соответствующее правило. Как мне набрать, чтобы удалить строку?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Это немного устарело, но в случае, если кто-то еще ищет, как полностью удалить docker из ваших правил iptables, вот как я это сделал, также имейте в виду, что это на debian, поэтому ваши файлы / пути могут отличаться.

  1. отредактируйте файл /etc/iptables.up.rules, создайте резервную копию файла, затем удалите все, в котором есть docker - может также быть несколько дополнительных строк с локальной подсетью Docker (у меня было 172.17.x и 172.19.x) - удалите их все
  2. сбросить iptables: iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -F
  3. перезагрузить правила iptables: iptables-restore < /etc/iptables.up.rules
  4. проверить / проверить ваши правила: iptables -L -n (больше не должно быть цепочек докеров или правил)
0 голосов
/ 29 апреля 2018

Обычно проще удалить по номеру, если только не существует вероятность того, что число может измениться между временем, когда вы перечислили правила, и временем, когда вы удаляете правило.

Вот как удалить по номеру строки:

# iptables -L --line-numbers
(snip)
Chain DOCKER (2 references)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:http
(snip)
# iptables -D DOCKER 1

Кроме того, вы можете получить полную спецификацию, выполнив iptables -S. Пример:

# iptables -S
(snip)
-A DOCKER -d 172.17.0.2/32 -p tcp -m tcp --dport 80 -j ACCEPT
(snip)

Превратите -A в -D и используйте это в качестве аргумента для iptables, чтобы удалить правило:

# iptables -D DOCKER -d 172.17.0.2/32 -p tcp -m tcp --dport 80 -j ACCEPT
...