Archivo de la categoría: linux

“Mapear” accesos al servidor III (y fin)

Y solo nos quedaba la web:

<!DOCTYPE html>
<html>
  <head>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0">
		<meta charset="utf-8">
		<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fcode.jquery.com%2Fjquery-1.10.2.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
    
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cstyle%3E%0A%20%20%20%20%20%20%23map%20%7B%0A%20%20%20%20%20%20%20%20height%3A%20100%25%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20html%2C%20body%20%7B%0A%20%20%20%20%20%20%20%20height%3A%20100%25%3B%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%3C%2Fstyle%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;style&gt;" title="&lt;style&gt;" />

		<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%0A%09%09%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
  </head>
  <body>
		
<div id="map"></div>

		
<div id="content"></div>

    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%0A%09%09%09var%20map%3B%0A%09%09%09var%20markers%3D%5B%5D%3B%0A%09%09%09%0A%09%09%09%2F%2F%20Inicializamos%20el%20mapa%20(callback%20desde%20la%20carga%20de%20la%20librer%C3%ADa%20de%20GMaps)%0A%20%20%20%20%20%20function%20initMap()%20%7B%0A%09%09%09%09directionsService%20%3D%20new%20google.maps.DirectionsService%3B%0A%09%09%09%09directionsDisplay%20%3D%20new%20google.maps.DirectionsRenderer%3B%0A%09%09%09%09%0A%20%20%20%20%20%20%20%20map%20%3D%20new%20google.maps.Map(document.getElementById('map')%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20center%3A%20%7Blat%3A%2040%2C%20lng%3A%20-4%7D%2C%0A%20%20%20%20%20%20%20%20%20%20zoom%3A%202%0A%09%09%09%09%7D)%3B%0A%09%09%09%7D%0A%0A%09%09%09%2F%2F%20Esta%20funci%C3%B3n%20crea%20un%20marcador%20y%20lo%20agrega%20al%20mapa.%0A%09%09%09function%20addMarker(lat%2C%20lng%2C%20t%2C%20icon)%20%7B%0A%09%09%09%09var%20myLatlng%20%3D%20new%20google.maps.LatLng(lat%2C%20lng)%3B%0A%09%09%09%09var%20marker%20%3D%20new%20google.maps.Marker(%7B%0A%09%09%09%09%09%09position%3A%20myLatlng%2C%0A%09%09%09%09%09%09title%3At%2C%0A%09%09%09%09%09%09icon%3A%20icon%2C%0A%09%09%09%09%09%09anchor%3A%20new%20google.maps.Point(9%2C%2032)%2C%20%2F%2F%20Hace%20falta%20centrar%20bien%20esta%20chincheta%0A%09%09%09%09%09%09draggable%3A%20false%09%0A%09%09%09%09%7D)%3B%0A%09%09%09%09marker.setMap(map)%3B%0A%09%09%09%09markers.push(marker)%3B%0A%09%09%09%7D%0A%0A%09%09%09var%20socket%3B%0A%09%09%09%2F%2F%20Esperamos%20a%20que%20todo%20cargue.%0A%09%09%09%24(document).ready(function%20()%20%7B%0A%09%09%09%09%2F%2F%20Creamos%20la%20conexi%C3%B3n%20socket.io%20con%20el%20servidor%0A%09%09%09%09socket%20%3D%20io()%3B%0A%09%09%09%09%2F%2F%20Y%20que%20pasa%20cuando%20nos%20llegue%20un%20mensaje.%0A%09%09%09%09socket.on('pos'%2C%20function(obj)%7B%0A%09%09%09%09%09%2F%2F%20Un%20icono%20para%20casos%20que%20no%20deber%C3%ADan%20pasar...%0A%09%09%09%09%09var%20icon%3D'http%3A%2F%2Fmaps.google.com%2Fmapfiles%2Fms%2Ficons%2Fpurple-pushpin.png'%3B%0A%09%09%09%09%09%2F%2F%20Dependiendo%20del%20puerto%20destino%20ponemos%20un%20icono%20u%20otro.%0A%09%09%09%09%09switch%20(parseInt(obj.DPT))%20%7B%0A%09%09%09%09%09%09case%2022%3A%0A%09%09%09%09%09%09%09icon%3D'http%3A%2F%2Fmaps.google.com%2Fmapfiles%2Fms%2Ficons%2Fred-pushpin.png'%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%2080%3A%0A%09%09%09%09%09%09%09icon%3D'http%3A%2F%2Fmaps.google.com%2Fmapfiles%2Fms%2Ficons%2Fgrn-pushpin.png'%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%2021%3A%0A%09%09%09%09%09%09%09icon%3D'http%3A%2F%2Fmaps.google.com%2Fmapfiles%2Fms%2Ficons%2Fblue-pushpin.png'%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09%2F%2F%20Y%20a%C3%B1adimos%20el%20marcador%20al%20mapa%0A%09%09%09%09%09addMarker(obj.lat%2C%20obj.lng%2C%20obj.info%2C%20icon)%3B%0A%09%09%09%09%7D)%3B%0A%09%09%09%7D)%3B%0A%0A%20%20%20%20%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
        <!-- Cambiadme el AIzaSyAJNaGAoEMYp9k2KOzkmWArlj6Cb439oy por vuestro propio codigo de API GMaps... plissss.... -->
		<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fmaps.googleapis.com%2Fmaps%2Fapi%2Fjs%3Fkey%3DAIzaSyAJNaGAoEMYp9k2KOzkmWArlj6Cb439oyU%26callback%3DinitMap%22%20async%20defer%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
		<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22%2Fsocket.io%2Fsocket.io.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />	
		<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fcode.jquery.com%2Fui%2F1.11.4%2Fjquery-ui.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
		<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fcode.jquery.com%2Fcolor%2Fjquery.color-2.1.2.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
  </body>
