将 Docker 容器的访问权限限制为一组 IP

首先,如果需要,安装 ipset 。请参阅你的发行版以了解如何操作。举个例子,这是 Debian 类发行版的命令。

$ apt-get update
$ apt-get install ipset

然后创建一个配置文件来定义一个 ipset,其中包含要为其打开 Docker 容器访问权限的 IP。

$ vi /etc/ipfriends.conf
# Recreate the ipset if needed, and flush all entries
create -exist ipfriends hash:ip family inet hashsize 1024 maxelem 65536
flush
# Give access to specific ips
add ipfriends XXX.XXX.XXX.XXX
add ipfriends YYY.YYY.YYY.YYY

加载此 ipset。

$ ipset restore < /etc/ipfriends.conf

确保你的 Docker 守护程序正在运行:输入以下命令后不应显示错误。

$ docker ps

你已准备好插入 iptables 规则。你必须尊重订单。

// All requests of src ips not matching the ones from ipset ipfriends will be dropped.
$ iptables -I DOCKER -i ext_if -m set ! --match-set ipfriends src -j DROP
// Except for requests coming from a connection already established.
$ iptables -I DOCKER -i ext_if -m state --state ESTABLISHED,RELATED -j ACCEPT

如果要创建新规则,则需要在插入新规则之前删除已添加的所有自定义规则。

$ iptables -D DOCKER -i ext_if -m set ! --match-set ipfriends src -j DROP
$ iptables -D DOCKER -i ext_if -m state --state ESTABLISHED,RELATED -j ACCEPT