proyecto integrado asir

88
Proyecto Integrado 2014 CFGS Administración de Sistemas Informáticos en Red Autor: Francisco José Cruz Jiménez

Upload: francisco-jose-cruz-jimenez

Post on 18-Nov-2014

691 views

Category:

Education


7 download

DESCRIPTION

Proyecto integrado fin de ciclo

TRANSCRIPT

Page 1: Proyecto Integrado ASIR

Proyecto Integrado 2014

CFGS Administración de Sistemas Informáticos en Red

Autor: Francisco José Cruz Jiménez

Page 2: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 2

Índice

Enunciado.......................................................................................................................................................3

Descripción del escenario ...............................................................................................................................3

Descripción máquinas de la red interna ......................................................................................................4

vigila.proyectint.org ........................................................................................................................4

aplica.proyectint.org .......................................................................................................................4

datos.proyectint.org ........................................................................................................................4

Descripción máquinas de la red cliente .......................................................................................................4

clientex.proyectint.org ....................................................................................................................4

Configuración del escenario ............................................................................................................................5

Configuración máquina vigila.proyectint.org ...................................................................................................8

Instalación pfSense .....................................................................................................................................8

Configuración Servidor DNS ......................................................................................................................10

Configuración Servidor VPN ......................................................................................................................11

Configuración Firewall ..............................................................................................................................16

Configuración máquina aplica.proyectint.org ................................................................................................17

Instalación de Webmin .............................................................................................................................18

Instalación y configuración servidor web...................................................................................................19

Instalación y configuración servidor de correo ..........................................................................................23

Instalación y configuración de Nagios .......................................................................................................27

Aplicación web de gestión.........................................................................................................................35

Copias de seguridad automática ...............................................................................................................42

Copias de seguridad manual .....................................................................................................................47

Configuración máquina datos.proyectint.org ................................................................................................48

Instalación de Webmin .............................................................................................................................48

Instalación servidor de Bases de Datos......................................................................................................49

Instalación y configuración de servidor FTP ...............................................................................................54

Instalación y configuración de LDAP ..........................................................................................................62

Configuración máquina clientex.proyectint.org .............................................................................................68

Instalación y configuración cliente VPN .....................................................................................................68

Copias de seguridad ..................................................................................................................................70

Anexos..........................................................................................................................................................72

Código de la aplicación web ......................................................................................................................73

Page 3: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 3

Enunciado

Después de la excelente formación recibida en el clico de ASIR, te animas a montar tu propia empresa de servicios informáticos: Proyect Int. El objetivo es crear la infraestructura necesaria para dar servicio de respaldo de información (copias de seguridad) a tus clientes. El mecanismo será el siguiente:

Al crear un contrato con un cliente, deberá definirse el numero de máquinas que desea integrar en el servicio (a las que se les va a realizar copias de seguridad).

Se instalará en la red del cliente una máquina y se configurará como cliente VPN para que sea accesible desde tu red.

Esta contendrá un software para realización de copias de seguridad de las distintas máquinas (configurando el tipo, periodicidad, programación, etc…) mediante la red, dando como resultado un archivo por cada una.

Tu sistema deberá tener un proceso para que cada noche copie esos archivos a una maquina especial de tus instalaciones, cuyo cometido es el de mantener las copias seguras.

El estado y toda la información del proceso de copia deberán ser almacenados en una base de datos.

Toda la información anterior estará reflejada en una web, que servirá como herramienta de comprobación del correcto funcionamiento del sistema.

Descripción del escenario

El esquema de red es el siguiente:

Page 4: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 4

Como se muestra en el dibujo, la red de la empresa constará de tres máquinas, cada una con los servicios o herramientas que se indica en el esquema. Las máquinas llevarán montado el sistema operativo Debian, sin entorno gráfico, además la máquina Vigila tendrá instalado pfSense. Además las otras dos máquinas se le instalará Webmin, un panel de control para administrar el servidor vía web. A continuación adjunto descripción más detallada de las máquinas que se configurarán:

Descripción máquinas de la red interna

vigila.proyectint.org Dispondrá de tres interfaces de red, una para la red interna y otra para la conexión a Internet. Se

implementará mediante una máquina virtual con pfSense. Contendrá los siguientes servicios:

Firewall Servidor VPN Servidor DNS

aplica.proyectint.org Ubicado en la red interna, se implentará mediante una máquina virtual Debian y contendrá los siguientes

servicios:

Servidor Web Servidor de correo Aplicación de monitorización con Nagios Aplicativo web de gestión

datos.proyectint.org Ubicado en la red interna, implementado mediante una máquina virtual Debian, tendrá el cometido de

almacenar tanto las copias de seguridad realizas a los clientes, mediante un servidor FTP, como una Base de Datos. También se encargará de dar el servicio LDAP.

Descripción máquinas de la red cliente

clientex.proyectint.org Ubicado en la red del cliente, tendrá el

cometido de realizar las copias de seguridad de los distintos equipos contratados y tenerlos disponible para su copia desde la red de tu empresa. Deberá tener un directorio “copias” que contendrá tantos subdirectorios como máquinas contratadas exista, y dentro de estas estará el archivo resultante de la realización de la copia de seguridad a la máquina en cuestión (maquina.tar.gz). Será configurado como un cliente VPN.

Page 5: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 5

Configuración del escenario

Para la realizar la configuración del escenario se utilizaran máquinas virtuales, en concreto se usará el software VirtualBox. Las máquinas se importaran desde una OVA con una instalación limpia de Debian.

A continuación describiré todo el proceso de configuración de cada máquina para obtener el escenario propuesto.

vigila.proyectint.org Para empezar importamos la OVA que contiene una máquina limpia con Debian instalado- A

continuación vamos a la configuración de las interfaces y establecemos las siguientes configuraciones:

Page 6: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 6

Esta máquina llevara instalado pfSense, así que cuando se haga la instalación de éste, se configurarán las direcciones de red. (Ver apartado correspondiente).

aplica.proyectint.org Como anteriormente, importamos la OVA y configuraremos la interfaz de esta forma:

Para la configuración de la dirección de red modificamos el archivo correspondiente.

# nano /etc/network/interfaces

# service networking restart

datos.proyectint.org Como anteriormente, importamos la OVA y configuraremos la interfaz de esta forma:

Page 7: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 7

Para la configuración de la dirección de red modificamos el archivo correspondiente.

# nano /etc/network/interfaces

# service networking restart

cliente1.proyectint.org Como anteriormente, importamos la OVA y configuraremos la interfaz de esta forma:

Para la configuración de la dirección de red modificamos el archivo correspondiente.

# nano /etc/network/interfaces

# service networking restart

Page 8: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 8

Configuración máquina vigila.proyectint.org

Instalación pfSense Para la máquina vigila vamos a utilizar el software pfSense, que es una distribución personalizada de

FreeBSD adaptada para su uso como Firewall y Router (entre otras muchas caracteristicas). Para la instalación necesitamos la ISO, la podemos descargar de la siguiente dirección:

https://pfsense.org/download/index.html

Tras descargar dicha ISO la asignamos a una unidad de almacenamiento en la máquina vigila.

Posteriormente arrancamos desde dicho dispositivo y seleccionamos la opción 1. Tras unos segundos nos empezará a pedir que le indiquemos las interfaces de red, las configuraremos tal que así:

La siguiente la dejamos vacía.

Así quedará la configuración.

Una vez en el menú de pfSense elegimos la opción 2 para asignar las direcciones IP a las interfaces.

Page 9: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 9

La interfaz WAN la dejamos como está. Seguimos con la configuración de LAN

Y por último la interfaz DMZ (en estos momentos se llama OPT1).

Nos quedara así la configuración.

Page 10: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 10

Ya podemos entrar en el navegador y escribir la dirección de interfaz LAN de pfSense para entrar en la configuración (desde algún equipo de la subred INTERNA). También existe la posibilidad de habilitar la administración desde WAN, para ello hay que crear una regla en el cortafuegos.

A continuación vamos a modificar el nombre de la interfaz OPT1 por DMZ, para ello vamos a Interfaces OPT1 y modificamos lo siguiente.

Acabado esto ya tenemos instalado pfSense en la máquina vigila.

Configuración Servidor DNS Para configurar el servidor DNS en pfSense basta con ir a la pestaña Services DNS Forwarder y allí

introducir los hosts. La configuración que precede a este apartado la podemos dejar por defecto si queremos un funcionamiento estándar.

Posteriormente debemos ir a System General Setup para cambiar los servidores DNS, añadiremos como servidor la propia máquina.

Page 11: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 11

Comprobamos que funciona correctamente.

Configuración Servidor VPN Para conectar con la máquina cliente que se implantará en cada red de clientes usaremos una red privada

