viernes, 15 de agosto de 2014

Manual Varios Raspberry Pi

Protegiendo un poco nuestra Raspberry Pi de ataques externos (ssh)

La historia de siempre, basta con conectar un aparato a internet para que un montón de bots empiecen a atacarlo a ver si consiguen acceder. A raíz de este post se me ocurrió investigar el fichero de log del sshd a ver si tenía algún intento de acceso ilegal. Pues en menos de 12 horas tenía ¡1728 intentos de acceso! La mayoría a la cuenta root.

Este es el comando que muestra por pantalla:
cat /var/log/auth.log | grep 'invalid user\|Failed'

...y este el que cuenta cuántos líneas aparecen:
cat /var/log/auth.log | grep 'invalid user\|Failed' | wc -l

Hay varias cosas que podemos hacer para evitar cualquier problema.

Contraseña
Es obvio pero la primera es asegurarnos de que cambiamos la contraseña por defecto y que no lo hacemos por otra que sea obvia como "12345", "password" y cosas así. Lo puedes hacer directamente desde el menú de raspi-config (sudo raspi-config) o con el comando passwd

Desactivar el login con root desde ssh
Edita el fichero de configuración de ssh

sudo nano /etc/ssh/sshd_config

Cambia "PermitRootLogin yes" por

PermitRootLogin no

Bloqueos ataques fuerza bruta
Añade estas línea al final del sshd_config para bloquear el número máximo de accesos fallidos desde una IP y el número máximo de sesiones simultáneas que se pueden abrir.


# Custom settings
MaxAuthTries 3
MaxStartups 5

Cambio de puerto estándar
No es una medida definitiva pero te evitará muchos ataques automáticos de los bots que circulan por Internet. Basta con que cambies el puerto que has abierto en el router a cualquier otro no estándar. En la redirección indicas que sigues queriendo enviarlo al 22 de tu IP en la red interna. Pero ten cuidado porque muchos proveedores de internet no permiten conectarse al rango completo de puertos de tu router. Comprueba con una herramienta como http://www.yougetsignal.com/tools/open-ports/ si el puerto realmente está abierto y accesible.

Bloqueo de IP, límites de anchos de banda...
Hay muchas más estrategias que puedes aplicar para proteger tus puertos pero en ocasiones son algo rígidas y más orientadas a sistemas multiusuario.

Aquí tienes una buena colección de estrategias para proteger tu servidor ssh
http://cuadernodelviaje.blogspot.com.es/2013/01/protegiendo-un-poco-nuestra-raspberry.html
+****************************************************+

Acceder desde Internet a tu Raspberry Pi. IPs dinámicas, puertos, DNS y túneles SSH

Una de las ventajas de la RPI es precisamente que su bajo consumo hace que no sea un crimen dejarla encendida todo el día. Eso sí, para que sea realmente útil debes tener la posibilidad de acceder a ella desde cualquier ordenador, no solo desde tu LAN. En esto no se diferencia de cualquier otro ordenador pero demos un repaso a lo que necesitamos.

  • La RPI configurada  y conectada a tu red local
  • Acceso a nuestro router para redireccionar puertos
  • Un ordenador con un cliente SSH: en linux/unix/mac directamente la línea de comandos, desde windows puedes usar Putty.
  • Opcionalmente un servicio de DNS dinámico (en nuestro caso www.dnsexit.com) y una cuenta shell para probar el servicio ssh desde el exterior de nuestra red.

