1. Instalar la base de datos mysql, y configurarlo

para que escuche a) por puerto tcp b) por socket unix. Comprobar ambas configuraciones mediante el comando netstat.

Primeramente, en el caso de no tenerlo ya instalado, descargaremos e instalaremos el paquete de la base de datos de mysql. Para ello podremos hacerlo de las siguientes formas:

iker@iker-Studio-XPS-1340:~$ sudo aptitude install mysql-server-5.0

iker@iker-Studio-XPS-1340:~$ sudo apt-get install mysql-server-5.0

Una vez instalado el paquete con sus dependencias, tendremos que fijarnos en los archivos de configuración. Para ello se debe mirar el puerto por defecto en el archivo my.cnf situado en /etc/mysql/. Se ve que el puerto de escucha por defecto es el 3306, por lo que a continuación con el comando netstat se comprueba lo que se esta escuchando por dicho puerto. Para ello se ejecuta la siguiente sentencia:

iker@iker-Studio-XPS-1340:~$ netstat -tl 3306
Conexiones activas de Internet (solo servidores)
Proto Recib Enviad Dirección local Dirección remota Estado
tcp 0 0 *:mysql *:* ESCUCHAR
tcp 0 0 localhost.localdoma:ipp *:* ESCUCHAR
tcp6 0 0 [::]:www [::]:* ESCUCHAR
tcp6 0 0 iker-Studio-XPS-134:ipp [::]:* ESCUCHAR

A continuación vamos a deshabilitar todas las conexiones TCP/IP a la base de datos, para poder comprobar la escucha mediante socket en linux. Para lograr esto, dentro del archivo my.cnf se debe escribir en la sección [mysqld] la siguiente linea:

skip-networking

Se vuelve a ejecutar el comando anterior y se ve como la base de datos no tiene escucha por ningún puerto TCP.

iker@iker-Studio-XPS-1340:~$ sudo netstat -tl
Conexiones activas de Internet (solo servidores)
Proto Recib Enviad Dirección local Dirección remota Estado
tcp 0 0 localhost.localdoma:ipp *:* ESCUCHAR
tcp6 0 0 [::]:www [::]:* ESCUCHAR
tcp6 0 0 iker-Studio-XPS-134:ipp [::]:* ESCUCHAR


2. Utilización del comando watch

Con el comando watch presentar en pantalla completa de forma continua la salida del comando netstat, mirando los puertos tcp y udp, y comprobar cómo varía si desde otra terminal se navega a una página web externa mediante lynx.

Para realizar este apartado, se puede realizar tanto en un navegador de tipo texto como lynx, como en cualquier otro navegador. En este caso se ha utilizado el navegador Mozilla. Se recomienda realizador de esta manera, en vez de realizarlo como dice el enunciado, ya que al utilizar un comando como watch, la termina queda a la espera y se necesita otra terminal para utilizar el navegador web lynx, con lo que a la hora de navegar por una pagina web, no da suficiente tiempo para poder plasmar lo que pide el enunciado. En este caso se debe dejar el terminal con el siguiente comando corriendo:

iker@iker-Studio-XPS-1340:~$ sudo watch netstat -tu

A continuación hemos abierto el navegador mozilla y se ha accedido a www.moodle2.ehu.es, siendo parte del resultado obtenido por dicho comando en el terminar el siguiente:

Conexiones activas de Internet (servidores w/o)
Proto Recib Enviad Dirección local Dirección remota Estado
tcp 0 1 iker-Studio-XPS-1:53599 195.219.3.88:www SYN_SENT
tcp 0 0 iker-Studio-XPS-1:39244 195.219.3.87:www TIME_WAIT
tcp 0 548 iker-Studio-XPS-1:51487 80-239-175-41.custo:www ESTABLECIDO
tcp 0 0 iker-Studio-XPS-1:39243 195.219.3.87:www TIME_WAIT
tcp 0 0 iker-Studio-XPS-1:52790 195.81.202.104:www TIME_WAIT
tcp 0 0 iker-Studio-XPS-1:59074 195.81.202.110:www TIME_WAIT
tcp 0 0 iker-Studio-XPS-1:39275 195.219.3.87:www ESTABLECIDO

Es normal que no se obtenga ninguna información del protocolo UDP, por que todos los datos que se reciben son del protocolo TCP, ya que se necesita que la comunicación sea fiable y que todos los datos lleguen correctamente. Las únicas conexiones con protocolo UDP que se podrían haber llegado a visualizar serian las de las transferencias del servicio DNS, pero en este caso parece ser que no se podido llegar a ver.


3. Utilización del comando dig

Mediante el comando dig obtener las direcciones del servidor web www.gmail.com (registros DNS tipo A) y las de los distintos servidores SMTP (registros DNS tipo MX) para correos con destinatario de la forma @gmail.com.

Esta parte es muy sencilla de realizar. Lo único que se debe de hacer es mirar la ayuda del comando dig, para saber que parámetro hay que pasarle. En este caso para poder ver registros DNS de tipo A, se deberá de pasar el parámetro A. El comando para obtener dicha información sobre gmail, es el siguiente:

iker@iker-Studio-XPS-1340:~$ dig www.gmail.com A

Se obtiene la siguiente información:

; <<>> DiG 9.7.1-P2 <<>> www.gmail.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18595
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.gmail.com. IN A

;; ANSWER SECTION:
www.gmail.com. 86383 IN CNAME mail.google.com.
mail.google.com. 86383 IN CNAME googlemail.l.google.com.
googlemail.l.google.com. 283 IN A 209.85.147.83
googlemail.l.google.com. 283 IN A 209.85.147.18
googlemail.l.google.com. 283 IN A 209.85.147.19
googlemail.l.google.com. 283 IN A 209.85.147.17

;; Query time: 53 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Feb 7 19:23:12 2011
;; MSG SIZE rcvd: 148

Para los servidores SMPT de tipo MX debemos de introducir el siguiente comando:

iker@iker-Studio-XPS-1340:~$ dig smtp.gmail.com MX

De este comando obtendremos la siguiente información:

; <<>> DiG 9.7.1-P2 <<>> smtp.gmail.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31362
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;smtp.gmail.com. IN MX

;; ANSWER SECTION:
smtp.gmail.com. 300 IN CNAME gmail-smtp-msa.l.google.com.

;; AUTHORITY SECTION:
l.google.com. 60 IN SOA ns1.google.com. dns-admin.google.com. 1441225 900 900 1800 60

;; Query time: 117 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Feb 7 19:25:27 2011
;; MSG SIZE rcvd: 120



4. Utilización del comando whois

Encontrar algún teléfono de contacto de la persona o entidad responsable de gestionar la IP correspondiente a la web www.ehu.es

Se a intentando realizar con la forma que dice la ayuda del comando whois, es decir:

iker@iker-Studio-XPS-1340:~$ whois -h www.ehu.es

De esta forma hemos sido incapaces de realizar la búsqueda, por lo que se propone otra solución. Primeramente se debe de realizar un Ping a la dirección www.ehu.es para obtener su dirección IP, y a continuación realizaremos la búsqueda con la dirección IP recibida.

iker@iker-Studio-XPS-1340:~$ ping www.ehu.es
PING www.ehu.es (158.227.0.65) 56(84) bytes of data.

iker@iker-Studio-XPS-1340:~$ whois 158.227.0.65

Un pequeño fragmento recibido es el siguiente, el que contiene uno de los números de teléfonos de los responsables del servidor:

irt: IRT-IRIS-CERT
address: IRIS-CERT
address: Dep. RedIRIS
address: Entidad Publica Empresarial Red.es
address: Edificio Bronce - 2a planta
address: Plaza Manuel Gomez Moreno, s/n
address: E-28020 Madrid
address: Spain
phone: +34 607 156313


5. Montar un servicio rsync para mirrors y comprobar la escucha por el puerto 873.

Hacer una sincronización local, esto es, estando los ficheros de origen y la ubicación destino en el mismo equipo, lanzándose la copia mediante el comando:

rsync -t * localhost:/tmp/

Habilitaremos el servicio metiéndonos en el fichero default de configuración de rsync, y cambiaremos la linea rsync_enable a true.

iker@iker-Studio-XPS-1340:~$ sudo vim /etc/default/rsync
RSYNC_ENABLE=true

A continuación tendremos que crear un fichero de configuración llamado rsyncd.conf con las siguientes características, donde indicaremos desde máximas conexiones, donde se almacenas diferentes ficheros, hasta cual será el módulo de trabajo.

iker@iker-Studio-XPS-1340:~$ sudo gedit /etc/rsyncd.conf
use chroot = no
max connections = 4
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
auth users = iker
secrets file = /etc/rsyncd.secret

[mis_archivos] Directorio

path = /home/iker/Documentos
comment = Archivos para compartir
uid = iker
gid = iker
read only = no
list = yes
secrets file = /etc/rsyncd.secret
auth users = iker

Otro fichero que debemos crear es el las identificaciones con sus contraseñas respectivamente, para ello y ya que lo especificado en el anterior archivo crearemos un fichero llamado rsyncd.secret en /etc/

iker@iker-Studio-XPS-1340:~$ sudo gedit /etc/rsyncd.secret
iker:pass
usuario:pass
root:pass

Configurado ya el servicio, iniciaremos el servicio en modo "demonio", ya que de esta forma debe de funcionar mejor.

iker@iker-Studio-XPS-1340:~$ sudo rsync --daemon

Para correr ya el servicio y hacer la copia de archivos que queremos la realizaremos de la siguiente forma:

