nftables
是 Linux 内核中的一个框架,用于包过滤和网络地址转换(NAT)。它是 iptables
的继任者,提供了更灵活和高效的规则管理方式。Docker 使用 iptables
来管理网络规则,但你可以使用 nftables
来替代 iptables
,以便更好地控制和管理 Docker 容器的网络流量。
以下是如何使用 nftables
来管理 Docker 网络规则的指南:
Docker 默认使用 iptables
,要让 Docker 使用 nftables
,你需要进行一些配置。
/etc/docker/daemon.json
中添加以下内容:
{ "iptables": false }nftables
配置文件,例如 /etc/nftables.conf
,并添加以下内容:
table inet filter { chain input { type filter hook input priority 0; policy accept; iif "lo" accept ct state established,related accept tcp dport { 22, 80, 443 } accept ip protocol icmp accept counter drop } chain forward { type filter hook forward priority 0; policy accept; iif "docker0" accept oif "docker0" accept ct state established,related accept counter drop } chain output { type filter hook output priority 0; policy accept; } }假设你有一个 Docker 容器,并希望允许它访问外部网络,你可以添加以下规则:
/etc/nftables.conf
中添加以下内容:
table inet filter { chain forward { type filter hook forward priority 0; policy accept; iif "docker0" accept oif "docker0" accept ct state established,related accept ip saddr 172.17.0.0/16 accept counter drop } }假设你有一个特定的容器,其 IP 地址为 172.17.0.2
,并希望限制其网络访问,你可以添加以下规则:
/etc/nftables.conf
中添加以下内容:
table inet filter { chain forward { type filter hook forward priority 0; policy accept; iif "docker0" ip saddr 172.17.0.2 counter drop oif "docker0" ip daddr 172.17.0.2 counter drop ct state established,related accept counter drop } }领取专属 10元无门槛券
手把手带您无忧上云