Blog

  • Tips iniciales Kali Linux

    Una vez instaladas Kali Linux tenemos que efectuar los siguientes pasos:

    1. Si se instala kali bajando una máquina virtual, el usuario por defecto es «kali» con la clave «kali». Vamos a crear un nuevo usuario:

    sudo adduser miguel

    2. Vamos a configurarlo para que pueda ejecutar sudo sin clave: Añadimos ahora al usuario a los grupos de Kali:

    sudo adduser miguel sudo
    sudo adduser miguel kali-trusted

    3. Actualizar los paquetes de kali:

    sudo apt update && sudo apt upgrade -y
    suto apt autoremove -y
    sudo reboot

    4. Configurar la hora.

    Pulsando el reloj con el botón derecho buscamos la Timezone correcta:

    En nuestro caso sería «Europe/Madrid».

    5. Cambiar el idioma del sistema operativo:

    Si ejecutamos:

    locale

    Nos muestra la configuración del lenguaje actual:

    Lo que tendremos que hacer es:

    sudo dpkg-reconfigure locales

    y buscar el adecuado para nuestro país:

    Una vez reiniciado el sistema, Kali nos ofrece la posibilidad de renombrar las principales carpetas al castellano:

    6. Cambiar la distribución de nuestro teclado. La distribución por defecto es en inglés y las teclas de puntuación, entre otras, no están correctamente mapeadas:

    Para ello, en el botón de inicio, buscamos teclado:

    En la pestaña distribución, podemos añadir el español y ponerlo en primer lugar, por delante del Inglés o bien podemos borrar el inglés:

    Previamente, tendremos que desmarcar la opción predeterminada o no será posible añadir nuevas distribuciones de idiomas:

    7. Actualizar la base de datos de metasploit para que, cuando vayamos a utilizarla, esté ya preparada:

    sudo msfdb init

  • Migración instancia «Paperless-ngx»

    Paperless es una aplicación genial para poder autohospedar la gestión de tu documentación, facturas, manuales y demás documentos.

    En su página web tenemos toda la documentación.

    El mismo framework provee unos sencillos pasos para migrar de una instancia a otra y no perder documentos, etiquetas ni configuración.

    1. En la instancia origen:
    cd /opt/paperless/scr
    
    python3 manage.py document_exporter /mnt/paperless/export/

    Este comando exportará todo el contenido a la carpeta especificada «/mnt/paperless/export»

    1. En la instancia destino:
    cd /opt/paperless/scr
    
    python3 manage.py document_importer /mnt/paperless/export/

    Nota. En mi caso tuve que generar de nuevo la clave del usuario admin en la instancia destino.

    cd /opt/paperless/scr
    
    python3 manage.py createsuperuser

    Nota 2:

    Cuando instalamos y configuramos la nueva instancia para que nos haga el OCR en español es posible que sea necesario instalar un nuevo paquete:

    apt install tesseract-ocr-spa

    La configuración inicial de la nueva instancia puede ser parecida a esta:

  • Nextcloud en Oracle Cloud Services

    Oracle tiene intención de apostar fuertemente por la Nube y por ello nos ofrece «gratuitamente» la creación y el uso de 2 VPS con unas prestaciones mas que suficientes para implantar algunos servicios en la nube.

    Hay muchos tutoriales en Youtube donde explican cómo crear estos VPS de forma sencilla. En concreto, Apuntes IT tiene unos muy bien explicados.

    El artículo concreto está en su web.

    El artículo concreto en su web.

    El artículo completo.

    Los recomiendo porque son sencillos y muy útiles.

    En este post, lo único que añadiré o modificaré ligeramente son los comandos para abrir los puertos desde la máquina VPS de Oracle ya que el autor de los tutoriales utiliza IPTABLES y creo, bajo mi punto de vista, que hay opciones mas sencillas.

    UFW

    Lo primero que haré será acceder via ssh a nuestro VPS y desde allí ejecutar los siguientes comandos:

    sudo apt remove netfilter-persistent

    Quitamos el cortafuegos basado en IPTABLES que incorporan por defecto las máquinas virtuales.

    apt install ufw

    Instalamos UFW que es mucho mas fácil de configurar.

    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp

    Habilitamos los puertos a los que queremos dar acceso.

    sudo ufw enable
    sudo ufw status

    Habilitamos el nuevo cortafuegos y comprobamos su estado.

    En este momento ya tenemos el cortafuegos interno de la máquina VPS listo para admitir conexiones.

    Espero sirva de ayuda.

  • Automatizar Excel: Correo electrónico

    Excel es una herramienta potentísima, eso es un hecho.

    Cuando tienes una hoja que se nutre de una base de datos y que se actualiza periódicamente cada pocos minutos, viene muy bien que la propia hoja de cálculo nos avise de cualquier cambio que determine una acción a ejecutar.

    Para solucionar esto, vamos a programar una macro que detecte los cambios en un rango (tabla) y que nos notifique vía correo electrónico. Esta macro presupone que tenemos instalado y configurado Outlook.

    Para añadir nuestra macro, pulsaremos con el botón derecho sobre el nombre de nuestra hoja:

    Botón derecho sobre «Hoja1»

    A continuación copiamos el código de abajo.

    Dim xRg As Range
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error Resume Next
        Set xRg = Intersect(Range("F5"), Target)
        If xRg Is Nothing Then Exit Sub
        If IsNumeric(Target.Value) And Target.Value > 0 Then
            Call Mail_small_Text_Outlook
        End If
    End Sub
    
    Sub Mail_small_Text_Outlook()
        Dim xOutApp As Object
        Dim xOutMail As Object
        Dim xMailBody As String
        Set xOutApp = CreateObject("Outlook.Application")
        Set xOutMail = xOutApp.CreateItem(0)
        ' Select cell A5, *first line of data*.
        Range("A5").Select
        xMailBody = "Linea1" & vbNewLine & vbNewLine & _
                  "Linea2" & vbNewLine
        Do Until IsEmpty(ActiveCell)
             ' Insert your code here.
             xMailBody = xMailBody & vbNewLine & _
             ActiveCell.Offset(0, 0).Value & "-" & _
             ActiveCell.Offset(0, 1).Value & "-" & _
             ActiveCell.Offset(0, 2).Value
             ' Step down 1 row from present location.
             ActiveCell.Offset(1, 0).Select
          Loop
        
        On Error Resume Next
        With xOutMail
            .To = "[email protected]"
            .CC = ""
            .BCC = ""
            .Subject = "Asunto del mensaje"
            .Body = xMailBody
            .Send   'or use .Display
        End With
        On Error GoTo 0
        Set xOutMail = Nothing
        Set xOutApp = Nothing
    End Sub
    
    

    La tabla tipo es la siguiente:

    Tabla que cambia

    El funcionamiento es muy sencillo.

    1. Cuando los datos de la tabla se actualizan, el script comprueba que la cantidad de la casilla F5 tenga un valor mayor que 0.
    2. En este caso envía un email a la dirección de correo especificada con los datos de la tabla.

  • Rclone (3/3): Recuperando datos

    Ya tenemos el entorno preparado y los datos salvados en la nube pero necesitamos un mecanismo que nos permita recuperar de forma rápida dichos datos.

    Propongo dos formas:

    1. Montaje de la carpeta de Google Drive encriptada como unidad de nuestro ordenador.
    2. Recuperación de los datos a través de un servidor http que nos ofrezca de forma transparente el acceso a nuestra nube.

    Montar volumen cifrado en claro

    Para montar un volumen cifrado necesitamos crear en nuestro equipo local una carpeta donde veremos el contenido de nuestra carpeta de la nube ya sin cifrar. Nos puede servir el siguiente script.

    #!/bin/sh
    
    rclone mount \
            --rc --transfers 8 \
            --volname GDrive \
            --allow-other \
            --log-level INFO \
            --buffer-size 32M \
            --vfs-cache-mode writes \
            --vfs-cache-max-size 16G \
            miGDrive_encriptado:/ /Users/miguel/transito

    Donde miGDrive_encriptado es el nombre del repositorio encriptado que creamos en Rclone (2/3) y /Users/miguel/transito es una carpeta en nuestro equipo local. Recordar que hay que dar los permisos de ejecución a nuestro script.

    $ chmod +x montar_almacenamiento_encriptado.sh

    El resultado del ejecutar el script lo podemos ver en el explorador de archivos de nuestro equipo:

    Vista de la carpeta montada en nuestro equipo
    Misma carpeta en la nube de Google

    Como podemos ver, el script de montaje nos trae a nuestro equipo la nube de Google sin encriptar de tal forma que podemos recuperar cualquier fichero que se nos antoje.

    Cuando cerremos la terminal o terminemos el comando de montaje «montar_encrypted_storage_mac.sh» con Ctrl+C se desmontará la carpeta de nuestro equipo local.

    Recuperar datos a través del navegador

    Rclone nos permite de una forma sencilla recuperar los datos de nuestra nube también a través de un servidor http (entre otros métodos).

    Para ello montaremos un script con el siguiente contenido:

    #!/bin/sh
    
    rclone serve http miGDrive_encriptado: --addr :9090

    Donde «miGDrive_encriptado» es el nombre del repositorio encriptado en la nube y «–addr :9090» es el puerto en que se montará el servidor http:

    Si navegamos ahora tendremos:

    Ahora podemos hacer uso del navegador estándar para descargar nuestros datos.

    Conclusión

    Como podemos observar Rclone es una herramienta extraordinaria, con múltiples de posibilidades. En nuestro caso la hemos usado para solventar una escenario muy particular pero las opciones son infinitas.

    Si te ha resultado mínimamente útil esta serie de post, por favor, comparte y comenta. Estaré encantado en responder.

  • Rclone (2/3): Las copias

    Ahora que ya tenemos el Id y la clave es conveniente recordar nuestro objetivo:

    Configurar una unidad en la nube de Google Drive cifrada de extremo a extremo usando Rclone.

    Cuando utilizas una nube pública, teóricamente solo tu y tu proveedor (Google en este caso) tienen acceso a tus datos. Cuando la nube pública es gestionada por una entidad superior o educacional, también el administrador de dicha entidad puede tener acceso a tus datos.

    Cuando algo está cifrado extremo a extremo, nadie más que tú puede ver los datos. Es un nivel completamente diferente de protección y privacidad, incluso el servicio que almacena tus archivos no sabe nada sobre ellos porque el descifrado solo tiene lugar en sus dispositivos.

    ¿Qué es rclone?

    Rclone se promociona como un rsync para el almacenamiento en la nube. Te permite sincronizar archivos entre su computadora y los proveedores de almacenamiento en la nube o incluso entre varios proveedores de nube que utilizan tu computadora como proxy.

    La sincronización de archivos no es lo único que hace rclone. También tiene un montón de funcionalidades que le permiten exponer y manipular los datos. Por ejemplo, puedes montar una unidad en la nube directamente en su sistema operativo y usarla como otra unidad. O puede exponer el contenido de la unidad en la nube mediante el protocolo WebDAV, FTP, HTTP o incluso DLNA.

    Instalar Rclone

    Utilizaremos la línea de comandos o shell de nuestro sistema. La forma mas sencilla en un sistema basado en linux como es Synology es:

    $ curl https://rclone.org/install.sh | sudo bash

    Esto instalará Rclone en el sistema.

    Configurar el almacenamiento remoto

    En mi caso configuraré un almacenamiento remoto en Rclone cuyo destino será la carpeta raíz del espacio Google Drive.

    $ rclone config

    Y seguimos los pasos para la configuración de Google Drive:

    Ahora es el momento de indicar el ID y la clave que obtuvimos anteriormente. Véase el post de preparativos.

    Ahora pegamos en el navegador la url que nos da la consola para dar a nuestro Rclone permisos para acceder a Google Drive. Nos dará un código el navegador que tenemos que pegar a continuación:

    Una vez configurado nuestro GDrive podemos hacer una prueba de acceso.

    $ rclone lsd miGDrive:

    Si todo ha ido bien veremos el contenido de nuestro Google Drive.

    Añadiendo capa de cifrado

    Una vez que Rclone «conoce» nuestro Google Drive, vamos a crear dentro de él una carpeta cuyo contenido va a estar encriptado. De nuevo llamaremos a Rclone para crear una configuración de carpeta encriptada.

    $ rclone config

    Y damos por finalizada la configuración. Todo lo que subamos a «miGDrive_encriptado» irá a la carpeta «encriptado» de nuestro Google Drive y estará cifrado con nuestras claves.

    Sincronización inicial

    Ya lo tenemos todo preparado para comenzar a subir datos. Para ello crearemos un script de la forma:

    #!/bin/sh
    ####################################
    #
    # Backup NAS a miGDrive_encriptado
    #
    ####################################
    echo
    echo "Sincronizando Documentos"
    rclone sync --copy-links --drive-stop-on-upload-limit --drive-chunk-size=64M --checkers=16 --transfers=8 --bwlimit=8500K -v --progress --delete-excluded /Users/miguel/Documents/ miGDrive_encriptado:/Documentos
    echo "Finalizado Documentos"
    echo

    Con los permisos apropiados para nuestro script:

    $ chmod +x rclone.sh

    Procederemos a la ejecución del script y podemos ver el proceso y el resultado:

    En la configuración de miGDrive_encriptado podemos especificar también que nuestras carpetas estén encriptadas de tal forma que ofusquemos al máximo el contenido de nuestro drive.

  • Rclone (1/3): Preparativos

    Este post pretende cubrir la siguiente necesidad:

    • NAS privado
    • Nube pública
    • Copia de seguridad encriptada

    Poseemos una NAS (Network Attachment Storage) en la oficina o en casa del cual necesitamos hacer copia de seguridad externa. Cada marca de NAS, Synology, QNap y otras cubren dicha necesidad a través de sus propios software de forma muy aceptable.

    La solución que ahora expongo nos servirá para cualquier NAS, Servidor o PC doméstico y también para cualquier sistema operativo, Windows, Mac o Linux. La nube pública «casi» puede ser cualquiera de las conocidas: Amazon, Microsoft OneDrive, Google Drive y un largo etcétera.

    La solución: rclone.org

    Rclone es un programa de línea de comandos para administrar archivos en el almacenamiento en la nube. Es una alternativa rica en funciones a las interfaces de almacenamiento web de los proveedores en la nube. Más de 40 productos de almacenamiento en la nube admiten rclone, incluidos almacenes de objetos S3, servicios de almacenamiento de archivos para empresas y consumidores, así como protocolos de transferencia estándar.

    rclone.org

    En nuestro caso particular:

    • NAS privado : DS918+ de Synology
    • Nube pública: Google Drive

    Preparativos

    Lo primero que tenemos que hacer es crear la API y la autenticación en Google Drive. Nuestro objetivo será obtener unas credenciales (ID de cliente Oauth y una clave secreta).

    Para ello accedemos a console.developers.google.com con las credenciales de nuestra cuenta Google Drive y creamos un proyecto nuevo:

    Una vez creado el proyecto, lo seleccionamos para habilitar la «API Y SERVICIOS«.

    Buscamos ahora el producto «Google Drive API» en la lista de los múltiples servicios de Google

    Y habilitamos:

    Nos interesa crear credenciales para nuestra aplicación Rclone:

    En el tipo de API, seleccionamos Google Drive API del desplegable.

    Marcamos «Datos del usuario» y pulsamos siguiente:

    La opción 2- Permisos es opcional y podemos «Guardar y Continuar«.

    Ahora toca «ID de cliente de OAuth» donde seleccionaremos «App de escritorio».

    Solo nos queda pulsar en listo y tendremos las dos claves que nos interesan ya creadas:

    Para consultar dichas claves:

  • Cómo instalar WordPress en Raspberry Pi OS

    En este post mostraré cómo instalar WordPress en una Raspberry Pi con el servidor Nginx.

    WordPress es un CMS gratuito y de código abierto basado en PHP y MySQL que también tiene muchas características y miles de complementos y plantillas o temas. Si desea crear un sitio web o tienda en línea, WordPress podría ser la forma más sencilla de hacerlo.

    Instalaremos el servidor web Nginx, el servidor de bases de datos MariaDB y los módulos PHP.

    Cómo instalar Nginx en Raspberry Pi OS

    A través de la consola:

    sudo apt update
    sudo apt install nginx

    Una vez instalado dispondremos de los siguientes comandos para su control:

    sudo systemctl stop nginx.service
    sudo systemctl start nginx.service
    sudo systemctl enable nginx.service

    Puede probar ahora que Nginx está funcionando poniendo la ip de la Raspberry en su navegador:

    http://192.168.0.15

    Cómo instalar MariaDB en Raspberry Pi OS

    Se requiere un servidor de bases de datos para que WordPress funcione. WordPress almacena su contenido en una base de datos, y MariaDB es probablemente el mejor servidor de bases de datos disponible para ejecutar WordPress.

    sudo apt install mariadb-server
    sudo apt install mariadb-client

    Una vez instalado dispondremos de los siguientes comandos para su control:

    sudo systemctl stop mariadb.service
    sudo systemctl start mariadb.service
    sudo systemctl enable mariadb.service

    Securizamos ahora MariaDB:

    sudo mysql_secure_installation
    If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here.
    
    Enter current password for root (enter for none): PRESS ENTER
    
    Switch to unix_socket authentication [Y/n] n
    
    Change the root password? [Y/n] n
    
    Remove anonymous users? [Y/n] y
    
    Disallow root login remotely? [Y/n] y
    
    Remove test database and access to it? [Y/n] y
    
    Reload privilege tables now? [Y/n] y
    
    All done!

    Podemos dejar el servidor MariaDB sin clave pero restringiendo su uso remoto. Para comprobar que todo ha funcionado correctamente ingresaremos a la consola de MariaDB sin clave de root:

    sudo mysql -u root -p

    Cómo instalar PHP-FPM

    Los paquetes PHP se añaden a los repositorios de Raspberry Pi Os. Es posible que las versiones de los repositorios no sean las últimas. Si necesita instalar las últimas versiones, tendrá que agregar un repositorio PPA de terceros.

    sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
    sudo apt update

    Ahora podemos instalar los paquetes php que WordPress requiere:

    sudo apt install php8.0-fpm php8.0-common php8.0-mysql php8.0-gmp php8.0-curl php8.0-intl php8.0-mbstring php8.0-xmlrpc php8.0-gd php8.0-xml php8.0-cli php8.0-zip

    Tenemos que hacer algún cambio en la configuración de php.

    sudo nano /etc/php/8.0/fpm/php.ini

    Y al final del archivo insertamos:

    file_uploads = On
    allow_url_fopen = On
    short_open_tag = On
    memory_limit = 256M
    cgi.fix_pathinfo = 0
    upload_max_filesize = 100M
    max_execution_time = 360
    date.timezone = Europe/Madrid

    Cómo crear una base de datos de WordPress 

    En este punto, estamos listos para crear una base de datos de WordPress. 

    sudo mysql -u root -p
    CREATE DATABASE wpdb;
    CREATE USER 'wpdbuser'@'localhost' IDENTIFIED BY 'new_password_here';
    GRANT ALL ON wpdb.* TO 'wpdbuser'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    EXIT;

    Cómo descargar WordPress

    Descargaremos ahora la última versión WordPress:

    cd /tmp
    wget https://wordpress.org/latest.tar.gz
    tar -xvzf latest.tar.gz
    sudo mv wordpress /var/www/wordpress

    Damos los permisos apropiados:

    sudo chown -R www-data:www-data /var/www/wordpress/
    sudo chmod -R 755 /var/www/wordpress/

    Cómo configurar Nginx para WordPress

    Ahora, configuremos Nginx para crear un nuevo bloque de servidor para usar con nuestro sitio web de WordPress. Para hacer esto crearemos un fichero como sitio disponible:

    sudo nano /etc/nginx/sites-available/wordpress.conf

    Con el siguiente contenido:

    server {
        listen 80;
        listen [::]:80;
        root /var/www/wordpress;
        index  index.php index.html index.htm;
        server_name  example.com www.example.com 192.168.0.15;
    
        client_max_body_size 100M;
        autoindex off;
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        location ~ \.php$ {
             include snippets/fastcgi-php.conf;
             fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
             include fastcgi_params;
        }
    }

    Creamos un enlace simbólico del fichero a los sitios habilitados de Nginx y reincidamos el servicio:

    sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/
    sudo systemctl restart nginx.service

    Después de todo esto, tendremos una instalación inicial de WordPress en:

    http://192.168.0.15

    Necesitará conocer los siguientes elementos antes de continuar. Utilice la información de conexión a la base de datos que creó anteriormente.

    • Nombre de la base de datos
    • Nombre de usuario de la base de datos
    • Contraseña de la base de datos
    • Host de base de datos
    • Prefijo de tabla (si desea ejecutar más de un WordPress en una sola base de datos)

    El asistente utilizará la información de la base de datos para crear un archivo wp-config.php en la carpeta raíz de WordPress.

    Después de eso, haga clic en Ejecutar el botón de instalación para que WordPress complete la configuración.

    A continuación, cree el nombre del sitio de WordPress y la cuenta de administrador del backend, luego haga clic en Instalar WordPress.

    Cuando hayas terminado, WordPress debería estar instalado y listo para usar.

    Conclusión:

    Esta publicación te mostró cómo instalar WordPress en Raspberry Pi Os aunque debería ser prácticamente idéntica en cualquier distribución basada en Debian.

    Si encuentras algún problema no dudes en usar los comentarios para hacérmelo saber.

  • Despliegue en producción de una aplicación Django

    En este post trato de explicar de la forma mas rápida y concisa cómo poner en producción una aplicación en Django en un VPS basado en Linux.

    Tómese este post a modo de chuleta con todos los pasos necesarios para el despliegue: desde la instalación de la aplicación partiendo de un repositorio github, la instalación de postgresql, nginx, supervisor, cortafuegos, gunicorn…

    Vamos manos a la obra.

    (más…)
  • Notificaciones en tu propio bot de Telegram

    Si eres programador o administrador de sistemas sabrás que recibir notificaciones unificadas de los servicios que gestiones es siempre una labor muy repetitiva y rutinaria.

    Pues bien en este post voy a describir la forma mas sencilla que he encontrado (de momento) para que puedas mandar notificaciones a tu propio bot de Telegram. Si nunca has creado un bot verás que es un proceso en extremo sencillo.

    Vamos manos a la obra.

    (más…)