Uncategorized

network-filter: Restrict Docker containers to specific domains only

Locking Down Your Docker Containers: A Simple yet Powerful Solution

As someone who’s been experimenting with various Docker containers, I’ve often found myself wondering about the security implications of giving these containers unrestricted access to my network. I mean, think about it – when you’re running a bunch of containers, each with its own set of permissions and access levels, it can be daunting to keep track of what’s going on under the hood.

Recently, I stumbled upon a Reddit post that caught my attention. A user had created a Docker container called network-filter that acts as a strict firewall for other containers. The idea is simple: you tell network-filter which domains are allowed, and it blocks everything else at the network level. No proxy shenanigans, just straight network-level blocking.

How it Works

The network-filter container uses iptables and dnsmasq under the hood to drop all traffic except what you explicitly whitelist. You can even specify ports per domain, giving you fine-grained control over what’s allowed and what’s not. I was impressed by the simplicity and elegance of this solution, and I decided to give it a try.

Setup is dead simple. You just need to create a docker-compose.yml file with the following configuration:

services:
network-filter:
image: monadical/network-filter
environment:
ALLOWED_DOMAINS: “api.openai.com:443,api.anthropic.com:443”
cap_add:
– NET_ADMIN
my-app:
image: my-app:latest
network_mode: “service:network-filter”

The magic happens with the network_mode: “service:network-filter” line, which tells my-app to use the same network interface as network-filter. This means that my-app will be subject to the same restrictions as network-filter, ensuring that it can only access the whitelisted domains.

Why This Matters

So, why is this important? Well, when you’re running containers that have access to sensitive data or systems, you want to make sure that they’re not communicating with unauthorized parties. With network-filter, you can rest assured that your containers are only talking to the domains you’ve explicitly allowed.

I’m using network-filter for a few different use cases, 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 I want to try but don’t fully trust

Of course, there are some limitations to network-filter – currently, it only supports IPv4, and all containers sharing the network get the same restrictions. But for my use cases, these limitations haven’t been a major issue.

Conclusion

In conclusion, network-filter is a simple yet powerful solution for locking down your Docker containers. By giving you fine-grained control over which domains your containers can access, it helps you ensure that your containers are secure and compliant with your organization’s security policies. If you’re running Docker containers and are concerned about security, I highly recommend giving network-filter a try.

Zabezpieczanie Kontenerów Docker: Prosta lecz Potężna Rozwiązanie

Jako osoba, która eksperymentowała z różnymi kontenerami Docker, często zastanawiałem się nad implikacjami bezpieczeństwa wynikającymi z przyznania tym kontenerom nieograniczonego dostępu do mojej sieci. Myślę, że to logiczne – gdy uruchamiasz wiele kontenerów, każdy z własnym zestawem uprawnień i poziomów dostępu, może to być przytłaczające, aby śledzić, co dzieje się pod powierzchnią.

Niedawno natknąłem się na post na Reddit, który zwrócił moją uwagę. Użytkownik stworzył kontener Docker o nazwie network-filter, który działa jako ścisły firewall dla innych kontenerów. Pomysł jest prosty: informujesz network-filter o tym, które domeny są dozwolone, a on blokuje wszystko inne na poziomie sieci. Żadnych sztuczek z proxy, po prostu blokadę na poziomie sieci.

Jak to Działa

Kontener network-filter wykorzystuje iptables i dnsmasq pod spodem, aby upuścić cały ruch, z wyjątkiem tego, który został wyraźnie dopuszczony. Możesz nawet określić porty dla każdej domeny, co daje ci dokładną kontrolę nad tym, co jest dozwolone, a co nie. Byłem zadowolony z prostoty i elegancji tego rozwiązania i postanowiłem je wypróbować.

Konfiguracja jest bardzo prosta. Wystarczy utworzyć plik docker-compose.yml z następującą konfiguracją:

services:
network-filter:
image: monadical/network-filter
environment:
ALLOWED_DOMAINS: “api.openai.com:443,api.anthropic.com:443”
cap_add:
– NET_ADMIN
my-app:
image: my-app:latest
network_mode: “service:network-filter”

Cuda dzieją się z linią network_mode: “service:network-filter”, która mówi my-app, aby używał tej samej sieci, co network-filter. Oznacza to, że my-app będzie podlegał tym samym ograniczeniom, co network-filter, co gwarantuje, że może uzyskać dostęp tylko do dozwolonych domen.

Dlaczego to Jest Ważne

Więc, dlaczego jest to ważne? Cóż, gdy uruchamiasz kontenery, które mają dostęp do wrażliwych danych lub systemów, chcesz mieć pewność, że nie komunikują się one z nieautoryzowanymi stronami. Z network-filter możesz być spokojny, że twoje kontenery komunikują się tylko z tymi domenami, które zostały wyraźnie dozwolone.

Używam network-filter dla kilku różnych przypadków użycia, w tym:

  • Narzędzi LLM z serwerami MCP, które mogłyby potencjalnie uzyskać dostęp do wszystkiego
  • Asystentów kodowania AI, które mają dostęp do systemu plików, ale nie powinny sięgać do losowych punktów końcowych
  • Aplikacji hostowanych samodzielnie, których chcę wypróbować, ale którym nie całkowicie ufam

Oczywiście, istnieją pewne ograniczenia network-filter – obecnie obsługuje tylko IPv4, a wszystkie kontenery współdzielące sieć mają te same ograniczenia. Ale dla moich przypadków użycia te ograniczenia nie były dużym problemem.

Podsumowanie

Podsumowując, network-filter jest prostym, lecz potężnym rozwiązaniem do zabezpieczania kontenerów Docker. Dając ci dokładną kontrolę nad tym, które domeny mogą być dostępne dla kontenerów, pomaga zapewnić, że twoje kontenery są bezpieczne i zgodne z polityką bezpieczeństwa twojej organizacji. Jeśli uruchamiasz kontenery Docker i martwisz się o bezpieczeństwo, highly polecam wypróbowanie network-filter.

Leave a Reply

Your email address will not be published. Required fields are marked *

WordPress Appliance - Powered by TurnKey Linux