virtual o VPN. Mediante OpenVPN se deberá crear un servidor que permita la interconexión de nuestra red con las distintas sedes de los clientes. La autentificación se realizará mediante certificados digitales. Tan solo será necesario incorporar un equipo de la red de cada cliente, que será la que contendrá el archivo con la

Page 12: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 12

copia de seguridad que deberá copiarse a la máquina datos.proyectint.org. A cada cliente se le asignará una IP del rango 10.0.0.0/24. Además los clientes VPN no pueden verse entre ellos.

Para configurar el servidor VPN vamos a la aplicación web de pfsense. Lo primero que se realizará es la creación de certificados. Para ello vamos a System Cerficate Authority Manager Cas y desde aquí creamos la autoridad certificadora.

Ahora crearemos los certificados para los clientes, como antes se ha dicho, necesitamos uno para cada cliente, pero como solo vamos a usar un cliente de momento, solo generaremos uno. Para generarlo vamos a System Cerficate Authority Manager Certificates

Page 13: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 13

Para crear otros certificados para clientes distintos será de la misma forma, solo habrá que cambiar el nombre del cliente. También tenemos que crear el certificado para el servidor.

Ahora nos dirigimos a VPN OpenVPN Server y añadimos uno, le indicaremos esta configuración.

Page 14: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 14

Ahora tenemos que crear usuarios para que los clientes puedan identificarse a la hora de conectarse por OpenVPN. Tambien crearemos un grupo para englobar todos los usuarios de VPN. Vamos a System User Manager Groups.

Ahora vamos a System User Manager Users para crear los usuarios para los clientes, crearemos tantos usuarios como cliente tengamos, en este caso solo crearemos uno.

Page 15: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 15

Ahora necesitamos un instalar un paquete para facilitar la configuración del cliente, gracias a este paquete podemos exportar los archivos de configuración y pasarlo a la máquina cliente. Para ello vamos a System Packages y elegimos este paquete.

A continuación nos dirigimos a VPN OpenVPN Client Export y elegimos la siguiente opción.

Se nos descargará un ZIP, este archivo lo pasaremos a la máquina cliente, podemos usar por ejemplo el programa WinSCP. Para ver la configuración del cliente ver este apartado del documento (Instalación y configuración cliente VPN).

Page 16: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 16

Configuración Firewall El firewall deberá configurarse con las siguientes reglas:

Solo se aceptarán conexiones a los servicios dns a la máquina vigila.proyectint.org desde la dmz (10.10.1.0/24) y la red interna (10.10.2.0/24).

Permitir peticiones y respuestas dns desde vigila.proyectint.org hacia el servidor dns del ISP.

Redireccionar todas las conexiones http recibidas de la subred 10.0.0.0/24 al puerto 80 de vigila.proyectint.org hacia el puerto 8080 de la máquina aplica.proyectint.org.

Redireccionar todas las conexiones https recibidas de la subred 10.0.0.0/24 al puerto 443 de vigila.proyectint.org hacia el puerto 443 de la máquina aplica.proyectint.org.

Permitir el paso de conexiones smtp desde el equipo aplica.proyectint.org hacia Internet, con sus respectivas respuestas.

No permitir el paso de pings por el gateway desde la subred 10.0.0.0/24 hasta el resto: interna o dmz.

Permitir conexiones entre aplica.proyectint.org y datos.proyectint.org para el acceso a consultas a la base de datos y al ldap.

Redireccionar todas las conexiones ftp recibidas de la subred 10.0.0.0/24 a vigila.proyectint.org hacia los puertos que consideres necesarios de la máquina datos.proyectint.org

Page 17: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 17

Otras: o Necesito que pueda acceder a FTP desde aplica a datos para subir las copias desde el script.

o Acceso a Nagios y a App web desde LAN.

o Permitir rsync desde aplica a clientes VPN

o Ping para monitorizar con Nagios el estado de las máquinas.

Estos son los alias usados.

Page 18: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 18

Configuración máquina aplica.proyectint.org

Instalación de Webmin Webmin es una herramienta de configuración de sistemas

accesible vía web para OpenSolaris, GNU/Linux y otros sistemas Unix. Con él se pueden configurar aspectos internos de muchos sistemas operativos, como usuarios, cuotas de espacio, servicios, archivos de configuración, apagado del equipo, etc…, así como modificar y controlar muchas aplicaciones y servicios, como el servidor web Apache, PHP, MySQL, DNS, FTP, Samba, DHCP, entre otros.

Con la instalación de esta herramienta podremos configurar fácilmente desde cualquier navegador los servicios que instalaremos.

Para ello tenemos que descargarnos el paquete de su web, podemos bajarnos el código fuente o un .deb. En mi caso me decanto por el .deb. Lo bajaré desde la máquina real y lo transferiré con el comando scp.

http://www.webmin.com/download.html

Una vez descargado el programa debemos transferirlo a la máquina aplica, para ello debemos tener instalado ssh en dicha máquina para utilizar scp desde la máquina cliente o desde la máquina real (si tenemos permitido estas conexiones en el firewall). Lo primero que vamos a comprobar es que después de las configuraciones del cortafuegos de la máquina vigila, tenemos internet en la máquina aplica. Además debemos establecer el nameserver para usar el servidor DNS de la máquina vigila.

# nano /etc/resolv.conf

# service networking restart

$ ping vigila

$ ping 8.8.8.8

# apt-get install ssh

Page 19: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 19

$ scp webmin.deb [email protected]

Antes tenemos que instalar unas dependencias que necesita webmin. Son las siguientes.

# apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions

# dpkg –i webmin.deb

Ya podemos accede en el navegador a Webmin.

https://10.10.1.2:10000

Instalación y configuración servidor web A continuación vamos a instalar un servidor web en nuestra máquina aplica, en concreto instalaré

apache2. Para instalarlo usamos:

# apt-get install apache2

Ahora comprobamos que la instalación ha sido satisfactoria observando que existen procesos apache2, hay que resaltar que apache no solo tiene un proceso como los servicios anteriormente vistos, sino que posee varios pares de ellos, dependiendo si su MPM es Worker o Prefork (El modo Worker trabaja con hilos, esto hace que tenga menos procesos que si fuese modo Prefork, que por cada petición crea un proceso).

# ps aux | egrep apache2

Además también comprobaremos que el puerto 80 está a la escucha.

# netstat –natup | egrep apache2

Page 20: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 20

Otra comprobación que podemos hacer es poner la dirección IP del servidor en un navegador, si apache2 está correcto nos mostrara lo siguiente.

Una vez instalado el servidor web, procedemos a configurarlo para que cumpla con el enunciado.

Para configurar apache2 podemos optar por hacerlo mediante Webmin, si entramos en este, nos vamos al módulo de Servidor Web Apache veremos los virtual hosts activos.

Ahora vamos a crear los dos sitios que nos pide el enunciado. Primero el que escucha por el puerto 8080. Luego el 443.

Para el siguiente sitio tenemos que activar el modulo ssl de apache, para ellos vamos al ámbito global. Y activamos el módulo siguiente.

Page 21: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 21

A continuación generaremos un certificado que usaremos posteriormente en la configuración SSL.

# apt-get install openssl

# openssl req –new –x509 –days 365 –nodes –out httpd.pem –keyout httpd.key

Ahora tenemos que agregar estos puertos al archivo ports.conf, en Webmin nos vamos al ámbito global y le damos a Redes y Direcciones.

Page 22: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 22

A continuación le damos a Reiniciar Apache.

Ya tan solo nos queda comprobar que está a la escucha y además crear unos documentos html de prueba y entrar en los sitios en el navegador.

# netstat –natup | egrep 8080

# netstat –natup | egrep 433

Podemos ver que gracias al servidor DNS que creamos anteriormente podemos usar el nombre de la máquina en vez de la dirección IP.

Page 23: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 23

Para servir la aplicación web que posteriormente se va desarrollar vamos a necesitar el interprete PHP. PHP (Hypertext Preprocessor) es un lenguaje de programación diseñado para producir sitios web dinámicos, es utilizado en aplicaciones del lado del servido. A continuación vamos a instalar PHP5, el módulo de Apache para PHP5 y la librería para la conexión con MySQL.

# apt-get install php5 libapache2-mod-php5 php5-mysql

# service apache2 restart

Instalación y configuración servidor de correo Para mandar futuras notificaciones (por ejemplo con Nagios) necesitamos un servidor de correo instalado

y configurado. Como servidor de correo en la máquina aplica usaremos postfix, que es un servidor de correo de software libre, y cómo solo hay que dar soporte para correo saliente, no hará falta instalar ningún software para correo entrante (protocolos POP3 e IMAP). La configuración que se establecerá será para que funciones de manera segura.

