Archivo para 5 septiembre 2014

Abrir y cerrar el acceso desde el exterior por SSH usando gtalk

En la Raspberry Pi recibo diariamente desde China varios cientos de intento de acceso al servicio SSH. Aprovechando el post anterior vamos a modificar algo el script external para hacer que el acceso a SSH desde el exterior esté abierto o cerrado a voluntad. Indicaremos con una orden vía gtalk a Raspberry Pi que abra o cierre el puerto, algo similar a lo que se haría con port-knocking.

En external añadimos las siguientes líneas:

ssh.abre)
    /usr/local/bin/ssh.abre; 
    ;;
ssh.cierra)
   /usr/local/bin/ssh.cierra; 
   ;;

Enviando los comandos ssh.cierra y ssh.abre se añadirá o eliminará una regla en Iptables. Para esto hace falta crear un par de scripts que irán en /usr/local/bin
ssh.abre:

#!/bin/sh
# ssh.abre por ratoncio
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT
echo "Abierto el acceso por SSH";

ssh.cierra:

#!/bin/sh
# ssh.cierra por ratoncio
num=$(sudo iptables -L -n --line-numbers|grep "tcp dpt:22"|awk '{print $1}')
/usr/local/bin/iptables.remove "$num";
echo "Cerrando el acceso exterior por SSH";

Ahora se puede indicar a Raspberry cuando queremos acceder desde el exterior de nuestra red local por SSH.

Anuncios

Control de raspberry usando gtalk

El objetivo es enviar comandos y recibir información de la raspberry pi usando gtalk.
Para esto usaremos centerim; un programa que permite mediante consola conectarse a varios servicios de IM como gtalk. Para dejar este programa en segundo plano emplearemos screen.

Por defecto RaspBMC tiene las preferencias de apt-get configuradas para que instale los paquete extras. Debido a esto se produce una instalación de 250MB y que para colmo rompe el servicio XBMC. Para evitar esto se edita el fichero /etc/apt/apt.conf y se añaden las líneas:

APT::Install-Recommends "0";
APT::Install-Suggests "0";

Tras esto instalamos:

apt-get install centerim screen

Una vez instalado se ejecuta centerim con el usuario que se usará para arrancarse normalmente. En mi caso, pi.
En la opción jab se rellenan las opciones de la cuenta gmail que usaremos para la Raspberry. Una vez hecho esto se creará una estructura de directorios que se podrá editar:
home/pi/.centerim/
En el fichero config tendremos que tener algo similar a esto:

jab_nick    cuentapararaspberrypi@gmail.com
jab_pass    contraseña
jab_server  talk.google.com:5223
jab_osinfo  1
jab_prio    4
jab_ssl     1

Para arrancar el sistema automaticamente se añade la siguiente línea a /etc/rc.local

su pi -c 'screen -dmS centerim /usr/bin/centerim'

Ahora configuraremos el fichero external que está en el directorio .centerim
El siguiente ejemplo es el mío que realiza varias acciones:

%action         Remote control
event           msg
proto           all
status          all
options         stdin stdout

%exec
#!/bin/sh
# script de mayordomo gtalk-raspberry pi por ratoncio
ENTRADA=`cat`;
# el comando se fuerza a minusculas para evitar problemas con las mayusculas automaticas de los moviles
COMANDO=`echo $ENTRADA|awk '{print $1}'|tr '[:upper:]' '[:lower:]'`;
RESTO=`echo $ENTRADA|awk -F "$COMANDO " '{print $2}'`;
if [ $CONTACT_NICK = aquifiltropormipropiacuentade@gmail.com ]; then
case $COMANDO in
        df) df -h;;
        uptime) uptime;;
        vmstat) vmstat;;
        who) w;;
        mem) free -m;;
        dmesg)
            dmesg |tail -n 20
                    echo "----";
            echo "Fin dmesg";
        ;;
        apunta|nota)
            echo "Apunto esto: $RESTO";
            echo "$RESTO" >> /home/pi/notasRTN;
        ;;
        notas)
            #cat /home/pi/notasRTN;
            echo;
            i=1;while read linea;do echo "$i: $linea";i=`echo $i +1|bc`;done</home/pi/notasRTN;
            echo "----";
            echo "No hay mas notas";
            ;;
        borranota)
            sed "$RESTO"d /home/pi/notasRTN > /tmp/notasRTN.tmp;
            mv /tmp/notasRTN.tmp /home/pi/notasRTN;
            rm /tmp/notasRTN.tmp;
            echo "Borrada nota $RESTO";
        ;;
        diag)
            /opt/vc/bin/vcgencmd measure_temp;
            /opt/vc/bin/vcgencmd measure_volts;
        ;;
        torrent)
            echo "torrent (start|stop|status)";
            /etc/init.d/transmission-daemon $RESTO;
        ;;
	    hora)
            echo "Son las `date +%H:%M:%S`";
        ;;
        biblioteca)
            echo "biblioteca (start|stop)";
            /home/pi/calibre-server $RESTO;
        ;;
        ayuda|help)
            echo "Soy Ratoncio, tu asistente electronico. Los comandos validos son:";
            echo ;
            echo "df";
            echo "uptime";
            echo "vmstat";
            echo "who";
            echo "dmesg";
            echo "agenda";
            echo "apunta";
            echo "notas";
            echo "borranota";
		    echo "servicios";
		    echo "diag";
		    echo "torrent";
		    echo "hora";
		    echo "biblioteca (start|stop)";
            echo "ayuda";
        ;;
        *)
		    echo "Has dicho: $ENTRADA";
		    echo "----";
		    echo "Lo siento, no entiendo tu pregunta. Prueba con 'ayuda'.";
        ;;
    esac
fi;