Local Docker Port Exposed
If you’re using docker with ufw (Ubuntu Firewall), your local ports may be exposed to the outside world. I recently read about this issue and when I checked, sure enough, the local ports of all of my docker containers were readily accessible.
It felt like being caught with my fly down. Why in the world docker does this by default is beyond me. And it’s not as if they’re not aware of it. This GitHub issue clearly lays out the problem. It’s disappointing the issue has existed for so long and the Docker team isn’t willing to fix it. It’s a major violation of the secure by default principle.
If you too are learning about this, here’s the fix.
1. Create /etc/docker/daemon.json if it doesn’t already exist
2. Add the following content to the file
{
"iptables": false
}
3. Restart docker sudo service docker restart
Who knows if there are other docker vulnerabilities I’m not aware of, but at least in this case, my servers have zipped up.
Update: I discovered that disabling iptables has the side effect of blocking outgoing network requests from your containers due to ufw’s default behavior. If this creates a problem, you can leave iptables enabled, but bind your ports to localhost. For example, instead of using 3001:3001 for your ports, use localhost:3001:3001. Alternatively, you can make ufw allow outbound requests.