iker@iker-Studio-XPS-1340:~$ rsync /home/iker/Descargas/* rsync://iker@localhost:873/mis_archivos/

Si abrimos un netstat y vemos que trafico existe en los puertos, en este caso en el 873, vemos que se realiza un cambio alto de paquetes por este puerto, cuando corremos el servicio.

Every 2,0s: netstat -nt Mon Feb 14 10:22:00 2011

Conexiones activas de Internet (servidores w/o)
Proto Recib Enviad Dirección local Dirección remota Estado

tcp6 0 276368 ::1:44624 ::1:873 ESTABLECIDO
tcp6 1665116 0 ::1:873 ::1:44624 ESTABLECIDO


6. Hacer un servidor rudimentario de cálculo concretamente de sumas mediante netcat.

a) Emplear tres terminales. En la terminal 1 se tendrá un netcat escuchando por un puerto A para recibir los sumandos, y en la terminal 2 otro netcat escuchando por un puerto B para lanzar el cálculo de la suma. La terminal 3 hará de cliente, de modo que primero se hará una conexión con netcat al puerto A para indicar los operandos separados por saltos de línea. Esta conversación se almacenará desde la terminal 1 en un fichero. Finalizada esta comunicación, desde la terminal 3 se hará una conexión al puerto B de modo que se calcule la suma de los operandos almacenados en el fichero indicado, guardando el resultado en otro fichero. Observar el tráfico mediante wireshark.

Primeramente en el primer terminal tendremos un netcat, que enviará los operandos que lleguen desde el cliente hasta un el fichero operandos

iker@iker-Studio-XPS-1340:~$ nc -l -p 2050 > operandos

En el segundo terminal, tendremos otro netcat en el puerto 2051 (puerto B), que ejecutará el scrip cuando se le envie la orden desde el cliente.

iker@iker-Studio-XPS-1340:~$ nc -l -p 2051 -e ./suma

El scrip que se debe ejecutar es el siguiente:

#!/bin/bash

num_args=`cat operandos | wc -w` #Contar numero de lineas
if [ $num_args = 0 ]; then
rm resultado
echo No hay ningun ningún número | tee -a resultado
else

echo Hay $num_args números:

while
read -r numero
do
carac=`echo $numero | wc -c`
carac=`expr $carac - 1`
numero=`echo $numero | cut -c1-$carac`
echo $numero
total=`expr $total + $numero`

done <<< "`cat operandos`"

rm resultado
echo La suma total es: $total | tee -a resultado
fi

Este script se encarga de lo siguiente:
  1. Calculará cuantos números hay en el fichero operandos. En caso de no haber números saca un mensaje por pantalla de que no hay números y finalizara el script, en caso contrario continua.
  2. Muestra el número de numeros que hay en el fichero operandos
  3. A continuacion se realiza un bucle en el que se va captando un numero del fichero operandos, y se suma a una suma parcial. Este bucle se realizará tantas veces como números tengamos.
  4. Para finalizar colocaremos el resultado de la suma en el fichero resultado.

Una vez activado todo, iremos al terminal cliente (tercer terminal), y nos encargaremos, primeramente, de rellenar el fichero de operandos, para ello ejecutaremos el siguiente comando, e iremos colandos diferentes números, separados por un salto de linea.

iker@iker-Studio-XPS-1340:~$ nc localhost 2050
4
5
3
6
4

Pararemos el servicio cuando acabemos de introducir números y daremos la orden desde el cliente de ejecutar el script, para ello ejecutaremos el siguiente comando, obteniendo por pantalla, también el resultado:

iker@iker-Studio-XPS-1340:~$ nc localhost 2051
Hay 5 números:
4
5
3
6
4
La suma total es: 22

El wireshark nos muestra las siguientes conexiones:

Pantallazo2.png

Se ve que se realizan dos conexiones, una con un idenfitifacador 40376 y otra con un identificador 39206. La primera de ellas, se trata de cuando se rellena el fichero operandos, esto se puede comprobar haciendo un Follow TCP Stream en el wireshark y nos mostrará lo introducido por el usuario. Por otra parte la conexion con identificador 39206 se trata del resultado mostrado por el script, también se puede comprobar con Follow TCP Stream.


b) Preparar un script que compruebe cada 5 min si se están ejecutando las escuchas por A y B en caso negativo sean lanzadas de nuevo, en esta ocasión sin terminal asociada.

El script lo único que realiza es relanzar los servicios en caso de que de no se este escuchando ya por ese puerto. La forma de lanzar los servicios se hará de la misma forma que en el caso anterior, es decir con un terminal cliente, y conectándose primero al puerto 2050 para insertar los operandos y en segundo caso al puerto 2051, para lanzar el script que realiza la suma y que devuelve el valor total de la suma de los operandos.

while [ true ]
do

com2050=`netstat -ln | grep 2050 | wc -l`

if test $com2050 -eq 0 ; then
echo "No se esta escuchando por el puerto 2050"
(nc -l -p 2050 > /home/iker/operandos)&
echo "Lanzada escucha por puerto 2050"
else
echo "Ya se esta escuchando por el puerto 2050"
fi

com2051=`netstat -ln | grep 2051 | wc -l`

if test $com2051 -eq 0 ; then
echo "No se esta escuchando por el puerto 2051"
(nc -l -p 2051 -e ./suma)&
echo "Lanzada escucha por puerto 2051"
else
echo "Ya se esta escuchando por el puerto 2051"
fi

sleep 300

done