Saltando bloqueos de los ISP: HAProxy y autossh

¡Este último mes podríamos decir que he estado muy entretenida! Hace ya casi dos años, un cliente vino a mi harto de que los proveedores de hosting le cerrasen el servidor, durante todo este tiempo de maravilla, hasta que hace un mes y medio Movistar y Vodafone bloquearon el dominio. Ahí es cuando el cliente me contactó de nuevo para realizar un análisis y un informe pericial. El motivo es que el cliente no está realizando ningún acto delictivo que lleve a los proveedores de hosting e ISP a bloquear el servicio, aún así, lo hacen, estamos delante de un caso de Internet Blackout, bloqueo interesado de un servicio en concreto para que los usuarios no puedan acceder a él. ¿Algo ha tenido que ver el recién finalizado y polémico Mundial de Fútbol en Qatar?.

En la fecha del bloqueo del dominio del cliente, mi propuesta al identificar que el bloqueo se estaba realizando a nivel de dominio (que no de DNS, ya que estos si resolvían), le propuse al cliente de registrar otro dominio. La solución funcionó durante 2 semanas más hasta que Movistar y Vodafone bloquearon la dirección IP, como tal, la solución de añadir mas dominios apuntando al servidor, ya no era útil. Por mas INRI, el bloqueo se extendió a más ISP, aislando casi por completo el servidor de Internet (y no sólo en España, otros países de Europa y LatinoAmérica se vieron afectados), pero no todos lo bloquearon!

A partir de aquí se empezó a …

Convertir una web con wordpress a estática con httrack

Hace unos días llegó a mí una de aquellas tareas que en teoría tenía que ser poquitas horas, las poquitas horas han terminado siendo casi un mes entero de trabajo.

La tarea encomendada era la de arreglar la portada de la página web del periódico digital de contrainformación kaosenlared.net.

La web estaba usando el tema publisher y la portada estaba construida con gutenberg, además para cachear la web se estaba usando el plugin W3 total cache. Una combinación del tema y los dos plugins mencionados hacían que se descuadrase toda la página. Por suerte se disponía de una copia de seguridad de un día anterior a que se rompiese la portada. Mi tarea fue pues reestablecer la configuración del tema desde las opciones de exportación y cargar el contenido de la página de la portada. Al arreglarlo y volver a poner la página en producción, a las pocas horas, la portada se volvía a descuadrar. El cliente pidió simplemente dar de baja esta web, hacer algo con los archivos y aprovechar para crear otra nueva que ya estaban usando como web de emergencia.

Así que mi propuesta fue arreglar de nuevo el wordpress y convertir la página web a estática, ya que la página web tenía un pequeño detallito de nada, la friolera de 407.000 entradas, cosa que hacía que el consumo de recursos de la web fuese espectacular, por la gran cantidad de páginas y usuarios que visitaban diariamente el sitio.

Lo primero pues fue copiar todo el …

Script para comprobar el estado de varios certificados SSL

Hola, hoy os dejo un script que he desarrollado para comprobar el estado de los certificados SSL de varios dominios.

 
#!/bin/bash

############################################
# SCRIPT CREATED BY: Laura Mora i Aubert   #
# SCRIPT DATE: 2021-04-01                  #
# WEBSITE: blackhold.nusepas.com           #
# INFO: Script that checks domain ssl      #
#       certificates                       #
#       tested with openssl 1.1            #
# LICENSE: creative commons (by:sa)        #
############################################

############################################
#             INSTRUCTIONS                 #
############################################
#                                          #
# 1. Create a file on /root/scripts/ with  #
#    the content of this file              #
# 2. Edit $ADMIN_MAIL with your mail       #
# 3. Edit $DOMAINS array with your domains #
# 3. Give permissions and run the script   #
# 4. Put your script on /etc/crontab or    #
#    /etc/cron.d/check_ssl with this line  #
# # check ssl certificates
# 0  7    * * *   root /root/scripts/check_certificates.sh /var/log/ssl_checks/check_certificates-$(date "+\%Y\%m\%d").log && cat /var/log/ssl_checks/check_certificates-$(date "+\%Y\%m\%d").log |mail -s "[Check Certificates] your-server-name" your-admin-email@domain.com 
#                                          #
# That's all folks! have a nice day :)     #
#                                          #
# - Blackhold                              #
#                                          #
############################################

ADMIN_MAIL="your-admin-email"
DOMAINS=(
# control domains
"google.com"
"expired.badssl.com"
"wrong.host.badssl.com"
# my domains
"capa8.net"
"aspertic.org"
"cacavaca.capa8.net"
)