# apt-get install postfix

Durante la instalación de postfix nos pedirá una serie de datos, son estos.

Page 24: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 24

Una vez haya terminado la instalación probaremos el servicio de diversas formas.

# ps aux | egrep postfix

# netstat –natup | egrep 25

Page 25: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 25

telnet 127.0.0.1 25

Para configurar el servicio de correo saliente tendremos que modificar dos archivo de configuración de Postfix, en concreto los siguientes. (Modificamos lo que aparece resaltado en amarillo).

# nano /etc/postfix/main.cf

# nano /etc/postfix/master.cf

Page 26: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 26

# service postfix restart

A continuación comprobamos que el puerto está a la escucha y comprobamos su funcionamiento.

# netstat –natup | egrep 465

Añadimos un usuario para los correos e intentamos enviar un correo.

# adduser admin

# su admin

$ mail –s correo_de_prueba [email protected]

He usado Yopmail porque al enviar a Gmail, Google bloquea el correo porque considera que es SPAM (lo mismo pasa con Outlook.com). Aquí está la captura de la comprobación. (apenas se ve la dirección [email protected] porque se solapa).

Page 27: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 27

Instalación y configuración de Nagios Nagios es un sistema de monitorización de redes de código abierto ampliamente utilizado, que vigila los

equipos y servicios que se configuren, generando avisos, que pueden ser recibidas por los responsables correspondientes mediante correo electrónico y mensajes SMS, alertando cuando el comportamiento de los mismos no sea el deseado. Entre sus características principales figuran la monitorización de servicios de red (SMTP, POP3, HTTP, SSH, BBDD...), la monitorización de los recursos de sistemas hardware de los equipos de la red (carga del procesador, uso de los discos, memoria, estado de los puertos...). Funciona independientemente de sistemas operativos instalados en los equipos.

Para usar Nagios, necesitamos una máquina que cuente con un servidor web instalado previamente y además de soporte para PHP. En este caso, la máquina aplica ya cuenta con esto. Lo instalamos con el siguiente comando.

# apt-get install nagios3

Durante la instalación de Nagios nos aparecerá una ventana pidiendo que introduzcamos una contraseña. Esta es importante, ya que será la que usemos para entrar en la administración vía web.

Page 28: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 28

Una vez acabado el proceso, para verificar la instalación usamos el siguiente comando para comprobar que Nagios3 se ha instalado.

$ nagios3 –V

La configuración de Nagios que debemos establecer para la correcta monitorización de los servicios y demás se reparte en varios archivos (aunque podemos organizarlo como nos parezca mejor, no es obligatorio hacerlo como propongo a continuación.). El directorio donde se encuentra estos archivos es /etc/nagios3/conf.d/.

$ cd /etc/nagios3/conf.d/

# nano equipos.cfg

Page 29: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 29

# nano servicios.cfg

Page 30: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 30

El plugin necesario para monitorizar MySQL (check_mysql) viene integrado en Nagios aunque necesita alguna configuración para su uso. Lo primero es crear un usuario con privilegios mínimos en nuestro servidor de MySQL y añadimos lo siguiente.

# nano commands.cfg

# nano grupos.cfg

Page 31: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 31

Ahora vamos a configurar las notificaciones.

# nano contactos.cfg

# nano nagios.cfg

Page 32: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 32

# service nagios3 restart

Para la monitorización de espacio en disco y demás cosas del sistema en otras máquinas remotas, necesitamos otro paquete, lo instalamos con:

# apt-get install nagios-nrpe-server

Además tendremos que configurar el siguiente archivo y establecer la IP del servidor Nagios.

# nano /etc/nagios/nrpe.cfg

Para instalarlo en la máquina vigila podemos ir al área de instalación de paquetes y buscar el siguiente.

Page 33: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 33

Para configurarlo vamos a Services NRPEv2.

Accedemos vía web a la aplicación.

Page 34: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 34

Page 35: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 35

Aplicación web de gestión Con el servicio web de esta máquina, desde el sitio HTTPS (el que está a la escucha por el puerto 443),

ofreceremos una aplicación web de gestión tanto para clientes como para administradores, según el rol que tenga el usuario que se loguee dispondrá de unas opciones u otras. Si es cliente, podrá consultar las copias de seguridad realizadas de sus máquinas. Si es un administrador el que se loguea dispondrá de más opciones, podrá añadir en la base de datos y consultar clientes, máquinas y usuarios para acceder a la aplicación almacenados en ésta, además de poder ordenar copias de seguridad manualmente y consultar las copias realizadas.

La aplicación será desarrollada en PHP. A continuación voy a explicar las diferentes ventanas y opciones. El código de la aplicación lo adjunto en el anexo. Estructura de la aplicación.

La página de inicio de la aplicación es la siguiente, nos permite loguearnos.

Page 36: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 36

Los datos introducidos en este formulario se dirigen a login.php. Existe tres distintas redirecciones, si los datos de acceso son erróneos la pantalla es la siguiente.

Si nuestro usuario existe pero no tenemos ningún rol asignado nos aparecerá la siguiente.

Si nuestro usuario introducido es un cliente, dos mostrará las copias de seguridad realizadas a dicho cliente.

Page 37: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 37

Si somos un administrador nos mostrara las posibles opciones que tenemos disponible.

Estas son las pantallas de las diferentes opciones.

Page 38: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 38

Page 39: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 39

Page 40: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 40

Page 41: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 41

Page 42: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 42

Copias de seguridad automática Para realizar las copias de seguridad automáticas de los diferentes directorios que tenemos sincronizados

en la máquina clienteX, tendremos un script Perl que será el encargado de realizar estas copias de seguridad, insertar en la BDD los datos de dicha copia y por ultimo subirlas a la carpeta del cliente en el servidor FTP.

Como ya se ha dicho antes, la máquina clienteX tendrá un directorio Copias en el cual se almacenarán los archivos de las máquinas de clientes (ver apartado Copias de Seguridad en clienteX). Con el script Perl (su nombre será bk.pl) haremos una llamada al sistema para ejecutar un Shell Script (bk.sh) que será el que usará el comando rsync para copiarnos el directorio de sincronización de la máquina deseada y empaquetarlo, luego continuará el script bk.pl, tomará los datos que le ha dejado el Shell Script y realizaremos una conexión a la BDD para insertar los datos de la copia y la subida al servidor FTP. Para comenzar necesitamos tener instalado rsync en ambas máquinas.

# apt-get install rsync

Tambien necesitamos algunas librerías para Perl, en concreto una para MySQL y otra para FTP. Lo instalamos usando cpan.

# cpan –i DBI

# cpan –i Net::SFTP::Foreign

Este es el Shell script que usaremos.

#! /bin/bash

# Ejecutar bash bk.sh ip_maquina cod_maquina cod_cliente

DATE=$(date "+%d%h%Y%H%M")

TO="/root/bk/$3/$2/rsync"

FROM="root@$1:/root/copias/$2/"

if test ! -d /root/bk/$3

then

Page 43: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 43

mkdir /root/bk/$3

fi

if test ! -d /root/bk/$3/$2

then

mkdir /root/bk/$3/$2

fi

if test ! -d /root/bk/$3/$2/rsync

then

mkdir /root/bk/$3/$2/rsync

fi

if rsync --delete -avb $FROM $TO

then

cd /root/bk/$3/$2/rsync/

PAQ="BACKUP-$2-$DATE.tar"

tar cf ../$PAQ *

echo "OK" > /root/temp

echo $PAQ >> /root/temp

else

echo "no" > /root/temp

fi

Y este es el script Perl.

#!/usr/bin/perl

# Ejecutar perl bk.pl ip_maquina cod_cliente cod_maquina tipo_copia [auto o

manual] usuario_ftp pass_ftp

use DBI;

use Net::SFTP::Foreign;

#Datos de la conexión

$db="db_proyectint";

$host="datos.proyectint.org";

$port="3306";

$user="user_proyectint";

$pass="12Proyectint34*";

$connectionInfo="DBI:mysql:database=$db;$host:$port";

# Realizamos la conexión a la base de datos

$db = DBI->connect($connectionInfo,$user,$pass);

# Cogemos fecha desde MySQL

$qu_date="select sysdate()";

$sql_date = $db->prepare($qu_date);

$sql_date->execute();

$date = $sql_date->fetchrow_array();

# Inserto primeros datos de la copia

$query="insert into copias

(cod_cliente,cod_maquina,fecha_ini,tipo_copia,correcta) values

('@ARGV[1]','@ARGV[2]','$date','@ARGV[3]','no')";

$sql = $db->prepare($query);

$sql->execute();

# Llamada al script bash SOLUCIONAR!!

`bash /root/bk.sh @ARGV[0] @ARGV[2] @ARGV[1]`;

