{"id":61,"date":"2025-04-24T10:24:12","date_gmt":"2025-04-24T08:24:12","guid":{"rendered":"https:\/\/xavs.cat\/?p=61"},"modified":"2025-04-24T10:24:12","modified_gmt":"2025-04-24T08:24:12","slug":"crear-una-xarxa-docker-personalitzada-i-controlar-ne-lacces-amb-firewalld","status":"publish","type":"post","link":"https:\/\/xavs.cat\/?p=61","title":{"rendered":"Crear una xarxa Docker personalitzada i controlar-ne l\u2019acc\u00e9s amb\u00a0firewalld"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Com crear una xarxa Docker personalitzada i controlar-ne l\u2019acc\u00e9s amb\u00a0<em>firewalld<\/em><\/h2>\n\n\n\n<p>Quan treballem amb contenidors Docker, sovint ens cal m\u00e9s control sobre la xarxa que utilitzen. Ja sigui per raons de seguretat, segmentaci\u00f3 o rendiment, crear una xarxa personalitzada ens dona molta m\u00e9s flexibilitat. A continuaci\u00f3 t\u2019explico com fer-ho pas a pas i com protegir-la amb&nbsp;<em>firewalld<\/em>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee0\ufe0f Creaci\u00f3 d\u2019una xarxa Docker personalitzada<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker network create \\\n  --driver bridge \\\n  --subnet 10.20.30.0\/24 \\\n  --gateway 10.20.30.1 \\\n  --opt com.docker.network.bridge.enable_icc=true \\\n  --opt com.docker.network.bridge.enable_ip_masquerade=false \\\n  --opt com.docker.network.bridge.host_binding_ipv4=0.0.0.0 \\\n  --opt com.docker.network.driver.mtu=1500 \\\n  my-docker-network\n<\/code><\/pre>\n\n\n\n<p><strong>Qu\u00e8 fa aix\u00f2?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>--driver bridge<\/code>: Utilitzem el controlador per defecte de Docker, que crea una xarxa local a\u00efllada.<\/li>\n\n\n\n<li><code>--subnet<\/code>\u00a0i\u00a0<code>--gateway<\/code>: Definim l\u2019adre\u00e7ament IP de la nova xarxa. \u00c9s \u00fatil per evitar conflictes amb altres xarxes i tenir control total sobre la segmentaci\u00f3.<\/li>\n\n\n\n<li><code>enable_icc=true<\/code>: Permet la comunicaci\u00f3 entre contenidors dins la mateixa xarxa. Aix\u00f2 pot ser \u00fatil en entorns de desenvolupament.<\/li>\n\n\n\n<li><code>enable_ip_masquerade=false<\/code>: Evitem que Docker faci\u00a0<em>NAT<\/em>\u00a0(traducci\u00f3 d\u2019adreces), cosa que dona m\u00e9s control sobre la sortida cap a l\u2019exterior.<\/li>\n\n\n\n<li><code>host_binding_ipv4=0.0.0.0<\/code>: Permet que els ports exposats dels contenidors estiguin disponibles a qualsevol interf\u00edcie del host.<\/li>\n\n\n\n<li><code>mtu=1500<\/code>: Establim la mida m\u00e0xima de transmissi\u00f3 de la xarxa, normalment 1500 \u00e9s l\u2019est\u00e0ndard i evita problemes amb la fragmentaci\u00f3 de paquets.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Aquesta xarxa, anomenada\u00a0<code>my-docker-network<\/code>, es pot utilitzar en qualsevol contenidor afegint\u00a0<code>--network my-docker-network<\/code>\u00a0en executar-lo.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd10 Control d\u2019acc\u00e9s amb&nbsp;<code>firewalld<\/code><\/h3>\n\n\n\n<p>Un cop creada la xarxa, cal assegurar-nos que el tr\u00e0nsit entre els contenidors i altres serveis estigui&nbsp;<strong>controlat<\/strong>. Aqu\u00ed entra en joc&nbsp;<em>firewalld<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Assignem la nova subxarxa a la zona&nbsp;<em>docker<\/em><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --zone=docker --add-source=10.20.30.0\/24\n<\/code><\/pre>\n\n\n\n<p>Aix\u00f2 associa la subxarxa que hem creat a la zona &#8220;docker&#8221;, de manera que podem definir pol\u00edtiques espec\u00edfiques per a aquest tr\u00e0nsit.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. Creem una nova pol\u00edtica d\u2019acc\u00e9s<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --new-policy=docker2world\n<\/code><\/pre>\n\n\n\n<p>Definim una pol\u00edtica que gestionar\u00e0 com es mou el tr\u00e0nsit des de la zona&nbsp;<em>docker<\/em>&nbsp;cap a l\u2019exterior.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. Assignem la zona d&#8217;origen a la pol\u00edtica<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --policy=docker2world --add-ingress-zone=docker\n<\/code><\/pre>\n\n\n\n<p>Aix\u00f2 indica que la pol\u00edtica s&#8217;aplicar\u00e0 al tr\u00e0nsit&nbsp;<strong>entrant<\/strong>&nbsp;des de la zona&nbsp;<em>docker<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. Definim regles d\u2019acc\u00e9s directes a IPs espec\u00edfiques<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -s 10.20.30.0\/24 -d 10.29.252.4\/32 -j ACCEPT\nsudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -s 10.20.30.0\/24 -d 10.29.252.5\/32 -j ACCEPT\n<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed permetem expl\u00edcitament connexions des de la xarxa Docker cap a dues adreces IP concretes. \u00c9s una forma molt controlada d\u2019obrir tr\u00e0nsit nom\u00e9s a serveis autoritzats.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5. Activem la pol\u00edtica i el&nbsp;<em>masquerading<\/em><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --policy=docker2world --set-target=ACCEPT\nsudo firewall-cmd --permanent --policy=docker2world --add-masquerade\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Establim que, per defecte, el tr\u00e0nsit d\u2019aquesta pol\u00edtica sigui acceptat.<\/li>\n\n\n\n<li>Afegim el\u00a0<em>masquerading<\/em>, que permet que els contenidors accedeixin a xarxes externes utilitzant la IP del host (similar a NAT).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6. Apliquem tots els canvis<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --reload<\/code><\/pre>\n\n\n\n<p>Amb aix\u00f2,&nbsp;<em>firewalld<\/em>&nbsp;relectura la configuraci\u00f3 i activa totes les regles i pol\u00edtiques que hem afegit.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Beneficis d\u2019aquesta configuraci\u00f3<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Segmentaci\u00f3 i seguretat millorada<\/strong>: nom\u00e9s els contenidors dins de la xarxa poden parlar amb determinades IPs.<\/li>\n\n\n\n<li><strong>Evitem NAT innecessari<\/strong>: gr\u00e0cies a\u00a0<code>enable_ip_masquerade=false<\/code>, tenim m\u00e9s control i transpar\u00e8ncia sobre el tr\u00e0nsit de xarxa.<\/li>\n\n\n\n<li><strong>Flexibilitat total<\/strong>: podem gestionar la xarxa Docker com si fos una xarxa f\u00edsica real.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Com crear una xarxa Docker personalitzada i controlar-ne l\u2019acc\u00e9s amb\u00a0firewalld Quan treballem amb contenidors Docker, sovint ens cal m\u00e9s control sobre la xarxa que utilitzen. Ja sigui per raons de seguretat, segmentaci\u00f3 o rendiment, crear una xarxa personalitzada ens dona molta m\u00e9s flexibilitat. A continuaci\u00f3 t\u2019explico com fer-ho pas a pas i com protegir-la amb&nbsp;firewalld. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,24],"tags":[],"class_list":["post-61","post","type-post","status-publish","format-standard","hentry","category-docker","category-firewall"],"_links":{"self":[{"href":"https:\/\/xavs.cat\/index.php?rest_route=\/wp\/v2\/posts\/61","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xavs.cat\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xavs.cat\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xavs.cat\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/xavs.cat\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=61"}],"version-history":[{"count":1,"href":"https:\/\/xavs.cat\/index.php?rest_route=\/wp\/v2\/posts\/61\/revisions"}],"predecessor-version":[{"id":62,"href":"https:\/\/xavs.cat\/index.php?rest_route=\/wp\/v2\/posts\/61\/revisions\/62"}],"wp:attachment":[{"href":"https:\/\/xavs.cat\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=61"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xavs.cat\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=61"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xavs.cat\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}