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:
@@ -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:"
|
||||
|
||||
Reference in New Issue
Block a user