Escrito el 2022-10-08 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: nginx cache expires

El modulo de ngx_http_headers_module nos permite agregar la cabecera de Expires y Cache-Control y otros campos arbitrarios a una cabecera de respuesta.

Para controlar las hojas de estilo, JavaScript, images y otros utilizo el siguiente código:

    # Expires map
    map $sent_http_content_type $expires {
        default                    off;
        text/css                   30d;
        application/javascript     30d;
        application/font-woff      30d;
        application/font-woff2     30d;
        application/font-ttf       30d;
        font/opentype              30d;
        image/apng                 30d;
        image/avif                 30d;
        image/gif                  30d;
        image/jpeg                 30d;
        image/png                  30d;
        image/svg+xml              30d;
        image/webp                 30d;
    }

Leer artículo...

Escrito el 2022-10-05 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: nginx apache security headers

Security Headers para Apache y Nginx actualizados, una breve reseña de los mismos. Este breve articulo no es mas que una nota o cheatsheet de los security headers a utilizar y requeridos en su mayoría. Si desean leer sobre el tema pueden seguir el siguiente enlace.

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Permitted-Cross-Domain-Policies "none" always;
    add_header Feature-Policy "microphone none;camera none;geolocation none;";
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header Expect-CT "max-age=31536000; report-uri=https://www.barrahome.org/contact";
    add_header Access-Control-Allow-Origin "*" always;

El equivalente para Apache seria utilizando algo como esto:

    <IfModule mod_headers.c>
       Header always set X-XSS-Protection "1; mode=block"
    <IfModule mod_headers.c>

Pueden observar los resultados aplicados en este blog visitando el sitio de Serpworx.

Leer artículo...

Escrito el 2022-09-22 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: apache execcgi php-fpm perl

Una simple receta con notas de como se debe configurar un Virtual Host con Apache para que ejecute CGIs y PHP.

Esta configuración de Apache se realizo bajo Ubuntu 22.04 con el modulo de proxy_fcgi , setenvif y cgid. El modulo cgid se habilita cuando nuestro MPM es event mientras que cuando ejecutamos prefork el modulo a utilizar es cgi.

En Ubuntu se habilita o deshabilita el modulo mediante el comando: a2enmod cgi{d} dependiendo del MPM a utilizar. Para conocer mas sobre estos comandos a2enmod/a2dismod pueden visitar el siguiente enlace. Para PHP-FPM puede que deban ejecutar a2enconf y pueden leer mas sobre esto en este otro enlace.

Leer artículo...

Escrito el 2022-09-19 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: post-merge python git

Actualizando mi blog con Github, Gitup via post-merge con un backend en Flask (Python) en Linux. Voy a utilizar y modificar la siguiente implementación para el hook de post-merge en git.

    #!/usr/bin/env bash
    # MIT © Sindre Sorhus - sindresorhus.com

    # git hook to run a command after `git pull` if a specified file was changed
    # Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`.

    changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"

    check_run() {
        echo "$changed_files" | grep --quiet "$1" && eval "$2"
    }

    # Example usage
    # In this example it's used to run `npm install` if package.json changed
    check_run *website/content* "systemctl reload barrahome"

Leer artículo...

Escrito el 2022-09-18 por Alberto Ferrer
Tiempo de lectura: 1 minuto(s)
Etiquetas: linux gitup python shell

Guía rápida de como utilizar Gitup para actualizar mi blog automáticamente.

Instalamos Gitup:

    sudo pip3 install gitup

Habilitamos el repositorio el cual actualizaremos:

    gitup --add ~/barrahome-flask

Creamos una entrada de cron:

    crontad -e

Agregamos la siguiente entrada:

    */5 * * * * gitup --update

Si deseamos listar los repositorios que tenemos para actualizar podemos ejecutar lo siguiente:

    gitup --list

Nos dará como salida algo como esto:

    [alberto@barrahome barrahome-flask]$ gitup --list
    gitup: the git-repo-updater

    Current bookmarks:
        /home/alberto/barrahome-flask
    [alberto@barrahome barrahome-flask]$

Leer artículo...