Page 44: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 44

$n=0;

open (re,"/root/temp") or die "$!n";

while (<re>){

chomp;

@result[$n]=$_;

$n++;

}

close re;

# Actualizo datos de copia en BDD

if (@result[0] eq "OK"){

$up="update copias set fecha_fin = sysdate(), correcta= 'si', nombre_fichero

= '@result[1]' where fecha_ini = '$date'";

# Subir a FTP el paquete

$sftp = Net::SFTP::Foreign->new("datos.proyectint.org",user => "@ARGV[4]",

password => "@ARGV[5]") or die("No se pudo conectar al servidor: $!");

$sftp->put('/root/bk/'.@ARGV[1].'/'.@ARGV[2].'/'.@result[1]) or die "$!n";

# Elimino paquete

`rm /root/bk/@ARGV[1]/@ARGV[2]/@result[1]`;

print "Copia de seguridad realizada con exito\n";

}else{

$up="update copias set fecha_fin = sysdate() where fecha_ini = '&date'";

print "Copia de seguridad no realizada\n";

}

$sql2 = $db->prepare($up);

$sql2->execute();

$sql_date->finish();

$sql2->finish();

$db->disconnect;

`rm /root/temp`;

Para que las copias se realicen de manera automática, además de crear un tarea programada en el cron, debemos crear una relación de confianza entre las máquinas para que al ejecutar el script no nos pida la contraseña del usuario. Para ello debemos realizar estos pasos en la máquina aplica.

# ssh-keygen -b 4096 -t rsa

Page 45: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 45

# ssh-copy-id [email protected]

# ssh [email protected]

Hacemos lo mismo para poder conectarnos a cliente1 desde aplica.

# ssh-copy-id [email protected]

Page 46: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 46

# ssh [email protected]

# perl bk.pl 10.0.0.6 A01 A01 auto cliente1 cliente1

Ahora comprobamos si la copia se ha subido a FTP y se ha insertado la información en la BDD.

Ahora para que el proceso de las copias es totalmente automático, vamos a añadirlo a cron para que se haga diariamente los backup.

# crontab –e

Page 47: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 47

Como vemos en la imagen, añadiremos tantas tareas como máquinas de clientes tengamos, cada una con sus datos correspondientes.

Copias de seguridad manual Como antes vimos, podemos ordenar una copia de seguridad manualmente desde la aplicación web si

estamos logueados como administrador. Para solucionar esto vamos a recurrir a un script CGI escrito en Perl, que se ponga en contacto con un servicio que crearemos, se llamará copias y estará escuchando por el puerto 6666.

Para crear este servicio usaremos el super servicio xinetd. Lo instalamos.

# apt-get install xinetd

A continuación vamos a añadir nuestro nuevo servicio en el siguiente archivo.

# nano /etc/services

Ahora creamos el archivo para la definición del servicio.

# nano /etc/xinetd.d/copias

Lo siguiente es desarrollar el script del servidor y lo colocaremos en /root/copiam.pl. Lo que queremos que este servidor haga es ejecutar el script que realiza las copias de seguridad bk.pl con los argumentos que necesita para su correcta ejecución (que los daremos mediante la aplicación web).

#!/usr/bin/perl

Page 48: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 48

$com = <STDIN>;

exec “perl /root/bk.pl ".$com;

# $com debe de contener: ip_maquina cod_cliente cod_maquina manual usuario_ftp

pass_ftp

Por último, reiniciamos el super servicio xinetd y comprobamos que el puerto está a la escucha.

# service xinetd restart

# netstat –natup | egrep 6666

Para conectar con este servidor desde la aplicación web se usará socket, desde un script PHP, se creará el socket, se establecerá la conexión con el servidor y se le transmitirá los datos necesarios para la copia de seguridad. El código del script se encuentra en el anexo de este documento.

Configuración máquina datos.proyectint.org

Antes que nada debemos establecer el nameserver para usar el servidor DNS de la máquina vigila.

# nano /etc/resolv.conf

# service networking restart

$ ping vigila

Instalación de Webmin (Ver instalación en aplica.proyectint.org).

Page 49: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 49

Instalación servidor de Bases de Datos Según se nos define en el enunciado del proyecto, necesitamos registrar la información relativa a los

clientes, a las diferentes máquinas que dispone cada cliente e información referente a las copias de seguridad realizadas para ese cliente. Para dar solución a estas necesidades se va a llevar a cabo la implantación de un servidor de Bases de Datos en la máquina aplica. Como servidor de bases de datos vamos a usar MySQL.

Para instalar este servicio usamos el siguiente comando (instalaremos tanto el servidor como el cliente).

# apt-get install mysql-client mysql-server

En el transcurso de la instalación nos pedirá que introduzcamos una clave para root.

Una vez acabada la instalación comprobamos que el puerto esta a la escucha.

$ netstat -natup | egrep 3306

También podemos iniciar con el cliente que instalamos anteriormente.

$ mysql -u root –p

Page 50: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 50

Para administrar la base de datos con un entorno amigable, vamos a instalar phpMyAdmin, que es una herramienta escrita en PHP que nos permite realizar la administración de MySQL a través de páginas web, utilizando un navegador.

# apt-get install phpmyadmin

Mientras la instalación nos pedirá que elijamos servidor web.

El programa de instalación crea un enlace simbólico en el DocumentRoot del servidor web para que la aplicación pueda ser accesible desde la url, sino lo crea debemso hacerlo nosotros.

# nano /etc/apache2/sites-enabled/000-default

Page 51: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 51

# service apache2 restart

http://datos.proyectint.org/phpmyadmin/index.php.

Una vez que ya tenemos la herramienta para administrar MySQL vamos a comenzar a crear las bases de datos necesarias y las tablas. Primero tenemos que tener claro que necesitamos, según se nos define en el enunciado del proyecto, necesitamos registrar la información relativa a los clientes, a las diferentes máquinas que dispone cada cliente, e información relativa a las copias de seguridad realizadas para ese cliente. Lo que necesitamos almacenar de cada uno es lo siguiente.

Clientes

Guardaremos nombre del cliente, dirección, persona o personas de contacto, teléfonos, correos electrónicos, notas sobre el cliente.

Máquinas

Almacenaremos información relativa a las máquinas y los servicios que les proveemos a los clientes, datos técnicos sobre la máquina como su capacidad de disco total, su ubicación física, notas sobre la máquina, etc…

Copias de seguridad

Page 52: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 52

Respecto a las copias de seguridad realizadas mantendremos la información sobre la fecha y hora en la que se inició dicha copia, si la copia se efectuó correctamente o no, la fecha y hora en la que finalizó el proceso de copia, el nombre del archivo o archivos que componen la copia si es una copia automática o lanzada de manera manual, etc…

Este es el modelo relacional.

Aparte necesitamos una tabla para almacenar los usuarios y contraseñas para acceder a la aplicación web, para ello crearemos una tabla en la base de datos, que a su vez relacione el código de cliente con el usuario para futuras consultas con la aplicación web.

A continuación procedemos con la creación mediante phpMyAdmin. Este es el código que se usó para crear la base de datos y el usuario que accederá a ella y sus privilegios.

CREATE DATABASE `db_proyectint`;

CREATE USER 'user_proyectint'@'localhost' IDENTIFIED BY '12Proyectint34*';

GRANT ALL PRIVILEGES ON `db_proyectint` . * TO 'user_proyectint'@'%';

Para la creación de las tablas usaremos el siguiente código.

CREATE TABLE IF NOT EXISTS `clientes` (

`cod_cliente` varchar(3) NOT NULL,

`nombre_cliente` varchar(50),

`direccion` varchar(30),

`persona_contacto` varchar(30),

`telefono` int(9),

`email` varchar(20),

`notas` varchar(50),

CONSTRAINT `clientes_pk` PRIMARY KEY (`cod_cliente`)

);

CREATE TABLE IF NOT EXISTS `maquinas` (

`cod_maquina` varchar(3) NOT NULL,

Page 53: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 53

`servicios` varchar(30),

`ubicacion` varchar(20),

`capa_disco` varchar(10),

`notas` varchar(50),

CONSTRAINT `maquinas_pk` PRIMARY KEY (`cod_maquina`)

);

CREATE TABLE IF NOT EXISTS `copias` (

`cod_cliente` varchar(3) NOT NULL,

`cod_maquina` varchar(3) NOT NULL,

`fecha_ini` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

`fecha_fin` datetime DEFAULT NULL,

`tipo_copia` ENUM('auto','manual') NOT NULL,

`correcta` ENUM('si','no') NOT NULL,

`nombre_fichero` varchar(50) NOT NULL,

CONSTRAINT `copias_pk` PRIMARY KEY (`cod_cliente`,`cod_maquina`,`fecha_ini`),

CONSTRAINT `cod_cliente_fk` FOREIGN KEY (`cod_cliente`) REFERENCES `clientes`

(`cod_cliente`),

CONSTRAINT `cod_maquina_fk` FOREIGN KEY (`cod_maquina`) REFERENCES `maquinas`

(`cod_maquina`)

);

