{"id":277,"date":"2026-10-17T10:10:45","date_gmt":"2026-10-17T08:10:45","guid":{"rendered":"https:\/\/www.cisilino.com\/?p=277"},"modified":"2026-10-29T20:02:55","modified_gmt":"2026-10-29T19:02:55","slug":"mysql-5-7-docker-nftables-proteccion","status":"publish","type":"post","link":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/","title":{"rendered":"MySQL 5.7 en Docker protegido con nftables"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n<p>Nos encontramos con la necesidad de tener una base de datos <strong>MySQL 5.7<\/strong> en un servidor que, por lo dem\u00e1s, funciona con una distribuci\u00f3n reciente. Algunas aplicaciones heredadas no son compatibles con MySQL 8 (cambio del plugin de autenticaci\u00f3n predeterminado, modos SQL m\u00e1s estrictos, palabras reservadas nuevas). Migrarlas en poco tiempo no era una opci\u00f3n. La salida fue ejecutar MySQL 5.7 en Docker.<\/p>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp\" alt=\"MySQL 5.7 en Docker: una base de datos dentro de un recuadro naranja discontinuo, con un c\u00edrculo y una barra delante\" width=\"1200\" height=\"630\"\/><\/figure>\n<p>Instalar una versi\u00f3n tan antigua directamente en el host trae varios problemas. Los repositorios oficiales de las distribuciones actuales ya no la ofrecen, los paquetes de terceros pueden chocar con el resto del sistema. Y una actualizaci\u00f3n del sistema operativo podr\u00eda romperla.<\/p>\n<p>Decidimos entonces <strong>aislarla en un contenedor Docker<\/strong>. El host se mantiene limpio y actualizado, la versi\u00f3n de la base de datos queda fijada y es reproducible. Los datos y la configuraci\u00f3n est\u00e1n en una carpeta f\u00e1cil de guardar y mover.<\/p>\n<p>Este art\u00edculo cuenta c\u00f3mo la configuramos y, sobre todo, los obst\u00e1culos que encontramos por el camino. Fueron la exposici\u00f3n involuntaria del puerto 3306 y un error de iptables al reiniciar. Despu\u00e9s, la escritura de un cortafuegos con <strong>nftables<\/strong> que deje pasar solo las IP autorizadas.<\/p>\n<blockquote class=\"wp-block-quote\">\n<p><strong>Nota:<\/strong> MySQL 5.7 lleg\u00f3 al final de su vida \u00fatil (EOL) en octubre de 2023 y ya no recibe parches de seguridad. Es una soluci\u00f3n puente: el objetivo sigue siendo migrar a MySQL 8.x o MariaDB. Precisamente por eso es todav\u00eda m\u00e1s importante no dejarlo expuesto.<\/p>\n<\/blockquote>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\">1. Estructura de la carpeta<\/h2>\n<pre class=\"wp-block-code\"><code>\/opt\/mysql57\/\n\u251c\u2500\u2500 docker-compose.yml\n\u251c\u2500\u2500 .env\n\u251c\u2500\u2500 conf.d\/        # configurazioni personalizzate (my.cnf aggiuntivi)\n\u251c\u2500\u2500 data\/          # dati del database (volume persistente)\n\u2514\u2500\u2500 logs\/\n<\/code><\/pre>\n<p>El archivo <code>.env<\/code> contiene las credenciales, para que no acaben en el compose.<\/p>\n<pre class=\"wp-block-code\"><code>TZ=Europe\/Rome\nMYSQL_ROOT_PASSWORD=una_password_molto_lunga_e_casuale\nMYSQL_DATABASE=nome_db\nMYSQL_USER=nome_utente\nMYSQL_PASSWORD=altra_password_robusta\n<\/code><\/pre>\n<p>Prot\u00e9gelo con <code>chmod 600 .env<\/code>.<\/p>\n<h2 class=\"wp-block-heading\">2. El docker-compose.yml de MySQL 5.7 en Docker<\/h2>\n<pre class=\"wp-block-code\"><code>services:\n  mysql57:\n    image: mysql:5.7\n    container_name: mysql57\n    restart: unless-stopped\n    env_file:\n      - .env\n    ports:\n      - \"3306:3306\"\n    environment:\n      TZ: \"${TZ:-Europe\/Rome}\"\n      MYSQL_ROOT_PASSWORD: \"${MYSQL_ROOT_PASSWORD}\"\n      MYSQL_DATABASE: \"${MYSQL_DATABASE}\"\n      MYSQL_USER: \"${MYSQL_USER}\"\n      MYSQL_PASSWORD: \"${MYSQL_PASSWORD}\"\n    command:\n      - --default-authentication-plugin=mysql_native_password\n    volumes:\n      - .\/data:\/var\/lib\/mysql\n      - .\/conf.d:\/etc\/mysql\/conf.d:ro\n      - .\/logs:\/var\/log\/mysql\n    healthcheck:\n      test: &#91;\"CMD-SHELL\", \"mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent\"]\n      interval: 20s\n      timeout: 5s\n      retries: 10\n      start_period: 45s\n    ulimits:\n      nofile:\n        soft: 65535\n        hard: 65535\n<\/code><\/pre>\n<p>Algunas decisiones que conviene se\u00f1alar.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong><code>restart: unless-stopped<\/code><\/strong>: la base de datos arranca sola tras un reinicio del servidor.<\/li>\n<li><strong>Vol\u00famenes con bind mount<\/strong>: datos, configuraci\u00f3n y logs est\u00e1n en el host. As\u00ed, las copias de seguridad y las migraciones son simples copias de carpetas.<\/li>\n<li><strong>Healthcheck<\/strong>: permite que los dem\u00e1s servicios esperen a que MySQL est\u00e9 realmente listo. El <code>$$<\/code> sirve para que la variable se expanda dentro del contenedor y no por Compose.<\/li>\n<li><strong><code>ulimits nofile<\/code><\/strong>: evita el error \u00abtoo many open files\u00bb bajo carga.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">3. Primer problema: el puerto est\u00e1 abierto a todo el mundo<\/h2>\n<p>La l\u00ednea <code>- \"3306:3306\"<\/code> equivale a <code>0.0.0.0:3306:3306<\/code>. Docker publica el puerto en <strong>todas las interfaces<\/strong> del host, incluida la p\u00fablica.<\/p>\n<p>Lo m\u00e1s insidioso es que Docker escribe sus propias reglas directamente en el cortafuegos del kernel. Estas se eval\u00faan antes que las de UFW o firewalld. Tener un cortafuegos activo <strong>no basta<\/strong>: el puerto sigue siendo alcanzable. La documentaci\u00f3n de Docker sobre <a href=\"https:\/\/docs.docker.com\/engine\/network\/packet-filtering-firewalls\/\" target=\"_blank\" rel=\"noopener\">filtrado de paquetes y cortafuegos<\/a> describe este comportamiento.<\/p>\n<p>Los caminos posibles son estos.<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Solo localhost<\/strong>: <code>\"127.0.0.1:3306:3306\"<\/code>, si la base de datos solo la usa el host o se accede por t\u00fanel SSH.<\/li>\n<li><strong>Ning\u00fan puerto publicado<\/strong>: si los clientes son otros contenedores, basta una red Docker compartida.<\/li>\n<li><strong>IP concreta<\/strong>: publicar solo en una direcci\u00f3n de una red privada\/VPN.<\/li>\n<li><strong>Puerto p\u00fablico con filtro por IP<\/strong>: nuestro caso. Un cliente externo (una instancia de phpMyAdmin en otro servidor) tiene que poder conectarse.<\/li>\n<\/ol>\n<p>Para el caso 4 hace falta un cortafuegos que filtre correctamente el tr\u00e1fico de los puertos publicados por Docker.<\/p>\n<h2 class=\"wp-block-heading\">4. Segundo problema: error de iptables al arrancar<\/h2>\n<p>Despu\u00e9s de tocar el cortafuegos, <code>docker compose up<\/code> devolvi\u00f3.<\/p>\n<pre class=\"wp-block-code\"><code>failed to create network mysql57_default: Error response from daemon:\nFailed to Setup IP tables: Unable to enable ACCEPT OUTGOING rule:\n(iptables failed: iptables --wait -t filter -A DOCKER-FORWARD -i br-... -j ACCEPT:\niptables: No chain\/target\/match by that name.\n<\/code><\/pre>\n<p>El error no depende del compose: la cadena <code>DOCKER-FORWARD<\/code> (introducida en las versiones recientes de Docker) ya no exist\u00eda. La hab\u00eda borrado algo que limpi\u00f3 las reglas <strong>despu\u00e9s<\/strong> de arrancar el demonio. Reiniciar Docker (<code>systemctl restart docker<\/code>) la recrea, pero el problema reaparece mientras no se elimine al verdadero culpable.<\/p>\n<h3 class=\"wp-block-heading\">El culpable: <code>flush ruleset<\/code><\/h3>\n<p>Nuestro <code>\/etc\/nftables.conf<\/code> empezaba con.<\/p>\n<pre class=\"wp-block-code\"><code>flush ruleset\n<\/code><\/pre>\n<p>Este comando borra <strong>todas<\/strong> las tablas de nftables, incluidas las creadas por Docker. Adem\u00e1s, el archivo conten\u00eda una copia est\u00e1tica de las reglas de Docker. Llevaba el nombre del bridge (<code>br-278550235c3f<\/code>) y la IP del contenedor (<code>172.18.0.2<\/code>) escritos a mano. Pero el nombre del bridge cambia cada vez que se recrea la red de Compose. As\u00ed, la copia quedaba obsoleta enseguida, y la tabla <code>ip nat<\/code> entraba en conflicto con la gestionada por Docker.<\/p>\n<p><strong>Regla de oro:<\/strong> con Docker, en el archivo de nftables no se usa <code>flush ruleset<\/code> y no se copian sus reglas. Solo se gestiona el cortafuegos propio, en tablas dedicadas.<\/p>\n<h2 class=\"wp-block-heading\">5. El cortafuegos para MySQL 5.7 en Docker<\/h2>\n<p>El principio es este. Los puertos publicados por Docker se reescriben con DNAT y luego el host los reenv\u00eda al contenedor. As\u00ed, atraviesan la cadena <strong><code>forward<\/code><\/strong>, no <code>input<\/code>. Una regla <code>drop<\/code> en una cadena nuestra, <code>forward<\/code>, con una prioridad ligeramente m\u00e1s baja (es decir, evaluada antes) descarta el paquete sin importar las reglas <code>accept<\/code> de Docker.<\/p>\n<p>Para no tocar las tablas ajenas usamos el patr\u00f3n <code>table ...<\/code> + <code>delete table ...<\/code>: hace que el archivo se pueda volver a ejecutar sin errores y sin <code>flush<\/code>.<\/p>\n<p><code>\/etc\/nftables.conf<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>#!\/usr\/sbin\/nft -f\n\n# NIENTE \"flush ruleset\": cancellerebbe anche le tabelle di Docker\n\n# ---------------- firewall host ----------------\ntable inet filter\ndelete table inet filter\n\ntable inet filter {\n\n    chain input {\n        type filter hook input priority filter; policy drop;\n        ct state established,related accept\n        iifname \"lo\" accept\n        ip6 nexthdr icmpv6 accept\n        iifname \"enp7s0\" accept                       # rete privata\n        ip saddr 203.0.113.20 tcp dport 22 accept     # SSH da host fidato\n        ip saddr 203.0.113.30 tcp dport 22 accept     # SSH da VPN\n        ip saddr 203.0.113.20 icmp type echo-request accept\n        tcp dport { 80, 443 } accept\n    }\n\n    chain output {\n        type filter hook output priority filter; policy accept;\n    }\n}\n\n# ---------------- guardia MySQL (porta pubblicata da Docker) ----------------\ntable ip mysql_guard\ndelete table ip mysql_guard\n\ntable ip mysql_guard {\n    set allowed {\n        type ipv4_addr\n        flags interval\n        elements = {\n            203.0.113.10        # phpMyAdmin\n        }\n    }\n\n    chain forward {\n        type filter hook forward priority filter - 5; policy accept;\n        iifname \"enp7s0\" accept\n        ct status dnat tcp dport 3306 ip saddr @allowed accept\n        ct status dnat tcp dport 3306 counter drop\n    }\n}\n<\/code><\/pre>\n<p>C\u00f3mo funciona la guardia.<\/p>\n<ul class=\"wp-block-list\">\n<li><code>ct status dnat<\/code> selecciona solo los paquetes que han pasado por el DNAT, es decir, los dirigidos a los puertos publicados por Docker.<\/li>\n<li>La primera regla acepta a quien est\u00e9 en el conjunto <code>allowed<\/code>. La segunda descarta a todos los dem\u00e1s y los cuenta (<code>counter<\/code>).<\/li>\n<li>El tr\u00e1fico local (<code>127.0.0.1<\/code>) y el que va entre contenedores de la misma red no pasa por el forward del router. As\u00ed que no se toca.<\/li>\n<\/ul>\n<blockquote class=\"wp-block-quote\">\n<p><strong>Compatibilidad:<\/strong> en una primera versi\u00f3n us\u00e1bamos <code>ct original proto-dst 3306<\/code>. Pero algunas versiones de <code>nft<\/code> responden con <em>\u00abCan&#8217;t parse symbolic invalid expressions\u00bb<\/em>. En el hook <code>forward<\/code> el DNAT ya ha ocurrido y el puerto del contenedor coincide con el publicado (<code>3306:3306<\/code>). Por eso <code>tcp dport 3306<\/code> combinado con <code>ct status dnat<\/code> es equivalente y funciona en todas partes. Si cambias el mapeo (p. ej. <code>3307:3306<\/code>), la regla debe adaptarse al puerto interno.<\/p>\n<\/blockquote>\n<h3 class=\"wp-block-heading\">Aplicar los cambios sin quedarse fuera<\/h3>\n<p>Mant\u00e9n abierta una sesi\u00f3n SSH de reserva y despu\u00e9s.<\/p>\n<pre class=\"wp-block-code\"><code>nft -c -f \/etc\/nftables.conf     # solo verifica della sintassi\nnft delete table ip nat          # una tantum: elimina la vecchia copia statica\nnft -f \/etc\/nftables.conf\nsystemctl restart docker         # Docker ricrea le sue tabelle pulite\ncd \/opt\/mysql57 &amp;&amp; docker compose up -d\n<\/code><\/pre>\n<p>Para la carga en el arranque, aseg\u00farate de que el servicio est\u00e9 activo (<code>systemctl enable --now nftables<\/code>). Comprueba tambi\u00e9n que <code>\/etc\/nftables.conf<\/code> no contenga <code>flush ruleset<\/code>.<\/p>\n<h3 class=\"wp-block-heading\">Gestionar las IP en tiempo de ejecuci\u00f3n<\/h3>\n<pre class=\"wp-block-code\"><code>nft add element ip mysql_guard allowed { 203.0.113.50 }\nnft delete element ip mysql_guard allowed { 203.0.113.50 }\n<\/code><\/pre>\n<p>Para hacerlo permanente, actualiza tambi\u00e9n el conjunto en el archivo.<\/p>\n<h2 class=\"wp-block-heading\">6. Verificaci\u00f3n del acceso a MySQL 5.7 en Docker<\/h2>\n<p>Desde el servidor autorizado.<\/p>\n<pre class=\"wp-block-code\"><code>nc -zv IP_PUBBLICO_DB 3306        # deve rispondere \"succeeded\"\n<\/code><\/pre>\n<p>Desde cualquier otra IP.<\/p>\n<pre class=\"wp-block-code\"><code>nmap -Pn -p 3306 IP_PUBBLICO_DB   # deve risultare \"filtered\" \/ timeout\n<\/code><\/pre>\n<p>En el servidor, el contador de la regla de descarte debe crecer con cada intento no autorizado.<\/p>\n<pre class=\"wp-block-code\"><code>nft list chain ip mysql_guard forward\nss -tlnp | grep 3306\n<\/code><\/pre>\n<h2 class=\"wp-block-heading\">7. Segunda barrera: los usuarios de MySQL<\/h2>\n<p>El cortafuegos no sustituye los permisos de la base de datos. Crea el usuario con el host limitado a la IP del cliente.<\/p>\n<pre class=\"wp-block-code\"><code>CREATE USER 'pma_user'@'203.0.113.10' IDENTIFIED BY 'password_robusta';\nGRANT ALL ON nome_db.* TO 'pma_user'@'203.0.113.10';\nFLUSH PRIVILEGES;\n<\/code><\/pre>\n<p>Si la conexi\u00f3n TCP se establece pero MySQL responde <code>Access denied<\/code>, el problema est\u00e1 aqu\u00ed y no en el cortafuegos.<\/p>\n<h2 class=\"wp-block-heading\">8. Cosas que recordar<\/h2>\n<ul class=\"wp-block-list\">\n<li><strong>Docker y el cortafuegos del host no se ignoran mutuamente<\/strong>. Entender por qu\u00e9 cadena pasa el tr\u00e1fico (<code>input<\/code> o <code>forward<\/code>) es la clave de todo.<\/li>\n<li><strong>Nunca <code>flush ruleset<\/code><\/strong> en un host con Docker; usa tablas dedicadas.<\/li>\n<li><strong>No copies las reglas generadas por Docker<\/strong> en tus archivos: los nombres de bridge y las IP cambian.<\/li>\n<li>Si ya has expuesto el puerto, revisa los logs en <code>.\/logs<\/code> y valora <strong>cambiar las contrase\u00f1as<\/strong>, sobre todo la de root.<\/li>\n<li>Siempre que sea posible, prefiere una <strong>VPN (WireGuard) o un t\u00fanel SSH<\/strong> a la exposici\u00f3n p\u00fablica de una base de datos.<\/li>\n<li>Planifica la <strong>migraci\u00f3n<\/strong> de MySQL 5.7 a una versi\u00f3n con soporte.<\/li>\n<\/ul>\n<p>Si lo que te da problemas es el arranque tras una actualizaci\u00f3n de Debian, tienes este otro caso: <a href=\"https:\/\/www.cisilino.com\/es\/2026\/10\/13\/mysql-no-arranca-debian-12\/\">MySQL no arranca tras actualizar a Debian 12<\/a>.<\/p>\n<p>\u00bfTienes dudas sobre MySQL 5.7 en Docker o una soluci\u00f3n distinta para el mismo problema? Escr\u00edbelo en los comentarios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.<\/p>\n","protected":false},"author":1,"featured_media":760,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wpai_generated_summary":"","footnotes":""},"categories":[364],"tags":[331,311,295,315],"class_list":["post-277","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-servidores-bases-de-datos","tag-cortafuegos","tag-docker-es","tag-mysql-es","tag-nftables-es"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"matteocisilino\"\/>\n\t<meta name=\"google-site-verification\" content=\"_A-1f0dO30IDVHfP9muflI8kHQs-H4YOi8WLUkYzuLE\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Matteo Cisilino - Guide su WordPress, server e sicurezza\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"MySQL 5.7 en Docker protegido con nftables\" \/>\n\t\t<meta property=\"og:description\" content=\"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-17T08:10:45+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-29T19:02:55+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"MySQL 5.7 en Docker protegido con nftables\" \/>\n\t\t<meta name=\"twitter:description\" content=\"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#blogposting\",\"name\":\"MySQL 5.7 en Docker protegido con nftables\",\"headline\":\"MySQL 5.7 en Docker protegido con nftables\",\"author\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/author\\\/matteocisilino\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/mysql-5-7-docker-nftables-cortafuegos.webp\",\"width\":1200,\"height\":630,\"caption\":\"MySQL 5.7 en Docker: una base de datos dentro de un recuadro naranja discontinuo, con un c\\u00edrculo y una barra delante\"},\"datePublished\":\"2026-10-17T10:10:45+02:00\",\"dateModified\":\"2026-10-29T20:02:55+01:00\",\"inLanguage\":\"es-ES\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#webpage\"},\"articleSection\":\"Servidores y bases de datos, cortafuegos, Docker, MySQL, nftables\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/category\\\/servidores-bases-de-datos\\\/#listItem\",\"name\":\"Servidores y bases de datos\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/category\\\/servidores-bases-de-datos\\\/#listItem\",\"position\":2,\"name\":\"Servidores y bases de datos\",\"item\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/category\\\/servidores-bases-de-datos\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#listItem\",\"name\":\"MySQL 5.7 en Docker protegido con nftables\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#listItem\",\"position\":3,\"name\":\"MySQL 5.7 en Docker protegido con nftables\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/category\\\/servidores-bases-de-datos\\\/#listItem\",\"name\":\"Servidores y bases de datos\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/#organization\",\"name\":\"Matteo Cisilino\",\"description\":\"Guide su WordPress, server e sicurezza\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/logo-cisilino-512.png\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#organizationLogo\",\"width\":512,\"height\":512,\"caption\":\"Logo: un cerchio a sinistra che si divide in cerchi pi\\u00f9 piccoli\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/author\\\/matteocisilino\\\/#author\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/author\\\/matteocisilino\\\/\",\"name\":\"matteocisilino\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/639872265f0661e8aee8924ba9d756b00ea816f8286fab99a5116c729d49618f?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"matteocisilino\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#webpage\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/\",\"name\":\"MySQL 5.7 en Docker protegido con nftables\",\"description\":\"C\\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.\",\"inLanguage\":\"es-ES\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/author\\\/matteocisilino\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/author\\\/matteocisilino\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/mysql-5-7-docker-nftables-cortafuegos.webp\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#mainImage\",\"width\":1200,\"height\":630,\"caption\":\"MySQL 5.7 en Docker: una base de datos dentro de un recuadro naranja discontinuo, con un c\\u00edrculo y una barra delante\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/2026\\\/10\\\/17\\\/mysql-5-7-docker-nftables-proteccion\\\/#mainImage\"},\"datePublished\":\"2026-10-17T10:10:45+02:00\",\"dateModified\":\"2026-10-29T20:02:55+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/\",\"name\":\"Matteo Cisilino\",\"description\":\"Guide su WordPress, server e sicurezza\",\"inLanguage\":\"es-ES\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/es\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"MySQL 5.7 en Docker protegido con nftables","description":"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.","canonical_url":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"_A-1f0dO30IDVHfP9muflI8kHQs-H4YOi8WLUkYzuLE","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#blogposting","name":"MySQL 5.7 en Docker protegido con nftables","headline":"MySQL 5.7 en Docker protegido con nftables","author":{"@id":"https:\/\/www.cisilino.com\/es\/author\/matteocisilino\/#author"},"publisher":{"@id":"https:\/\/www.cisilino.com\/es\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp","width":1200,"height":630,"caption":"MySQL 5.7 en Docker: una base de datos dentro de un recuadro naranja discontinuo, con un c\u00edrculo y una barra delante"},"datePublished":"2026-10-17T10:10:45+02:00","dateModified":"2026-10-29T20:02:55+01:00","inLanguage":"es-ES","mainEntityOfPage":{"@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#webpage"},"isPartOf":{"@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#webpage"},"articleSection":"Servidores y bases de datos, cortafuegos, Docker, MySQL, nftables"},{"@type":"BreadcrumbList","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/es\/#listItem","position":1,"name":"Home","item":"https:\/\/www.cisilino.com\/es\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/es\/category\/servidores-bases-de-datos\/#listItem","name":"Servidores y bases de datos"}},{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/es\/category\/servidores-bases-de-datos\/#listItem","position":2,"name":"Servidores y bases de datos","item":"https:\/\/www.cisilino.com\/es\/category\/servidores-bases-de-datos\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#listItem","name":"MySQL 5.7 en Docker protegido con nftables"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/es\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#listItem","position":3,"name":"MySQL 5.7 en Docker protegido con nftables","previousItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/es\/category\/servidores-bases-de-datos\/#listItem","name":"Servidores y bases de datos"}}]},{"@type":"Organization","@id":"https:\/\/www.cisilino.com\/es\/#organization","name":"Matteo Cisilino","description":"Guide su WordPress, server e sicurezza","url":"https:\/\/www.cisilino.com\/es\/","logo":{"@type":"ImageObject","url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/logo-cisilino-512.png","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#organizationLogo","width":512,"height":512,"caption":"Logo: un cerchio a sinistra che si divide in cerchi pi\u00f9 piccoli"},"image":{"@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/www.cisilino.com\/es\/author\/matteocisilino\/#author","url":"https:\/\/www.cisilino.com\/es\/author\/matteocisilino\/","name":"matteocisilino","image":{"@type":"ImageObject","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/639872265f0661e8aee8924ba9d756b00ea816f8286fab99a5116c729d49618f?s=96&d=mm&r=g","width":96,"height":96,"caption":"matteocisilino"}},{"@type":"WebPage","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#webpage","url":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/","name":"MySQL 5.7 en Docker protegido con nftables","description":"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.","inLanguage":"es-ES","isPartOf":{"@id":"https:\/\/www.cisilino.com\/es\/#website"},"breadcrumb":{"@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#breadcrumblist"},"author":{"@id":"https:\/\/www.cisilino.com\/es\/author\/matteocisilino\/#author"},"creator":{"@id":"https:\/\/www.cisilino.com\/es\/author\/matteocisilino\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp","@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#mainImage","width":1200,"height":630,"caption":"MySQL 5.7 en Docker: una base de datos dentro de un recuadro naranja discontinuo, con un c\u00edrculo y una barra delante"},"primaryImageOfPage":{"@id":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/#mainImage"},"datePublished":"2026-10-17T10:10:45+02:00","dateModified":"2026-10-29T20:02:55+01:00"},{"@type":"WebSite","@id":"https:\/\/www.cisilino.com\/es\/#website","url":"https:\/\/www.cisilino.com\/es\/","name":"Matteo Cisilino","description":"Guide su WordPress, server e sicurezza","inLanguage":"es-ES","publisher":{"@id":"https:\/\/www.cisilino.com\/es\/#organization"}}]},"og:locale":"es_ES","og:site_name":"Matteo Cisilino - Guide su WordPress, server e sicurezza","og:type":"article","og:title":"MySQL 5.7 en Docker protegido con nftables","og:description":"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.","og:url":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/","og:image":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp","og:image:secure_url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp","og:image:width":1200,"og:image:height":630,"article:published_time":"2026-10-17T08:10:45+00:00","article:modified_time":"2026-10-29T19:02:55+00:00","twitter:card":"summary_large_image","twitter:title":"MySQL 5.7 en Docker protegido con nftables","twitter:description":"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.","twitter:image":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/mysql-5-7-docker-nftables-cortafuegos.webp"},"aioseo_meta_data":{"post_id":"277","title":"MySQL 5.7 en Docker protegido con nftables","description":"C\u00f3mo ejecutar MySQL 5.7 en Docker en un servidor moderno sin exponerlo a internet: docker-compose, puerto cerrado y cortafuegos nftables.","keywords":null,"keyphrases":{"focus":{"keyphrase":"mysql 5.7 en docker"}},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-10-29 09:24:41","updated":"2026-10-29 21:59:55","focus_keyword":"mysql 5.7 docker","additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.cisilino.com\/es\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.cisilino.com\/es\/category\/servidores-bases-de-datos\/\" title=\"Servidores y bases de datos\">Servidores y bases de datos<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tMySQL 5.7 en Docker protegido con nftables\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.cisilino.com\/es\/"},{"label":"Servidores y bases de datos","link":"https:\/\/www.cisilino.com\/es\/category\/servidores-bases-de-datos\/"},{"label":"MySQL 5.7 en Docker protegido con nftables","link":"https:\/\/www.cisilino.com\/es\/2026\/10\/17\/mysql-5-7-docker-nftables-proteccion\/"}],"_links":{"self":[{"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/posts\/277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/comments?post=277"}],"version-history":[{"count":2,"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/posts\/277\/revisions"}],"predecessor-version":[{"id":950,"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/posts\/277\/revisions\/950"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/media\/760"}],"wp:attachment":[{"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/media?parent=277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/categories?post=277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cisilino.com\/es\/wp-json\/wp\/v2\/tags?post=277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}