Usar el servicio DNS dinámico de nsupdate.info en tu Raspberry Pi

Una de las tantas ventajas que tiene Raspberry Pi son los múltiples servicios que puedes generar y mantenerlo sin un consumo excesivo de energía, una alternativa barata como servidor personal, si consideras fundamental aprovechar la disponibilidad de tu propio servidor usándolo desde Internet, para eso puedes usar el servicio DNS dinámico de nsupdate.info que realiza la actualización un nombre de host, por lo que no necesita saber o averiguar su dirección IP actual y siempre tener tu nombre de dominio disponible para acceder al servidor personal.

Nsupdate.info se caracteriza por ser gratuito, sin anuncios, es software libre, open source, seguro y respeta la privacidad ademas de eso el servicio manifiesta que se le debe dar el uso justo, esto quiere decir que:

  • No abuses del servicio de ninguna manera.
  • No actualice sus hosts con demasiada frecuencia.
  • No haga actualizaciones si su IP no cambió.
  • No cree muchos usuarios o muchos hosts.
  • No use el servicio para ningún propósito ilegal o cuestionable.
  • No enviar spam por correo electrónico.

Antes de comenzar a usar el servicio de nsupdate.info necesitaremos instalar un par de herramientas:

  • DDclient (Cliente que se utiliza para actualizar las entradas dinámicas de DNS)
  • Vim (Editor de archivos)

Desde la terminal de Raspbian tipeamos el siguiente comando para instalar los dos paquetes:

$ sudo apt install ddclient vim

He de mencionar que la Raspberry Pi sera usada como servidor web, puedes usarlo para otro tipo de servicio pero para ejemplificar el uso del DNS dinámico. Ya tengo el servidor montado y se puede acceder localmente como se muestra en seguida.

Para que desde internet se pueda entrar al contenido que esta montado en la Raspberry Pi tienes que configurar el router para asignar que puertos dejaras abiertos, en este caso como es un servicio web, entonces el puerto que se estará abriendo es el 80 y opcionalmente el puerto 443 si es que piensas usar un certificado SSL

En la siguiente imagen se muestra el panel de mi router, puede varia la interfaz de cada router pero la configuración debería ser similar, aquí se puede ver que los dos puertos están asignados a la Raspberry Pi con una IP privada estática 192.168.1.200.

Para usar el servicio de nsupdste.info tendremos que registrarnos, ya teniendo una cuenta iniciamos sesión, y en la parte del menú en Overview nos parece el siguiente panel donde nos indica que no tenemos ningún Hotst vinculado al DNS dinámico y una sección informativa en la parte inferior sobre los dominios disponibles en el servicio, agregaremos un nuevo host presionando el botón de “Add Hosts”.

Luego nos mostrara un formulario que hay que rellenar, en la sección de Name decidí nombrar al dominio como miserver.uroen.cloud, y con un pequeño comentario como se muestra en la siguiente imagen.

Habiendo presionado el botón de “Create”, nos mostrara las distintas maneras en que podemos configurar el DNS dinámico, para esto presionamos la pestaña que dice ddclient y copiaremos el contenido que tiene la caja de texto.

Nos conectaremos a nuestra Rapberry Pi e iremos a editar el siguiente archivo:

$ sudo vim /etc/ddclient.conf

Y remplazamos el contenido del archivo por la configuración que copiamos desde nuestra cuenta de nsupdate.info.

Iniciamos ddcliente y habilitamos ddcliente para que inicie desde el arranque del sistema:

$ sudo systemctl start ddclient
$ sudo systemctl enable ddclient

Vamos al panel de nsupdate.info y observamos que ya esta trabajando el DNS dinámico en la Raspberry Pi como se ve en la imagen.

Podemos verificar desde el navegador con la URL generada y vemos que se conecta sin problema alguno

Referencias:

Cover Photo by Yannick Pipke on Unsplash

Mis 15 soundtracks preferidos

Estos últimos días con la situación que esta pasando en todo el mundo con el virus COVID-19 he tenido la oportunidad de estar mas tiempo en casa, y una forma de relajarme o de pasar mas entretenido los días aqui en casa me pongo a escuchar música, claro y otras actividades, ciertamente los que mas escucho es Hip-Hop, Rap, Rock en español, algunas baladas y también soundtracks, A pesar de que es poco habitual conocer gente que le gusta escuchar banda sonora tengo algunas amistades que si tienen dentro de su repertorio ese estilo de música,

Forme una lista soundtracks que quiero compartir, a claro que sin una preferencia por el orden, y eligiendo un compositor diferente.