CREATE TABLE IF NOT EXISTS `usuarios` (

`nombre` varchar(10) NOT NULL,

`pass` varchar(50) NOT NULL,

`rol` enum('admin','cliente') NOT NULL,

`cod_cliente` varchar(3),

CONSTRAINT `usuario_pk` PRIMARY KEY (`nombre`),

CONSTRAINT `usu_cod_cliente_fk` FOREIGN KEY (`cod_cliente`) REFERENCES

`clientes` (`cod_cliente`)

);

Además insertamos un usuario admininistrador para que pueda loguearse en la aplicación web e introducir a través de ésta los diferentes clientes, máquinas y usuarios que existan.

INSERT INTO usuarios VALUES ('admin',md5('admin'),'admin',null);

Por último haremos una modificación en el servidor MySQL para que podamos conectar desde la

aplicación web. Para ello nos dirigimos a la configuración del servidor MySQL y cambiamos la opción resaltada en la imagen.

Con todo esto ya tendemos configurado y funcionando el servicio de BBDD.

Page 54: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 54

Instalación y configuración de servidor FTP Como servidor FTP usaremos VSFTPD (Very Secure FTP Daemon), ya que es la mejor opción que existe,

comparado con otros servidores FTP, este es más eficiente y seguro. Para instalar este servidor FTP en la máquina datos, usamos:

# apt-get install vsftpd

Ahora comprobamos que la instalación ha sido satisfactoria observando que se ha creado un proceso de éste y que el puerto 21 está a la escucha.

# ps aux | egrep ftp

# netstat –natup | egrep ftp

También podemos probar si está funcionando el servidor FTP utilizando cualquier cliente, por ejemplo un navegador, solo tenemos que poner en la barra de direcciones la IP del servidor y nos mostrará lo siguiente:

ftp://datos.proyectint.org

Para configurar este servicio podemos usar la herramienta que instalamos antes. Pero si buscamos VSFTPD entre los módulos de Webmin puede ser que no se encuentre por ningún lado, esto no quiere decir que no se pueda administrar desde aquí, sino simplemente esto indica que dicho módulo no viene instalado por defecto en Webmin.

Para instalar el módulo VSFTPD nos dirigimos a la web de Webmin: http://www.webmin.com y nos dirigimos a la opción Third-Party Modules.

Page 55: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 55

Y en el apartado Find modules or themes matching, indicamos el nombre del módulo que necesitamos instalar, en nuestro caso es VSFTP y buscamos.

Lo descargamos y Una vez acabado procedemos a su instalación. Para ello vamos a Webmin > Configuración de Webmin > Módulos de Webmin y seleccionamos Instalar.

Page 56: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 56

Una vez acabado el proceso de instalación ya podemos ir a Servidores y configurar VSFTPD.

En el apartado Generally podemos cambiar la frase de bienvenida.

Un problema que acarrea el uso de FTP es que se trata de un protocolo que no es seguro, la comunicación se hace en texto plano, sin ningún tipo de cifrado (tanto los datos para loguearse, como las transferencias). Para solucionar este problema haremos una configuración segura de FTP usando TLS, para ello necesitamos generar un seguro. Para ello podemos hacerlo desde Webmin o bien desde la misma máquina Debian usando openssl. En Webmin sería así.

Page 57: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 57

Si pinchamos en el enlace anterior, nos llevará a la siguiente pantalla, que debemos de configurar así.

Page 58: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 58

En cuanto a la configuración de los usuarios, se pretende tener tanto usuarios como cliente tengamos, que solo puedan acceder a su directorio y con permisos de lectura solamente, además también tendremos un usuario administrador que pueda acceder a todo y con control total (podemos usar a root).

Para que root pueda conectarse por FTP debemos editar el siguiente archivo y eliminar el nombre de este.

# nano /etc/ftpusers

Además debemos de descomentar las siguientes opciones en el archivo de configuración de VSFTPD para desenjaular a root.

Ahora tenemos que crear el fichero con los nombres de los usuarios que no queremos enjaular.

# nano /etc/vsftpd.list

A continuación vamos a quitar la posibilidad de acceder mediante anónimo.

Page 59: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 59

Para la configuración de los usuarios indicamos la siguiente configuración. Para agregar a los usuarios clientes basta con añadir usuarios a la máquina Debían (podemos agregarlo mediante Webmin).

Reiniciamos el servidor mediante el siguiente botón y probamos a conectarnos en modo seguro y nos

saldrá la pantalla del certificado.

Page 60: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 60

Aceptamos y estaremos conectados.

Page 61: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 61

Ya solo falta crear tantos usuarios como cliente tengamos, y en cada directorio crear tantas carpetas como máquinas vayamos a ofrecer el servicio de backups. Si probamos a conectar con el usuario root:

Page 62: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 62

Instalación y configuración de LDAP A continuación realizaremos la instalación de un servidor con LDAP donde puedan guardarse las

credenciales de nuestros clientes. LDAP (Protocolo Ligero de Acceso a Directorios) es un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para acceder a información guardada centralmente a través de la red, en él se puede guardar información referente a personas o entidades.

Concretamente usaremos la implementación OpenLDAP. Se trata de una implementación libre del protocolo que soporta múltiples esquemas por lo que puede utilizarse para conectarse a cualquier otro LDAP.

El servidor OpenLDAP está disponible en el paquete slapd, así que instalaremos éste, también vamos instalar el paquete ldap-utils que contiene utilidades adicionales. Usamos el siguiente comando.

# apt-get install slap ldap-utils

Durante la instalación nos pedirá la contraseña para el administrador del directorio LDAP.

Una vez acabada la instalación debemos configurar nuestro servidor LPAD y para ello introduciremos el comando siguiente y vamos introduciendo lo que nos pide.

# dpkg-reconfigure slapd

Page 63: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 63

Page 64: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 64

Page 65: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 65

Como vemos en la pantalla anterior todo ha ido bien. Ahora es importante editar el fichero de configuracion de slapd y establecer como dominio el que acabamos de crear. Para ello, editamos el fichero /etc/ldap/ldap.conf.

# nano /etc/ldap/ldap.conf

Page 66: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 66

# service slapd restart

Una vez que ya tenemos instalado, configurado y funcionando el servidor LDAP vamos a comprobar que herramientas graficas podemos usar para la gestión del servidor y de clientes. Como tenemos instalado Webmin en la maquina, no tenemos porque instalar otra aplicación web para configurar LDAP y gestionar usuarios y grupos. Si no tuviese instalado Webmin, me decantaría phplpadadmin como aplicación web para la gestion de LDAP.

Veamos como es el menú que nos ofrece Webmin para la configuración del servidor y cliente.

Para poder administrar LDAP por Webmin hay que hacer algunos cambios en la configuración, son los siguientes.

Page 67: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 67

Una vez aplicada la configuración, podemos acceder al apartado donde es posible crear los usuarios y los grupos.

Pues una vez acabado este proceso, ya tenemos correctamente instalado y configurado el servidor LDAP, listo para ser usado. Vamos a crear un usuario para probar el funcionamiento.

Page 68: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 68

Configuración máquina clientex.proyectint.org

Instalación y configuración cliente VPN Lo primero es instalar openvpn en esta máquina. Para ello ejecutamos lo siguiente.

# apt-get install openvpn

Además necesitamos tener SSH para conectarnos y transferir el paquete de configuración de cliente.

# apt-get install ssh

Una vez que ya hemos pasado a esta máquina el paquete generado anteriormente por el servidor VPN podemos seguir con la configuración.

Descomprimimos el paquete y lo pasamos al directorio de openvpn (necesitamos una herramienta para descomprimir paquetes ZIP).

# apt-get install zip

# unzip vigila...zip

# mv vigila-ud-1194-cliente1/* /etc/openvpn

# mv vigila-udp-1194-cliente1.ovpn vigila-udp-1194-cliente1.conf

En el siguiente archivo comentamos las siguientes líneas.

# nano vigila-udp-1194-cliente1.conf

Page 69: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 69

# service openvpn restart

# ifconfig

# ping 10.0.0.1

# ping 10.10.1.1

Page 70: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 70

Copias de seguridad Para realizar las copias de seguridad automáticas a los diferentes equipos de los clientes, en la máquina

clienteX que instalaremos en la red de estos, tendremos un Shell Script que será el encargado de realizar la sincronización de directorios usando el rsync. Los directorios se almacenarán de la siguiente forma.

