Introduccion: Protege tu Inversion en Odoo

Has invertido tiempo y esfuerzo en instalar y configurar Odoo Community para tu empresa. Ahora el reto es mantener ese sistema funcionando de forma segura, estable y actualizada. La seguridad y el mantenimiento no son opcionales: son criticos. Un servidor mal configurado puede ser hackeado, un backup inexistente puede causar perdida total de datos, y una instalacion sin actualizaciones puede tener vulnerabilidades de seguridad.

En este articulo aprenderas todo lo que necesitas saber para proteger tu servidor Odoo, configurar respaldos automaticos, mantener el sistema actualizado, y monitorear el rendimiento. Todo explicado de forma practica para que puedas implementar en tu empresa sin ser experto en seguridad informatica.

La seguridad informatica no es un producto que compras, es un proceso que implementas. No necesitas un equipo de seguridad dedicado para proteger tu Odoo. Con las practicas correctas, puedes reducir significativamente el riesgo de incidentes. Este articulo te da las bases para empezar.

Seguridad Basica del Servidor

El servidor donde corre Odoo es el primer nivel de defensa. Si el servidor es comprometido, todos los datos de tu empresa estan en riesgo.

Configurar Firewall (UFW)

Un firewall controla que puertos estan abiertos al mundo exterior. Solo debes abrir los puertos que realmente necesitas.

# Instalar UFW
sudo apt install -y ufw

# Configurar politica por defecto: denegar todo
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Abrir puertos necesarios
sudo ufw allow 22/tcp    # SSH (solo si necesitas acceso remoto)
sudo ufw allow 80/tcp    # HTTP (para redirigir a HTTPS)
sudo ufw allow 443/tcp   # HTTPS (para Odoo con SSL)

# Activar el firewall
sudo ufw enable

# Verificar estado
sudo ufw status verbose
Importante: Nunca expongas el puerto 8069 de Odoo directamente a internet. Odoo siempre debe estar detras de un proxy reverso (Nginx) con HTTPS. El puerto 8069 es para acceso local o interno solamente.

Configurar SSH Seguro

SSH es la forma en que accedes remotamente a tu servidor. Debes protegerlo:

# Cambiar el puerto SSH (por defecto 22)
sudo nano /etc/ssh/sshd_config

Busca la linea "Port 22" y cambiala a otro puerto, por ejemplo "Port 2222". Luego:

# Reiniciar el servicio SSH
sudo systemctl restart sshd

Desactivar Login como Root

Nunca permitas login directo como root. En el mismo archivo sshhd_config, busca y configura:

PermitRootLogin no
PasswordAuthentication yes

Crea un usuario normal con permisos sudo:

sudo adduser tu_usuario
sudo usermod -aG sudo tu_usuario

Instalar Fail2Ban

Fail2Ban bloquea IPs que intentan acceder al servidor con contrasenas incorrectas多次.

# Instalar Fail2Ban
sudo apt install -y fail2ban

# Configurar Fail2Ban
sudo cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
EOF

# Activar Fail2Ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Configurar HTTPS con Nginx

HTTPS encripta toda la comunicacion entre el navegador del usuario y tu servidor. Sin HTTPS, los datos viajan en texto plano y pueden ser interceptados.

Instalar Nginx y Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

Configurar Nginx para Odoo

sudo cat > /etc/nginx/sites-available/odoo << 'EOF'
upstream odoo {
    server 127.0.0.1:8069;
}

