docker 容器绝缘问题

docker 容器绝缘问题

我有一个问题,我有以下 iptables 配置:

[root@nd01 ~]# iptables -L INPUT --line-numbers -n
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  my_local_ip/32         0.0.0.0/0           
3    INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           
4    INPUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
5    INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
6    DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
7    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

但是,如果我从一个随机的机器 telnet 到这台机器,比如说从一个 DNS 服务器到这台服务器,我仍然可以通过。

[root@ns1 ~]# telnet server.com 3306
Trying server.com...
Connected to server.com.
Escape character is '^]'.
X
5.5.5-10.2.8-MariaDB    =wbeV^Th???3`kw6F=@geHtmysql_native_password
^C
Connection closed by foreign host.
[root@ns1 ~]# 

端口 3306 使用“-p 3306:3306”标志从 docker 容器绑定到主机。

这是为什么?我感觉所有通过 dockers 的 sh 脚本安装了 docker 的服务器都是开放的,因为我最近才发现这个安装完全破坏了防火墙。

答案1

您之所以能够通过,是因为您使用 专门将该端口暴露给互联网docker run -p

Docker 创建必要的 iptables 规则(包括不是在 INPUT 链中,因此查看那里是没有意义的)来使该流量到达您的容器。

您一定不能暴露您不想从主机外部访问的端口。

要创建一个包含多个容器并可以私下互相通信的设置,请使用 docker-compose。

相关内容