Configurar IP local fija
Comenzamos por fijar la IP de nuestra RPI. Esto es imprescindible para que la cuando habramos el puerto en el router siempre la encuentre en la misma dirección. Para ello editamos el fichero /etc/network/interfaces
pi@raspberrypi ~ $ sudo nano /etc/network/interfaces
...y comentamos la línea del DHCP y/o la sustituimos directamente por este código: 
#iface eth0 inet dhcp
iface eth0 inet static
address   192.168.0.254
netmask   255.255.255.0
network   192.168.0.0
gateway   192.168.0.1
broadcast 192.168.0.255
Podéis ver que he escogido la dirección 192.168.0.254 para mi RPI y que mi red está en el rango 192.168.0.0. Debes adaptar esta configuración a tu red, puede que en tu caso sea la 192.168.1.0 o cualquier otra. Para que los cambios sean efectivos debes reiniciar los dispositivos de red con ifdown y ifup, pero si estás accediendo por red ¡perderás la conectividad! Casi que lo más fácil es que reinicies directamente la RPI.
pi@raspberrypi ~ $ sudo reboot
Aseguramos que podemos acceder por ssh a nuestra RPI. A estas alturas ya debes tener claro como se hace.
Desde otra máquina linux/mac:
ssh pi@192.168.0.254
Por cierto, si no has cambiado la contraseña de tu RPI sería buen momento para hacerlo antes de ponerla a disposición de todo el mundo en Internet.
Accediendo desde internet. Redirección de puertos
Para poder acceder a una máquina de una red local desde internet debes abrir un puerto en tu router y redireccionarlo a la máquina y puerto correspondiente. En nuestro caso debes acceder a tu router y redireccionar el puerto 22 externo de tu router al mismo puerto 22 y a la IP que has escogido para tu RPI. Esta configuración es similar en todos los routers pero a la vez casi siempre el menú es diferente. Busca información al respecto en internet si tienes dudas.
Puede que más adelante quieras que externamente el puerto no sea el 22 o abrir sólo el puerto de web (80) pero como algunos ISP no permiten acceder a todos los puertos lo mejor es que de momento lo pruebes así.
Si has redireccionado correctamente los puertos y configurada correctamente la IP fija ya deberías poder acceder por SSH a tu RPI desde internet. Comienza comprobando que el puerto está correctamente abierto con http://www.yougetsignal.com/tools/open-ports/. La misma página te dice cuál es la dirección ip externa de tu router, selecciona el puerto 22 y comprueba que te indica que el puerto está abierto.
Bien, si todo ha ido bien ya podrías conectar por ssh desde cualquier máquina de internet. Si tienes acceso a una cuenta shell gratuita de las que hay por internet podrías conectarte (usando la cadena pi@ip_externa) para comprobarlo. Yo tengo una cuenta que uso con frecuencia en http://www.cjb.net/shell.html por si te sirve de algo.
Configurando DNS para una IP dinámica
Ya podemos acceder a nuestra RPI desde internet, el problema es que la dirección IP que le asigna nuestro ISP al router suele cambiar cada vez que lo reiniciamos, además no suelen ser precisamente fácil de recordar. Para solventarlo lo mejor es usar un servicio de DNS dinámica gratuito.
Yo he utilizado por recomendación del foro de RPI  el servicio http://www.dnsexit.com/ que te "regala" un dominio del tipo loquesea.com. Una recomendación, si tienes intención de colgar una web no uses un dominio "regalado", como empieces a ser popular rápidamente se apropiarán de él, pero para un servicio personal es ideal.
El caso es que una vez registrados obtendrás un dominio gratuito. Lo que haremos ahora es instalar un servicio en la RPI que periodicamente comprobará nuestra IP externa y la actualizará siempre que sea preciso. ¿Cómo lo hacemos? Pues así de fácil:
wget http://downloads.dnsexit.com/ipUpdate-1.6-2.tar.gz
tar xzvf ipUpdate-1.6-2.tar.gz 
sudo ./setup.pl
Cuando nos pregunte si queremos instalarlo como un daemon responderemos que sí para que se inicie con la RPI. Si te dice algo de que el fichero no existe vete a http://downloads.dnsexit.com/ y comprueba que versión es la que está activa.
Si todo ha ido bien podrás usar usar la dirección cadena pi@tudominio.com para conectarte a tu RPI. Muy cómodo ¿verdad?
Accediendo a otros puertos en la RPI
Tal vez quieras a acceder a otros puertos de tu RPI, típicamente al puerto 80 del servidor web, pues tienes dos opciones.
  1. Abrir otro puerto en tu router. Es la opción si quieres que esté accesible para cualquiera siempre que tu RPI esté encendida. Basta con hacerlo igual que antes con el 22.
  2. Crear un tunel SSH. Así sólo tú podrás acceder en el momento que quieras al puerto que desees. Un túnel ssh tiene la ventaja adicional de que va encriptado y es tremendamente seguro. Crea una conexión transparente entre un puerto de nuestra máquina y otro puerto de una máquina de la red destino, en nuestro caso será la propia RPI. ¿Cómo se configura? Muy sencillo:
Supongamos que tienes el servidor web activo en tu RPI. Desde una máquina externa hacemos la siguiente conexión:
gonzalo@matilda:~$ ssh -L 81:localhost:80 pi@tudominio.com
Así creamos un tunel  entre puerto 81 de la máquina que estamos usando y el puerto 80 de la RPI (localhost).
Ahora desde el ordenador desde el que hemos iniciado la conexión abrimos una ventana del navegador y  visitamos la dirección http://localhost:81. Si todo ha ido bien debería responder el servidor web de tu RPI.
Podrías también abrir otros puertos como el del VNC en el caso de que tuvieras instalado el servicio y quisieras acceder remotamente al escritorio, o al MySQL o a cualquier servicio en general que se cuelgue de un puerto local. Puedes abrir multiples puertos al mismo tiempo con una única cadena de conexión. Como puedes imaginar, este método es muy útil porque permite acceder a tantos puertos como necesites de tu RPI abriendo un único puerto en  tu router.
Accesos ilegales
Haberlos haylos... hay bots que recorren internet buscando puertos ssh abiertos (de ahí la importancia de no usar la contraseña por defecto). Podrías cambiar el puerto abierto en tu router del 22 a cualquier otro para luego indicar que se redirija al puerto 22 en la red interna. Pero si tienes curiosidad y no te preocupa demasiado déjalo un par de días abierto a ver quien intenta acceder ilegalmente. Puedes comprobarlo con el comando:
pi@raspberrypi ~ $ cat /var/log/auth.log* | grep "Invalid user" 
Jan 15 09:04:00 raspberrypi sshd[23921]: Invalid user ____ from 202.77.107.203
En mi caso, en menos de 12h ya tenías varios intentos de acceso :-D. En este post se habla un poco más del tema.
+**************************************************+

Capturando imágenes de la webcam con Raspberry PI

Tras conectar la webcam y comprobar con lusb y dmesg que está correctamente cargada, instalamos el software necesario. Entre los múltiples paquetes disponibles escogí

sudo apt-get install uvccapture

Ya debería funcionar con:

uvccapture -v -m

Y se puede parametrizar un poco para brillo, contraste, saturación...:


pi@raspberrypi ~ $ uvccapture -v -B30 -C100 -S150 -G1 -q100 
Using videodevice: /dev/video0
Saving images to: snap.jpg
Image size: 320x240
Taking snapshot every 0 seconds
Taking images using mmap
Resetting camera settings
ioctl querycontrol error 22 
Setting camera brightness to 30
Setting camera contrast to 100
Setting camera saturation to 150
Setting camera gain to 1
ioctl querycontrol error 22 
Saving image to: snap.jpg
+******************************************************+

Añadiendo un botón de reset a Raspberry Pi

Aprovechando que tenía un botón de pulsación para circuitos por casa me he animado a añadir a la Raspberry Pi para usarlo como reset. No me hace mucha gracia tener que desenchufarla para reiniciarla, porque con el tiempo me temo que acabaría cascando el conector, así que este método es perfecto.

La última revisión de la RPI incluyó incluyó un par de pines que al cerrarlos resetean la máquina. En la foto los tienes localizados.
Usé un sencillo pulsador para circuitos que adapté con unos pequeños alicantes para que encajara en el hueco y quedarán cogidos como un clip (el de la derecha).


Quedando de la siguiente forma

Una prueba de sencilla demostró que funcionaba perfectamente. No lo he fijado definitivamente con soldadura por dos razones: se agarra con suficiente fuerza por el momento y con el tiempo es posible que quiera montar la RPI en algún proyecto y si tiene caja propia entonces soldaré un par de pines y añadiré un botón de reset cableado que saqué de un ordenador.

Actualización: Se me olvidó mencionar que la información sobre el botón de reset la encontré gracias a los estupendos apuntes sobre RPI de @ulysess10
+************************************************+
 
 

No hay comentarios:

Publicar un comentario

Los comentarios serán supervisados antes de su publicacion

Related Posts Plugin for WordPress, Blogger...

Entradas populares

LinuxSur.org Img

LinuxSur.org Img