Locking Down Docker Containers: A Simple Yet Powerful Security Solution
I recently stumbled upon a fascinating Reddit post that caught my attention. The author, a self-proclaimed “long time lurker, first time poster,” shared a clever solution to a common problem many of us face when working with Docker containers. The issue at hand is that many AI-related tools, such as local AI assistants, code completion servers, and document analyzers, require broad access to our systems and networks, which can be a significant security concern.
The Problem with Unrestricted Access
When we grant these tools unrestricted access, we’re essentially giving them an “open door” to our entire system and network. This can be unsettling, especially when working with sensitive data or critical infrastructure. The Reddit post’s author was using tools like OpenCode with MCP servers, which, as they noted, “could potentially access anything.” This lack of control and visibility can be a significant worry for anyone concerned about security.
A Simple Yet Effective Solution
The author’s solution was to create a Docker container called network-filter, which acts as a strict firewall for other containers. By specifying exactly which domains are allowed, network-filter blocks all other traffic at the network level. This is achieved using iptables and dnsmasq under the hood, which drop all traffic except what’s explicitly whitelisted. The best part? You can even specify ports per domain, giving you fine-grained control over what’s allowed and what’s not.
How it Works
Setting up network-filter is relatively straightforward. You create a Docker container with the network-filter image and specify the allowed domains using an environment variable called ALLOWED_DOMAINS. For example, you can allow access to api.openai.com:443 and api.anthropic.com:443 by setting the variable accordingly. Then, you can configure your other containers to use the network-filter container’s network interface, which will apply the same restrictions to all containers sharing that network.
The magic happens when you use the network_mode: "service:network-filter"
option, which allows your containers to use the same network interface as the network-filter container. This means that your containers will inherit the same IP address, routing table, and other network settings as the network-filter container, ensuring that they’re subject to the same restrictions.
Real-World Applications
The author is using network-filter to restrict access for various tools, including:
- LLM tools with MCP servers that could potentially access anything
- AI coding assistants that have filesystem access but shouldn’t reach random endpoints
- Self-hosted apps that they want to try but don’t fully trust
These are just a few examples of how network-filter can be used to improve security and control when working with Docker containers. By restricting access to specific domains and ports, you can significantly reduce the risk of unauthorized access or data breaches.
Current Limitations and Future Development
While network-filter is a powerful tool, it’s not without its limitations. Currently, it only supports IPv4, and all containers sharing the network get the same restrictions. However, the author has plans to add IPv6 support and potentially redo the implementation using nftables instead of iptables.
Despite these limitations, network-filter is a valuable solution for anyone looking to improve the security and control of their Docker containers. By providing a simple and effective way to restrict access to specific domains and ports, it can help mitigate the risks associated with broad access and ensure that your containers are operating within a secure and controlled environment.
Ograniczanie Kontenerów Docker: Prosta, lecz Potężna Rozwiązanie Bezpieczeństwa
Niedawno natknąłem się na fascynujący post na Reddit, który zwrócił moją uwagę. Autor, który określił się jako “długoletni lurker, pierwszy raz postujący”, podzielił się pomysłowym rozwiązaniem problemu, z którym wielu z nas się spotyka, pracując z kontenerami Docker. Problem polega na tym, że wiele narzędzi związanych z AI, takich jak lokale asystenci AI, serwery uzupełniania kodu i analizatory dokumentów, wymaga szerokiego dostępu do naszych systemów i sieci, co może być znacznym problemem bezpieczeństwa.
Problem z Nieograniczonym Dostępem
Gdy przyznajemy tym narzędziom nieograniczony dostęp, zasadniczo dajemy im “otwarte drzwi” do naszego całego systemu i sieci. To może być niepokojące, zwłaszcza podczas pracy z wrażliwymi danymi lub krytyczną infrastrukturą. Autor postu na Reddit używał narzędzi takich jak OpenCode z serwerami MCP, które, jak zauważył, “mogą potencjalnie uzyskać dostęp do wszystkiego”. Brak kontroli i widoczności może być znacznym problemem dla każdego, kto dba o bezpieczeństwo.
Proste, lecz Skuteczne Rozwiązanie
Rozwiązaniem autora było stworzenie kontenera Docker o nazwie network-filter, który działa jako ścisły firewall dla innych kontenerów. Poprzez określenie dokładnie, które domeny są dozwolone, network-filter blokuje wszystki inny ruch na poziomie sieci. To osiągane jest przy użyciu iptables i dnsmasq pod spodem, które odrzucają cały ruch, z wyjątkiem tego, który jest jawnie dopuszczony. Najlepsza część? Można nawet określać porty dla każdej domeny, dając Ci precyzyjną kontrolę nad tym, co jest dozwolone, a co nie.
Jak to Działa
Konfigurowanie network-filter jest dość proste. Tworzy się kontener Docker z obrazem network-filter i określa się dozwolone domeny przy użyciu zmiennej środowiskowej o nazwie ALLOWED_DOMAINS. Na przykład, można zezwolić na dostęp do api.openai.com:443 i api.anthropic.com:443, ustawiając odpowiednio tę zmienną. Następnie można skonfigurować inne kontenery, aby używały interfejsu sieciowego kontenera network-filter, co spowoduje, że będą one podlegać tym samym ograniczeniom.
Magiczne dzieje się, gdy używa się opcji network_mode: "service:network-filter"
, która pozwala kontenerom używać tego samego interfejsu sieciowego, co kontener network-filter. To oznacza, że kontenery będą dziedziczyć ten sam adres IP, tabelę routingu i inne ustawienia sieciowe, co kontener network-filter, zapewniając, że będą one podlegać tym samym ograniczeniom.
Praktyczne Zastosowania
Autor używa network-filter, aby ograniczyć dostęp do następujących narzędzi:
- Narzędzi LLM z serwerami MCP, które mogą potencjalnie uzyskać dostęp do wszystkiego
- Asystentów kodowania AI, które mają dostęp do systemu plików, ale nie powinny mieć dostępu do losowych punktów końcowych
- Aplikacji samo-hostowanych, które chcą wypróbować, ale którym nie całkowicie ufają
To tylko kilka przykładów, jak network-filter może być użyty, aby poprawić bezpieczeństwo i kontrolę podczas pracy z kontenerami Docker. Poprzez ograniczanie dostępu do określonych domen i portów, można znacznie zredukować ryzyko nieautoryzowanego dostępu lub wycieku danych.
Bieżące Ograniczenia i Przyszły Rozwój
Pomimo że network-filter jest potężnym narzędziem, nie jest pozbawiony ograniczeń. Obecnie obsługuje tylko IPv4, a wszystkie kontenery dzielące sieć mają te same ograniczenia. Jednak autor planuje dodać obsługę IPv6 i potencjalnie przebudować implementację przy użyciu nftables zamiast iptables.
Pomimo tych ograniczeń, network-filter jest cennym rozwiązaniem dla każdego, kto szuka poprawy bezpieczeństwa i kontroli swoich kontenerów Docker. Poprzez dostarczanie prostej i skutecznej metody ograniczania dostępu do określonych domen i portów, może pomóc zminimalizować ryzyko związane z szerokim dostępem i zapewnić, że kontenery działają w bezpiecznym i kontrolowanym środowisku.