Cuando se contrate un servicio de copias de seguridad con un cliente se acordará el número de máquinas a las que se le prestará el servicio. Para que las copias se realicen de manera automática, además de crear un tarea programada en el cron, debemos crear una relación de confianza entre las máquinas para que al ejecutar el script no nos pida la contraseña del usuario. Para ello debemos realizar estos pasos para cada una de las máquinas a la que se le prestará el servicio de copias.

Para empezar, vamos a suponer q en la empresa tienen la red 192.168.2.0/24, tenemos que establecer la conexión con las máquinas de la empresa cliente, nuestra máquina cliente1 tendrá una nueva interfaz donde le asignaremos una ip de la subred que haya en dicha empresa, en este caso la ip de nuestra máquina cliente1 es la 192.168.2.10.

A continuación vamos a crear la clave en la máquina cliente1 (como anteriormente hicimos con aplica).

# ssh-keygen -t dsa

Ahora vamos a transferirla a las diferentes máquinas de la red a la que vayamos a prestar el servicio.

# ssh-copy-id [email protected]

A continuación nos conectamos a la máquina del cliente vemos que no nos pide contraseña.

# ssh [email protected]

Esto lo tenemos que hacer para cada máquina del cliente. Una vez hecho ya podremos conectarnos sin tener que introducir contraseña.

Para la copias de las máquinas de clientes desarrollaremos un script que realice la sincronización de la carpeta de la máquina cliente1 con el contenido de la respectiva máquina con el comando rsync, el cual hay que instalar en ambas máquinas.

# apt-get install rsync

#! /bin/bash

Page 71: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 71

# Ejecutar bk.sh ip_maquina codigo_maquina

DATE=$(date "+%d%h%Y%H%M")

TO="/root/copias/$2"

FROM="root@$1:/"

if rsync --delete -avb $FROM $TO

then

echo "$DATE - Sincronización realizada" >> /root/copias/log

else

echo "$DATE - Sincronización erronea" >> /root/copias/log

fi

Con este script tendremos los directorios actualizados, las copias de seguridad se realizarán de estas carpetas desde los equipos de nuestra empresa. Para que el proceso de sincronización sea automático crearemos una serie de tareas (una por cada máquina) al cron. En el ejemplo siguiente valdrá para tener sincronizadas tres máquinas.

# crontab -e

Page 72: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 72

Anexos

Bibliografía

http://lahackcueva.blogspot.com.es/

http://www.ite.educacion.es/formacion/materiales/

http://es.wikipedia.org/

http://perldoc.perl.org/

http://search.cpan.org/

http://usuariodebian.blogspot.com.es/

http://www.webmin.com/

http://www.php.net//manual/es/

http://www.desarrolloweb.com

http://stackoverflow.com

http://web.mit.edu

Page 73: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 73

Código de la aplicación web La aplicación web tiene la siguiente estructura.

Index.html

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="style.css"/>

<title>Login-proyectint.org</title>

</head>

<body>

<div id="envoltura">

<div id="contenedor" class="curva">

<div id="cabecera" class="tac">

proyectint.org

</div>

<div id="cuerpo">

<form id="form-login" action="login.php" method="post">

<p><label for="usuario">Usuario:</label></p>

<p class="mb10"><input name="usuario" type="text"

id="usuario"></p>

<p><label for="pass">Contraseña:</label></p>

<p class="mb10"><input name="pass" type="password" id="pass"></p>

<p><input name="submit" type="submit" id="submit" value="Entrar"

class="boton"></p>

</form>

</div>

<div id="pie">Aplicación Web de Gestión</div>

</div>

</body>

</html>

Page 74: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 74

Config_bd.php

<?php

// Configuración de la BDD que utilizará la aplicación web

$servidor_bd="10.10.2.2";

$nombre_bd="db_proyectint";

$usuario_bd="user_proyectint";

$pass_bd="12Proyectint34*";

$con = mysql_connect($servidor_bd,$usuario_bd,$pass_bd) or die (mysql_error());

mysql_select_db($nombre_bd,$con) or die (mysql_error());

return $con;

?>

Login.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="style.css"/>

<title> Login-proyectint.org </title>

</head>

<body>

<?php

session_start();

