Also - shouldn't the web be full off vurnurable database servers then?
Also - shouldn't the web be full off vurnurable database servers then?
Yes, if you're running docker on Linux. On Mac and Windows docker has to create a little linux VM so it's more isolated and not directly accessible without explicitly publishing ports.
The macos firewall is able to block connections to these exposed sockets but:
1. The user has to explicitly turn on the firewall since it is off by default
2. The option "Automatically allow downloaded signed software to receive incoming connections" must be unchecked because Docker Desktop is signed by Apple.
I don't use a Mac, but all of the developers that use Macs at my company either did not have their firewall enabled or did not realize that connections to Docker Desktop were whitelisted.
No, the docker bridge network is not on a routable subnet.
2. [ATTACKER] Route all packets destined for 172.16.0.0/12 through the victim's machine.
ip route add 172.16.0.0/12 via 192.168.0.100
Here, "192.168.0.100" could be exchange for any ip address I guess?When you craft a packet for that address, the stack will see that route and send an ARP "who has" request out whatever interface you assigned when you did that IP route rule (probably your default ethernet). If nobody responds than the packet dies in the stack.
It already was, but yes.
It is. There are millions of servers out there with major security issues. Every few months there's another big story of a data breach from nothing more than a database left open.
> Also - shouldn't the web be full off vurnurable database servers then?
You can search for open database servers there, which should answer your question.
edit: based on comments, added the FORWARD table, which supersedes Docker's rules and should block new connections forwarding from external interfaces.
edit 2: I'm wrong, this doesn't fix the bug. If you run `docker network create foobar`, it will move its rules up above the custom FORWARD rules. Ugh.
edit 3: Modified to add the rules to the DOCKER-USER table, which according to Docker[1], will always be evaluated first. So now it should actually fix the problem. They explain in the docs how to fix this situation, actually, and even how to prevent Docker from modifying iptables. Another example of why we should RTFM...
for tool in iptables ip6tables ; do
for intf in wlan+ eth+ ; do
for table in INPUT DOCKER-USER ; do
$tool -I $table 1 -i $intf -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$tool -I $table 2 -i $intf -m conntrack --ctstate INVALID -j DROP
$tool -I $table 3 -i $intf -m conntrack --ctstate NEW -j DROP
done
done
iptables-save > /etc/iptables.rules
ip6tables-save > /etc/ip6tables.rules
https://help.ubuntu.com/community/IptablesHowTo https://wiki.debian.org/iptables https://wiki.alpinelinux.org/wiki/Configure_Networking#Firew... https://wiki.archlinux.org/title/Iptables#Configuration_and_... [1] https://docs.docker.com/network/iptables/ for tool in iptables ip6tables ; do
$tool -I DOCKER-USER 1 -i eth+ -m conntrack --ctstate NEW -j DROP
$tool -I DOCKER-USER 1 -i wlan+ -m conntrack --ctstate NEW -j DROP
done
If these are saved and loaded with the rest of networking, they will appear at the top of the FORWARD table before the DOCKER table jumps. Docker won't remove these rules, and they come first in the table, so they supersede Docker's rules. Any new connections forwarded from an external interface should drop.edit: changed from FORWARD to DOCKER-USER table
iptables -t filter -I FORWARD -j DROP
and while you are at it: sysctl -w net.ipv4.conf.all.forwarding=0
sysctl -w net.ipv6.conf.all.forwarding=0by specifying the drop for new connections incoming from the external interface, you stop connections to listening services from external networks, but established and related connections can continue implicitly, so forwarding still works for outbound connections.
if you really want to block all internet access for containers, and stop anything else on your system that might need to use forwarding, then your suggestion is correct.