Protegiendo un poco nuestra Raspberry Pi de ataques externos (ssh)
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
- 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.
- 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.
- 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
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
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
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