ryandaniels.iptables_docker
Rola Ansible: iptables dla Dockera (i Docker Swarm)
Dodaj reguły zapory sieciowej do serwera za pomocą iptables dla Dockera i Docker Swarm. To rzeczywiście zabezpieczy twoje kontenery Docker!
Ta rola Ansible istnieje, ponieważ firewalld i Docker (a także Docker Swarm) nie współpracują ze sobą.
Rozwiązanie problemu: Kiedy uruchamiasz kontener w Dockerze z "publikowanym" portem, nie masz kontroli, a port jest otwarty przez zaporę sieciową serwera. Nawet jeśli używasz iptables lub innej zapory na swoim serwerze. Docker otwiera ten "publikowany" port dla wszystkich i pomija twoją zaporę.
Przykład użycia tego rozwiązania: Zezwolenie zaufanym adresom IP na łączenie się z kontenerami Docker (i kontenerami Docker Swarm), wraz z innymi otwartymi portami systemowymi. Z zastrzeżeniem, że zaufane adresy IP mogą nie być w tej samej sieci IP ani nawet w tym samym podsieci.
Miało być prosto. Zabezpiecz Docker za pomocą zapory. Ale niestety nie jest to takie łatwe. Starałem się, aby to było tak proste, jak to możliwe.
Mogą wystąpić nieznane problemy z tym.. używaj na własne ryzyko!
Zobacz także: https://ryandaniels.ca/blog/secure-docker-with-iptables-firewall-and-ansible/
A także o użyciu łańcucha INPUT w Dockerze: https://ryandaniels.ca/blog/docker-iptables-input-chain/
Obecnie testowane i działające na:
- CentOS/RHEL 7
- Ubuntu 18.04
- Ubuntu 20.04
Cechy
- Działa z Dockerem i Docker Swarm (znanym również jako Docker SwarmKit).
- Bezpieczne domyślnie. Po skonfigurowaniu, tylko adresy IP Dockera mogą uzyskać dostęp do wszystkich kontenerów oraz do wszystkich innych procesów systemowych, które mają otwarte porty na serwerze.
- Jak najprościej. Im mniej reguł iptables, tym szybsza będzie wydajność (przynajmniej teoretycznie).
- Automatyczne. Nie trzeba ręcznie dodawać portów do konfiguracji zapory (jeśli używasz zaufanego zestawu adresów IP).
- Dodaj "zaufane" adresy IP, które mogą komunikować się z wszystkimi kontenerami Docker oraz wszystkimi innymi procesami systemowymi, które mają otwarte porty na serwerze.
- Otwórz określone porty kontenerów Docker lub porty systemowe dla publiczności (dla wszystkich) przez zaporę, jak SSH.
- Można określić także interfejsy. Domyślnie wszystkie interfejsy są filtrowane. Możesz filtrować konkretne interfejsy sieciowe i zezwolić na wszystkie inne interfejsy (wskazać tylko nieufny interfejs).
- Wszystko odbywa się w trybie "offline". Więc nie powinno być problemów z Dockerem po aktywacji reguł iptables.
- Nie musisz być ekspertem w iptables, aby to używać.
- Działa z dokumentowanym użyciem iptables w Docker Swarm i szyfrowanymi sieciami nakładkowymi. (Reguły iptables są dodawane do łańcucha INPUT).
To rozwiązanie korzysta z iptables
jako zapory oraz ipset
, aby umożliwić iptables posiadanie listy IP, które są dozwolone. ipset
pozwala także używać nieciągłego zakresu adresów IP.
Łańcuchy iptables używane i ich działanie:
INPUT, nie czyszczony. Reguła wstawiona na górze, aby skoczyć do własnego łańcucha dla reguł związanych z systemem.
DOCKER-USER, czyszczony. Wszystkie reguły związane z Dockerem (i Docker Swarm) są tu, aby blokować kontenery przed domyślnym udostępnieniem dla wszystkich. Domyślnie tylko adresy IP serwera Docker są dozwolone. Inne adresy IP i porty kontenerów mogą być dodawane przez użytkownika.
FILTERS, czyszczony. Własny łańcuch dla procesów serwera (które nie są Dockerem). Domyślnie tylko adresy IP serwera Docker są dozwolone. Inne adresy IP i porty kontenerów mogą być dodawane przez użytkownika.
Podręcznik do iptables: http://ipset.netfilter.org/iptables.man.html
Ostrzeżenia
Nie zablokuj się z serwera. Modyfikujesz zaporę sieciową. Zawsze miej inny sposób na wejście, na przykład "konsolę".
Uwagi dotyczące adresów IP: To dotyczy tylko IPv4. IPv6 nie było testowane. Bezpieczniej jest, jeśli wyłączysz IPv6 na swoich serwerach.
Inne rozważania dotyczące zabezpieczeń:
Jeśli używasz Dockera nie w trybie Swarm (normalny Docker), rozważ również przypisanie portu do wewnętrznego adresu IP dla lepszego zabezpieczenia.
Jeśli używasz Swarm, rozważ stosowanie konkretnych adresów IP do komunikacji Docker Swarm.
Np. docker swarm init --advertise-addr 192.168.100.100 --listen-addr=192.168.100.100 --data-path-addr=192.168.100.100
Ważna informacja: Docker i firewalld nie współpracują ze sobą. Ta rola Ansible ma wbudowaną kontrolę, aby zakończyć działanie, jeśli usługa firewalld jest uruchomiona lub włączona.
Aby uzyskać więcej informacji na temat firewalld i Dockera:
https://success.docker.com/article/why-am-i-having-network-problems-after-firewalld-is-restarted
https://www.tripwire.com/state-of-security/devops/psa-beware-exposing-ports-docker/
https://docs.docker.com/network/iptables/
Błąd SELinux:
Obecnie istnieje błąd z SELinux, który uniemożliwia zapisanie reguł iptables do pliku iptables.save.
Wpływ: Zapisanie reguł iptables po raz 2. zakończy się cichą porażką.
Dodano obejście, aby SELinux pozwolił na interakcję chmod z plikiem iptables.save.
Alternatywnie można wyłączyć SELinux, ale nie jest to zalecane.
Zgłoszenie błędu: https://bugs.centos.org/view.php?id=12648
Zobacz poniżej więcej informacji na temat ręcznego wykonania obejścia.
OSTRZEŻENIE:
Upewnij się, że najpierw przetestujesz w środowisku nieprodukcyjnym, nie mogę nic zagwarantować ani być odpowiedzialny.
Bądź ostrożny, to usunie i doda reguły iptables w systemie. Używaj ostrożnie.
Istniejące reguły iptables mogą zostać usunięte! Potwierdź, co masz skonfigurowane przed uruchomieniem tego.
Mogą wystąpić nieznane problemy z tym.. używaj na własne ryzyko!
Wersje Dockera testowane
Docker Engine - wersja społecznościowa:
- 19.03.8
- 19.03.9
- 19.03.12
Testowane w normalnym trybie Dockera oraz w klastrze Docker Swarm z 3 węzłami.
Testowane dystrybucje
- CentOS: 7.7, 7.8
- Ubuntu 18.04
- Ubuntu 20.04
Wymagania
- iptables & iptables-services
Testowane z v1.4.21 (najświeższa wersja dostępna w CentOS 7)
- ipset & ipset-service
Testowane z v7.1 (najświeższa wersja dostępna w CentOS 7)
Ustawienia domyślne
- Włącz debugowanie
debug_enabled_default: false
- Proxy (potrzebne podczas instalacji wymaganych pakietów za proxy)
proxy_env: []
- Rola domyślnie wyłączona. Zmień na true w group_vars lub playbook itp.
iptables_docker_managed: false
- Sprawdzenie, czy usługa (Docker) działa lub jest włączona i zakończenie roli, jeśli wystąpi problem
iptables_docker_check_problem_service_managed: true
- Sprawdzane usługi, które spowodują zakończenie roli
iptables_docker_check_problem_service:
- docker.service
- Wyświetl konfigurację z zmiennych
iptables_docker_show_config: true
- Uruchom usługę iptables
iptables_docker_start: true
- Zainstaluj pakiet iptables
iptables_docker_managed_pkg: true
iptables_docker_packages:
- iptables
- iptables-services
- ipset
- ipset-service
- policycoreutils-python #wymagane do semodule
- Wymuś skopiowanie pliku ipset, aby wymusić przeładowanie ipset
iptables_docker_copy_ipset_force: false
- Wymuś skopiowanie pliku iptables, aby wymusić przeładowanie iptables
iptables_docker_copy_iptables_force: false
- Lokalizacja zapisanej konfiguracji iptables
iptables_docker_iptables_config_save: /etc/sysconfig/iptables
- Lokalizacja zapisanej konfiguracji ipset
iptables_docker_ipset_config_dir: /etc/sysconfig/ipset.d
Maksymalna liczba elementów ipset (adresy IP w liście dozwolonej)
Jeśli zostanie zmienione po pierwszym utworzeniu, musi być usunięte i utworzone ponownie ręcznie. 64k adresów IP powinno wystarczyć.
iptables_docker_ipset_maxelem: 65536
Ustawienia użytkownika
Nadpisz adresy IP serwera Docker (Opcjonalnie)
Opcjonalnie określ adresy IP serwera Docker. Jeśli nie ustawione, adresy IP będą określane na podstawie grupy docker_hosts w inwentarzu Ansible.
# iptables_docker_server_ip_allow_set:
# - 192.168.100.100
# - 192.168.100.101
# - 192.168.100.102
- Adresy IP, które mogą używać wszystkich otwartych portów kontenerów Docker i wszystkich procesów na serwerze.
# iptables_docker_ip_allow_set: []
iptables_docker_ip_allow_set:
- 192.168.100.1
- 192.168.101.0/24
- 192.168.102.0/24
Adapter sieciowy do ograniczenia dla reguł systemowych
Tylko wymienione adaptery będą zablokowane. Inne będą dozwolone. Domyślnie blokuje wszystkie (z '+').
Jeśli chcesz ograniczyć tylko konkretne interfejsy sieciowe, użyj dokładnej nazwy.
Jeśli chcesz ograniczyć wszystkie interfejsy tego samego typu, użyj "interface+", aby dopasować każdy interfejs, ponieważ + jest znakiem wieloznacznym dla iptables.
Na przykład, aby ograniczyć interfejsy ethX, użyj "eth+". "eth+" jest symbolem wieloznacznym dla wszystkiego, co zaczyna się na eth.
NIE używaj "*". To nie jest znak wieloznaczny i nie dopasuje niczego!
Im mniej tu, tym lepiej. Bezpieczniej jest zablokować wszystko ('+'), ale jeśli nie można, dodaj najpierw adaptery sieciowe o dużym ruchu.
lokalne (lo) nie jest tutaj potrzebne.
iptables_docker_external_network_adapter:
- "+" #Znak wieloznaczny dla wszystkiego
# - "eth+"
# - "enp0s+"
# - "wlp1s+"
Otwórz porty TCP systemowe dla publiczności
Porty, aby każdy mógł się połączyć (będą publicznie dostępne). Porty tutaj pozwolą na wszelki ruch TCP na te porty na poziomie iptables.
Tylko dla portów na OS, a nie dla kontenerów Docker.
iptables_docker_global_ports_allow_tcp:
- 22 # SSH
Otwórz porty UDP systemowe dla publiczności
Porty, aby każdy mógł się połączyć (będą publicznie dostępne). Porty tutaj pozwolą na wszelki ruch UDP na te porty na poziomie iptables.
Tylko dla portów na OS, a nie dla kontenerów Docker.
iptables_docker_global_ports_allow_udp: []
Adapter sieciowy do ograniczenia dla reguł Docker
Domyślnie używa tej samej konfiguracji jak adapter sieciowy dla OS.
iptables_docker_swarm_network_adapter: "{{ iptables_docker_external_network_adapter }}"
# iptables_docker_swarm_network_adapter:
# - "+" #Znak wieloznaczny dla wszystkiego
# # - "eth+"
Otwórz porty TCP kontenerów Docker dla publiczności
Dodaj porty TCP kontenerów Docker, które chcesz otworzyć dla wszystkich. Dla Dockera i Docker Swarm. Porty Docker Swarm nie są tutaj potrzebne.
iptables_docker_swarm_ports_allow_tcp: []
# iptables_docker_swarm_ports_allow_tcp:
# - 9000
Otwórz porty UDP kontenerów Docker dla publiczności
Dodaj porty UDP kontenerów Docker, które chcesz otworzyć dla wszystkich. Dla Dockera i Docker Swarm. Porty Docker Swarm nie są tutaj potrzebne.
iptables_docker_swarm_ports_allow_udp: []
- Nazwa mostka Dockera (docker0) i zakres adresów IP (dla dozwolenia źródła DOCKER-USER w iptables)
iptables_docker_bridge_name: docker0
iptables_docker_bridge_ips: 172.17.0.0/16
- Zakres adresów IP mostka Docker Swarm (docker_gwbridge) (do zezwolenia źródła DOCKER-USER w iptables)
iptables_docker_swarm_bridge_name: docker_gwbridge
iptables_docker_swarm_bridge_ips: 172.18.0.0/16
Przykładowy plik konfiguracyjny (inventories/dev-env/group_vars/all.yml)
Z poniższym przykładem:
Adresy IP zostaną dodane do listy zaufanych:
192.168.100.1
192.168.101.0/24
Wszystkie interfejsy sieciowe będą ograniczone, ponieważ używamy znaku wieloznacznego '+' dla iptables_docker_external_network_adapter.
Port 22 będzie otwarty publicznie.
---
iptables_docker_ip_allow_set:
- 192.168.100.1
- 192.168.101.0/24
iptables_docker_external_network_adapter:
- "+" #Znak wieloznaczny dla wszystkiego
iptables_docker_global_ports_allow_tcp:
- 22 # SSH
Przykład pliku inwentarza
[docker_hosts]
centoslead1 ansible_host=192.168.100.100
centoswork1 ansible_host=192.168.100.101
centoswork2 ansible_host=192.168.100.102
Przykładowy playbook iptables_docker.yml
---
- hosts: '{{ inventory }}'
become: yes
vars:
# Użyj tej roli
iptables_docker_managed: true
roles:
- ryandaniels.iptables_docker
Użycie
Przed uruchomieniem upewnij się, że sprawdzisz, czy już używasz iptables! Nic nie powinno zostać nadpisane/usunięte, chyba że używasz tych samych łańcuchów iptables co to.
Domyślnie żadne zadania nie będą uruchamiane, chyba że ustawisz iptables_docker_managed=true
. To jest zamierzone, aby zapobiec pomyłkom przez osoby, które nie przeczytały dokumentacji.
ansible-playbook iptables_docker.yml --extra-vars "inventory=centos7 iptables_docker_managed=true" -i hosts-dev
Pomiń instalację pakietów (jeśli już są zainstalowane - przyspiesza zadanie)
ansible-playbook iptables_docker.yml --extra-vars "inventory=centos7 iptables_docker_managed=true" -i hosts --skip-tags=iptables_docker_pkg_install
Pokaż bardziej szczegółowe informacje (informacje debugowania)
ansible-playbook iptables_docker.yml --extra-vars "inventory=centos7 iptables_docker_managed=true debug_enabled_default=true" -i hosts-dev
Nie uruchamiaj usługi iptables ani nie dodawaj reguł do iptables
ansible-playbook iptables_docker.yml --extra-vars "inventory=centos7 iptables_docker_managed=true iptables_docker_start=false" -i hosts-dev
Wymuś aktualizację ipset i iptables
ansible-playbook iptables_docker.yml --extra-vars "inventory=centos7 iptables_docker_managed=true iptables_docker_copy_ipset_force=true iptables_docker_copy_iptables_force=true" -i hosts-dev
Pokaż tylko konfigurację (z zmiennych)
ansible-playbook iptables_docker.yml --extra-vars "inventory=centos7 iptables_docker_managed=true iptables_docker_show_config=true" -i hosts --tags "iptables_docker_show_config"
Uwagi dotyczące limitu rozmiaru ipset
Ważne: Zwróć uwagę na rozmiar "Liczba wpisów". Jeśli ta liczba jest bliska rozmiarowi maxelem (65536), musisz usunąć ipset "ip_allow" i utworzyć go ponownie z większym rozmiarem maksymalnym.
64K powinno wystarczyć dla każdego.
Plik jest w: templates/ip_allow.set.j2
create -exist ip_allow hash:ip family inet hashsize 1024 maxelem 65536
Sprawdź rozmiar listy ipset:
ipset list |grep "Number of entries"
Ważny wynik:
Number of entries: 3
Ręczne obejście SELinux dla iptables i chmod
Szczegóły błędu: https://bugs.centos.org/view.php?id=12648
Problem polega na tym, że przy zapisywaniu iptables po raz drugi, SELinux blokuje to, ponieważ chmod ma problem z plikiem iptables.save.
Użyj poniżej jako obejścia, aby pozwolić chmod na modyfikację pliku iptables.save, jeśli nie używasz roli Ansible.
Aby to powtórzyć, zrestartuj usługę iptables po ustawieniu konfiguracji iptables, aby zapisać po restarcie/zatrzymaniu,
yum install audit policycoreutils policycoreutils-python
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -i|tail -55
ausearch -c 'chmod' --raw | audit2allow -M iptables_save_chmod
#lub grep "iptables.save" /var/log/audit/audit.log|tail | audit2allow -M iptables_save_chmod
semodule -i iptables_save_chmod.pp
Odniesienie do polecenia iptables
Więcej poleceń można znaleźć w dokumentacji iptables: http://ipset.netfilter.org/iptables.man.html
Listuj aktywne reguły iptables:
iptables -nvL --line-numbers
Przydatne polecenia CentOS/RHEL:
cat /etc/sysconfig/ipset.d/ip_allow.set
systemctl restart ipset
ipset list | head
iptables -F DOCKER-USER
iptables -F FILTERS
iptables-restore -n < ansible_iptables_docker-iptables
grep -v "^#" ansible_iptables_docker-iptables
iptables -S INPUT
iptables -S DOCKER-USER
iptables -S FILTERS
Przydatne polecenia Ubuntu:
vi /etc/iptables/ipsets
#Ręcznie dodaj 'flush' przed dodaniem, jeśli ręcznie usuwasz adresy IP.
usr/sbin/netfilter-persistent reload
cat /etc/iptables/ipsets
cat /etc/iptables/rules.v4
Ręczne polecenia (CentOS/RHEL)
Sprawdź, jakie reguły iptables już masz. Zanotuj je na wypadek ich utraty!
iptables -nvL --line-numbers
Zainstaluj wymagane pakiety:
yum install iptables iptables-services ipset ipset-service
Jeśli używasz SELinux, zainstaluj również:
yum install policycoreutils-python
Skonfiguruj ipset z adresami IP swojego serwera i innymi zaufanymi adresami IP:
mkdir -p /etc/sysconfig/ipset.d
cat > /etc/sysconfig/ipset.d/ip_allow.set << 'EOF'
create -exist ip_allow hash:ip family inet hashsize 1024 maxelem 65536
add ip_allow 192.168.1.123
add ip_allow 192.168.101.0/24
add ip_allow 192.168.102.0/24
EOF
Uruchom i włącz usługę ipset:
systemctl status ipset
systemctl start ipset
systemctl enable ipset
Zobacz, co ma ipset w załadowanej konfiguracji:
ipset list | head
Dodawane reguły iptables (domyślnie port 22 jest dostępny dla wszystkich):
cat > ansible_iptables_docker-iptables << 'EOF'
*filter
:DOCKER-USER - [0:0]
:FILTERS - [0:0]
#Nie można opróżnić INPUT. Zniszczy zaszyfrowane reguły nakładkowe Docker Swarm
#-F INPUT
#Użyj ansible lub uruchom ręcznie raz, aby dodać -I INPUT -j FILTERS
#-I INPUT -j FILTERS
-A DOCKER-USER -m state --state RELATED,ESTABLISHED -j RETURN
-A DOCKER-USER -i docker_gwbridge -j RETURN
-A DOCKER-USER -s 172.18.0.0/16 -j RETURN
-A DOCKER-USER -i docker0 -j RETURN
-A DOCKER-USER -s 172.17.0.0/16 -j RETURN
#Poniżej porty Dockera otwarte dla wszystkich, jeśli odkomentowane
#-A DOCKER-USER -p tcp -m tcp -m multiport --dports 8000,8001 -j RETURN
#-A DOCKER-USER -p udp -m udp -m multiport --dports 9000,9001 -j RETURN
-A DOCKER-USER -m set ! --match-set ip_allow src -j DROP
-A DOCKER-USER -j RETURN
-F FILTERS
#Ponieważ zaszyfrowana sieć nakładkowa Docker Swarm po prostu dodaje reguły do INPUT. Niestety musi być na górze
-A FILTERS -p udp -m policy --dir in --pol ipsec -m udp --dport 4789 -m set --match-set ip_allow src -j RETURN
-A FILTERS -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FILTERS -p icmp -j ACCEPT
-A FILTERS -i lo -j ACCEPT
#Poniżej porty OS otwarte dla wszystkich, jeśli odkomentowane
-A FILTERS -p tcp -m state --state NEW -m tcp -m multiport --dports 22 -j ACCEPT
#-A FILTERS -p udp -m udp -m multiport --dports 53,123 -j ACCEPT
-A FILTERS -m set ! --match-set ip_allow src -j DROP
-A FILTERS -j RETURN
COMMIT
EOF
Użyj iptables-restore, aby dodać powyższe reguły do iptables. Bardzo ważna flaga to -n. To zapewnia, że nie opróżnimy reguł iptables, jeśli mamy już reguły w Dockerze (lub Docker Swarm).
iptables-restore -n < ansible_iptables_docker-iptables
Następnie dodaj regułę do łańcucha INPUT, aby zacząć używać nowych reguł w FILTERS. Musi być na górze i trzeba ją dodać tylko raz.
iptables -I INPUT 1 -j FILTERS
Zapisz reguły iptables:
/usr/libexec/iptables/iptables.init save
Uruchom i włącz usługę iptables:
systemctl status iptables
systemctl start iptables
systemctl enable iptables
Jeśli chcesz dostosować reguły iptables, aby więcej portów było otwartych dla wszystkich, po prostu dodaj port do odpowiedniej reguły w pliku iptables (tcp lub udp), a następnie powtórz te same polecenia powyżej:
iptables-restore -n < ansible_iptables_docker-iptables
/usr/libexec/iptables/iptables.init save
Nie zapomnij o Ostrzeżeniach powyżej! Szczególnie na temat SELinux.
Ręczne polecenia (Ubuntu 20.04)
Sprawdź, jakie reguły iptables już masz. Zanotuj je na wypadek ich utraty!
Ubuntu 18.04 jest prawie taki sam. Po prostu pakiet ipset-persistent
nie istnieje w Ubuntu 18.04, dlatego pomiń ten pakiet i skopiuj pliki z files/ubuntu/iptables-persistent*/plugins/*-ipset
do /usr/share/netfilter-persistent/plugins.d/
.
iptables -nvL --line-numbers
Zainstaluj wymagane pakiety:
apt install iptables iptables-persistent netfilter-persistent ipset ipset-persistent
Skonfiguruj ipset z adresami IP swojego serwera i innymi zaufanymi adresami IP:
mkdir -p /etc/iptables
cat > /etc/iptables/ipsets << 'EOF'
create -exist ip_allow hash:ip family inet hashsize 1024 maxelem 65536
flush
add ip_allow 192.168.1.123
add ip_allow 192.168.101.0/24
add ip_allow 192.168.102.0/24
EOF
Przeładuj ipset:
/usr/sbin/netfilter-persistent reload
Zobacz, co ma ipset w załadowanej konfiguracji:
ipset list | head
Dodawane reguły iptables (domyślnie port 22 jest dostępny dla wszystkich):
Użyj tej samej komendy co powyżej dla CentOS/RHEL.
Użyj iptables-restore, aby dodać powyższe reguły do iptables. Bardzo ważna flaga to -n. To zapewnia, że nie opróżnimy reguł iptables, jeśli mamy już reguły w Dockerze (lub Docker Swarm).
iptables-restore -n < ansible_iptables_docker-iptables
Następnie dodaj regułę do łańcucha INPUT, aby zacząć używać nowych reguł w FILTERS. Musi być na górze i trzeba ją dodać tylko raz.
iptables -I INPUT 1 -j FILTERS
Zapisz reguły iptables:
/usr/sbin/netfilter-persistent save
Uruchom i włącz usługę iptables:
systemctl status netfilter-persistent
systemctl start netfilter-persistent
systemctl enable netfilter-persistent
Jeśli chcesz dostosować reguły iptables, aby więcej portów było otwartych dla wszystkich, po prostu dodaj port do odpowiedniej reguły w pliku iptables (tcp lub udp), a następnie powtórz te same polecenia powyżej:
iptables-restore -n < ansible_iptables_docker-iptables
/usr/sbin/netfilter-persistent save
Nie zapomnij o Ostrzeżeniach powyżej!
TODO
- Sprawdź, czy firewalld jest uruchomione i zakończ, jeśli działa lub jest włączone
- Problem z zapisywaniem reguł iptables w regułach Docker? Powinno być w porządku.
- iptables_docker_ip_allow_set nie może być puste. Jeśli jest puste, nie ma sensu, ponieważ nic nie jest blokowane!
- dodaj sprawdzenie interfejsów sieciowych dla * i błąd
- dodaj automatyczną listę adresów IP Dockera do listy dozwolonych (używa adresów IP z grupy inwentarza docker_hosts)
- Zmień zaufane adresy IP serwera Dockera, aby można było je nadpisać
- Potwierdź, że "gdy" i "tagi" są w porządku
- Ubuntu? Ubuntu nie ma iptables-services ani ipset-service. Ma iptables-persistent i ipset-? Brak wsparcia dla ufw
- ipv6?? To dotyczy tylko ipv4
- przetestuj TCP, UDP porty kontenerów Docker i OS
- przetestuj, czy ruch wychodzący z kontenerów Docker działa
- dodać test? Molecule? Tylko tryb jednej węzłowej klastra? Jak przetestować, że połączenie z "niezaufanym" ip nie działa?
Autor
Ryan Daniels
Manage iptables configuration to secure Docker (including Docker Swarm).
ansible-galaxy install ryandaniels.iptables_docker