配置 DOCKER-USER链 以限制Docker容器的访问,链的规则是否生效与链的优先级和规则顺序相关
1.规则
查看现有规则
sudo iptables -L DOCKER-USER --line-numbers
允许已建立的连接
sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
允许 192.168.0.100 访问
sudo iptables -A DOCKER-USER -s 192.168.0.100 -j ACCEPT
仅允许 192.168.0.100 访问 7000 端口
sudo iptables -A DOCKER-USER -p tcp --dport 7000 -s 192.168.0.100 -j ACCEPT
sudo iptables -A DOCKER-USER -p tcp --dport 7000 -j DROP
⚠️注意:7000为容器内部端口
添加规则到指定位置
sudo iptables -I DOCKER-USER 3 -p tcp --dport 7000 -s 192.168.0.100 -j ACCEPT
禁止所有 IP 的访问
sudo iptables -A DOCKER-USER -j DROP
条件都不匹配时,返回上一级链
sudo iptables -A DOCKER-USER -j RETURN
删除所有规则
sudo iptables -F DOCKER-USER
删除指定规则
sudo iptables -D DOCKER-USER 4
恢复默认规则
sudo iptables -F DOCKER-USER
sudo iptables -I DOCKER-USER -j RETURN
参数说明: -I在最前面插入 -A在最后面插入 -F清空指定链里的所有规则
2.示例
# 示例1:允许 192.168.0.100 访问
sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A DOCKER-USER -s 192.168.0.100 -j ACCEPT
sudo iptables -A DOCKER-USER -j DROP
sudo iptables -A DOCKER-USER -j RETURN
# 示例2:仅允许 192.168.0.100 访问 7000 端口
sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A DOCKER-USER -p tcp --dport 7000 -s 192.168.0.100 -j ACCEPT
sudo iptables -A DOCKER-USER -p tcp --dport 7000 -j DROP
sudo iptables -A DOCKER-USER -j RETURN
3.示例输出
# 示例1
sudo iptables -L DOCKER-USER --line-numbers
Chain DOCKER-USER (1 references)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- 192.168.0.100 anywhere
3 DROP all -- anywhere anywhere
4 RETURN all -- anywhere anywhere
# 示例2
sudo iptables -L DOCKER-USER --line-numbers
Chain DOCKER-USER (1 references)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT tcp -- 192.168.0.100 anywhere tcp dpt:7000
3 DROP tcp -- anywhere anywhere tcp dpt:7000
4 RETURN all -- anywhere anywhere
4.持久化规则
iptables默认不会保存规则重启会失效,因此需要使用 iptables-persistent 工具来保存规则
安装 iptables-persistent
sudo apt install iptables-persistent
保存规则
sudo netfilter-persistent save
重新加载规则
sudo netfilter-persistent reload