cutover: paso 0 para wp-nuevo, LLAR fuera y el modo SSL ya confirmado

Aviso de Mixbot (2-ago): los bots de la carta publican por wp-nuevo.feadulta.com,
no por www, porque el WAF de Cloudflare los bloquea por www (regla "bloquear bots
1"). Ese hostname no tiene registro propio, lo cubre el wildcard, y Traefik solo
enruta nuevo.feadulta.com: al mover el A del apex los bots dejarian de publicar.
La carta 738 se compone el martes.

Se anade el paso 0 al runbook. Hay que hacerlo en el PANEL: por API el PATCH de
fqdn da 422 y actualizar SERVICE_FQDN_WORDPRESS cambia la variable pero no
regenera los routers (comprobado hoy). Plan B documentado: los bots pueden pasar
a nuevo.feadulta.com, que es grey cloud y por tanto no pasa por Cloudflare ni le
aplica ninguna regla del WAF.

Decision de Rafa: el bloqueo de login lo lleva Wordfence y sale
limit-login-attempts-reloaded. Wordfence hace lo mismo y ademas firewall de
aplicacion, escaner de malware y 2FA; los dos juntos son dos contadores
compitiendo. Retirado del staging (7 plugins activos, sitio en pie) y anadido al
post-import-seguridad.sh (paso 3c) porque el dump lo revive en cada import, junto
con sus 12 opciones huerfanas. Nuevo paso 3d que verifica que Wordfence sigue
activo y lo reinstala si faltara.

Inma confirma que el modo SSL de la zona es Full, no Flexible: cae el riesgo de
bucle de redireccion. Marcado como resuelto en los verdes previos.

Anadida la seccion del correo: el cutover no lo toca (MX a otra IP), pero la
caducidad del 07/08 si, y ediciones@/contenido@ son de donde sale la carta.

Anotado tambien que Cloudflare devuelve 403 a la IP de Rafa para cualquier
hostname de feadulta: un 403 desde su maquina no prueba nada, la verificacion de
los bots la tienen que hacer ellos.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 21:31:37 -04:00
parent da3dfae0a3
commit 603eb1ecb4
2 changed files with 104 additions and 13 deletions
+36
View File
@@ -92,6 +92,42 @@ else
REMOTE
fi
echo ""
echo "=== 3c. Retirar limit-login-attempts-reloaded ==="
# Decision de Rafa (2-ago): el bloqueo de login lo lleva Wordfence, que hace lo mismo
# y ademas firewall de aplicacion, escaner de malware y 2FA. Tener los dos = dos
# contadores compitiendo. El dump trae LLAR en active_plugins, asi que cada import
# lo revive: por eso se retira aqui y no una sola vez a mano.
if [ $DRY -eq 1 ]; then
echo " [dry-run] desactivaria y borraria limit-login-attempts-reloaded"
echo " [dry-run] limpiaria las opciones limit_login_*"
else
wp plugin deactivate limit-login-attempts-reloaded >/dev/null 2>&1 || true
wp plugin delete limit-login-attempts-reloaded >/dev/null 2>&1 || true
echo " limit-login-attempts-reloaded: retirado"
ssh -o BatchMode=yes "$SRV" "bash -s" <<REMOTE
RP=\$(docker inspect mysql-$U --format '{{range .Config.Env}}{{println .}}{{end}}' | sed -n 's/^MYSQL_ROOT_PASSWORD=//p')
docker exec mysql-$U mysql --default-character-set=utf8mb4 -uroot -p"\$RP" -N -e \
"DELETE FROM wp_options WHERE option_name LIKE 'limit_login%';" wordpress 2>/dev/null
n=\$(docker exec mysql-$U mysql -uroot -p"\$RP" -N -e "SELECT COUNT(*) FROM wp_options WHERE option_name LIKE 'limit_login%';" wordpress 2>/dev/null)
echo " opciones limit_login_* restantes: \$n"
REMOTE
fi
echo ""
echo "=== 3d. Wordfence presente? ==="
if [ $DRY -eq 1 ]; then
echo " [dry-run] comprobaria Wordfence"
else
if wp plugin is-installed wordfence 2>/dev/null; then
wp plugin activate wordfence >/dev/null 2>&1 || true
echo " wordfence: instalado y activo"
else
echo " wordfence: NO instalado -> instalando desde wordpress.org"
wp plugin install wordfence --activate >/dev/null 2>&1 && echo " wordfence: instalado" || echo " wordfence: FALLO la instalacion, revisar a mano"
fi
fi
echo ""
echo "=== 4. Verificacion ==="
echo " administradores que quedan:"