1.- Hans Zimmer – Time

2.- Jed Kurzel – Spores

3.- Austin Wintory – Bloodlines

4.- Nathan Johnson – Wavelength

5.- Danny Elfman – Main Titles

6.- Takanori Arisawa – Aban

7.- Marco Beltrami – Main Titles

8.- Takanashi Yasuharu – Colorful Mist

9.- Alexandre Desplat – Alone with Numbers

10.- Mac Quayle – 1.8_1-imcrazy.aiff

11.- Joaquín Rodrigo – Concierto de Aranjuez

12.- Jim Lang – Groove Remote

13.- John Ottman – Hope (Xavier’s Theme)

14.- John Murphy – In the House, In a Heartbeat

15.- marc streitenfeld – Writing the Letter

Cover Photo by Malte Wingen on Unsplash

K’aal un virus molesto para GNU/Linux

Es un virus molesto para linux, la intención es que cuando inicie sesión la “victima” en su cuenta, lo que hará K’aal es iniciar abarcando toda la pantalla del monitor y deshabilitando algunas funciones del teclado, tratando de espantar a la victima con una barra de progreso que dará un falso mensaje de que están siendo eliminado sus archivo pero solo los moverá ha una carpeta oculta dentro de su carpeta de usuario.

K’aal viene con un script de instalación al igual con uno para desinstalarlo y retroceder los cambios que hizo con gsettings para la configuración de teclas.

Dentro de las teclas que desestabiliza K’aal son:

  • <Super>Page_Down
  • <Control><Alt>Down
  • <Super>Page_Up
  • <Control><Alt>Up
  • <Control><Alt>Right
  • <Control><Alt>Left
  • <Super>Tab
  • <Alt>Tab
  • Super

Tiene incluido dos skins diferentes:

Dentro de la clase MainFX puede cambiar el skin en la siguiente linea:

scene.getStylesheets().add(getClass().getResource("style-avatar1.css").toExternalForm());

REQUISITOS

Solamente ocupas:

  • OpenJDK 13

CONSTRUCCIÓN

Clonar el proyecto:

$ git clone https://github.com/OrigenData/Kaal.git

Dentro del proyecto se encuentra un archivo llamado gradlew, desde la terminal ejecutamos la herramienta con la opción distZip, para que genere un archivo ejecutable que estará comprimido en un zip

$ ./gradlew distZip

El zip generado se encuentra en el directorio build/distributions dentro del mismo proyecto, accede y descomprimelo para el previo uso del mismo.

La estructura interna del archivo descomprimido:

.
├── install
├── kaal
│   ├── bin
│   │   ├── kaal
│   │   └── kaal.bat
│   └── lib
│       ├── javafx-base-13.jar
│       ├── javafx-base-13-linux.jar
│       ├── javafx-controls-13.jar
│       ├── javafx-controls-13-linux.jar
│       ├── javafx-fxml-13-linux.jar
│       ├── javafx-graphics-13.jar
│       ├── javafx-graphics-13-linux.jar
│       └── kaal.jar
└── uninstall

Cabe mencionar que es una herramienta para fines de aprendizaje y el propósito del mismo es una broma y no de forma mal intencionada para un fin maligno

Cover Photo by bknis on Pixabay

PolicyKit Phishing para capturar la contraseña root de un sistema GNU/Linux

Es una herramienta de phishing para pruebas de seguridad creada con el simple propósito de capturar la contraseña root haciéndose pasar por “una actualización que requiere el sistema”, puede ser útil después de una Post-explotación para la escala de privilegios del sistema.

Requisitos

Para la construcción del proyecto ocuparías los siguiente paquetes instalados:

  • GTK 3.20
  • java-gnome 4.1.3
  • OpenJDK 11

INSTALACIÓN DE DEPENDENCIAS

FEDORA:

$ sudo dnf install java-11-openjdk java-gnome gtk3

Debian:

$ sudo apt install openjdk-11-jdk java-gnome-java libgtk-3-0

CONSTRUCCIÓN

Clonar el proyecto:

$ git clone https://github.com/OrigenData/PolicyKit-Phishing.git

Dentro del proyecto se encuentra un archivo llamado gradlew, desde la terminal ejecutamos la herramienta con la opcion distZip, para que genere un archivo ejecutable que estará comprimido en un zip

$ ./gradlew distZip

El zip generado se encuentra en el directorio build/distributions dentro del mismo proyecto, accede y descomprimelo para el previo uso del mismo.