Escrito el 2022-09-18 por Alberto Ferrer
Tiempo de lectura: 4 minuto(s)
Etiquetas: gunicorn systemd python linux

Recargar la configuración o cambios de Gunicorn mediante Systemd.

Se agregan estas las lineas ExecReload y ExecStop al "unit" de systemd.

El siguiente articulo describe la utilización y otros temas:

    [alberto@barrahome barrahome-flask]$ cat /etc/systemd/system/barrahome.service
    [Unit]
    Description=Barrahome web application
    After=network.target

    [Service]
    User=alberto
    Group=alberto
    WorkingDirectory=/home/alberto/barrahome-flask
    ExecStart=/usr/bin/python3 /usr/bin/gunicorn  --bind 127.0.0.1:8000 website:app --pid=barrahome.pid
    ExecReload = /bin/kill -s HUP $MAINPID
    ExecStop = /bin/kill -s TERM $MAINPID

    [Install]
    WantedBy=multi-user.target
    [alberto@barrahome barrahome-flask]$

Luego ejecutamos:

    [alberto@barrahome barrahome-flask]$ sudo systemctl daemon-reload
    [alberto@barrahome barrahome-flask]$ sudo systemctl reload barrahome

Leer artículo...

Escrito el 2021-05-10 por Alberto Ferrer
Tiempo de lectura: 1 minuto(s)
Etiquetas: linux dd

Un error que al parecer es común, luego de usar dd es que nuestro USB queda funcionando mal… al punto que formatearlo con gparted u otras herramientas es un problema, se quejara del inicio de sectores 2048, dará algún mensaje de invalido o:

    physical block size is 512 bytes, but Linux says it is 2048 bytes

Esto se puede arreglar fácilmente con los siguientes comandos:

    sudo parted /dev/sde mklabel msdos
    sudo parted -a none /dev/sde mkpart  primary fat32 0 2048
    sudo mkfs.vfat -n "Disk" /dev/sde1

Ahora podremos abrir fdisk o gparted y no tendremos el error de bloques inválidos.

Leer artículo...

Escrito el 2021-02-16 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: ubuntu centos systemd

Para los que no saben… y para mi que suelo olvidarme, no se puede editar resolv.conf como si nada, ahora debemos cambiar las DNS en otro fichero… para esto me creo esta entrada, a modo de recordatorio.

Configuramos las direcciones DNS en el archivo ubicado en /etc/systemd/resolved.conf, luego modificamos el parámetro comentado DNS y agregar los valores deseados:

Leer artículo...

Escrito el 2020-11-15 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: centos apache linux selinux

Guía rápida de como habilitar SELinux con Apache en Centos 7/8 utilizando directorio personal y otros características.

Esto es ciertamente muy básico pero útil y practico. Tener en cuenta que hay pasos los cuales me salte dado que cualquiera leyendo esto tiene una noción básica de lo que estoy escribiendo.

Luego de instalar Apache con dnf o yum pasamos a permitir Apache con el siguiente comando:

    sudo setsebool -P httpd_can_network_connect 1
    sudo setsebool -P httpd_enable_homedirs 1

Si quieren saber que otras opciones existen en el contexto de httpd pueden ejecutar esta variante:

    sudo getsebool -a | grep "httpd_can"

Leer artículo...

Escrito el 2020-11-10 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: microsoft windows 7 windows 10

Algo que me molesta de las plataformas de Microsoft es lo poco dinámicas que son a la hora de querer acomodar los datos según la preferencia del usuario, no existe tal opción mas allá de los “hacks” manuales, con este procedimiento el cual quiero enseñar podemos mover el perfil de un usuario o la totalidad de la carpeta de usuarios a otra partición y no tener problemas, ahorrando quizás espacio o velocidad, según la necesidad del administrador.

Se que uno u otro recomendara particiones remotas, pero no todos usan un servidor de directorio y esta solución es para el “día a día”.

En mi caso, el equipo el cual tiene instalado Microsoft Windows usa dos discos, uno SSD de 128 GB para la unidad C:\ y un disco secundario de 2 TB WD Caviar Black para storage. Esta configuración servirá para cualquier instalación de Microsoft Windows 7 y es bastante simple.

Leer artículo...