
Les teves pròpies Notícies IT
Una cosa que potser pugui resultar interessant a un departament d'IT és estar al dia quant a què succeeix al nostre voltant, obtenir notícies del nostre món, que són interessants de conèixer, com puguin ser butlletins de seguretat, o conèixer quan un fabricant nostre ha publicat una nova versió, parxís… d'algun producte que usem…
Bo, doncs per a això i altres coses més que anirem veient, farem servir un lector de RSS, així de simple, però vam fer-ho bé, i bonic :-). Podem desplegar en un minut, un contenidor de Docker on tinguem un lector i agregador de notícies basat en web (RSS/Atom) gratuït i de codi obert, en aquest document farem servir Tiny Tiny RSS, que és molt llivià, senzill i complet.
Però no només serà un portal de notícies on puguem accedir manualment via web o amb una app als nostres mòbils, si no que podrem configurar-la perquè ens enviï un mail amb el resum diari de les notícies, per exemple, en arribar al matí que tinguem un correu amb les notícies importants de ciberseguretat, o si tenim algun parxís que haguem d'aplicar…
Y, el contingut? ¿las suscripciones? Pues como te imaginarás, entre comillas es algo personal, dependerá de qué quieras estar al tanto, por ejemplo puedas suscribirte a listas de avisos, de alertas tempranas en cuanto a ciber, o conocer los últimos ataques a empresas españolas, o el que s' ha dit, suscribirte a los sitios de descargas de tus fabricantes, y cuando en su web publiquen una nueva versión, lo sepas.
Para desplegar rápidamente los contenedores de Tiny Tiny RSS tendremos que tener previamente una máquina con Linux preparada, por ejemplo Ubuntu Server, con Docker y Docker Compose instalados; a part del de sempre, que tenga la máquina un nombre, direccionamiento IP, NTP… En mi caso creo una carpeta llamada ‘tinytinyrss’ donde dejaremos un par de ficheros, el primero el que lleva la configuración llamado ‘.env’ y os dejo aquí su contenido, obtenido de la documentación oficial, debéis establecer al menos la contraseña del usuario ‘admin’:
# Put any local modifications here. # Run FPM under this UID/GID. # OWNER_UID=1000 # OWNER_GID=1000 # FPM settings. #PHP_WORKER_MAX_CHILDREN=5 #PHP_WORKER_MEMORY_LIMIT=256M # ADMIN_USER_* settings are applied on every startup. # Set admin user password to this value. If not set, random password will be generated on startup, look for it in the 'app' container logs. ADMIN_USER_PASS=CONTRASEÑA_DE_ADMIN # Sets admin user access level to this value. Valid values: # -2 - forbidden to login # -1 - readonly # 0 - default user # 10 - admin #ADMIN_USER_ACCESS_LEVEL= # Auto create another user (in addition to built-in admin) unless it already exists. #AUTO_CREATE_USER= #AUTO_CREATE_USER_PASS= #AUTO_CREATE_USER_ACCESS_LEVEL=0 # Default database credentials. TTRSS_DB_USER=postgres TTRSS_DB_NAME=postgres TTRSS_DB_PASS=password # You will likely need to set this to the correct value - it should point to external tt-rss URL as seen in your browser. TTRSS_SELF_URL_PATH=http://example.com/tt-rss # You can customize other config.php defines by setting overrides here. See tt-rss/.docker/app/Dockerfile for complete list. Examples: # TTRSS_PLUGINS=auth_remote # TTRSS_SINGLE_USER_MODE=true # TTRSS_SESSION_COOKIE_LIFETIME=2592000 # TTRSS_FORCE_ARTICLE_PURGE=30 # ... # Bind exposed port to 127.0.0.1 to run behind reverse proxy on the same host. If you plan expose the container, remove "127.0.0.1:". #HTTP_PORT=127.0.0.1:8280 HTTP_PORT=8280
Así mismo crearemos el fichero ‘docker-compose.yml’ con la configuración de los contenedores:
version: '3' services: db: image: postgres:15-alpine restart: unless-stopped env_file: - .env environment: - POSTGRES_USER=${TTRSS_DB_USER} - POSTGRES_PASSWORD=${TTRSS_DB_PASS} - POSTGRES_DB=${TTRSS_DB_NAME} volums: - db:/var/lib/postgresql/data app: image: cthulhoo/ttrss-fpm-pgsql-static:latest restart: unless-stopped env_file: - .env volumes: - app:/var/www/html - ./config.d:/opt/tt-rss/config.d:ro depends_on: - db # optional, makes weekly backups of your install # backups: # image: cthulhoo/ttrss-fpm-pgsql-static:latest # restart: unless-stopped # env_file: # - .env # volums: # - backups:/backups # - app:/var/www/html # depends_on: # - db # command: /opt/tt-rss/dcron.sh -f updater: image: cthulhoo/ttrss-fpm-pgsql-static:latest restart: unless-stopped env_file: - .env volumes: - app:/var/www/html - ./config.d:/opt/tt-rss/config.d:ro depends_on: - app command: /opt/tt-rss/updater.sh web-nginx: image: cthulhoo/ttrss-web-nginx:latest restart: unless-stopped env_file: - .env ports: - ${HTTP_PORT}:80 volums: - app:/var/www/html:ro depends_on: - app volumes: db: app: backups:
Y, tras guardar ambos ficheros ya podemos descargar las imágenes y desplegar los contenedores ejecutando:
sudo docker compose up -d
Y ya podremos acceder con un navegador por HTTP al puerto que indicamos en el fichero de configuración, por defecto el 8280tcp. Entraremos con el usuario ‘admin’ y la contraseña igualmente establecida en el fichero de configuración.
Veréis que a aplicación no tiene mucho misterio, su uso es muy sencillo, arriba a la derecha podremos entrar a las preferencias y crear directorios para organizarnos, así como para añadir sitios, bien por su URL o sus RSS, no nos preocuparemos ya que se añadirá perfectamente la web de la que queremos tener noticias cuando publiquen algo, se le pondrá su icono…
Y algo así quedaría por ejemplo las noticias de Una al día de Hispasec, también por supuesto os recomiendo las listas de INCIBE, la de Avisos, la de su Bitàcora de ciberseguretat o si queréis la de Vulnerabilitats… O también las del Centro Criptológico Nacional o CCN-CERT, tenim Avisos, Alertes y Vulnerabilitats entre d' altres. Cuantas menos, mejor 😉
O por ejemplo lo dicho, podemos usarla para suscribirnos a nuestros fabricantes, y que cuando saquen una nueva versión de un producto que usemos lo sepamos, o un parche, update… Bastará con ir a la web del fabricante, buscar la URL o el RSS de la web donde suela publicarlos, y añadirla a nuestro Tiny Tiny RSS (en las Fuentes).
Se puede compartir la misma instancia de Tiny Tiny RSS para tener un usuario genérico y compartirlo con el resto del equipo, o cada uno podrá tener su propio usuario de acceso y sus propias suscripciones.
![]() |
![]() |
![]() |
![]() |
Y tenéis varios clientes RSS en los Stores de vuestros móviles, yo uso en Android la app original. Os dejo unos pantallazos de cómo se verían las distintas vistas,
Y, (per a mi) lo mejor de todo esto… es que no es necesario estar pendiente de acceder al sitio web para estar informado. Si no que lo comentado, se puede recibir un mail diario con el resumen, de lo que tu escojas y como veis totalmente personalizable, corporatiu…
Per a això, bastará con ir a las Preferencias de Tiny Tiny RSS en los Correos recopilatorios marcar ‘Enable digest’ e indicamos la hora aproximada en UTC para recibirlos.
Para que funcione el envío SMTP en Tiny Tiny RSS deberemos descargarnos un Plugin y darnos permisos, lo haremos ejecutando algo como esto:
git clone https://git.tt-rss.org/fox/ttrss-mailer-smtp.git /var/lib/docker/volumes/tinytinyrss_app/_data/tt-rss/plugins.local/mailer_smtp chown USUARIO_LINUX: /var/lib/docker/volumes/tinytinyrss_app/_data/tt-rss/plugins.local/mailer_smtp/ -R
Para configurar el SMTP, bastará con añadir a nuestro fichero ‘.env’ estas configuraciones:
TTRSS_PLUGINS=mailer_smtp,auth_internal,nginx_xaccel,note TTRSS_SMTP_FROM_NAME='NOMBRE DEL REMITENTE' TTRSS_SMTP_FROM_ADDRESS=CO**************@DO*****.ESO TTRSS_SMTP_SERVER=SERVIDOR_SMTP:587 TTRSS_SMTP_LOGIN=US*****@DO*****.ESO TTRSS_SMTP_PASSWORD=CONTRASEÑA TTRSS_SMTP_SECURE=tls TTRSS_SMTP_SKIP_CERT_CHECKS=yes TTRSS_DIGEST_SUBJECT='ASUNTO DEL CORREO'
I res, regeneramos los contenedores con los cambios realizados, aunque me pongo a pensar y quizá con reiniciar el contenedor valdría, total, que:
sudo docker compose up -d
Si queréis cambiar la plantilla del correo, para hacerlo customizado, tendréis que editar el fichero /home/usuario/tinytinyrss/digest_template_html.txt, vaya o donde hayáis creado la carpeta de ‘tinytinyrss’, y con código HTML lo tendremos en un periquete:
<!-- $BeginBlock digest --> <p style='font-family:Roboto Slab; font-size:14px'>Buenos días,</p> <p style='font-family:Roboto Slab; font-size:14px'>Te enviamos las últimas noticias y novedades, per favor, presta atención:</p> <!-- $BeginBlock feed --> <b><p style='font-family:Roboto Slab'>${FEED_TITLE}</p></b> <ul> <!-- $BeginBlock article --> <li style='font-family:Roboto Slab; font-size:14px'><a href="${ARTICLE_LINK}">${ARTICLE_TITLE}</a> <div><em>${ARTICLE_LABELS}</em></div> <div>${ARTICLE_EXCERPT}</div> <!-- $EndBlock article --> </ul> <!-- $EndBlock feed --> <p>Y aquí ponéis vuestra firma</p> <!-- $EndBlock digest -->
Bo, ¿chulo? Ahora no tenemos excusa para no estar al día de todo lo que sucede a nuestro alrededor, de las últimas noticias de ciberseguridad, de nuestros sitios IT de referencia (como pueda ser este blog 😉 😉 ), de cuando el producto de turno tiene un update… Com sempre, es mezclar cosas, dar ideas y posibilidades de mejorar nuestra organización en nuestros departamentos, com sempre, que seáis felices y comáis perdices!