Cabe mencionar que es una herramienta para pruebas y que el uso debe ser en una ambiente controlado ya que el uso de PolicyKit Phishing para atacar objetivos sin previo consentimiento mutuo es ilegal.

Crear contenido en la Dark Web con Hugo en Fedora

Hace tiempo escribí una entrada en la cual explicaba como crear un servidor web en la red tor fue un ejemplo de lo sencillo que es crear un servicio oculto y finalizando con el despliegue de un index clásico de Apache, ahora quisiera dar una guía para quienes quieran generar contenido y compartirlo a través de la Dark Web usando Hugo un generador de sitios web estáticos. Si lo que quiere es generar contenido escrito y alguna imágenes y que se vea presentable Hugo es una de la mejores opciones para crear contenido estático.

Esta practica esta hecha bajo la distribución Fedora y seria bueno que siguieras los pasos del post anterior ya que ocuparas tener tu dominio Onion creado, teniendo eso completado es momento de comenzar.

El paquete Hugo ya viene en los repositorios de Fedora, para instalarlo:

$ sudo dnf install hugo

Ahora crearemos una carpeta en nuestro directorio /home/this_tor donde estará el sitio web, para crear la carpeta usando Hubo escribe lo siguiente en la terminal:

$ hugo new site myWeb

Entramos a la carpeta creada con el nombre myWeb y descargamos el tema que nos apetezca, en esta practica escogí Dusky Neon Potato, para descargarlo usaremos la herramienta git:

$ cd myWeb
$ git clone https://github.com/rhazdon/hugo-theme-hello-friend-ng.git themes/hello-friend-ng

Dentro de myWeb se encuentra el archivo config.toml vamos agregar el siguiente contenido:

baseURL = "/"
languageCode = "en-us"
title = "Origen(Data);"
theme = "hugo-dusky-neon-potato"

  [[menu.main]]
    identifier = "blog"
    name       = "Blog"
    url        = "/posts"

En el archivo de configuracion se ve el parámetro title ahí debe asignar el nombre de su sitio, también se asigna en theme el nombre del tema que va a utilizar el sitio web y por ultimo se crea un menú con solo la opción de Blog, se marca que el contenido que va a indexar esta en la carpeta post, para agregar contenido en la sección de Blog crearemos un post agregando la siguiente instrucción en la terminal:

$ hugo new posts/post-1.md

El archivo post-1.md generado se localiza en la carpeta myWeb/content/posts/

El archivo trabaja con el lenguaje de marcado Markdown, puede usar  Dillinger que es un editor en linea para apoyarte en crear tu contenido, yo he copiado un fragmento del texto de prueba que se encuentra en el editor y lo he pegado en el archivo post-1.md ademas he cambiado el valor de draft que era true por false ya que quiero que se muestre el contenido del post al momento de poner a Hugo en modo servidor.

Iniciaremos Hugo en modo servidor para ver los cambios hechos:

$ hugo server

En la imagen anterior se muestra que la instrucción nos despliega el puerto 1313 en el que trabaja Hugo en nuestro localhost, abrimos un navegador para observar la apariencia del sitio web con el enlace http://localhost:1313/.

Bien, ahora entraremos al archivo torrc y agregamos la siguiente linea:

$ sudo vim /etc/tor/torrc
HiddenServicePort 80 127.0.0.1:1313

Iniciamos Tor:

$ tor

Solo queda que este sitio este en la Dark Web para eso escribe la siguiente linea en la terminal:

$ hugo server --baseUrl=http://4jqdotdyochtlge6y7clgxxubzo5c3ouwjqkjzldncezmw34stqug5ad.onion --appendPort=false --disableLiveReload=true --source /home/this_tor/myWeb

Del comando anterior se ha usando los siguiente parámetros.

  • --baseUrl= Es la asignación del la url con dominio Onion
  • --appendPort=false Evita que se agrege el puerto a la url
  • --disableLiveReload=true Evitara que se refresque automáticamente el sitio por cambios internos
  • --source La ruta donde esta nuestro sitio web alojado

Vista del sitio web desde el navegador Tor

Hasta aquí ya tenemos listo el sitio web que tiene temática a ser un blog. Estaría aun mejor volver de Hugo un servicio de systemd para que se ejecute en segundo planto y si piensas mantener el sitio el mayor tiempo disponible.

Para crear un daemon de Hugo generaremos un archivo con extensión .service en la siguiente ruta:

$ sudo touch /lib/systemd/system/origendata-onion.service

Dentro del archivo escribiremos lo siguiente

[Unit]
Description=OrigenData WEB HUGO
After=syslog.target
After=network.target
 
