{"id":47270,"date":"2026-06-27T22:43:40","date_gmt":"2026-06-27T13:43:40","guid":{"rendered":"https:\/\/raybeam.jp\/docs\/initial-server-setup\/how-to-auto-update-ufw-rules-with-cloudflare-ips\/"},"modified":"2026-06-27T22:44:20","modified_gmt":"2026-06-27T13:44:20","slug":"how-to-auto-update-ufw-rules-with-cloudflare-ips","status":"publish","type":"docs","link":"https:\/\/raybeam.jp\/es\/docs\/initial-server-setup\/how-to-auto-update-ufw-rules-with-cloudflare-ips\/","title":{"rendered":"C\u00f3mo actualizar autom\u00e1ticamente las reglas de UFW con las direcciones IP de la versi\u00f3n Cloudflare"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Cuando te sientes detr\u00e1s de Cloudflare, debes <strong>solo<\/strong> Permitir el tr\u00e1fico procedente de los rangos de IP de Cloudflare en los puertos 80 y 443. Cloudflare actualiza peri\u00f3dicamente estos rangos, por lo que las reglas de UFW deben actualizarse autom\u00e1ticamente. El script de <strong><a href=\"https:\/\/github.com\/Paul-Reed\/cloudflare-ufw\">cloudflare-ufw<\/a><\/strong>, de Paul Reed, hace precisamente eso.<\/p>\n\n\n\n<h2 id=\"1-download-and-make-the-script-executable\" class=\"wp-block-heading\">1. Descarga el script y hazlo ejecutable<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo wget -O \/usr\/local\/bin\/cloudflare-ufw.sh \\\n  https:\/\/raw.githubusercontent.com\/Paul-Reed\/cloudflare-ufw\/refs\/heads\/master\/cloudflare-ufw.sh\nsudo chmod +x \/usr\/local\/bin\/cloudflare-ufw.sh\n<\/code><\/code><\/pre>\n\n\n\n<h2 id=\"2-inspect-current-ufw-rules-before-changes\" class=\"wp-block-heading\">2. Revisar las normas actuales de la UFW (antes de los cambios)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo ufw status verbose\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Probablemente ver\u00e1s algo como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>texto<code>Acci\u00f3n De\n-- ------ ----\n22\/tcp PERMITIR Desde cualquier lugar\n80\/tcp PERMITIR Desde cualquier lugar\n443 PERMITIR Desde cualquier lugar\n...\n<\/code><\/code><\/pre>\n\n\n\n<h2 id=\"3-remove-the-overlypermissive-80443-rules\" class=\"wp-block-heading\">3. Eliminar las reglas 80\/443 excesivamente permisivas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Estas normas permiten actualmente <em>cualquiera<\/em> Direcciones IP que acceden a los puertos de tu web. Las sustituiremos por reglas exclusivas de Cloudflare.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo ufw delete allow 80\/tcp\nsudo ufw delete allow 443\/tcp\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si UFW solicita una confirmaci\u00f3n, escribe <code>y<\/code> y pulsa Intro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comprueba el estado de nuevo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo ufw status verbose\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ya no deber\u00edas ver <code>80\/tcp<\/code> o <code>443<\/code> con <code>PERMITIR<\/code> de <code>En cualquier lugar<\/code>.<\/p>\n\n\n\n<h2 id=\"4-run-the-cloudflareufw-script\" class=\"wp-block-heading\">4. Ejecuta el script Cloudflare\u2011UFW<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo \/usr\/local\/bin\/cloudflare-ufw.sh\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Qu\u00e9 hace el script:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Recupera los rangos IPv4 e IPv6 m\u00e1s recientes de Cloudflare desde <code>https:\/\/www.cloudflare.com\/ips-v4<\/code> y <code>...\/ips-v6<\/code>.<\/li>\n\n\n\n<li>Elimina cualquier regla de UFW existente para los puertos 80 y 443 que permita <code>En cualquier lugar<\/code>.<\/li>\n\n\n\n<li>A\u00f1ade nuevo <code>PERMITIR<\/code> normas <strong>solo<\/strong> para cada rango de direcciones IP Cloudflare en los puertos 80 (HTTP) y 443 (HTTPS).<\/li>\n\n\n\n<li>Opcionalmente, se reinicia UFW para que las nuevas reglas surtan efecto de inmediato.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez finalizado, comprueba lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo ufw status verbose\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora deber\u00edas ver varias l\u00edneas como estas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>texto<code>Acci\u00f3n De\n-- ------ ----\n80\/tcp ALLOW 173.245.48.0\/20\n80\/tcp ALLOW 103.21.244.0\/22\n...\n443 PERMITIR 173.245.48.0\/20\n443 PERMITIR 103.21.244.0\/22\n...\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El resto de direcciones IP tienen el acceso denegado de forma impl\u00edcita a los puertos 80 y 443.<\/p>\n\n\n\n<h2 id=\"5-automate-daily-updates-with-cron\" class=\"wp-block-heading\">5. Automatizar las actualizaciones diarias con cron<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare puede modificar sus rangos de IP en cualquier momento. Para mantener tu cortafuegos actualizado, programa la ejecuci\u00f3n diaria del script (por ejemplo, a las 03:00).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Edita el archivo crontab de root:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo crontab -e\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si se te solicita, elige tu editor preferido (por ejemplo, <code>nano<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade la siguiente l\u00ednea al final:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>text<code>0 3 * * * \/usr\/local\/bin\/cloudflare-ufw.sh &gt;&gt; \/var\/log\/cloudflare-ufw.log 2&gt;&amp;1\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esto hace lo siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ejecuta el script todos los d\u00edas a las 03:00, hora del servidor.<\/li>\n\n\n\n<li>A\u00f1ade la salida y los errores a <code>\/var\/log\/cloudflare-ufw.log<\/code> para la auditor\u00eda.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Guarda y sal del editor.<\/p>\n\n\n\n<h2 id=\"6-verify-the-cron-job\" class=\"wp-block-heading\">6. Comprueba la tarea programada<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Muestra el crontab de root para comprobarlo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo crontab -l\n<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Deber\u00edas ver la nueva l\u00ednea.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si lo prefieres, ejecuta el proceso de inmediato y comprueba el registro:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo \/usr\/local\/bin\/cloudflare-ufw.sh\nsudo tail -n 20 \/var\/log\/cloudflare-ufw.log\n<\/code><\/code><\/pre>\n\n\n\n<h2 id=\"7-ongoing-maintenance\" class=\"wp-block-heading\">7. Mantenimiento continuo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para actualizar manualmente las reglas en cualquier momento: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo \/usr\/local\/bin\/cloudflare-ufw.sh<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para consultar el registro: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo less \/var\/log\/cloudflare-ufw.log<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si alguna vez necesitas volver a la configuraci\u00f3n \u201cpermitir en cualquier lugar\u201d (no recomendado en entornos de producci\u00f3n): <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<code>sudo ufw delete allow from any to any port 80 proto tcp sudo ufw delete allow from any to any port 443 proto tcp sudo ufw allow 80\/tcp sudo ufw allow 443\/tcp<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con esta configuraci\u00f3n, tu cortafuegos UFW solo aceptar\u00e1 tr\u00e1fico HTTP\/HTTPS procedente de los rangos de IP actuales de Cloudflare, lo que reducir\u00e1 dr\u00e1sticamente la superficie de ataque y garantizar\u00e1 que tus sitios web sigan siendo accesibles a trav\u00e9s de Cloudflare.<\/p>","protected":false},"featured_media":0,"parent":47233,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"pmpro_default_level":"","nav_title":"","positive":"","negative":"","footnotes":""},"docs_category":[],"class_list":["post-47270","docs","type-docs","status-publish","hentry","pmpro-has-access"],"_links":{"self":[{"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/docs\/47270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/comments?post=47270"}],"version-history":[{"count":1,"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/docs\/47270\/revisions"}],"predecessor-version":[{"id":47271,"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/docs\/47270\/revisions\/47271"}],"up":[{"embeddable":true,"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/docs\/47233"}],"wp:attachment":[{"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/media?parent=47270"}],"wp:term":[{"taxonomy":"docs_category","embeddable":true,"href":"https:\/\/raybeam.jp\/es\/wp-json\/wp\/v2\/docs_category?post=47270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}