server {
    listen 80;
    server_name tu-dominio.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name tu-dominio.com;

    ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    proxy_buffers 16 64k;
    proxy_buffer_size 128k;

    location / {
        proxy_pass http://odoo;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /websocket {
        proxy_pass http://127.0.0.1:8072;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Obtener Certificado SSL

sudo certbot --nginx -d tu-dominio.com

Certbot instalara un certificado gratuito de Let's Encrypt y configurara Nginx automaticamente. Los certificados se renuevan automaticamente.

Configurar Respaldos Automaticos

Los respaldos son tu ultima linea de defensa contra perdida de datos. Sin respaldos, un error humano, un fallo de disco o un ataque ransomware puede destruir todos los datos de tu empresa.

Respaldos con Odoo

Odoo tiene un sistema de respaldos integrado:

  1. Ve a Ajustes > Base de Datos > Respaldos
  2. Haz clic en "Crear Respaldo"
  3. Selecciona la base de datos
  4. El sistema genera un archivo .zip con la base de datos completa

Script de Respaldo Automatico

Crea un script que ejecute respaldos automaticos programados:

sudo cat > /opt/odoo/backup.sh << 'SCRIPT'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/opt/odoo/backups"
mkdir -p $BACKUP_DIR

# Respaldo de todas las bases de datos
for DB in $(sudo -u postgres psql -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" | tr -d ' '); do
    sudo -u postgres pg_dump $DB | gzip > "$BACKUP_DIR/${DB}_${DATE}.sql.gz"
done

# Respaldar archivos de configuracion
cp /etc/odoo/odoo.conf "$BACKUP_DIR/odoo.conf_${DATE}"

# Eliminar respaldos mayores a 30 dias
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
find $BACKUP_DIR -name "odoo.conf_*" -mtime +30 -delete

echo "[$(date)] Respaldo completado" >> /var/log/odoo/backup.log
SCRIPT

sudo chmod +x /opt/odoo/backup.sh

Programar el Respaldo con Cron

# Programar respaldo diario a las 2 AM
echo "0 2 * * * /opt/odoo/backup.sh" | sudo crontab -

Almacenamiento Externo

Nunca guardes los respaldos solo en el servidor. Si el servidor se danada, pierdes los respaldos tambien. Opciones de almacenamiento externo:

  • S3 o compatible: Amazon S3, Wasabi, Backblaze B2. Sube los respaldos automaticamente.
  • Google Drive: Usa rclone para sincronizar respaldos con Google Drive.
  • FTP/SFTP: Sube los respaldos a un servidor FTP remoto.
  • Disco externo: Si tu servidor esta en tu oficina, usa un disco externo USB.

Script de Sincronizacion con S3

# Instalar rclone
sudo apt install -y rclone

# Configurar rclone (interactivamente)
rclone config

# Agregar sincronizacion al script de backup
echo "rclone copy $BACKUP_DIR s3:tu-bucket/backups/ --max-age 30d" >> /opt/odoo/backup.sh
Consejo: Haz una prueba de restauracion una vez al mes. Un backup que nunca se ha restaurado es un backup que no funciona. Verifica que tus respaldos sean validos y que puedas restaurarlos en caso de emergencia.

Actualizaciones de Odoo

Mantener Odoo actualizado es importante para tener las ultimas correcciones de seguridad y funcionalidades. Sin embargo, las actualizaciones deben hacerse con cuidado.

Antes de Actualizar

  1. Respaldar: SIEMPRE haz un backup antes de actualizar.
  2. Leer changelog: Revisa que cambios incluye la nueva version.
  3. Probar en desarrollo: Si es posible, prueba la actualizacion en un entorno de desarrollo primero.
  4. Notificar: Informa a los usuarios que habra un periodo de mantenimiento.

Proceso de Actualizacion

# 1. Detener Odoo
sudo systemctl stop odoo

# 2. Hacer backup
/opt/odoo/backup.sh

# 3. Actualizar el repositorio
cd /opt/odoo18
sudo -u odoo git pull

# 4. Actualizar dependencias de Python
sudo -u odoo ./venv/bin/pip install -r requirements.txt

# 5. Actualizar modulos de Odoo
sudo -u odoo ./venv/bin/odoo-bin -c /etc/odoo/odoo.conf -u all --stop-after-init

# 6. Iniciar Odoo
sudo systemctl start odoo

# 7. Verificar que funcione
curl -s http://localhost:8069 | head -5

Frecuencia de Actualizaciones

  • Seguridad: Aplica parches de seguridad inmediatamente cuando esten disponibles.
  • Menor: Actualiza a nuevas versiones menores (ej: 18.0.1 a 18.0.2) mensualmente.
  • Mayor: Actualiza a nuevas versiones mayores (ej: 17.0 a 18.0) con cuidado, despues de probar en desarrollo.

Monitorizacion del Servidor

La monitorizacion te permite detectar problemas antes de que se conviertan en crisis.

Herramientas Basicas

# Instalar herramientas de monitoreo
sudo apt install -y htop iotop nethogs glances
  • htop: Monitor de procesos en tiempo real. Muestra CPU, memoria y procesos.
  • iotop: Monitor de actividad de disco. Identifica que procesos estan usando el disco.
  • nethogs: Monitor de trafico de red por proceso.
  • glances: Monitor completo del sistema con interfaz web.

Monitorear Odoo Especificamente

# Ver logs de Odoo en tiempo real
sudo tail -f /var/log/odoo/odoo.log

# Verificar si Odoo esta corriendo
sudo systemctl status odoo

# Verificar el uso de memoria de Odoo
ps aux | grep odoo | grep -v grep

# Verificar conexiones a PostgreSQL
sudo -u postgres psql -c "SELECT * FROM pg_stat_activity;"

Configurar Alertas Basicas

Crea un script que monitoree el sistema y envie alertas por correo:

sudo cat > /opt/odoo/monitor.sh << 'SCRIPT'
#!/bin/bash
ALERT_EMAIL="[email protected]"

# Verificar si Odoo esta corriendo
if ! systemctl is-active --quiet odoo; then
    echo "ALERTA: Odoo no esta corriendo!" | mail -s "Odoo Down" $ALERT_EMAIL
fi

# Verificar espacio en disco
DISK_USAGE=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 85 ]; then
    echo "ALERTA: Disco al ${DISK_USAGE}%" | mail -s "Disco Lleno" $ALERT_EMAIL
fi

# Verificar memoria
MEM_USAGE=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}')
if [ $MEM_USAGE -gt 90 ]; then
    echo "ALERTA: Memoria al ${MEM_USAGE}%" | mail -s "Memoria Baja" $ALERT_EMAIL
fi
SCRIPT

chmod +x /opt/odoo/monitor.sh
echo "*/5 * * * * /opt/odoo/monitor.sh" | sudo crontab -

Seguridad Especifica de Odoo

Proteger la Contrasena Master

La contrasena master de Odoo permite crear y eliminar bases de datos. Debe ser:

  • Unica: No uses la misma contrasena que en otros sitios.
  • Completa: Minimo 12 caracteres con mayusculas, minusculas, numeros y simbolos.
  • Segura: No la compartas por correo o mensaje.
  • Cambiada periodicamente: Cambiala cada 3-6 meses.

Desactivar Listado de Bases de Datos

En odoo.conf, configura:

list_db = False

Esto evita que cualquiera que conozca la URL pueda ver las bases de datos disponibles.

Limitar Intentos de Acceso

Configura rate limiting en Nginx para prevenir ataques de fuerza bruta:

# Agregar al bloque server de Nginx
limit_req_zone $binary_remote_addr zone=odoo:10m rate=10r/s;

location / {
    limit_req zone=odoo burst=20 nodelay;
    proxy_pass http://odoo;
    # ... demas configuraciones
}

Permisos de Archivos

Verifica que los permisos de archivos sean correctos:

# El archivo de configuracion debe ser legible solo por odoo
sudo chmod 640 /etc/odoo/odoo.conf
sudo chown odoo:odoo /etc/odoo/odoo.conf

# Los logs deben ser escribibles solo por odoo
sudo chown odoo:odoo /var/log/odoo/odoo.log

# Los backups deben estar protegidos
sudo chmod 700 /opt/odoo/backups

Plan de Recuperacion ante Desastres

Un plan de recuperacion ante desastres define que hacer cuando algo sale mal gravemente.

Escenarios Comunes

  • Servidor hackeado: Desconectar de internet, formatear, restaurar desde backup.
  • Fallo de disco: Restaurar en un nuevo servidor desde backup.
  • Error humano: Restaurar la base de datos al estado anterior al error.
  • Desastre natural: Restaurar en un servidor en la nube desde backup externo.

Pasos para Recuperar

  1. Identificar: Determina que paso y que datos estan afectados.
  2. Aislar: Desconecta el servidor de internet si es un ataque.
  3. Evaluar: Determina si puedes reparar o necesitas restaurar.
  4. Restaurar: Usa el backup mas reciente para restaurar.
  5. Verificar: Confirma que todo funcione correctamente.
  6. Documentar: Registra que paso y que se hizo para resolverlo.
Consejo: Documenta tu plan de recuperacion y compartelo con tu equipo. En una emergencia, no hay tiempo para improvisar. Tener un plan documentado te permite reaccionar rapido y efectivamente.

Checklist de Seguridad Mensual

Realiza esta verificacion una vez al mes para mantener tu servidor seguro:

  • Verificar actualizaciones: Aplica parches de seguridad pendientes.
  • Revisar logs: Busca errores o actividades sospechosas en los logs.
  • Verificar backups: Confirma que los backups se estan ejecutando correctamente.
  • Probar restauracion: Restaura un backup en un entorno de prueba.
  • Revisar usuarios: Elimina usuarios inactivos y verifica permisos.
  • Verificar firewall: Revisa las reglas del firewall.
  • Monitorear disco: Verifica que no se este llenando.
  • Revisar certificados: Confirma que los certificados SSL estan vigentes.
  • Verificar HTTPS: Prueba que todo el sitio funcione con HTTPS.
  • Documentar cambios: Registra cualquier cambio realizado en el servidor.

Conclusion

La seguridad y el mantenimiento de tu instalacion Odoo no son tareas que se hacen una vez y se olvidan. Son procesos continuos que requieren atencion y disciplina. Con las practicas descritas en este articulo, puedes reducir significativamente el riesgo de incidentes de seguridad y garantizar que tu sistema este disponible y funcionando cuando lo necesites.

Recuerda: es mas barato prevenir que curar. Un backup que cuesta $10 en almacenamiento puede salvarte de una perdida de miles de dolares en datos. Un firewall bien configurado puede evitar un ataque que cueste la reputacion de tu empresa. Invierte tiempo en seguridad hoy para evitar problemas manana.

Con este articulo, completamos la serie de CanalSaaS sobre auto-implementacion de Odoo Community para PYMES. Has aprendido a instalar, configurar y mantener un ERP profesional sin depender de consultores externos. El conocimiento que has adquirido es una inversion que te servira por anos.