if(!empty($_POST['usuario'])) {

$con=require('config_bd.php');

$usu=$_POST["usuario"];

$pass=$_POST["pass"];

$res = mysql_query("select count(*) as ok,rol from usuarios where

nombre='$usu' and pass=md5('$pass')", $con) or die(mysql_error());

$row = mysql_fetch_array($res);

if($row["ok"] == 0) {?>

<h1> Usuario incorrecto </h1><br>

<form method="POST" action="index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form> <?php

}else{

$_SESSION["login_proy"]=$row["rol"];

setcookie("usuario",$usu);

if($row["rol"] == "admin"){

header("Location: admin/admin.php");

}elseif($row["rol"] == "cliente"){

header("Location: cliente/cliente.php");

}else{ ?>

<h1> Error. No tiene definido ning&uacute;n rol. P&oacute;ngase en

contacto con el Administrador. <h1>

<?php

}

}

mysql_close($con);

}else{?>

<h1> Usuario incorrecto </h1><br>

<form method="POST" action="index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form>

<?php } ?>

<div class="bottom"><p>Aplicación Web de Gestión - Proyectint.org</p></div>

</body>

</html>

Page 75: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 75

Add_cliente.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Añadir Cliente - proyectint.org </title>

</head>

<?php

session_start();

if (isset($_POST['cod_cli'])){?>

<body>

<h1>Añadir Cliente</h1><?php

$con=require('../config_bd.php');

$res = mysql_query("select count(*) as ok from clientes where

cod_cliente='{$_POST['cod_cli']}'", $con) or die(mysql_error());

$row = mysql_fetch_array($res);

if($row["ok"] == 0) {

$sql="INSERT INTO clientes

VALUES('{$_POST['cod_cli']}','{$_POST['nom_cli']}','{$_POST['dir']}','{$_POST['pe

rso']}','{$_POST['tel']}','{$_POST['email']}','{$_POST['notas']}')";

mysql_query($sql,$con) or die(mysql_error());?>

<p id="introd">Insertado correctamente.</p><?php

}else{?>

<p id="introd">El Código del Cliente introducido está ya en uso. Prueba

de nuevo.</p><?php

}?>

<form method="POST" action="add_cliente.php" align="center">

<input type="submit" value="Volver a Introducir" class="boton"/>

</form><br/>

<form method="POST" action="admin.php" align="center">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/><?php

mysql_close($con);

exit;

}

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {?>

<body>

<h1>Añadir Cliente</h1>

<p id="introd">Introduce los datos del nuevo cliente para añadir a la Base de

Datos de Clientes. El campo Código del Cliente es único.</p>

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/>

<div id="cuerpo">

<form id="form-login" method="post">

<p><label>Código del Cliente</label></p>

<p><input class="mb10" name="cod_cli" type="text"></p>

<p><label>Nombre del Cliente</label></p>

<p><input class="mb10" name="nom_cli" type="text"></p>

<p><label>Dirección</label></p>

<p><input class="mb10" name="dir" type="text"></p>

<p><label>Persona de Contacto</label></p>

<p><input class="mb10" name="perso" type="text"></p>

<p><label>Teléfono</label></p>

<p><input class="mb10" name="tel" type="tel"></p>

<p><label>Email</label></p>

Page 76: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 76

<p><input class="mb10" name="email" type="email"></p>

<p><label>Notas</label></p>

<p><textarea class="mb10" name="notas" rows="4"

cols="40"></textarea></p>

<p><input name="submit" type="submit" id="submit" value="Añadir"

class="boton"></p>

</form>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><!--div class="bottom">Aplicación Web de Gestión - Proyectint.org</div-->

</body>

</html>

Add_maquina.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Añadir Máquina - proyectint.org </title>

</head>

<?php

session_start();

if (isset($_POST['cod_maq'])){?>

<body>

<h1>Añadir Máquina</h1><?php

$con=require('../config_bd.php');

$res = mysql_query("select count(*) as ok from maquinas where

cod_maquina='{$_POST['cod_maq']}'", $con) or die(mysql_error());

$row = mysql_fetch_array($res);

if($row["ok"] == 0) {

$sql="INSERT INTO maquinas

VALUES('{$_POST['cod_maq']}','{$_POST['serv']}','{$_POST['ubic']}','{$_POST['capa

']}','{$_POST['notas']}')";

mysql_query($sql,$con) or die(mysql_error());?>

<p id="introd">Insertado correctamente.</p><?php

}else{?>

<p id="introd">El Código de la Máquina introducido está ya en uso. Prueba

de nuevo.</p><?php

}?>

<form method="POST" action="add_maquina.php" align="center">

<input type="submit" value="Volver a Introducir" class="boton"/>

</form><br/>

<form method="POST" action="admin.php" align="center">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/><?php

mysql_close($con);

exit;

}

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {?>

<body>

<h1>Añadir Máquina</h1>

<p id="introd">Introduce los datos de la nueva máquina para añadir a la Base

de Datos de Máquinas. El campo Código de la Máquina es obligatorio y único.

Page 77: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 77

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form> </p><br/>

<div id="cuerpo">

<form id="form-login" method="post">

<p><label>Código de la Máquina</label></p>

<p><input class="mb10" name="cod_maq" type="text"></p>

<p><label>Servicios</label></p>

<p><input class="mb10" name="serv" type="text"></p>

<p><label>Ubicación</label></p>

<p><input class="mb10" name="ubic" type="text"></p>

<p><label>Capacidad de Disco</label></p>

<p><input class="mb10" name="capa" type="text"></p>

<p><label>Notas</label></p>

<p><textarea class="mb10" name="notas" rows="4"

cols="40"></textarea></p>

<p><input name="submit" type="submit" id="submit" value="Añadir"

class="boton"></p>

</form>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Add_usuario.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Añadir Usuario - proyectint.org </title>

</head>

<?php

session_start();

if (isset($_POST['usu'])){?>

<body>

<h1>Añadir Usuario </h1><?php

$con=require('../config_bd.php');

$res = mysql_query("select count(*) as ok from usuarios where

nombre='{$_POST['usu']}'", $con) or die(mysql_error());

$row = mysql_fetch_array($res);

if($row["ok"] == 0) {

$sql="INSERT INTO usuarios VALUES

('{$_POST['usu']}',md5('{$_POST['pass']}'),'{$_POST['rol']}','{$_POST['cod_cli']}

')";

mysql_query($sql,$con) or die(mysql_error());?>

<p id="introd">Insertado correctamente.</p><?php

}else{?>

<p id="introd">El nombre de usuario introducido está ya en uso. Prueba de

nuevo.</p><?php

}?>

<form method="POST" action="add_usuario.php" align="center">

<input type="submit" value="Volver a Introducir" class="boton"/>

Page 78: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 78

</form><br/>

<form method="POST" action="admin.php" align="center">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/><?php

mysql_close($con);

exit;

}

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

$con=require('../config_bd.php');

$res = mysql_query("select cod_cliente from clientes", $con) or

die(mysql_error());

mysql_close($con);?>

<body>

<h1>Añadir Usuario</h1>

<p id="introd">Introduce los datos del nuevo usuario para dar credenciales de

acceso a la aplicación web. El campo Nombre es único

y el campo Código del Cliente debe de corresponder a uno existente si se está

añadiendo a un usuario de cliente, si es administrador selecciona 'Ninguno'.

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form> </p><br/>

<div id="cuerpo">

<form id="form-login" method="post">

<p><label for="usuario">Usuario</label></p>

<p><input class="mb10" name="usu" type="text"></p>

<p><label for="usuario">Contraseña</label></p>

<p><input class="mb10" name="pass" type="password"></p>

<p><label for="usuario">Código del Cliente</label></p>

<p><select class="mb10" name="cod_cli">

<option>Ninguno</option><?php

while($row = mysql_fetch_array($res)){?>

<option><?php echo $row['cod_cliente']?></option>;<?php

}?>

</select></p>

<p><label for="usuario">Rol</label></p>

<p><select class="mb10" name="rol">

<option value="admin">Administrador</option>

<option value="cliente" selected="selected">Cliente</option>

</select></p>

<p><input name="submit" type="submit" id="submit" value="Añadir"

class="boton"></p>

</form>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Admin.php

<!doctype html>

<html>

<head>

Page 79: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 79

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Admin - proyectint.org </title>

</head>

<body>

<?php

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

echo '<h1> Bienvenido a proyectint.org Administrador</h1>';

?>

<div id="botones">

<table align="center">

<tr>

<td><form method="POST" action="add_cliente.php">

<input type="submit" value="Añadir Cliente en Base de Datos"

class="boton"/>

</form></td>

<td><form method="POST" action="add_maquina.php">

<input type="submit" value="Añadir Máquina en Base de Datos"

class="boton"/>

</form></td>

<td><form method="POST" action="add_usuario.php">

<input type="submit" value="Añadir Usuario para Aplicación"

class="boton"/>

</form></td>

<td><form method="POST" action="cp_seg.php">

<input type="submit" value="Hacer Copia de Seguridad Manual"

class="boton"/>

</form></td>

</tr>

<tr></tr>

<tr>

<td><form method="POST" action="con_cliente.php">

<input type="submit" value="Consultar Clientes en Base de Datos"

class="boton"/>

</form></td>

<td><form method="POST" action="con_maquina.php">

<input type="submit" value="Consultar Máquinas en Base de Datos"

class="boton"/>

</form></td>

<td><form method="POST" action="con_usuario.php">

<input type="submit" value="Consultar Usuarios Existentes para

Aplicación" class="boton"/>

</form></td>

<td><form method="POST" action="con_copias.php">

<input type="submit" value="Consultar Copias de Seguridad"

class="boton"/>

</form></td>

<td><form method="POST" action="admin.php">

<input type="submit" value="Cerrar Sesión" name="exit"

class="boton"/>

</form></td>

</tr>

</table>

</div>

<?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form>

<?php }

Page 80: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 80

if(isset($_POST["exit"])) {

unset($_SESSION["login_proy"]);

header("Location: ../index.html");

}

?>

<br>

<div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Con_cliente.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Consultar Clientes - proyectint.org </title>

</head>

<?php

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

$con=require('../config_bd.php');

$res = mysql_query("select * from clientes", $con) or die(mysql_error());?>

<body>

<h1>Consultar Clientes</h1>

<p id="introd">Estos son todos los clientes que hay almacenados en la Base de

Datos.</p>

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/>

<div id="cuerpo">

<table border="2" bordercolor="black" align="center">

<tr bgcolor="#FA5050" align="center">

<td>Código del Cliente</td>

<td>Nombre del Cliente</td>

<td>Dirección</td>

<td>Persona de Contacto</td>

<td>Teléfono</td>

<td>Email</td>

<td>Notas</td>

</tr><?php

while($row = mysql_fetch_array($res)){?>

<tr bgcolor="#A0F894">

<td><?php echo $row['cod_cliente']?></td>

<td><?php echo $row['nombre_cliente']?></td>

<td><?php echo $row['direccion']?></td>

<td><?php echo $row['persona_contacto']?></td>

<td><?php echo $row['telefono']?></td>

<td><?php echo $row['email']?></td>

<td><?php echo $row['notas']?></td>

</tr><?php

} ?>

</table>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

Page 81: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 81

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Con_maquina.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Consultar Máquinas - proyectint.org </title>

</head>

<?php

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

$con=require('../config_bd.php');

$res = mysql_query("select * from maquinas", $con) or die(mysql_error());?>

<body>

<h1>Consultar Máquinas</h1>

<p id="introd">Estos son todas las máquinas que hay almacenadas en la Base de

Datos.</p>

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/>

<div id="cuerpo">

<table border="2" bordercolor="black" align="center">

<tr bgcolor="#FA5050" align="center">

<td>Código de la Máquina</td>

<td>Servicios</td>

<td>Ubicación</td>

<td>Capacidad de Disco</td>

<td>Notas</td>

</tr><?php

while($row = mysql_fetch_array($res)){?>

<tr bgcolor="#A0F894">

<td><?php echo $row['cod_maquina']?></td>

<td><?php echo $row['servicios']?></td>

<td><?php echo $row['ubicacion']?></td>

<td><?php echo $row['capa_disco']?></td>

<td><?php echo $row['notas']?></td>

</tr><?php

} ?>

</table>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Con_copia.php

<!doctype html>

Page 82: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 82

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Consultar Copias - proyectint.org </title>

</head>

<?php

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

$con=require('../config_bd.php');

$res = mysql_query("select * from copias", $con) or die(mysql_error());?>

<body>

<h1>Consultar Copias de Seguridad Realizadas</h1>

<p id="introd">Estas son todas las Copias de Seguridad realizadas y

almacenadas en la Base de Datos.</p>

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/>

<div id="cuerpo" width="75%">

<table border="2" bordercolor="black" align="center">

<tr bgcolor="#FA5050" align="center">

<td>Código del Cliente</td>

<td>Código de la Máquina</td>

<td>Fecha de inicio</td>

<td>Fecha de Finalización</td>

<td>Tipo de Copia</td>

<td>Correcta</td>

<td>Nombre del Fichero</td>

</tr><?php

while($row = mysql_fetch_array($res)){?>

<tr bgcolor="#A0F894">

<td><?php echo $row['cod_cliente']?></td>

<td><?php echo $row['cod_maquina']?></td>

<td><?php echo $row['fecha_ini']?></td>

<td><?php echo $row['fecha_fin']?></td>

<td><?php echo $row['tipo_copia']?></td>

<td><?php echo $row['correcta']?></td>

<td><?php echo $row['nombre_fichero']?></td>

</tr><?php

} ?>

</table>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Cop_seg.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Copia Manual - proyectint.org </title>

</head>

Page 83: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 83

<?php

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

$con=require('../config_bd.php');

$res = mysql_query("select cod_cliente from clientes", $con) or

die(mysql_error());

$res2 = mysql_query("select cod_maquina from maquinas", $con) or

die(mysql_error());

mysql_close($con);?>

<body>

<h1>Copia de Seguridad Manual</h1>

<p id="introd">Introduce los datos de la nueva copia de seguridad a realizar.

La ip del cliente debe de ser la perteneciente a la red de OpenVPN.

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form> </p><br/>

<div id="cuerpo">

<form id="form-login" method="post" action="socket.php">

<p><label>IP Máquina de Cliente</label></p>

<p><input class="mb10" name="ip" type="text"></p>

<p><label>Código de Cliente</label></p>

<p><select class="mb10" name="cliente"><?php

while($row = mysql_fetch_array($res)){?>

<option><?php echo $row['cod_cliente']?></option>;<?php

}?>

</select></p>

<p><label>Código de la Máquina</label></p>

<p><select class="mb10" name="maquina"><?php

while($row = mysql_fetch_array($res2)){?>

<option><?php echo $row['cod_maquina']?></option>;<?php

}?>

</select></p>

<p><label>Usuario FTP</label></p>

<p><input class="mb10" name="usu_ftp" type="text"></p>

<p><label>Contraseña FTP</label></p>

<p><input class="mb10" name="pass_ftp" type="password"></p>

<p><input name="submit" type="submit" id="submit" value="Confirmar"

class="boton"></p>

</form>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Socket.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Copia Manual - proyectint.org </title>

</head>

<?php

Page 84: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 84

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

if (isset($_POST['ip'])){

$host="127.0.0.1";

$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);

$puerto=6666;

$conexion=socket_connect($socket,$host,$puerto);

if($conexion){

echo "<h1>Empezando la copia...</h1>";

$buffer=$_POST['ip'].' '.$_POST['cliente'].' '.$_POST['maquina'].'

manual '.$_POST['usu_ftp'].' '.$_POST['pass_ftp'];

$salida='';

$tam=strlen($buffer)+1024;

socket_write($socket,$buffer);

}else{

echo "\n la conexion TCP no se a podido realizar, puerto: ".$puerto;

}

socket_close($socket);

}else{

echo "<h2> Error. No hay datos <h2>";

}

echo "<h2>Consulta Copias Realizadas para comprobar resultado<h2>";

?>

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form> </p><br/><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Con_usuario.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Consultar Usuarios - proyectint.org </title>

</head>

<?php

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {

$con=require('../config_bd.php');

$res = mysql_query("select * from usuarios", $con) or die(mysql_error());?>

<body>

<h1>Consultar Usuarios</h1>

<p id="introd">Estos son todos las usuarios con acceso a la aplicación

web.</p>

<form method="POST" action="admin.php" align="right">

<input type="submit" value="Volver a Panel de Control de Administrador"

class="boton"/>

</form><br/>

Page 85: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 85

<div id="cuerpo">

<table border="2" bordercolor="black" align="center">

<tr bgcolor="#FA5050" align="center">

<td>Usuario</td>

<td>Rol</td>

<td>Código de Cliente</td>

</tr><?php

while($row = mysql_fetch_array($res)){?>

<tr bgcolor="#A0F894">

<td><?php echo $row['nombre']?></td>

<td><?php echo $row['rol']?></td>

<td><?php echo $row['cod_cliente']?></td>

</tr><?php

} ?>

</table>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form><?php

}?>

<br/><div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Cliente.php

<!doctype html>

<html>

<head>

<link rel="stylesheet" type="text/css" href="../style.css"/>

<title> Cliente - proyectint.org </title>

</head>

<body>

<?php

session_start();

if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="cliente")) {

echo '<h1> Bienvenido a proyectint.org Cliente</h1>';

?>

<br><form method="POST" action="cliente.php">

<input type="submit" value="Cerrar Sesi&oacute;n" name="exit"

class="boton"/>

</form>

<?php

$usu=$_COOKIE["usuario"];

$con=require('../config_bd.php');

$res = mysql_query("select c.cod_cliente, cod_maquina, fecha_ini,

fecha_fin, tipo_copia, correcta, nombre_fichero from copias c,usuarios u where

c.cod_cliente =u.cod_cliente and nombre='$usu'", $con) or die(mysql_error());?>

<body>

<h2>Copias de Seguridad Realizadas</h2>

<div id="cuerpo">

<table border="2" bordercolor="black" align="center">

<tr bgcolor="#FA5050" align="center">

<td>Código del Cliente</td>

<td>Código de la Máquina</td>

<td>Fecha de inicio</td>

<td>Fecha de Finalización</td>

<td>Tipo de Copia</td>

Page 86: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 86

<td>Correcta</td>

<td>Nombre del Fichero</td>

</tr><?php

while($row = mysql_fetch_array($res)){?>

<tr bgcolor="#A0F894">

<td><?php echo $row['cod_cliente']?></td>

<td><?php echo $row['cod_maquina']?></td>

<td><?php echo $row['fecha_ini']?></td>

<td><?php echo $row['fecha_fin']?></td>

<td><?php echo $row['tipo_copia']?></td>

<td><?php echo $row['correcta']?></td>

<td><?php echo $row['nombre_fichero']?></td>

</tr><?php

} ?>

</table>

</div><?php

}else{?>

<h1> No estás identificado </h1>

<form method="POST" action="../index.html" align="center">

<input type="submit" value="Volver a intentarlo" class="boton"/>

</form>

<?php }

if(isset($_POST["exit"])) {

unset($_SESSION["login_proy"]);

header("Location: ../index.html");

}

?>

<br/>

<div class="bottom">Aplicación Web de Gestión - Proyectint.org</div>

</body>

</html>

Style.css

body{ background:#02071D;

font-family:Arial, Helvetica, sans-serif;

font-size:12px;

margin: 0

}

#envoltura{

position:absolute;

left:50%;

top:50%;

margin-left:-165px;

margin-top:-150px;

width:330px

}

#contenedor{

background-color:green;

box-shadow: 0 0 0 5px rgba(255,255,255,.3);

-webkit-border-radius:4px;

-moz-border-radius:4px;

border-radius:4px

}

#cabecera{

border-bottom: 1px solid #666;

Page 87: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 87

color:#FFF;

font-family:'Trebuchet MS', Helvetica, sans-serif;

font-size:28px;

height:50px;

line-height:50px;

text-shadow: 1px 1px 2px #000000;

text-align:center

}

#cuerpo{

background:#ececec;

border:solid #ccc;

border-width: 1px 0;

padding:10px 30px

}