for DOMAIN in "${DOMAINS[@]}"
do
    echo "---------------------------"
    echo "domain ${DOMAIN} is: "

    touch check_ssl.txt
    echo | openssl s_client -servername ${DOMAIN} -connect ${DOMAIN}:443 check_ssl.txt 2/dev/null
    if [ `cat check_ssl.txt |wc -l` != 0 ]
    then
        cat check_ssl.txt | openssl x509 -noout -dates check_ssl.txt
    else	
        echo "Verify return code: -1 (certificate does not exist)" check_ssl.txt
    fi

    # badssl.com
    # ok: Verify return 

Añadir un chivato al ssh cuando alguien hace login

Con tanto ransomware, accesos indebidos a sistemas y demás ataques varios a sistemas, la concienciación de tener los sistemas al día está al día y supongo que algo habréis notado queridos lectores que mi actividad éstas últimas semanas ha sido frenética. Mi objetivo es ponerlos a punto y cada vez mas ir mejorando la seguridad sin que se vea afectada la usabilidad.

Está claro que un sistema conectado a la red es victima de intentos de acceso continuos y sólo nos interesan los que han tenido éxito. Es por esto que hoy os traigo un pequeño “tip” para avisar de los accesos a nuestro sistema, sean legítimos o no.

Hace años tenía implantada esta política de seguridad en mis servidores y me sirvió para paliar un ataque aún mayor. La primera reacción fue echar el malhechor de mis sistemas, al mismo tiempo que cambiaba las contraseñas de todos los servidores (ahí aprendí que tenemos que ir con mucho cuidado con nuestra política de passwords).

Éste post se basa en esta respuesta del foro de ubuntu y un poco a mi friki-artesanía.

Lo primero será crear los dos scripts y los pondremos donde ejecutemos los scripts del sistema

root@frontal1-nginx:~# vi /root/scripts/login-notify-pam.sh
#!/bin/sh

/root/scripts/login-notify-script.sh &
root@frontal1-nginx:~# vi /root/scripts/login-notify-script.sh
#!/bin/sh

sleep 3
# Change these two lines:
sender="noreply-valido@capa8.net"
recepient="cuenta-de-notificaciones@capa8.net"

if [ "$PAM_TYPE" != "close_session" ]; then
    host="`hostname`"
    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
    # Message to send, e.g. the current environment variables.
    message="Algú ($PAM_RHOST) ha entrat al sistema $host per SSH!\n\n`ps aux 

msmtp: enviar correos electrónicos autenticados des de un servidor

Hace unos años hice un post sobre ssmtp. Éste post es exactamente lo mismo pero enseño a configurar msmtp ya que ssmtp ya no está disponible.

Lo primero será instalarlo:

root@asterisk10:~# apt install msmtp

Y lo segundo configurarlo, atención en el /home del usuario que va a ejecutar scripts que requieran mandar correos electrónicos, en el caso de root, su home es /root

root@asterisk10:~# vi .msmtprc
# Set default values for all following accounts.
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        ~/.msmtp.log

# Noreply
account        noreply
host           mail.capa8.net
port           587
from           noreply@capa8.net
user           noreply@capa8.net
password       **************

# A freemail service
#account        freemail
#host           smtp.freemail.example
#from           joe_smith@freemail.example
#...

# Set a default account
account default : noreply

Por otro lado instalaremos un cliente de mail, en este caso bsd-mailx

root@asterisk10:~# apt install bsd-mailx

Al ejecutar mailx con el pipe mail, nos sacará un error de que no encuentra sendmail, así que lo engañaremos un poco y le diremos que cuando busque sendmail use msmtp creando en ~ el fichero .mailrc

root@asterisk10:~# vi .mailrc
set sendmail=/usr/bin/msmtp

Ahora para mandar un mail de prueba podremos usar algo similar a ésto

root@asterisk10:~# echo "Blackhold blog rules" | mail correo@dominio.com

Y listos, ahora ya podemos mandar mails sin problemas. A lo mejor te interesa configurar el postmaster (fichero /etc/aliases) del usuario root para que mande los mails del sistema a donde le digas. Más información aquí.…

Debian 10: Problema al hacer dpkg -i paquete.deb

Acabo de instalar mi primera debian con entorno gráfico con cinnamon y veo que le faltan bastantes cosillas

# apt -y install mate-terminal pluma glances mtr net-tools dnsutils

Y también que al hacer dpkg -i de algun paquete me suelta éste error:

