>

10 noviembre 2023

Exportando image desde WSL2

Si te quedas sin espacio en la unidad principal y te quieres llevar la imagen wsl2 a otra unidad sigue los pasos:

  1. Paramos las maquinas  wsl --shutdown
  2. Exportamos la que queramos en mi caso Debian  wsl  --export Debian C:\Temp\Debian.tar
  3. Realizamos el des-registro de la máquina en WSL wsl --unregister Debian
  4. Importamos la máquina  wsl.exe --import Debian D:\WSL\Debian\ C:\Temp\Debian.tar
  5. Arrancamos con un wsl.exe en un powershell

25 octubre 2023

Error de GPG: http://deb.debian.org/debian bullseye InRelease public key is not available: NO_PUBKEY

 Si alguna vez te pasa esto lo que tienes que hacer es:

  1.     Buscar en google el fichero debian-archive-keyring en mi caso para Debian BullsEye (https://packages.debian.org/bullseye/all/debian-archive-keyring/download)
  2. Descargartelo wget http://ftp.de.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2021.1.1+deb11u1_all.deb
  3. Instalarlo dpkg -i debian-archive-keyring_2021.1.1+deb11u1_all.deb

        y hacer un sudo apt update y solucionado el problema.

21 septiembre 2021

Como instalar docker en WSL2 con Debian 10

Lista de comandos para instalar Docker en un Debian 10 en WSL2

sudo apt-get -y update && sudo apt-get -y upgrade

sudo groupadd docker
sudo usermod -aG docker $USER
sudo apt-get -y install curl
sudo apt-get install -y gnupg2
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Es posible que tengan problemas con el gpg de www.docker.com, si es así utliza estos comandos

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


sudo apt-get update && sudo apt-get upgrade

apt-cache policy docker-ce
sudo apt-get -y install docker-ce docker-ce-cli containerd.io

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

sudo touch  ./etc/fstab
sudo service docker start
sudo service docker status

Update:

Si os sale este error cuando realicéis un "docker run"  docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:

La solución es dar permisos al fichero docker.sock 

sudo chmod 666 /var/run/docker.sock



08 diciembre 2015

Docker la herramienta del desarrollador, instalando wordpress

Docker es esa herramienta que todo desarrollador debería conocer.
¿Qué es? pues un contenedor, contenedor?, si una herramienta que nos permite instalar un tomcat, un mysql con un apache utilizarlo en nuestro proceso de desarrollo y al terminarlo lo podemos guardar o directamente tirarlo a la basura.

Gracias a esto no necesitamos instalar nada en nuestro equipo.

Existe un repositorio oficial donde podéis encontrar imágenes para ser utilizadas con Docker

https://hub.docker.com/explore/

¿Como se instala?. Aquí os pongo una guía para ubuntu.

  1. Realizamos  sudo apt-get update
  2. Instalamos el docker sudo apt-get -y install docker.io
  3. Podemos querer que se ejecute al iniciar el pc sudo update-rc.d docker defaults
  4. Arrancamos el servicio docker service docker start


Instalando una imagen de wordpress + mysql

  1. Necesitamos localizar una imagen de wordpress vamos a 
    https://hub.docker.com/explore/
    y buscamos por wordpress nos salen unas cuantas, pero vamos a utilizar tutum/wordpress.
  2. Ejecutamos sudo docker run -d -p 80:80 tutum/wordpress /run.sh
  3. Listando los docker que se ejecutan sudo docker ps
  4. Ejecutamos el navegador web, ponemos nuestra ip y ya nos saldrá la instalación de wordpress.
  5. Si queremos parar sudo docker stop "CONTAINER ID" identificador que nos da sudo docker ps

Con esto ya tendríamos una imagen de wordpress para poder desarrollar sobre ella.





03 septiembre 2015

Install nvm, nodejs, npm, bower and yeoman into Ubuntu

Si quieres instalar Yeoman en ubuntu solamente tendrás que ejecutar los siguientes comandos en un terminal. Esta instalación utiliza el nvm para gestionar las versiones npm y permite configurar un proxy para npm si se quiere. Espero que te ayude.

sudo apt-get update
sudo apt-get install build-essential libssl-dev
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.26.1/install.sh | bash
source ~/.bashrc
nvm ls-remote
nvm install 0.12.7 #last version
nvm alias default stable
npm config set proxy http://proxy.company.com:8080 # Only If you want a proxy
npm config set https-proxy http://proxy.company.com:8080 # Only If you want a proxy
npm -v
node -v
npm install -g bower
npm install -g yo

19 abril 2015

Bloquear, banear las ips de atacantes al ssh en Raspberrypi con un script de Python

Los que tenemos una Raspberry pi y nos conectamos desde cualquier parte del mundo :-) a través de ssh, tenemos un problema con ciertos personajes que quieren acceder también a ella vía bruteforce. Si no sabes de lo que estoy hablando te aconsejo que accedas al fichero auth.log dentro del directorio /var/log/, aquí podrás ver los múltiples intentos de acceso que tienes.
Cansado de que se quisieran conectar a ella, decidí crearme un script en python que lee el fichero auth.log y mete las ips  en un conjunto y las añade al iptables. Con ello banneo o bloqueo todas las ips extrañas.
Antes de ejecutar el script deberás instalar la aplicación ipset y iptables si no las tienes ya instaladas, para ello deberás ejecutar los siguientes comandos:

  1. sudo apt-get update
  2. sudo apt-get install ipset
  3. sudo apt-get install iptables