</html>

Primera entrada: https://blog.norsip.com/2017/09/27/mapear-accesos-al-servidor-i/

Segunda parte: https://blog.norsip.com/2017/09/27/mapear-accesos-al-servidor-ii/

Github: https://github.com/luisesn/mapa-conexiones

«Mapear» accesos al servidor I

Jugando con node se me ocurrió que debería pintar el origen de los accesos al servidor de Norsip. Por el momento lo he limitado a los puertos 21,22 y 80.

(Instrucciones para un servidor debian/ubuntu el resto… pos… eso…)

 

Iptables

Primero necesitamos datos, los vamos a sacar de iptables, para ello añadiremos 3 nuevas reglas a iptables (solo guardamos conexiones nuevas):

# LOG SSH
iptables -A INPUT -p tcp -m tcp -m state --dport 22 --state NEW -j LOG --log-prefix "[IPTABLES " --log-level 4
# LOG WWW
iptables -A INPUT -p tcp -m tcp -m state --dport 80 --state NEW -j LOG --log-prefix "[IPTABLES " --log-level 4
# LOG FTP
iptables -A INPUT -p tcp -m tcp -m state --dport 21 --state NEW -j LOG --log-prefix "[IPTABLES " --log-level 4

Ahora necesitamos que estos logs vayan a un archivo específico del sistema: crearemos un fichero netlog.log en /var/log/ y le damos los permisos adecuados.

touch /var/log/netlog.log
chmod 600 /var/log/netlog.log
chown root:adm /var/log/netlog.log

 

Syslog

Y ahora necesitamos que los eventos de iptables se redirijan a este fichero, por lo crearemos un filtro en syslog:

cd /etc/rsyslog.d/
nano 21-iptables.conf

Con este contenido

# Guardar todos los mensajes que comiencen por [IPTABLES en el fichero de antes
:msg,startswith,"[IPTABLES" /var/log/netlog.log
# y no procesar mas estos mensajes, para que no vayan a otros logs
&amp; ~

Guardamos con Ctrl+X Y y listo, ahora reiniciamos syslog:

sudo service rsyslog restart

Y deberemos empezar a ver logs:

Sep 27 17:14:48 h kernel: [IPTABLES IN=eth0 OUT= MAC=02:00:97:50:89:4c:10:f3:11:10:50:68:08:00 SRC=2.139.235.246 DST=151.80.137.76 LEN=52 TOS=0x00 PREC=0x00 TTL=116 ID=19984 DF PROTO=TCP SPT=55592 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
Sep 27 17:15:03 h kernel: [IPTABLES IN=eth0 OUT= MAC=02:00:97:50:89:4c:10:f3:11:19:bf:68:08:00 SRC=2.139.235.246 DST=151.80.137.76 LEN=52 TOS=0x00 PREC=0x00 TTL=116 ID=20271 DF PROTO=TCP SPT=55593 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
Sep 27 17:15:03 h kernel: [IPTABLES IN=eth0 OUT= MAC=02:00:97:50:89:4c:10:f3:11:19:bf:68:08:00 SRC=2.139.235.246 DST=151.80.137.76 LEN=52 TOS=0x00 PREC=0x00 TTL=116 ID=20270 DF PROTO=TCP SPT=55594 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0

Segunda parte: https://blog.norsip.com/2017/09/27/mapear-accesos-al-servidor-ii/

Chromium en la Raspberry Pi 2 (debian Jessie)

 

Primero habremos de actualizar la raspberry a debian jessie (aquí instrucciones) y luego:

wget http://launchpadlibrarian.net/185065105/chromium-browser_37.0.2062.120-0ubuntu0.12.04.1~pkg917_armhf.deb

wget http://launchpadlibrarian.net/185065117/chromium-codecs-ffmpeg-extra_37.0.2062.120-0ubuntu0.12.04.1~pkg917_armhf.deb

sudo dpkg -i chromium-codecs-ffmpeg-extra_37.0.2062.120-0ubuntu0.12.04.1~pkg917_armhf.deb chromium-browser_37.0.2062.120-0ubuntu0.12.04.1~pkg917_armhf.deb

Resumidas de aquí:
http://blog.valitov.me/2014/06/installing-google-chromium-on-arm.html?m=1

Actualizar Raspberry Pi 2 a Debian Jessie

Debian Jessie lleva ya un rato en los repositorios de raspbian así que aprovechando que ha salido hacer un par de días la versión estable (y que nos hacen falta algunas librerías que solo están en Jessie :/ ) vamos a actualizar la Raspberry Pi fácilmente:

Nos logueamos como habitualmente y ejecutamos:

pi@raspberrypi ~ $ sudo nano /etc/apt/sources.list

para poder editar el fichero con las fuentes de los paquetes.

Cambiamos todas las apariciones de wheezy:

deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi

por jessie:

deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

y actualizamos…

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade

NOTA IMPORTANTE: La actualización lleva unas cuantas horas (8-10 a mi) y rompe algunas cosas (o todo) personalmente di preferencia a los archivos del instalador sobre los que había en la pi.
Y con un poco de suerte, tras reiniciarla, la pi debería volver a la vida con Debian Jessie y la posibilidad de instalar algunas cosas mas, como chromium v37.

 

 

Fuentes:

http://sjoerd.luon.net/posts/2015/02/debian-jessie-on-rpi2/

 

Compilando el firmware para una camara IP WV54GCA

Linksys WV54GCA

 

Hace un mogollón de años compré esta cámara Linksys WV54GCA, hace un tiempo que esta dando problemillas así que decidí actualizar el firmware. Despues de hurgar mucho en Google dí con la versión 1.00R24 que os dejo por aquí.
Firmware WV54GCA V1.00R24

En eso que buscaba dí con un artículo de hablaba de como activar telnet en la cámara, tan simple como acceder http://IP/adm/file.cgi?todo=inject_telnetd con el único problema de que no sabemos la contraseña (el usuario sí, es root).

Hurgando un poco mas averiguamos el hash de la contraseña: 9szj4G6pgOGeA pero pasar de eso a una contraseña es cosa de la NSA, asi que basándonos en este otro post: http://hacktracking.blogspot.com.es/2014_08_01_archive.html recompilamos el firmware cambiando la contraseña de root a «root» y activando el servidor telnet por defecto.

El resultado, aquí abajo (compilado en un ubuntu server 12.04):

Firmware WV54GCA V1.00R24 modificado

 

Copio el código del artículo por si desaparece, con algunas modificaciones:

# file /sbin/init
/sbin/init: ELF 32-bit LSB  shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=c394677bccc720a3bb4f4c42a48e008ff33e39b1, stripped
# cat /etc/lsb-release | grep DESC
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
# mkdir wvc54gca
# cd wvc54gca
# wget http://downloads.linksysbycisco.com/downloads/wvc54gca_v1.00R24.tgz
# tar xvzf wvc54gca_v1.00R24.tgz
# md5sum wvc54gca_v1.00R24.tgz
26475f583a55acf515d90d9c0340899d  wvc54gca_v1.00R24.tgz
# apt-get install autotools-dev libncurses5-dev
# rm /bin/sh
# ln -s /bin/bash /bin/sh
# cd source
# cat README
# cat src/rootfs/etc/init.d/rcS
# echo -e "\n# ---- Start Telnet Server (debug) ---- #\n/usr/sbin/telnetd &" >> src/rootfs/etc/init.d/rcS
# cat src/rootfs/etc/passwd
root:9szj4G6pgOGeA:0:0:root:/root:/bin/sh
# openssl passwd -crypt toor
TEcqq4feRqPLA
# sed -i 's/9szj4G6pgOGeA/TEcqq4feRqPLA/' src/rootfs/etc/passwd
# ./makeall
# file FW/WVC54GCA.bin
FW/WVC54GCA.bin: data

Configurar I2C en la Raspberry Pi

En las Raspberry no viene configurado por defecto el I2C, primero tenemos que activar los modulos:

Editamos:

sudo nano /etc/modules

y añadimos las líneas:

i2c-bcm2708
i2c-dev

Ademas tendremos que instalar esto para disponer de las herramientas de línea de comandos:

sudo apt-get install i2c-tools

Y esto si queremos usar el bus I2C desde python:

sudo apt-get install python-smbus

Ademas tendremos que comprobar que en /etc/modprobe.d/raspi-blacklist.conf no aparecen los mismos módulos de antes. Si aparecen, habrá que comentarlos:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Y… ¡reiniciamos!

sudo reboot

Con suerte a la vuelta usando el comando i2cdetect (con el valor 1 para la Resumen de la configuración del bus I2C en la Raspberry Pi B 512Mb, 0 para la antigua) podremos detectar los dispositivos que tengamos colgados del bus i2c:

sudo i2cdetect -y 1

Referencias:
https://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c
Imagen: http://opensource.com/life/14/3/favorite-raspberry-pi-projects

Instalar OpenCv en Ubuntu 12.04

sudo apt-get update
sudo apt-get upgrade

sudo apt-get -y install build-essential cmake cmake-curses-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools libeigen3-dev

sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev swig libv4l-0 libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev libgtk2.0-dev 

wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.8/opencv-2.4.8.zip/download opencv-2.4.8.zip
unzip opencv-2.4.8.zip
cd opencv-2.4.8
mkdir release
cd release
ccmake ../

make
sudo make install

Referencias:

  • http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html#linux-installation
  • http://mitchtech.net/raspberry-pi-opencv/
  • http://miloq.blogspot.co.uk/2012/12/install-opencv-ubuntu-linux.html
  • http://robertcastle.com/2014/02/installing-opencv-on-a-raspberry-pi/
  • http://desarrollophpsenior.wordpress.com/2012/09/19/instalar-opencv-2-4-2-en-ubuntu-12-04-lts/

Disco Ram

Personalmente lo uso para guardar las fotos que genero en la Raspberry Pi cuando se usa como «webcam» por red, de esta manera no agotamos los ciclos de lectura/escritura de la sd al guardar y leer las fotos de ram (no hay necesidad de guardarlas para después).

Paso a paso: (obviamente, como root o usando sudo)

Creamos un directorio donde montar el disco ram:

mkdir /tmp/ramdisk

Damos permisos totales

chmod 777 /tmp/ramdisk

Montamos un disco ram de 16mB en el directorio que teníamos para ello

mount -t tmpfs -o size=16M tmpfs /tmp/ramdisk/