[Service]
Type=simple
ExecStart=hugo server --baseUrl=http://4jqdotdyochtlge6y7clgxxubzo5c3ouwjqkjzldncezmw34stqug5ad.onion --appendPort=false --disableLiveReload=true --source /home/this_tor/myWeb
 
[Install]
WantedBy=multi-user.target

Ahora si estaríamos finalizando, para iniciar el servicio creado escribimos en la terminal:

$ sudo systemctl start origendata-onion.service

Referencias:

Cover Photo by Josue Valencia on Unsplash

Crear una script de backup remoto automatizado por SSH

La ejecución de tareas de forma autónoma es importante para el funcionamiento de diversos servicios sin la intervención humanas, es importante que las tareas se lleven a cabo en servicios que tienen siempre solicitudes, una de esas puede ser la disponibilidad de tener siempre un servidor de respaldo, donde puedas transferir y mantener actualizado tus documentos en un equipo remoto.

Respaldo de un localhost a un servidor SSH

Para esta práctica he elaborado el siguiente escenario en el que un sistema cliente mantiene en sincronía un directorio propio hacia otro ordenador remoto que sería el servidor, he decidido que para el medio de transferencia sea por SSH, cada ves que se almacene o se actualice un archivo en el directorio del sistema cliente se actualizaran los nuevo cambios en el servidor, los requisitos previos  que tienes que tener para llevar a cabo está práctica es tener:

  • OS Fedora 32 (Cliente localhost /home/user)
  • OS Debían 10 (Servidor SSH 192.168.1.100 /home/cristian)
  • rsync (Transferencia de archivos)
  • Cron (Administrador regular de procesos en segundo plano)
  • sshpass (Utilidad de autenticación SSH no interactiva)

Claro que si quieres puedes escoger tu propia distribución Linux no estas forzado a ello pero los paquetes sshpass, cron si son necesarios tenerlos instalados en el sistema cliente y el paquete rsync tiene que estar instalado tanto en la maquina cliente como en el servidor, por eso escogí esas dos distribuciones porque ya tiene instalados esos paquetes, sabiendo esto es momento de designar el directorio al cual se hará el respaldo:

/home/user/Documentos/
├── 001.pdf
├── 002.pdf
├── 003.pdf
├── 004.pdf
├── 005.pdf
├── 006.pdf
├── 007.pdf
├── 008.pdf
├── 009.pdf
├── 010.pdf
├── 011.pdf
├── 012.PDF
├── photo-1.jpg
├── photo-2.jpeg
├── photo-3.jpg
└── photo-4.jpg

0 directories, 16 files

Disponemos de generar un script en el localhost que es el que realizara la tarea de respaldos, lo puedes guardar con el nombre que prefieran en esta practica se designo el nombre de remote-backup.sh.

#!/bin/bash
find '/home/user/Documentos' -name '*.pdf' | xargs -i sshpass -p 'passwordServer' rsync -arv {} -e ssh cristian@192.168.1.100:~/Backup

Vemos que en el script se asigna el directorio donde solo se buscará los archivos con formato PDF y serán enviados al servidor, se usa el parámetro -p en la herramienta sshpass para asignar la contraseña del servidor. Para ejecutar el script cada 5 minutos usaremos el deamon Cron con su herramienta crontab, para eso en la misma máquina cliente escribimos la siguiente instrucción

$ crontab -e

Se abrirá el archivo de Cron donde podemos crear tareas en segundo plano, en esta práctica solo haremos lo que se muestra en la siguiente imagen

Aquí se indica que cada 5 minutos (*/5) será ejecutado el script para realizar backups. Verificamos que se haya hecho el respaldo dirigiéndonos a la carpeta Backup del servidor.

Cómo observamos los archivos con formato PDF fueron correctamente respaldados, y así será con cada archivo PDF que sea agregado.

Si quieres mantener la contraseña un poco mas protegida y no comprometerla dentro del script puedes optar por cifrarla con GPG, para eso puedes crear un archivo

$ echo 'passwordServer' > sshpasswd

El archivo creado sshpassd vamos a cifrarlo de la siguiente manera:

$ gpg -c sshpasswd

Nos generara un archivo con el mismo nombre pero con extensión gpg, así que debemos borrar el archivo original.

Ahora modificaremos nuestro script remote-backup.sh de la siguiente manera:

#!/bin/bash
gpg -d -q sshpasswd.gpg > /tmp/filepasswd;
find '/home/user/Documentos' -name '*.pdf' | xargs -i sshpass -f /tmp/filepasswd rsync -arv {} -e ssh cristian@192.168.1.100:~/Backup;
shred -n 10 -uz /tmp/filepasswd

