我想创建一个只接受来自某些IP的5432连接的数据库机器。我想允许连接到此数据库计算机的其他计算机未运行docker。我使用此docker-compose文件在数字海洋上使用docker-machine
部署了一个主机:
postgres:
restart: always
image: postgres:latest
volumes:
- /tmp/postgrescont:/tmp
volumes_from:
- data
env_file: .dbenv
ports:
- "5432:5432"
data:
restart: always
image: postgres:latest
volumes:
- /var/lib/postgresql
command: "true"
并尝试仅允许来自其他特定主机的流量:
$ iptables -A INPUT -p tcp --dport 5432 -s <ip address of certain other host> -j ACCEPT
$ iptables -A INPUT -p tcp --dport 5432 -j DROP # deny other traffic
但是,出于某种原因,我仍然可以从不需要的主机连接。知道为什么它不起作用吗?
答案 0 :(得分:2)
这就是我能够将端口5432限制为某个IP的方式:
iptables -I DOCKER 1 -p tcp ! -s <other_host_ip_allowed> --dport 5432 -j DROP
我将规则插入DOCKER链的第一条规则,并删除任何其他不是我指定的IP。
答案 1 :(得分:0)
这正是Docker所推荐的。
Docker的转发规则默认允许所有外部源IP。要仅允许特定IP或网络访问容器,请在DOCKER过滤器链的顶部插入否定规则。例如,要限制外部访问以便只有源IP 8.8.8.8可以访问容器,可以添加以下规则:
$ iptables -I DOCKER -i ext_if! -s 8.8.8.8 -j DROP