Контейнеры, недоступные после модификации цепочек INPUT и OUTPUT - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь защитить свой хост и использовать собственные правила в iptables в цепочках INPUT и OUTPUT.

Насколько я понимаю, Docker создает свои собственные правила брандмауэра в DOCKER и * 1021. * -USER цепочки и в цепочках PREROUTING, когда мы делаем порт publi sh, ie docker run -p

Однако, когда я добавляю эти правила в свою конфигурацию iptables, я больше не могу получить доступ любой из моих контейнеров, работающих на этом хосте:

iptables -A INPUT -j DROP
iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable

Насколько я понимаю, все, что находится в этих цепочках, не должно влиять на docker сетевое взаимодействие, поскольку используются следующие цепочки,

PREROUTING -> FORWARD -> DOCKER -> POSTROUTING.

Если я удалю эти правила, я смогу снова получить доступ к своим контейнерам.

Мой вопрос, 1. Как я могу добавить явные правила DROP в цепочках INPUT и OUTPUT для защиты своего хоста и 2. Почему добавление правил в цепочках INPUT и OUTPUT влияет на traffi c, предназначенный для docker контейнеров?

Мои правила iptable (Существует один контейнер, в котором публикуются порты 1180 и 1143)

# Generated by iptables-save v1.6.1 on Fri Apr  3 03:11:48 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A INPUT -j DROP
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A OUTPUT -j REJECT --reject-with icmp-port-unreachable
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 1443 -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 1180 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
# Completed on Fri Apr  3 03:11:48 2020
# Generated by iptables-save v1.6.1 on Fri Apr  3 03:11:48 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [31:3040]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 1443 -j MASQUERADE
-A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 1180 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 1443 -j DNAT --to-destination 172.17.0.2:1443
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 1180 -j DNAT --to-destination 172.17.0.2:1180
COMMIT
...