# dpkg -i google-chrome-stable_current_amd64.deb 
dpkg: avís: no s'ha trobat «ldconfig» en el PATH o no és executable
dpkg: avís: no s'ha trobat «start-stop-daemon» en el PATH o no és executable
dpkg: s'ha produït un error: no s'han trobat 2 programes esperats al PATH, o no són executables
Nota: el PATH del root normalment ha de contenir /usr/local/sbin, /usr/sbin i /sbin

El motivo es que necesitamos definir los directorios donde se encuentran los binarios del sistema:

# echo 'export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin' /home/aspertic/.bashrc
# echo 'export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin' /root/.bashrc

Salimos de la sesión de terminal del usuario y la volvemos a iniciar y ta-dá!

Recuerdo que si un paquete no deja instalar las dependencias, tenemos que forzar la instalación manual con apt -f install

root@aspertic01:/home/aspertic/Baixades# dpkg -i teamviewer_14.5.1691_amd64.deb 
S'està seleccionant el paquet teamviewer prèviament no seleccionat.
(S'està llegint la base de dades… hi ha 173445 fitxers i directoris instal·lats actualment.)
S'està preparant per a desempaquetar teamviewer_14.5.1691_amd64.deb…
S'està desempaquetant teamviewer (14.5.1691)…
dpkg: problemes de dependències impedeixen la configuració de teamviewer:
 teamviewer depèn de libqt5gui5 (= 5.5) | qt56-teamviewer; tot i així:
  El paquet libqt5gui5 no està instal·lat.
  El paquet qt56-teamviewer no està instal·lat.

 [...]

dpkg: s'ha produït un error en processar el paquet teamviewer (--install):
 problemes de dependències - es deixa sense 

Ejemplo script de backup

Aquí os dejo uno de los scripts de backup que uso para hacer la copia de seguridad de los servidores con proxmox. Espero que os sea de ayuda :)

#!/bin/bash

## lmdb-backup (proxmox)
#### Loc: ******
#### OS: Debian 9 (container lxc)
#### Up: 2019/08/28 11:45 (Blackhold)

BACKUP_DIR="/mnt/hd_extern/backups_lmdb"
ID[0]="server1:x.x.x.x1"
ID[1]="server2:x.x.x.x2"

for INFO in "${ID[@]}"
do
    HOST=`echo ${INFO} |awk -F ':' '{print $1}'`
    IP=`echo ${INFO} |awk -F ':' '{print $2}'`
    BACKUP_DIR_SERVER="${BACKUP_DIR}/${HOST}"

    if [[ ! -e ${BACKUP_DIR_SERVER} ]]; then
        mkdir ${BACKUP_DIR_SERVER}
        mkdir ${BACKUP_DIR_SERVER}/daily
        mkdir ${BACKUP_DIR_SERVER}/monday
        mkdir ${BACKUP_DIR_SERVER}/15
        mkdir ${BACKUP_DIR_SERVER}/28
        mkdir ${BACKUP_DIR_SERVER}/lastmonth
    fi

    rsync -av --delete root@${IP}:/var/lib/vz2/dump/ ${BACKUP_DIR}/${HOST}/daily/dump/
    rsync -av --delete root@${IP}:/var/lib/vz2/template/ ${BACKUP_DIR}/${HOST}/daily/template/

    if [[ $(date +%e) -eq 28 ]]; then
        echo Backup final de mes
        rsync -av --delete ${BACKUP_DIR}/${HOST}/28/dump/ ${BACKUP_DIR}/${HOST}/lastmonth/dump/
        rsync -av --delete ${BACKUP_DIR}/${HOST}/28/template/ ${BACKUP_DIR}/${HOST}/lasthmonth/template/

        rsync -av --delete ${BACKUP_DIR}/${HOST}/daily/dump/ ${BACKUP_DIR}/${HOST}/28/dump/
        rsync -av --delete ${BACKUP_DIR}/${HOST}/daily/template/ ${BACKUP_DIR}/${HOST}/28/template/
    fi

    if [[ $(date +%e) -eq 15 ]]; then
        echo Backup dia 15
        rsync -av --delete ${BACKUP_DIR}/${HOST}/daily/dump/ ${BACKUP_DIR}/${HOST}/15/dump/
        rsync -av --delete ${BACKUP_DIR}/${HOST}/daily/template/ ${BACKUP_DIR}/${HOST}/15/template/
    fi

    if [[ $(date +%u) -eq 1 ]]; then
        echo Backup dilluns
        rsync -av --delete ${BACKUP_DIR}/${HOST}/daily/dump/ ${BACKUP_DIR}/${HOST}/monday/dump/
        rsync -av --delete ${BACKUP_DIR}/${HOST}/daily/template/ ${BACKUP_DIR}/${HOST}/monday/template/
    fi
