Puncte:2

De ce firewalld permite traficul public către porturile mele non-publice, legate de containerele Docker?

drapel de

Încerc să implementez un firewall destul de simplu în Fedora, unde internetul public poate accesa SSH, HTTP, HTTPS și Cockpit, dar nimic altceva. Între timp, serverele rulează microservicii prin Docker care pot vorbi între ele pe porturile 8000-8999.

diagrama rețelei

Am configurat acest lucru pe o nouă instalare Fedora Server cu următoarele comenzi:

firewall-cmd --zone=public --add-service=cockpit
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=https

firewall-cmd --zone=internal --add-source=192.168.1.65
firewall-cmd --zone=internal --add-source=192.168.1.66

firewall-cmd --zone=internal --add-port=8000-8999/tcp

firewall-cmd --runtime-to-permanent

Când îmi verific configurația cu --list-toate, totul pare corect:

> firewall-cmd --list-all --zone=intern
intern (activ)
  target: implicit
  icmp-block-inversion: nu
  interfete:
  surse: 192.168.1.65 192.168.1.66
  servicii: dhcpv6-client ssh
  porturi: 8000-8999/tcp
  protocoale:
  înainte: nu
  mascarada: nu
  porturi înainte:
  porturi sursă:
  icmp-blocks:
  reguli bogate:

> firewall-cmd --list-all --zone=public
public (activ)
  target: implicit
  icmp-block-inversion: nu
  interfețe: enp2s0
  surse:
  servicii: cockpit dhcpv6-client http https ssh
  porturi:
  protocoale:
  înainte: nu
  mascarada: nu
  porturi înainte:
  porturi sursă:
  icmp-blocks:
  reguli bogate:

Cu toate acestea, când testez asta, sunt capabil să lovesc http://192.168.1.65:8080. Pot să-l lovesc de la o mașină din aceeași rețea internă (192.168.128.128), precum și o solicitare publică de la o mașină externă. Din moment ce niciunul nu a fost listat în internlui surse, am presupus că firewalld nu va permite cererilor să treacă.

Am un auto-configurat docher zona cu docker0 interfață, dar eliminarea acesteia nu pare să-mi schimbe capacitatea de a lovi portul intern.

De ce pot solicita cu succes :8080 din surse care nu sunt listate pe intern?

Puncte:1
drapel de

Ei bine, se pare că problema provine din faptul că folosesc Docker pentru porturile mele interne. Pentru a simplifica procesul de a face containerele să vorbească cu lumea și între ei, Docker a ales să preia o cantitate mare de control asupra firewall-urilor/rețelei. Aceasta înseamnă că dacă tu nu doriți ca containerele dvs. să fie accesibile publicului ȘI trebuie să controlați accesul public prin firewall-ul de pe aceeași mașină cu demonul Docker, trebuie să configurați firewall-urile ușor diferit. Docker are o documentație oficială despre cum să faceți acest lucru. Practic, aveți următoarele opțiuni:

  • Configurați o mașină separată doar pentru firewall. Acesta ar fi probabil cel mai ușor, deoarece Docker și firewall-ul dvs. nu ar trebui să partajeze resurse.
  • Adăugați-vă iptables reguli la DOCKER-UTILIZATOR lanț (acesta este mai mult un răspuns pentru iptables utilizatorii; Nu sunt sigur cum să ajung firewalld pentru a replica această abordare)
  • Dezactivați totul prin setare iptables=false în configurația serviciului Docker. (această postare pe blog discută această opțiune)

și eu a gasit o postare care mi s-a părut o variantă frumoasă asupra DOCKER-UTILIZATOR opțiunea de lanț. Practic, tu creezi un iptables.conf fișier pe care îl puteți încărca fără spălare folosind iptables-restore -n. Din păcate, este un iptables solutie, nu a firewalld soluţie.

Una dintre părțile grele ale diagnosticării acestei probleme a fost că aș rula un script pentru a modifica firewall-ul pentru a se potrivi cu ceea ce doream și asta ar funcționa până când repornesc mașina sau pornesc demonul Docker. Docker suprascrie iptables config când pornește.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.