Aquí os dejo el script pero podéis descargarlo desde github 

#!/usr/bin/env python3.4
 
"""
 sudo ipset create banthis hash:ip maxelem 1000000
 sudo ipset add banthis 1.1.1.1
 sudo iptables -I INPUT -m set --match-set banthis src -p tcp --destination-port 22 -j DROP


 $ sudo ipset save banthis > banthis.txt
 $ sudo ipset destroy banthis
 $ sudo ipset restore -f banthis.txt

"""

# IMPORTS
import hashlib
import re
import socket
import pprint
import subprocess
import commands
import os
import time
 
# VARS
log_path = '/var/log/auth.log'
hosts=[]
full_hosts_data=[]
previous_ip = ""
previous_host = ""

#Create ipset
def create_banthis():
 return subprocess.call("ipset create banthis hash:ip maxelem 1000000" ,shell=True);

#Save ipset
def save_banthis():
 return subprocess.call("ipset save banthis > banthis.txt" ,shell=True);

#Add ip to ipset
def anhade_ip(ip):
 return subprocess.call(["ipset", "add", "banthis", ip]);

#Add ipset to iptables
def anhade_iptables():
 subprocess.call("iptables -I INPUT -m set --match-set banthis src -p tcp --destination-port 22 -j DROP",shell=True);

def borra_iptables():
 p = subprocess.Popen(["iptables", "-L", "--line-numbers"], stdout=subprocess.PIPE);
 output , err = p.communicate();
 for line in output.split("\n"):
  check_1 = line.find("banthis");
  if check_1 != -1 :
   index= subprocess.call("iptables -D INPUT " + line[0],shell=True);

#Check requirements
def check_requirements():
  ipset_status = commands.getstatusoutput("hash ipset")
  iptables_status = commands.getstatusoutput("hash iptables")
  if ipset_status[0] != 0 or iptables_status[0] != 0:
    raise Exception("Iptables and/or ipset not found, please intstall these dependencies first")

#Adjust lines
def adjust_item( str, i ):
    if len(str) < i:
        for j in range(i-len(str)):
            str = str + " "
    return str
 
#Lookup ip by name
def get_ip_hostname(name):
 try:
            return socket.gethostbyname(name);
        except Exception:
            return "0";

#Date
def get_date( my_line ):
    date_words = my_line.split(":")
    date = date_words[0] +":"+ date_words[1] +":"+ ((date_words[2]).split(" "))[0]
    return date

try:
 start_time = time.time();
 check_requirements();
 if save_banthis() == 1:
  create_banthis();

 # READ FILE
 with open(log_path, 'rt') as log:
     text = log.read();

 # COLLECTING HOSTS AND IPS
 for line in text.split("\n"):
  if "sshd" in line:
   if len(line) > 5:
    check_1 = line.find("rhost=")
    if check_1 != -1 :
     words = line[check_1:len(line)].split(" ");
     if len(words) > 2 :
      if len(words[2]) > 5 :
       user = words[2].split("=")[1];
       ip = words[0].split("=")[1];
       host = ip;
       pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$");  
       test = pat.match(ip);
       if not test:
        ip = get_ip_hostname(ip);
        if ip != "0":
         host = ip;  
       exists_check = 0
       for my_host in hosts:
        if my_host["ip"] == ip:
         exists_check = 1;
       if exists_check == 0:
        if not "192.168." in ip :
         hosts.append({"ip":ip, "hostname":host , "accounts":user, "date":get_date( line )});

 # PRINT TABLE HEADERS
 print(
  adjust_item("DATE", 16 ),
  adjust_item("IP", 15),
  adjust_item("HOSTNAME", 40),
  adjust_item("ACCOUNTS", 30)
 )
 for item in hosts:
  anhade_ip(item["ip"])
  parsed_ip           = adjust_item( item["ip"],          15 )
  parsed_date         = adjust_item( item["date"],        16 )
  parsed_host         = adjust_item( item["hostname"] ,   40 )
  parsed_accounts     = adjust_item( item["accounts"],    30 )
  print(
   parsed_date[:16],
   parsed_ip, parsed_host[:40],
   parsed_accounts[:30],
  )
 borra_iptables();
 anhade_iptables();
 print("--- %s seconds ---" % (time.time() - start_time));
except Exception as e:
 print str(e);

10 agosto 2014

Ni todo es gratuito ni todo es público

Aunque Internet y las redes sociales son un gran escaparate y una magnifica autopista para alcanzar fácilmente la información deseada, algunas veces puede ser una fuente de quebraderos de cabeza para los usuarios que no dan su consentimiento para que determinados datos referentes a su vida personal o profesional se publiquen.

Afortunadamente el Tribunal de Justicia de la Unión Europea (TJUE) ha dictaminado que buscadores de Internet como Google y posteriormente Bing retiren los enlaces a informaciones publicadas en el pasado, si se comprueba que son lesivas para alguna persona o carecen de relevancia.

Si consideráis que se ha vulnerado vuestro derecho a la privacidad o que alguna de las referencias que aparecen en el buscador no se ajustan a la realidad no dudéis en presentar una reclamación.
Aquí os dejo el link de acceso al formulario de Google y al de Microsoft Bing

De todas formas sigue existiendo un vacío legal entorno a la privacidad en la red ya que aunque los buscadores acaten la sentencia de la UE, las páginas donde están publicadas las informaciones a las que se hace referencia no se dan por aludidas.