
Tus propias Noticias IT
Algo que quizá pueda resultar interesante a un departamento de IT es estar al día en cuanto a qué sucede a nuestro alrededor, el obtener noticias de nuestro mundo, que son interesantes de conocer, como puedan ser boletines de seguridad, o conocer cuándo un fabricante nuestro ha publicado una nueva versión, parche… de algún producto que usemos…
Bueno, pues para esto y otras cosas más que iremos viendo, usaremos un lector de RSS, así de simple, pero vamos a hacerlo bien, y bonito :-). Podemos desplegar en un minuto, un contenedor de Docker donde tengamos un lector y agregador de noticias basado en web (RSS/Atom) gratuito y de código abierto, en este documento usaremos Tiny Tiny RSS, que es muy liviano, sencillo y completo.
Pero no sólo será un portal de noticias donde podamos acceder manualmente vía web o con una app en nuestros móviles, si no que podremos configurarla para que nos envíe un mail con el resumen diario de las noticias, por ejemplo, al llegar a la mañana que tengamos un correo con las noticias importantes de ciberseguridad, o si tenemos algún parche que debamos aplicar…
Y, ¿el contenido? ¿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 lo dicho, 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 parte de lo de siempre, 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} volumes: - 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 # volumes: # - 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 volumes: - 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 ciberseguridad o si queréis la de Vulnerabilidades… O también las del Centro Criptológico Nacional o CCN-CERT, tenemos Avisos, Alertas y Vulnerabilidades entre otros. 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, (para mí) 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, corporativo…
Para ello, 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'
Y nada, 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, por 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 -->
Bueno, ¿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… Como siempre, es mezclar cosas, dar ideas y posibilidades de mejorar nuestra organización en nuestros departamentos, como siempre, que seáis felices y comáis perdices!