Podemos ver que la segunda linea desencripta el archivo gpg en una carpeta temporal, también hubo un cambio en la tercera linea con el uso de sshpass, el parámetro -p donde tenias que poner la contraseña directamente se cambio por el parámetro -f donde asignas el archivo que con tiene la contraseña temporalmente desencripta en la carpeta /tmp y después de realizar la tarea de backup el mismo script finaliza borrando el archivo temporal con la herramienta shred.

Cover Photo by panumas nikhomkhai from Pexels

Activar el modo oscuro programado en Gnome

Últimamente se ha visto sobresalir esta función del modo oscuro en el área de smartphones dado el uso del modo oscuro en ese tipo de ambientes tiene una mecánica que puedes programar para activar y desactivar en determinada hora del día,Sigue leyendo “Activar el modo oscuro programado en Gnome”

Generar un Reverse Shell con Msfvenom para sistemas Linux

En esta entrada se realizara una practica para poder generar nuestros propios Payload con tal de conseguir un Reverse Shell de un sistemas con distribución Linux sin la necesidad de codificar absolutamente nada.Sigue leyendo “Generar un Reverse Shell con Msfvenom para sistemas Linux”

Java: Formulario PDF GTK+

Tenia pendiente de subir este proyecto pero por falta de tiempo y situaciones de ocio no me animaba a subirlo, solo es un pequeño formulario que estando lleno cada campo explota el ordenador… No, es broma, como el titulo lo intuye, genera un PDF al dar click en el botón Opciones y Generar PDF, las dependencias usadas para compilarlo son:

  • GTK 3.20
  • java-gnome 4.1.3
  • itextpdf

El proyecto esta bajo Gradle que me esta facilitando tareas al momento de desarrollar software 😀 , la intención por la que quise hacer este mini proyecto es darle seguimiento al uso de la libreria java-gnome, aprender sobre el uso de los ComboBox.

El código esta en mi repositorio de GitHub, lo pueden clonar pegando la siguiente linea en la terminal:

$ git clone https://github.com/OrigenData/Formulario-PDF-GTK.git

La interfaz esta generada en Glade así que solo se tendría que generar el contenido que debe tener el ComboBox, dando ejemplo la opción del tipo de Sexo de tal persona, se tiene que llamar a las clases necesarias.

import org.gnome.gtk.Gtk;
import org.gnome.gtk.ListStore;
import org.gnome.gtk.TreeIter;
import org.gnome.gtk.DataColumnString;
import org.gnome.gtk.ComboBox;
import org.gnome.gtk.CellRendererText;
 
public class Main {
 
    ListStore listStoreSex;
    DataColumnString sexId;
    CellRendererText sex_cellRendererId;
    TreeIter row;
    String sex[] = {"Hombre","Mujer"};
    // Continua ....
}

Crearemos un modelo en lista con la clase ListStore es parecido a generar un TreeView, también se crea un Array donde se almacena la lista de opciones que contendrá nuestro ComboBox.

SEX = (ComboBox) BUILDER.getObject("ID_sexo");
 
listStoreSex = new ListStore(new DataColumnString[] {
 
    sexId = new DataColumnString(),
    });
 
SEX.setModel(listStoreSex);
sex_cellRendererId = new CellRendererText(SEX);
sex_cellRendererId.setText(sexId);
 
for (String string : sex) {
    row = listStoreSex.appendRow();
    listStoreSex.setValue(row, sexId, string);
}

Habiendo creado nuestro modelo también cargamos lo que tenemos en nuestro Array sex con un foreach para que sea visible en nuestro ComboBox.

Cada vez que el usuario seleccione el tipo de sexo el propio ComboBox debe de detectarlo con el método getActive() para que al momento de generar el PDF sea el resultado que selecciono.

String sx = null;
 
if(SEX.getActive()!=-1) {
    sx = String.format("Sexo : "+sex[SEX.getActive()]);
}

Dejo un video con el proyecto ya compilado y funcionando:

Referencia:

Usando GtkTreeView generado en Glade con Java con conexión a PostgreSQL

Manejando un poco el código que había enseñado en la anterior entrada me dio interés de realizarlo ahora con una conexión a una base de datos para almacenar de forma permanente los datos capturados y tener acceso a los mismo para visualizarlosSigue leyendo “Usando GtkTreeView generado en Glade con Java con conexión a PostgreSQL”

A %d blogueros les gusta esto: