방화벽과 함께 Docker 사용

방화벽과 함께 Docker 사용

DockerTL;DR 수동 으로 모든 것을 가장하려고 합니다 firewalld.

firewalld나는 Debian 10 머신이 어떻게 작동하는지 배우고 싶어서 방금 Debian 10 머신을 사용하기 시작했습니다 .

호스트에 설치 했고 DockerDocker가 수행하는 작업, 컨테이너 생성 시 적용되는 규칙 및 방화벽 작동 방식에 대해 자세히 알아보기 위해 방화벽을 직접 관리하고 싶습니다.

Debian 10은 nftables기본적으로 일종의 래퍼를 사용하여 명령을 사용하여 방화벽 규칙을 만들 iptables수 있기 때문에 . 활성화 되면 정상적으로 실행됩니다 .iptablesDocker--iptables

firewalld그러나 나는 백엔드 와 함께 사용 하고 혼란스럽기 때문에 nftables관련된 모든 것을 건너뛰고 싶습니다. iptables그래서 Docker가 방화벽을 망칠 수 없도록 /etc/systemd/system/multi-user.target.wants/docker.service추가했습니다 . --iptables=false나는 모든 iptables 규칙 등을 플러시했으며 지금까지는 모든 것이 좋습니다.

이제 내 문제입니다.

모든 컨테이너는 호스트와 서로 액세스할 수 있지만 인터넷에는 액세스할 수 없습니다. 모두 172.17.0.0/16에서 실행되고 내 호스트는 192.168.9.0/24에 있으므로 컨테이너의 트래픽을 가장해야 합니다.

Docker를 사용할 때 방화벽을 수동으로 관리하는 방법에 대한 많은 정보를 찾을 수 없으며 저는 방화벽을 처음 사용하기 때문에 추측에 불과합니다.

내 인터페이스는 다음과 같습니다.

eno1 (main interface)
docker0 (docker bridge)
veth******* (one for each container)

모든 veth인터페이스는 브리지에 있습니다 docker0.

docker그래서 다리 에서 모든 것을 가장 무도회 라는 새로운 구역을 만들 수 있다고 생각했습니다 docker0.

~# firewall-cmd --permanent --new-zone=docker
~# firewall-cmd --permanent --zone=docker --change-interface=docker0
~# firewall-cmd --permanent --zone=docker --add-rich-rule='rule family="ipv4" source address=172.17.0.0/16 masquerade'
~# firewall-cmd --reload

활성 영역을 나열하면 다음과 같은 정보를 얻을 수 있습니다.

~# firewall-cmd --get-active-zones
docker
  interfaces: docker0
public
  interfaces: eno1

여전히 컨테이너에서 인터넷에 액세스할 수 없습니다. 이것이 올바른 길인지, 아니면 내가 놓친 것이 무엇인지 전혀 모릅니다. 도움을 주시면 감사하겠습니다.

답변1

방화벽에서는 인터넷으로 연결되는 영역에 가장을 설정해야 합니다. 귀하의 경우에는 해당 public영역인 것 같습니다.

관련 정보