SlideShare una empresa de Scribd logo
1 de 88
Descargar para leer sin conexión
Proyecto Integrado
2014
CFGS Administración de Sistemas Informáticos en Red
Autor: Francisco José Cruz Jiménez
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
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:
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.
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:
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:
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
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.
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.
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.
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
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
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.
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.
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).
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
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.
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
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 19
$ scp webmin.deb root@10.10.1.2
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
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.
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.
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.
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.
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
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
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 pepe@yopmail.com
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
pepe@yopmail.com porque se solapa).
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.
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
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 29
# nano servicios.cfg
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
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 31
Ahora vamos a configurar las notificaciones.
# nano contactos.cfg
# nano nagios.cfg
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.
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 33
Para configurarlo vamos a Services  NRPEv2.
Accedemos vía web a la aplicación.
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 34
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.
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.
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.
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 38
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 39
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 40
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 41
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
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]`;
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 exiton";
}else{
$up="update copias set fecha_fin = sysdate() where fecha_ini = '&date'";
print "Copia de seguridad no realizadan";
}
$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
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 45
# ssh-copy-id root@datos.proyectint.org
# ssh root@datos.proyectint.org
Hacemos lo mismo para poder conectarnos a cliente1 desde aplica.
# ssh-copy-id root@10.0.0.6
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 46
# ssh root@10.0.0.6
# 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
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
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).
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
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
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
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,
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.
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.
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.
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í.
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í.
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.
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.
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 60
Aceptamos y estaremos conectados.
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:
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
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 63
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 64
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
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.
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.
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
Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 69
# service openvpn restart
# ifconfig
# ping 10.0.0.1
# ping 10.10.1.1
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 root@192.168.2.2
A continuación nos conectamos a la máquina del cliente vemos que no nos pide contraseña.
# ssh root@192.168.2.2
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
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
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
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>
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>
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>
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.
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"/>
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>
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 }
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
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>
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>
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
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/>
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>
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;
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;
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;
}

Más contenido relacionado

La actualidad más candente

Đề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên Juniper
Đề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên JuniperĐề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên Juniper
Đề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên JuniperNguy?n Tu?n Ch?n Hi?n
 
Presentacion De Nagios
Presentacion De NagiosPresentacion De Nagios
Presentacion De Nagiosmagicdrums
 
Proyecto sistema de control personal-1
Proyecto sistema de control personal-1Proyecto sistema de control personal-1
Proyecto sistema de control personal-1carmencitagp
 
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTASAPLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTASSaul Mamani
 
Reporte tecnico
Reporte tecnicoReporte tecnico
Reporte tecnicofinter
 
Configuracion de una red punto a punto
Configuracion de una red punto a puntoConfiguracion de una red punto a punto
Configuracion de una red punto a puntosevastian7
 
Productos vmware
Productos vmwareProductos vmware
Productos vmwarejuanan10
 
54714841 ejemplo-propuesta-de-desarrollo-de-software
54714841 ejemplo-propuesta-de-desarrollo-de-software54714841 ejemplo-propuesta-de-desarrollo-de-software
54714841 ejemplo-propuesta-de-desarrollo-de-softwarecristina_devargas
 
Hệ thống IoT điều khiển và giám sát ngôi nhà
Hệ thống IoT điều khiển và giám sát ngôi nhàHệ thống IoT điều khiển và giám sát ngôi nhà
Hệ thống IoT điều khiển và giám sát ngôi nhàanh hieu
 
Manual de ms dos 6 22
Manual de ms dos 6 22Manual de ms dos 6 22
Manual de ms dos 6 22danieleec1
 
Sistema de gestion de socios
Sistema de gestion de sociosSistema de gestion de socios
Sistema de gestion de sociosOscar Carvajal
 

La actualidad más candente (20)

Đề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên Juniper
Đề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên JuniperĐề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên Juniper
Đề án cơ sở - Tìm hiểu giao thức Open Shortest Path Frist trên Juniper
 
Manual replicación instantanea
Manual replicación instantaneaManual replicación instantanea
Manual replicación instantanea
 
Presentacion De Nagios
Presentacion De NagiosPresentacion De Nagios
Presentacion De Nagios
 
Proyecto sistema de control personal-1
Proyecto sistema de control personal-1Proyecto sistema de control personal-1
Proyecto sistema de control personal-1
 
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTASAPLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
 
Reporte tecnico
Reporte tecnicoReporte tecnico
Reporte tecnico
 
Configuracion de una red punto a punto
Configuracion de una red punto a puntoConfiguracion de una red punto a punto
Configuracion de una red punto a punto
 
Đề tài: Cấu trúc chức năng của hệ thống thông tin quang vô tuyền
Đề tài: Cấu trúc chức năng của hệ thống thông tin quang vô tuyềnĐề tài: Cấu trúc chức năng của hệ thống thông tin quang vô tuyền
Đề tài: Cấu trúc chức năng của hệ thống thông tin quang vô tuyền
 
Productos vmware
Productos vmwareProductos vmware
Productos vmware
 
PROYECTO FINAL ANÀLISIS Y DISEÑO ll
PROYECTO FINAL ANÀLISIS Y DISEÑO llPROYECTO FINAL ANÀLISIS Y DISEÑO ll
PROYECTO FINAL ANÀLISIS Y DISEÑO ll
 
54714841 ejemplo-propuesta-de-desarrollo-de-software
54714841 ejemplo-propuesta-de-desarrollo-de-software54714841 ejemplo-propuesta-de-desarrollo-de-software
54714841 ejemplo-propuesta-de-desarrollo-de-software
 
SFC 2019
SFC 2019SFC 2019
SFC 2019
 
Adoo grady booch
Adoo grady boochAdoo grady booch
Adoo grady booch
 
Nginx
NginxNginx
Nginx
 
luan van thac si su dung phan mem nagios giam sat he thong mang
luan van thac si su dung phan mem nagios giam sat he thong mangluan van thac si su dung phan mem nagios giam sat he thong mang
luan van thac si su dung phan mem nagios giam sat he thong mang
 
Proyecto final redes
Proyecto final redesProyecto final redes
Proyecto final redes
 
Hệ thống IoT điều khiển và giám sát ngôi nhà
Hệ thống IoT điều khiển và giám sát ngôi nhàHệ thống IoT điều khiển và giám sát ngôi nhà
Hệ thống IoT điều khiển và giám sát ngôi nhà
 
Manual de ms dos 6 22
Manual de ms dos 6 22Manual de ms dos 6 22
Manual de ms dos 6 22
 
Sistema de gestion de socios
Sistema de gestion de sociosSistema de gestion de socios
Sistema de gestion de socios
 
Đề tài: Hệ thống Iot phục vụ cho nông nghiệp ứng dụng Gateway
Đề tài: Hệ thống Iot phục vụ cho nông nghiệp ứng dụng GatewayĐề tài: Hệ thống Iot phục vụ cho nông nghiệp ứng dụng Gateway
Đề tài: Hệ thống Iot phục vụ cho nông nghiệp ứng dụng Gateway
 

Destacado

Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...
Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...
Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...Israel Martínez Bermejo
 
Proyecto final de Curso de Seguridad Informatica
Proyecto final de Curso de Seguridad InformaticaProyecto final de Curso de Seguridad Informatica
Proyecto final de Curso de Seguridad InformaticaYamileth Miguel
 
Virtualizacion de Servidores
Virtualizacion de ServidoresVirtualizacion de Servidores
Virtualizacion de ServidoresDavid Aspée Roa
 
Implementacion de una infraestructura en VMware 5.5
Implementacion de una infraestructura en VMware 5.5Implementacion de una infraestructura en VMware 5.5
Implementacion de una infraestructura en VMware 5.5Vellidin
 
Proyectos de seguridad informática
Proyectos de seguridad informáticaProyectos de seguridad informática
Proyectos de seguridad informáticaRaúl Díaz
 
Guía de instalación de la version VMware ESXi 6.0.0
Guía de instalación de la version VMware ESXi 6.0.0Guía de instalación de la version VMware ESXi 6.0.0
Guía de instalación de la version VMware ESXi 6.0.0Alejandro Marin
 
Seguridad Informática en Redes de Computadores
Seguridad Informática en Redes de ComputadoresSeguridad Informática en Redes de Computadores
Seguridad Informática en Redes de ComputadoresWayner Barrios
 
Virtualización de Servidores con VMware vSphere 6
Virtualización de Servidores con VMware vSphere 6Virtualización de Servidores con VMware vSphere 6
Virtualización de Servidores con VMware vSphere 6David Pérez Moriche
 
Proyecto Legión - Plataforma de Clustering Beowulf
Proyecto Legión - Plataforma de Clustering BeowulfProyecto Legión - Plataforma de Clustering Beowulf
Proyecto Legión - Plataforma de Clustering Beowulfantoniobp
 
Ejercicios resuelto de shell script
Ejercicios resuelto  de shell scriptEjercicios resuelto  de shell script
Ejercicios resuelto de shell scriptYarlet Urda
 
Requisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y Ubuntu
Requisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y UbuntuRequisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y Ubuntu
Requisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y UbuntuDIABLO_15
 
Esquema de Red con DMZ
Esquema de Red con DMZEsquema de Red con DMZ
Esquema de Red con DMZAula Campus
 

Destacado (20)

Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...
Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...
Virtualizacion de servidores con VMware vSphere 5.5. (Proyecto Fin de Curso) ...
 
Proyecto final de Curso de Seguridad Informatica
Proyecto final de Curso de Seguridad InformaticaProyecto final de Curso de Seguridad Informatica
Proyecto final de Curso de Seguridad Informatica
 
John_Patino_Proyecto_ASIR
John_Patino_Proyecto_ASIRJohn_Patino_Proyecto_ASIR
John_Patino_Proyecto_ASIR
 
Virtualizacion de Servidores
Virtualizacion de ServidoresVirtualizacion de Servidores
Virtualizacion de Servidores
 
Implementacion de una infraestructura en VMware 5.5
Implementacion de una infraestructura en VMware 5.5Implementacion de una infraestructura en VMware 5.5
Implementacion de una infraestructura en VMware 5.5
 
Free nas 8
Free nas 8Free nas 8
Free nas 8
 
Proyectos de seguridad informática
Proyectos de seguridad informáticaProyectos de seguridad informática
Proyectos de seguridad informática
 
OpenVPN
OpenVPNOpenVPN
OpenVPN
 
Virtualización con vmware
Virtualización con vmwareVirtualización con vmware
Virtualización con vmware
 
Guía de instalación de la version VMware ESXi 6.0.0
Guía de instalación de la version VMware ESXi 6.0.0Guía de instalación de la version VMware ESXi 6.0.0
Guía de instalación de la version VMware ESXi 6.0.0
 
Seguridad Informática en Redes de Computadores
Seguridad Informática en Redes de ComputadoresSeguridad Informática en Redes de Computadores
Seguridad Informática en Redes de Computadores
 
Virtualización de Servidores con VMware vSphere 6
Virtualización de Servidores con VMware vSphere 6Virtualización de Servidores con VMware vSphere 6
Virtualización de Servidores con VMware vSphere 6
 
Proyecto Legión - Plataforma de Clustering Beowulf
Proyecto Legión - Plataforma de Clustering BeowulfProyecto Legión - Plataforma de Clustering Beowulf
Proyecto Legión - Plataforma de Clustering Beowulf
 
Server2003 INSTALACION DE IIS Y CREACION DE UN SITIO WEB
Server2003 INSTALACION DE IIS Y CREACION DE UN SITIO WEBServer2003 INSTALACION DE IIS Y CREACION DE UN SITIO WEB
Server2003 INSTALACION DE IIS Y CREACION DE UN SITIO WEB
 
Ejercicios resuelto de shell script
Ejercicios resuelto  de shell scriptEjercicios resuelto  de shell script
Ejercicios resuelto de shell script
 
Instalación y Configuración de LDAP
Instalación y Configuración de LDAPInstalación y Configuración de LDAP
Instalación y Configuración de LDAP
 
Mi manual de VMware
Mi manual de VMwareMi manual de VMware
Mi manual de VMware
 
Requisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y Ubuntu
Requisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y UbuntuRequisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y Ubuntu
Requisitos, caracteristicas y sistemas de archivos de SOs XP,7,8 y Ubuntu
 
Esquema de Red con DMZ
Esquema de Red con DMZEsquema de Red con DMZ
Esquema de Red con DMZ
 
Servidor HTTP IIS
Servidor HTTP IISServidor HTTP IIS
Servidor HTTP IIS
 

Similar a Proyecto Integrado ASIR

Proyecto thin client
Proyecto thin clientProyecto thin client
Proyecto thin clientanibalsmit
 
Manual final nagios
Manual final nagiosManual final nagios
Manual final nagiosrpm-alerts
 
Instalacion de servidor proxy
Instalacion de servidor proxyInstalacion de servidor proxy
Instalacion de servidor proxyyarevale
 
SSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia SeguraSSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia SeguraJose Diaz Silva
 
Sistema operativo de red
Sistema operativo de redSistema operativo de red
Sistema operativo de redHeidi Gutierrez
 
Informe proyecto nessus
Informe proyecto nessusInforme proyecto nessus
Informe proyecto nessusLethy Mendez
 
Instalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónInstalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónSocialBiblio
 
Clientes ligeros y servidores nx
Clientes ligeros y servidores nxClientes ligeros y servidores nx
Clientes ligeros y servidores nxRosariio92
 
Taller sistemas distribuidos linux usando VMWare
Taller sistemas distribuidos linux usando VMWareTaller sistemas distribuidos linux usando VMWare
Taller sistemas distribuidos linux usando VMWareDamian Barrios Castillo
 
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...
Instalacion del servidor proxy para conectar una red lan a una pc con salid...ChanCHIMAL
 
Administracion de servidores
Administracion de servidoresAdministracion de servidores
Administracion de servidoresUsein Gonzalez
 
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...
Instalacion del servidor proxy para conectar una red lan a una pc con salid...ChanCHIMAL
 
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...
Instalacion del servidor proxy para conectar una red lan a una pc con salid...ChanCHIMAL
 

Similar a Proyecto Integrado ASIR (20)

Proyecto thin client
Proyecto thin clientProyecto thin client
Proyecto thin client
 
Manual final nagios
Manual final nagiosManual final nagios
Manual final nagios
 
Manual
ManualManual
Manual
 
Instalacion de servidor proxy
Instalacion de servidor proxyInstalacion de servidor proxy
Instalacion de servidor proxy
 
SSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia SeguraSSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia Segura
 
Sistema operativo de red
Sistema operativo de redSistema operativo de red
Sistema operativo de red
 
S.O
S.OS.O
S.O
 
Informe proyecto nessus
Informe proyecto nessusInforme proyecto nessus
Informe proyecto nessus
 
Proyecto 7
Proyecto 7Proyecto 7
Proyecto 7
 
Proxy
ProxyProxy
Proxy
 
Instalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónInstalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuración
 
Clientes ligeros y servidores nx
Clientes ligeros y servidores nxClientes ligeros y servidores nx
Clientes ligeros y servidores nx
 
Taller sistemas distribuidos linux usando VMWare
Taller sistemas distribuidos linux usando VMWareTaller sistemas distribuidos linux usando VMWare
Taller sistemas distribuidos linux usando VMWare
 
Instalación y configuración de Nagios
Instalación y configuración de NagiosInstalación y configuración de Nagios
Instalación y configuración de Nagios
 
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
 
Administracion de servidores
Administracion de servidoresAdministracion de servidores
Administracion de servidores
 
virtualizacion - upsam
virtualizacion - upsamvirtualizacion - upsam
virtualizacion - upsam
 
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
 
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...Instalacion del  servidor  proxy para conectar una red lan a una pc con salid...
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
 
Reporte final
Reporte finalReporte final
Reporte final
 

Más de Francisco José Cruz Jiménez (8)

RAID
RAIDRAID
RAID
 
Servidor HTTP Apache
Servidor HTTP ApacheServidor HTTP Apache
Servidor HTTP Apache
 
Servidor de Correo
Servidor de CorreoServidor de Correo
Servidor de Correo
 
Aplicaciones Web Seguras (Anti-SQLi)
Aplicaciones Web Seguras (Anti-SQLi)Aplicaciones Web Seguras (Anti-SQLi)
Aplicaciones Web Seguras (Anti-SQLi)
 
Instalación y configuración Servidor FTP y SSH
Instalación y configuración Servidor FTP y SSHInstalación y configuración Servidor FTP y SSH
Instalación y configuración Servidor FTP y SSH
 
Instalación y configuración de servidor DNS
Instalación y configuración de servidor DNSInstalación y configuración de servidor DNS
Instalación y configuración de servidor DNS
 
Configuración Servidor DHCP
Configuración Servidor DHCPConfiguración Servidor DHCP
Configuración Servidor DHCP
 
Aplicaciones Web Seguras (Anti-SQLi)
Aplicaciones Web Seguras (Anti-SQLi)Aplicaciones Web Seguras (Anti-SQLi)
Aplicaciones Web Seguras (Anti-SQLi)
 

Último

Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024AndreRiva2
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 

Último (20)

Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 

Proyecto Integrado ASIR

  • 1. Proyecto Integrado 2014 CFGS Administración de Sistemas Informáticos en Red Autor: Francisco José Cruz Jiménez
  • 2. 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
  • 3. 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:
  • 4. 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.
  • 5. 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:
  • 6. 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:
  • 7. 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
  • 8. 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.
  • 9. 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.
  • 10. 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.
  • 11. 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
  • 12. 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
  • 13. 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.
  • 14. 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.
  • 15. 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).
  • 16. 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
  • 17. 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.
  • 18. 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
  • 19. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 19 $ scp webmin.deb root@10.10.1.2 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
  • 20. 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.
  • 21. 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.
  • 22. 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.
  • 23. 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.
  • 24. 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
  • 25. 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
  • 26. 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 pepe@yopmail.com 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 pepe@yopmail.com porque se solapa).
  • 27. 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.
  • 28. 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
  • 29. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 29 # nano servicios.cfg
  • 30. 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
  • 31. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 31 Ahora vamos a configurar las notificaciones. # nano contactos.cfg # nano nagios.cfg
  • 32. 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.
  • 33. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 33 Para configurarlo vamos a Services  NRPEv2. Accedemos vía web a la aplicación.
  • 34. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 34
  • 35. 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.
  • 36. 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.
  • 37. 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.
  • 38. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 38
  • 39. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 39
  • 40. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 40
  • 41. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 41
  • 42. 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
  • 43. 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]`;
  • 44. 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 exiton"; }else{ $up="update copias set fecha_fin = sysdate() where fecha_ini = '&date'"; print "Copia de seguridad no realizadan"; } $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
  • 45. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 45 # ssh-copy-id root@datos.proyectint.org # ssh root@datos.proyectint.org Hacemos lo mismo para poder conectarnos a cliente1 desde aplica. # ssh-copy-id root@10.0.0.6
  • 46. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 46 # ssh root@10.0.0.6 # 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
  • 47. 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
  • 48. 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).
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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,
  • 53. 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.
  • 54. 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.
  • 55. 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.
  • 56. 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í.
  • 57. 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í.
  • 58. 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.
  • 59. 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.
  • 60. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 60 Aceptamos y estaremos conectados.
  • 61. 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:
  • 62. 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
  • 63. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 63
  • 64. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 64
  • 65. 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
  • 66. 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.
  • 67. 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.
  • 68. 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
  • 69. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 69 # service openvpn restart # ifconfig # ping 10.0.0.1 # ping 10.10.1.1
  • 70. 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 root@192.168.2.2 A continuación nos conectamos a la máquina del cliente vemos que no nos pide contraseña. # ssh root@192.168.2.2 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
  • 71. 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
  • 72. 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
  • 73. 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>
  • 74. 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>
  • 75. 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>
  • 76. 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.
  • 77. 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"/>
  • 78. 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>
  • 79. 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 }
  • 80. 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
  • 81. 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>
  • 82. 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>
  • 83. 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
  • 84. 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/>
  • 85. 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>
  • 86. 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;
  • 87. 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;
  • 88. 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; }