我在使用 docker 时发现了一些奇怪的行为,我试图阻止除 DNS 之外的所有外部 UDP 传入和传出连接(请参阅下面的 mac pf 配置),但这破坏了我的 docker 容器。
为什么 docker 需要 UDP 才能运行,以及如何禁用它?
pf配置:
block in proto udp all
block out proto udp all
pass in proto udp from {10.0.0.0/8 172.0.0.0/8 192.168.0.0/16 127.0.0.1} to any
pass out proto udp from {10.0.0.0/8 172.0.0.0/8 192.168.0.0/16 127.0.0.1} to any
pass out proto udp from any to any port 53
答案1
lsof
从输出中可以看出,Docker 的系统服务正在使用 UDP :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 509 vagrant 5u IPv4 0x8440b8fcdaecccc1 0t0 UDP 127.0.0.1:65346
com.docke 509 vagrant 7u IPv4 0x8440b8fcdaecbe81 0t0 UDP *:61332
com.docke 511 vagrant 16u IPv4 0x8440b8fcdaecdb01 0t0 UDP *:59414
com.docke 511 vagrant 17u IPv4 0x8440b8fcdaecdd61 0t0 UDP *:58270
com.docke 511 vagrant 18u IPv4 0x8440b8fcdaeca6c1 0t0 UDP *:49231
com.docke 511 vagrant 21u IPv4 0x8440b8fcdaeccf21 0t0 UDP *:54016
com.docke 511 vagrant 22u IPv4 0x8440b8fcdaecd181 0t0 UDP *:62272
com.docke 511 vagrant 23u IPv4 0x8440b8fcdaecb501 0t0 UDP *:65286
至于你的 Pf 规则集,我建议在其过滤规则的开头使用简单pass quick on lo0