done

Y lo añado en cron

root@lmdb-backup:~# vi /etc/cron.d/lmdb
# backup planets - activated on 2019-08-18 - blackhold
30 1    * * *   root    /root/scripts/backup_nodes_planet_lmdb.sh

Por supuesto, para hacer funcionar el script es necesario instalar rsync y también poner la clave pública del servidor de backups en el autorized_keys (ssh) de los servidores que queramos hacer copia de seguridad. Recomiendo fervientemente que ninguno de los servidores ni contenedores, tenga acceso directo …

Convertir pdf a jpg

Normalmente cuando tengo que editar un pdf lo abro con inkscape, pero esta vez me encuentro un pdf que son unos planos y la conversión con inkscape se lo toma con la calmísima, así que total como sólo necesito una imagen, voy a convertir el contenido del pdf a imagen y me ahorro varias horas de espera…

¿Cómo?

# convert -verbose -density 150 -trim plano.pdf -quality 100 -flatten -sharpen 0x1.0 plano.jpg

Ahora a cargarlos en el inkscape como imagen y a redimensionar a mi gusto :)

EOF…

El tiempo en la consola

Navegando por las redes sociales me he encontrado una entrada curiosa:

Brutal alias per tenir el temps a la consola:
alias weather='curl -s wttr.in | sed -n "1,7p"'

Así que me he puesto a jugar :P la ciudad por defecto que me detecta es Madrid, pero no me gusta esta geolocalización:

$ curl -s wttr.in/Barcelona | sed -n "1,7p"
Weather for City: Barcelona, Spain

    \  /       Partly cloudy
  _ /"".-.     14 – 15 °C     
    \_(   ).   ↖ 11 km/h      
    /(___(__)  10 km          
               0.0 mm 

Además lo quiero en otro idioma que no sea inglés (en catalán no se deja, snif):

$ curl -H "Accept-Language: es" -s wttr.in/Barcelona | sed -n "1,7p"
El tiempo en: Barcelona, Spain

    \  /       Parcialmente nublado
  _ /"".-.     14 – 15 °C     
    \_(   ).   ↖ 11 km/h      
    /(___(__)  10 km          
               0.0 mm 

En ésta cuenta de twitter hay mas información sobre ésta página.

Tontería del día :)…

ssmtp: mandar mails con un smtp externo rápido y fácil!

Que si exim, que si sendmail, que si la madre que los parió! configuraciones con ficheros de configuración quilométricos e inentendibles! llega la solución a vuestros problemas! ssmtp! rápido, sencillo y apto para cualquier administrador de sistemas, además que dispone de un fichero de configuración hyper corto!

Empezamos pues

# apt-get install ssmtp

Esto te va a borrar cualquier software que tengas de envío de correos electrónicos en el sistema.

Modificamos el fichero de configuración

# vi /etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=nombre@dominio.com

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=SERVIDOR_SMTP
AuthUser=USUARIO
AuthPass=PASSWORD
UseTLS=YES
UseSTARTTLS=YES
# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=NOMBRESERVIDOR.DOMINIO.COM

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES

Cerramos el fichero de configuración y listos (si, no hay nisiquiera servicio a reiniciar ni aplicar configuraciones!)

# echo "hola" | mail -s "test" admin@dominio.com
# mutt -a /var/log/backups/Backup_XXX-20161010.log -- admin@dominio.com

Lo primero a lo cutre y lo segundo adjuntando un mail.

Fuente: stackexchange

Notas:
Me he encontrado usando un servidor de correo que no me permitía mandar correos electrónicos si no le definía correctamente el from, para ello tendremos que modificar el fichero /etc/ssmtp/revaliases y dejarlo así:

root:info@xxx.cat:mail.xxx.cat

Luego si vamos a usar mutt en el crontab para mandar mails también se lo definimos

0  4    * * *   root /root/scripts/xxx-owncloud.sh /var/log/backups/Backup_xxx_cloud-$(date "+\%Y\%m\%d").log && mutt -a /var/log/backups/Backup_xxx_cloud-$(date "+\%Y\%m\%d.log") -e 'my_hdr From:info@xxx.cat' -s "[Backup-xxxCloud] xxx Cloud" -- info@xxx.cat