form,p{ margin:0

}

p{ padding-bottom: 5px

}

.mb10{

margin-bottom: 10px

}

label{ color: black;

font-weight: bold

}

input{ border: 1px solid #999;

border-radius:2px;box-shadow: 0 0 0 2px rgba(0,0,0,.1);

font:bold 12px Arial, Helvetica, sans-serif;

height: 24px;

line-height: 24px;

padding:0 2px

}

input#usuario{ background:#fff no-repeat 0 -23px;

padding-left: 20px;

width: 244px

}

input#pass{ background:#fff no-repeat 0 -53px;

padding-left: 20px;

width: 244px

}

.boton{

background: #ccc;

background: -moz-linear-gradient(top,#eee,#ccc);

background: -webkit-linear-gradient(top,#eee,#ccc);

background: linear-gradient(top,#eee,#ccc);

color: black;

Page 88: Proyecto Integrado ASIR

Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 88

padding:0 10px

}

.boton:active{

position: relative;

top: 1px

}

#pie{

border-top: 1px solid #666;

color: #fff;

font-size: 11px;

height: 24px;

line-height: 24px;

text-align: center

}

h1{ color: white;

text-align: center;

font: Georgia

}

h2{ color: white;

text-align: center;

font: Georgia

}

#introd{

color: white;

font: Georgia;

font-size: 14px;

margin: 30px

}

.bottom { position: absolute;

text-align: center;

width: 100%;

bottom: 10px;

border-top: 1px solid #666;

color: #fff;

font-size: 11px;

height: 24px;

line-height: 24px;

}