Virtualización do Ciclo ASIR do IES de Rodeira: Diferenzas entre revisións

De Wiki do Ciclo ASIR do IES de Rodeira
Saltar á navegación Saltar á procura
Liña 336: Liña 336:


Unha vez particionados os discos e instalado o sistema, procederemos á [[Instalación de DRBD|instalación de DRBD]] en ''Earendil'' e ''Gandalf'', no que ''Gandalf'' será o nodo primario. Co DRBD en funcionamento, procederemos á configuración dun [[Servidor de Alta Dispoñibilidade NFS de Dous Nodos|servicio de alta dispoñibilidade]] para os servidores virtuais.
Unha vez particionados os discos e instalado o sistema, procederemos á [[Instalación de DRBD|instalación de DRBD]] en ''Earendil'' e ''Gandalf'', no que ''Gandalf'' será o nodo primario. Co DRBD en funcionamento, procederemos á configuración dun [[Servidor de Alta Dispoñibilidade NFS de Dous Nodos|servicio de alta dispoñibilidade]] para os servidores virtuais.

===== Hearbeat =====


===Servicios Xen===
===Servicios Xen===

Revisión como estaba o 17 de xullo de 2014 ás 09:31

Virtualización do Ciclo ASIR do IES de Rodeira

Introducción

A virtualización hoxe en día ofrece numerosas vantaxes sobre a execución en hardware:

  • Maior aproveitamento dos recursos
  • Menor prezo, aforrando electricidade e hardware
  • Facilidade de actualización
  • Maior flexibilidade na rede e nos servizos
  • Facilidade para montar estructuras de alta dispoñibilidade.

Debido a esto, e de modo experimental, se vai a diseñar unha estructura de máquinas virtuais que permita ofrecer os mesmos servizos (e nun futuro mais) que se teñen agora.

Hoxe en día, o IES de Rodeira conta con un servidor Linux que ofrece servizos de DNS, Firewall, Mail, Proxy, Escritorio, Almacenamento, Mirror Linux, Acceso remoto SSH e NX... e cun servidor Windows 2003 Server que ofrece o servizo de directorio activo e dominio aos equipos Windows das aulas. Se trata de ofrecer estos servizos a través de máquinas virtuais, o que nos permitirá unha maior flexibilidade na configuración e mantemento dos mesmos.

Planificación

Redes

A Rede do IES de Rodeira actualmente sigue o seguinte esquema:

Esquema da rede actual do IES de Rodeira

Se trata de sustituir este esquema por outro que faga uso se servidores virtualizados aproveitando as VLAN 802.11q soportadas polos switches do departamento, modelo D-LINK DGS-1500-28 aula 3 e aula 4.

Necesitamos proveer de 4 redes ailladas: A rede do ciclo ASIR (Rede ASIR), a rede utilizada polos CICLOS (Rede CICLOS), a rede de acceso a internet (Rede XUNTA) con gateway 69.65.24.1 e a rede de acceso ás ADSL (Rede ADSL). Como os ciclos e as ADSL se atopan nun switch que non soporta 802.11q, se separarán en dúas VLAN tradicionais por portos, de xeito que os ordenadores da Rede CICLOS non podan acceder directamente a Rede ADSL, aínda que dende o punto de vista das VLAN 802.11q que imos montar será unha rede única (Rede CICLOS_ADSL).

Co motivo da posible realización de prácticas de redes e sistemas mediante máquinas virtuais, configuraremos unha VLAN espécífica para unha rede de maquinas virtuais, RedeVirtualización. Ademáis, os servicios esenciais estarán protexidos cun sistema baseado en heartbeat e drbd, para o que reservaremos tamén a VLAN DRBD.

A asignación dos Tag 802.11q será a seguinte:

  • RedeASIR: default (Tag 1)
  • RedeXUNTA: Tag 3
  • RedeCICLOS_ADSL: Tag 4
  • DRBD: Tag 5
  • RedeVirtualización: Tag 100

Os servidores de virtualización poderán estar situados en calqueira punto da rede 802.11q (switches do Aula 3, Aula 4 ou Departamento), aínda que por motivos de seguridade, restrinxiremos o acceso a RedeXUNTA e RedeCiclos a portos concretos dentro de cada switch. O Aula 4 poderá aloxar únicamente máquinas virtuais na VLAN por defecto, ou na VLAN 100 (RedeVirtualización). As conexións nos switches son as seguintes:

Departamento

O esquema 802.11q empregará: O porto 11 como Trunk para o acceso ao Aula 3, soportando as VLANS RedeXUNTA, RedeCICLOS_ADSL e DRBD, os portos 15 e 16 como Trunk para o acceso ao servidor de virtualización Barbol soportando RedeXUNTA e RedeCICLOS_ADSL, e os portos 19 e 20 como Trunk das VLAN RedeXUNTA e RedeCICLOS_ADSL para o acceso ao servidor de virtualización Gandalf . O porto 21 se utilizará para a conexión DRBD entre os servidores Gandalf e Earendil (situado no Aula 3). Todos os portos serán Trunk da VLAN de RedeVirtualización A seguinte figura indica a configuración:

Esquema de VLANS do Departamento


Aula 3

No Aula 3 estará situado outro servidor de virtualización (Earendil) que servirá como respaldo de Gandalf, formando un cluster de alta dispoñibilidade de dous nodos para os servicios virtuais, ademáis de poder aloxar máquinas virtuais de traballo. Polo tanto se configurará o porto 24' como Trunk para a conexión co departamento nas VLANS RedeXUNTA,RedeCICLOS_ADSL e DRBD, os portos 21 e 22 como Trunk para RedeXUNTA e RedesCICLOS_ADSL, no que irá conectado Earendil e o porto 23 se utilizará como conexión DRBD entre Earendil e Gandalf.

Esquema de VLANS do Aula 3

Servizos

Os servizos ofrecidos a cada rede serán os seguintes:

Rede ASIR
A rede de ASIR precisará de servicios Web, DNS, Control de acceso a Internet, Mail e escritorio remoto, ademáis de poder recibir conexións externas dende internet a estes e a futuros servizos (servicio de rutado). Se crearán as máquinas virtuais VM_PROXY (Control de Acceso a Internet e DNS interno e externo), VM_ROUTER (Rutado dende as conexións ADSL á rede interna), VM_WEB (Proporciona servicio Web LAMP á rede interna e externa, WebMail e e-mail) e VM_DESKTOP (Ofrece servizo de escritorio). VM_ROUTER permitirá que dende Internet se poda acceder ao correo (SMTP, POP, IMAP), ás páxinas web, ao DNS, VPN, e acceder mediante SSH aos hosts da rede (o que permite escritorios remotos NX/X2GO, túneis SSH e SFTP).
Rede CICLOS_ADSL
A rede de Ciclos únicamente precisa o control de acceso a internet e o DNS, polo que únicamente terán acceso a VM_PROXY. VM_ROUTER precisa acceder ás ADSL, polo que tamén ten que pertencer a esta rede.
Rede XUNTA
Esta rede únicamente se utiliza para ofrecer servizo de acceso a internet, polo que a única máquina que vai ter acceso a ela é VM_PROXY.

Por motivos de seguridade, se facilitará acceso SSH directo a través do porto 63000 ao servidor de virtualizacións Gandalf, e no porto 63001 ao servidor de virtualizacións Earendil sen necesidade de pasar a través de VM_ROUTER.

Sistemas de Virtualización

Para o sistema de virtualización pensouse en primeiro lugar en Xen, por ser un sistema de tipo 1 (bare-metal), ofrecendo un rendimento óptimo nos sistemas soportados (como Linux) mediante paravirtualización. Posteriormente, valorouse que KVM proporciona unha maior facilidade de instalación e mantemento por vir xa incluída nas distintas distribucións nos kernel estándar, e non precisar de ficheiros de configuración extra, permitindo a migración de máquinas virtuais entre calqueira host da rede local. O seu rendimento por outra banda é moi similar a Xen, sobre todo cando temos que recurrir a virtualización de sistemas non directamente soportados por Xen, como Widows.

Os servicios de importancia para o funcionamento da rede (VM_ROUTER, VM_PROXY, VM_WEB e VM_DESKTOP) se executarán preferentemente nun sistema que proporciona redundancia no procesamento e almacenamento mediante heartbeat e drbd.

Os servidores precisarán de 3 tarxetas de rede, facendo uso debonding para aumentar o ancho de banda e a fiabilidade.

A configuración da rede final e dos switches implicados será a da figura:

Rede ASIR do IES de Rodeira

Configuración da Rede

Configuración da LAN

Os switches estarán configurados según o indicado no apartado anterior. As máquinas virtuais farán uso de Open vSwitch por ofrecer máis características e facilidade de configuración e mantemento que os bridge normais.

O sistema gráfico de manexo de virtualización de KVM (virt-manager) non soporta a configuración de rede mediante Open vSwitch, polo que crearemos as máquinas virtuais na rede NAT da configuración por defecto (default), e posteriormente as migraremos a Open vSwitch modificando a configuración da tarxeta de rede no XML de definición da máquina virtual. A configuración se edita mediante o comando virsh edit Nome_Máquina, e será necesario sustituir os elementos:

    <interface type='network'>
      <mac address='52:54:00:90:86:18'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

por elementos:

    <interface type='bridge'>
      <mac address='00:16:3e:51:20:02'/>
      <source bridge='lan'/>
      <!-- O tag vlan so si temos a tarxeta nunha VLAN 802.1q -->
      <vlan>
        <tag id='3'/>
      </vlan>
      <virtualport type='openvswitch'>
      </virtualport>
      <target dev='p_xunta-eth'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </interface>

As direccións MAC das tarxetas dos servidores as configuraremos tamén manualmente alterando os ficheiros de configuración. Deste xeito teremos:

VM_PROXY (proxy.iesrodeira.com)
eth0 - 172.20.2.1 (00:16:3e:51:20:01): Tarxeta que conecta con RedeASIR
eth1 - 69.65.24.206 (00:16:3e:51:20:02) VLAN 3: Tarxeta de acceso á RedeXUNTA.
eth2 - 172.16.2.1 (00:16:3e:51:20:03) VLAN 4: Tarxeta que conecta coa RedeCICLOS
VM_ROUTER (router.iesrodeira.com)
eth0 - 172.20.0.1 (00:16:3e:51:20:04): Tarxeta que conecta coa RedeASIR
eth1 - 192.168.2.2 (00:16:3e:51:20:05) VLAN 4: Tarxeta que conecta coa RedeADSL (que en realidade é a mesma que a dos ciclos)
VM_WEB (web.iesrodeira.com)
eth0 - 172.20.0.2 (00:16:3e:51:20:10): Tarxeta que conecta coa RedeASIR
VM_DESKTOP (desktop.iesrodeira.com)
eth0 - 172.20.0.5 (00:16:3e:51:20:11): Tarxeta que conecta coa RedeASIR

Configuración de Servicios

Os servizos ofrecidos polas distintas máquinas virtuais son os seguintes:

  1. VM_ROUTER (Router)
    Firewall, DNAT para o acceso externo a servizos da rede interna. Acceso a servizos restrinxidos pola rede da xunta (como ntp).
  2. VM_PROXY (Proxy)
    Proxy Squid + WebSqusr (Control acceso a internet), DNS.
  3. VM_WEBSERVER (Servidor Web)
    Servicio Web + WebMail + Mail (exim4) + Mirror Debian, Repositorio SVN con interface Trac.
  4. VM_DESKTOP (Servidor de Escritorio)
    Acceso mediante x2go (ssh) a XFCE ... e ás aplicacións hospedadas.

Outros servizoa a ofrecer, xa sexa por estas máquinas ou outras serán:

  • Servicio de copias de seguridade mediante un interface web.
  • Servicio de descarga de software (sobre todo de msdn) mediante interface web.
  • Servicio de xestión de máquinas virtuais mediante interface web.
  • Servicio de Controlador de Dominio Windows para a LAN con Samba4

Configuración dos Servidores de Máquinas Virtuais

En principio calqueira máquina pode ser utilizada para ofrecer servicio de virtualización, incluso sen extensións de virtualización no procesador, no caso de uso de paravirtualización mediante Xen ou de Containers. No noso caso imos empregar en principio tres máquinas como servidores de virtualiación, coas seguintes características:

  • Servidor Intel:
-gandalf.iesrodeira.com
-CPU Quad Core, 8Gb RAM
-Soporte de virtualización na CPU.
-IP: 172.20.1.1.
-Tres tarxetas de rede, unha para replicación DRBD e dúas para un bonding coa rede.
-Dous discos de 750GB e dous de 2TB.
  • Servidor HP:
-earendil.iesrodeira.com
-CPU Dual Core, 8Gb RAM
-Soporte de virtualización na CPU.
-IP: 172.20.1.10.
-Tres tarxetas de rede, unha para a replicación DRBD e dúas par un bonding coa rede.
-Un disco de 500GB e dous de 2TB
  • Servidor DELL:
-barbol.iesrodeira.com
-CPU Dual Xeon Quad Core, 32Gb de RAM
-Soporte de virtualización na CPU.
-IP: 172.20.1.20
-Dúas tarxetas de rede que formarán un bonding coa rede.
-Tres discos de 320GB en Raid 5 por Hardware

Aínda que o mellor equipo para a virtualización en canto a características é o servidor DELL (barbol), as dificultades na súa ubicación fan que sexa de momento un servidor máis 'provisional'. Os equipos earendil e gandalf formarán un cluster mediante heartbeat na que gandalf será o nodo primario, co obxecto de manter as máquinas virtuais esenciais en marcha de xeito automático no caso de fallo dun dos equipos. Para conseguir esto, utilizaremos replicacion DRBD a través dunha VLAN para o espacio de disco destiñado a eses servidores.

Nos tres equipos se instalará Debian Jessie, que en estes momentos é a rama de probas. Instalaremos nos tres equipos o seguinte software:

  1. Instalación de Debian Jessie.
En gandalf.iesrodeira.com crearemos dous Raid 1, un cos discos de 750GB e outro cos discos de 2TB. Estes dous RAID (md0 e md1) formarán un Grupo de Volumes LVM chamado Gandalf coa totalidade do espacio. Crearemos os Volumes Lóxicos boot (2GB), root (10GB) e swap (4GB) nos que instalaremos o sistema.
En earendil.iesrodeira.com particionaremos os discos de 2TB en unha partición de 500GB (sdb1 e sdc1) e outra de 1.5TB (sdb2 e sdc2). Crearemos un Raid 1 (md0) coas particións sdb2 e sdc2. Co raid md0 crearemos o Grupo de Volumes Earendil no que crearemos os Volumes Lóxicos boot (2GB) e root (10GB). Coas particións sdb1, sdc1 e o disco sda crearemos o Grupo de Volumes Disks, no que creamos o Volume Lóxico swap (4G), nos que instalaremos o sistema.
En barbol.iesrodeira.com crearemos un grupo de volumes Barbol no que crearemos os Volumes Lóxicos root (10GB), boot (2GB) e swap (16GB), nos que instalaremos o sistema.
  1. Instalación de Open vSwitch:
apt-get install openvswitch-switch
openvswitch almacena a configuración nunha base de datos persistente, que se conserva entre os reinicios da máquina. Realizamos a configuración inicial para a nosa rede de máquinas virtuais. A interface para o acceso a rede se chamará lan nas tres máquinas.
   ovs-vsctl add-br lan
   # En ''barbol'' o bond será entre as eth0 e eth1
   ovs-vsctl add-bond lan bond0 eth1 eth2 bond_mode=balance-slb other_config:bond-detect-mode=miimon other_config:bond-miimon-interval=100
En Debian, o script de configuración de rede (/etc/init.d/networking) execútase antes da carga do servizo openvswitch, polo que a configuración de rede no arranque será errónea ou incompleta. Para solucionar este problema podemos engadir ao nivel de servizo axeitado o reintento de configuración, ou chamalo dende /etc/rc.local engandindo service networking restart xusto antes da liña con exit 0.
  1. Configuramos as redes:
/etc/resolv.conf:
domain iesrodeira.com
nameserver 172.20.2.1
nameserver 8.8.8.8
/etc/network/interfaces:
# gandalf.iesrodeira.com
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 172.21.1.200

auto eth1
iface eth1 inet static
address 0.0.0.0

auto eth2
iface eth2 inet static
address 0.0.0.0

auto lan
iface lan inet static
address 172.20.1.1
netmask 255.255.0.0
gateway 172.20.2.1
broadcast 172.20.255.255
# earendil.iesrodeira.com
auto lo
iface lo inet loopback

auto eth0 
iface eth0 inet static
address 172.21.1.100
netmask 255.255.0.0
network 172.21.0.0

auto eth1
iface eth1 inet static
address 0.0.0.0

auto eth2
iface eth2 inet static
address 0.0.0.0

auto lan
iface lan inet static
address 172.20.1.10
netmask 255.255.0.0
network 172.20.0.0
broadcast 172.20.255.255
gateway	172.20.2.1
# barbol.iesrodeira.com
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static
address 0.0.0.0 
#netmask 255.255.0.0
#network 172.20.0.0
#broadcast 172.20.255.255
#gateway 172.20.2.1

auto eth1
iface eth1 inet static
address 0.0.0.0


auto lan
iface lan inet static
address 172.20.1.20
netmask 255.255.0.0
network 172.20.0.0
broadcast 172.20.255.255
gateway 172.20.2.1
  1. Instalación de KVM e libvirt:
apt-get install kvm virt-goodies virt-top virtinst libvirt-bin libvirt-sanlock
  1. Habilitamos [[wikipedia:Kernel_SamePage_Merging_(KSM) KSM (Kernel Samepage Merging).
echo 1 > /sys/kernel/mm/ksm/run
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs

Configuración do clustering HA e Xestión de Espazo en Disco

earendil.iesrodeira.com

En earendil.iesrodeira.com no Grupo de Volumes Earendil creamos o Volumes Lóxicos storage de 950GB e servers de 400GB. O volume lóxico servers formará un dispositivo DRBD con gandalf.iesrodeira.com para aloxar as máquinas virtuais básicas para o sistema. O Volume Lóxico storage se empregará para o aloxamento de discos virtuais. No Grupo de Volumes Disks, que como carecerá de redundancia aloxará información fácilmente reemplazable en caso de perda, crearemos os Volumes Lóxicos sources (400GB) ( para ISOS de instalación e aplicacións) e storage(950GB) (para discos virtuais) en modo stripped.

   # Si queremos crear os volumes lóxicos a mán en vez de facelo durante a instalación, mediante un Live. 
   # Ou facer parte a man e parte na instalación...
   # - Creamos as particións sd[bc]1 (500GB) e sd[bc]2 (1.5TB)
   fdisk /dev/sdb
   fdisk /dev/sdc
   # - RAID 
   mdadm --zero-superblock /dev/sdb2
   mdadm --zero-superblock /dev/sdc2
   mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sdb2 /dev/sdc2
   cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
   mdadm --examine --scan >> /etc/mdadm/mdadm.conf
   # - Grupos de Volumes
   pvcreate /dev/sda
   pvcreate /dev/sdb1
   pvcreate /dev/sdc1
   pvcreate /dev/md0
   vgcreate Earendil /dev/md0
   vgcreate Disks /dev/sda /dev/sdb1 /dev/sdc1
   lvcreate -L10G -n root Earendil
   lvcreate -L2G -n boot Earendil   
   lvcreate -L400G -n servers Earendil
   lvcreate -L950G -n storage Earendil
   lvcreate -i3 -I4 -L4G -n swap Disks
   lvcreate -i3 -I4 -L400G -n sources Disks
   lvcreate -i3 -I4 -L950G -n storage Disks

A maior parte de este espazo se compartirá a través de NFS, de modo que montaremos a seguinte estructura no raíz do sistema:

-(drbd cos servidores do sistema) /NFS/servers, montaremos /dev/Earendil/servers
-(isos e aplicacións para instalacións) /NFS/isos, montaremos /dev/Disks/sources
-(discos para máquinas virtuais sen redundancia) /NFS/storage, montaremos /dev/Disks/storage. Como este almacenamento non ten redundancia, pode empregarse para discos virtuais en RAID.
-(discos para máquinas virtuais nun RAID 1) /NFS/machines, montaremos /dev/Earendil/storage
gandalf.iesrodeira.com

En gandalf.iesrodeira.com no Grupo de Volumes Gandalf craremos un Volume Lóxico mirror (300GB) para aloxar un Mirror de Debian para as actualizacións da rede, outro VL images (300GB) para almacenar as imaxes fsarchiver de instalación das aulas, un VL servers (400GB) para os servidores do sistema en DRBD con Earendil, un VL machines (950GB) para almacenar discos virtuais e un VL datos (400GB) para backups dos sistemas. Os puntos de montaxe serían os seguintes:

- En /NFS/servers, /dev/Gandalf/servers
- En /NFS/mirror, /dev/Gandalf/mirror
- En /NFS/machines, /dev/Gandalf/machines
- En /NFS/images, /dev/Gandalf/images
- En /NFS/datos, /dev/Gandalf/datos
barbol.iesrodeira.com

Este servidor non formará parte do cluster, pero servirá de respaldo dos discos das máquinas virtuais dos servicios mediante un VL datos (170GB). Este volume normalmente non está montado, e en caso de necesidade podería montarse en /var/lib/libvirt/servers para arrancar os servicios.

Boxinfo info.png
No caso de Earendil, no momento da instalación xa tiñas servizos en funcionamento, polo que se procedeu a unha Migración a RAID 1 en ''Quente''
Boxinfo info.png
Para garantizar a alta dispoñibilidade (HA) dos servizos da rede, montaremos o cluster de dous nodos Gandalf - Earendil, para o que precisaremos un DRBD sobre o volume coa información esencial: servers. O volume Templates que terá as plantillas para o desplegue rápido de sistemas podería estar duplicado nos dous servidores preferiblemente nas mesmas rutas relativas, pero a causa de que os ficheiros non cambian non formarán parte do DRBD.

Unha vez particionados os discos e instalado o sistema, procederemos á instalación de DRBD en Earendil e Gandalf, no que Gandalf será o nodo primario. Co DRBD en funcionamento, procederemos á configuración dun servicio de alta dispoñibilidade para os servidores virtuais.

Servicios Xen

Router

A Máquina Virtual "Router" será a encargada de redirixir a entrada aos servizos ofrecidos pola rede hacia o mundo exterior. Estes servicios fundamentalmente serán:

  • Servizos de Acceso Remoto
    • RDP hacia o Servidor de Dominio Windows
    • NX/X2GO hacia o Servidor de Escritorio Linux
    • SSH hacia os distintos servers: (Router,Proxy,Servidor Web e Servidor de Escritorio)
  • Servizos de Correo
    • SMTP,POP,e IMAP
    • WebMail
  • Servizo DNS
  • SFTP (mediante o acceso SSH)

Esta máquina deberá tamen facilitar acceso a Internet, sempre e cando a solicitude sexa no porto 80 ou 443 e a mesma se produza dende o Proxy.

Datos Técnicos

Máquina Virtual Xen en modo paravirtualizado (PVM) executando Debian Jessie

 * 2 Cores
 * 600M de RAM
 * 3 Ethernet:
    eth0 - 172.20.0.1 (untagged), acceso a rede local ASIR
    eth1 - 192.168.1.2 (tag 4), acceso a ADSL1 na rede CICLOS
    eth2 - 192.168.2.2 (tag 4), acceso a ADSL2 na rede CICLOS
 * 80GB HDD

Configuración

Partimos dun disco VHD cunha instalación básica de Debian Jessie.

  1. Creamos unha copia utilizando a imaxe como base:
 vhd-util snapshot -n RodeiraRouter.vhd -p JessieBase.vhd
  1. Creamos a configuración da VM no ficheiro RodeiraRouter.cfg
 bootloader = 'pygrub'
 vcpus = '2'
 memory = '600'
 disk = ['tap2:tapdisk:vhd:RodeiraRouter.vhd,xvda,w']
 name = 'RodeiraRouter'
 vif =   [ 'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0,model=e1000','mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0.4,model=e1000',
           'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0.4,model=e1000'
         ]
 on_poweroff = 'destroy'
 on_reboot = 'restart'
 on_crash = 'restart'
 acpi = '0'
 apic = '1'
 viridian = '0'
 xen_platform_pci='0'
 sdl = '0'
 vnc = '0'
 vnclisten = '0.0.0.0'
 vncpasswd = 
 stdvga = '0'
 usb = '0'
  1. Arrancamos a VM
 xm create RodeiraRouter.cfg
  1. Iniciamos sesión a través de ssh (usuario root e password root, a máquina iniciará con IP dinámica) ou co seguinte comando
 xm console RodeiraRouter
  1. Configurar as ethernet editando /etc/network/interfaces
 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
 #
 # The loopback network interface
 auto lo
 iface lo inet loopback
 #
 # The primary network interface
 #allow-hotplug eth0
 #iface eth0 inet dhcp
 auto eth0
 iface eth0 inet static
 address 172.20.0.1
 netmask 255.255.0.0
 gateway 172.20.2.1
 nameserver 172.20.2.1
 #
 auto eth1
 iface eth1 inet static
 address 192.168.1.2
 netmask 255.255.255.0
 #
 auto eth2
 iface eth2 inet static
 address 192.168.2.2
 netmask 255.255.255.0
  1. Configurar hostname a RodeiraRouter
 hostname "RodeiraRouter" && echo "RodeiraRouter">/etc/hostname
  1. Cambiar a password de root
 passwd root
  1. Reiniciamos a máquina
 shutdown -r now
  1. Iniciamos sesión como root por ssh
 ssh root@172.20.0.1
  1. Instalamos software necesario
 # Para protexer accesos dende internet. Ao cabo de varios intentos fallidos bloquea temporalmente ao atacante
 apt-get install fail2ban
  1. Configuramos os parámetros do sistema para poder rutar para moitas máquinas editando /etc/rc.local
 # Habilitamos forwarding
 # A tabla de conexións debe ser grande e rápida. 
 # Poñemos os HASHSIZE e o CONNTRACK_MAX da taboa NAT a 1048576 o que nos permitirá máis de 2000 conexións simultáneas.
 # Chamamos ao script encargado de configurar o firewall
 # Aseguramos que non nos falsifiquen os gateways nin servidores mediante envenenamento ARP
 #
 echo 1 > /proc/sys/net/ipv4/ip_forward
 modprobe ip_conntrack hashsize=1048576
 modprobe ip_conntrack_ftp
 modprobe ip_nat_ftp
 modprobe ip_conntrack_sip
 modprobe ip_nat_sip
 echo 1048576 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
 /root/scripts/firewall.sh
 arp -s 192.168.2.1 XX:XX:XX:XX:XX:XX
 arp -s 192.168.1.1 XX:XX:XX:XX:XX:XX
 arp -s 172.20.2.1 XX:XX:XX:XX:XX:XX
 arp -s 172.20.0.2 XX:XX:XX:XX:XX.XX
 arp -s 172.20.0.3 XX:XX:XX:XX:XX:XX
 exit 0
  1. Creamos unha carpeta scripts e dentro creamos as regras do firewall e NAT un ficheiro chamado firewall.sh
 #!/bin/bash
 # Reglas iptables para firewalling e rutado
 # Xavi 2013
 #
 ETH_LAN="eth0"
 ETH_ADSL1="eth1"
 ETH_ADSL2="eth2"
 #
 WEBSERVER="172.20.0.2"
 PROXYSERVER="172.20.2.1"
 DESKTOPSERVER="172.20.0.3"
 ADSL1="192.168.1.1"
 ADSL2="192.168.2.1"
 #
 echo "Parando fail2ban..."
 /etc/init.d/fail2ban stop
 #
 echo "Inicializando iptables..."
 iptables -F
 iptables -X
 iptables -Z
 iptables -t nat -F
 iptables -t mangle -F
 #
 echo "Establecendo politicas por defecto..."
 iptables -P INPUT DROP
 iptables -P OUTPUT DROP
 iptables -P FORWARD DROP
 #
 echo "Habilitando trafico interno..."
 iptables -I INPUT 1 -i lo -j ACCEPT
 iptables -I OUTPUT 1 -o lo -j ACCEPT
 #
 echo "Habilitando acceso SSH no porto 22"
 iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
 #
 echo "Habilitando saida dende maquina local..."
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A OUTPUT -j ACCEPT
 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 #
 echo "Iniciando politicas de seguridade..."
 # 224.0.0.0/24 es solo para enlaces multicast locales. Aquí solo pueden encontrar cosas como protocolos de enrutado.
 # Los datagramas a estas direcciones no deberían ser reenviadas por los routers
 echo "Filtrando Multicast..."
 iptables -A FORWARD -d 224.0.0.0/8 -j DROP
 iptables -A INPUT -s 224.0.0.0/4 -j DROP
 iptables -A FORWARD -s 224.0.0.0/4 -j DROP
 iptables -A FORWARD -d 224.0.0.0/4 -j DROP
 iptables -A INPUT -s 224.0.0.0/5 -j DROP
 #
 echo "Filtrando clase A privada..."
 iptables -A INPUT -s 10.0.0.0/8 -j DROP
 iptables -A FORWARD -s 10.0.0.0/8 -j DROP
 #
 echo "Verificando conexións SYN..."
 iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
 iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
 #
 echo "Filtrando fragmentos IP"
 iptables -A INPUT -f -j LOG --log-prefix "IP FRAG: "
 iptables -A INPUT -f -j DROP
 iptables -A FORWARD -f -j LOG --log-prefix "FORWARD IP FRAG: "
 iptables -A FORWARD -f -j DROP
 #
 echo "Protección ICMP..."
 iptables -A INPUT -m state -p icmp --state INVALID -j DROP
 iptables -A OUTPUT -m state -p icmp --state INVALID -j DROP
 #
 echo "Habilitando PING..."
 iptables -A INPUT -p icmp -j ACCEPT
 #
 echo "Proteccion SYN FLOODING..."
 iptables -N SYNFLOOD_A
 iptables -N SYNFLOOD_B
 iptables -N SYNFLOOD_C
 iptables -A INPUT -i ${ETH_ADSL1} -p tcp --syn -j SYNFLOOD_A
 iptables -A INPUT -i ${ETH_ADSL2} -p tcp --syn -j SYNFLOOD_B
 iptables -A INPUT -i ${ETH_LAN} -p tcp --syn -j SYNFLOOD_C
 iptables -A SYNFLOOD_A -m limit --limit 1/s --limit-burst 3 -j RETURN
 iptables -A SYNFLOOD_A -j DROP
 iptables -A SYNFLOOD_B -m limit --limit 1/s --limit-burst 3 -j RETURN
 iptables -A SYNFLOOD_B -j DROP
 iptables -A SYNFLOOD_C -m limit --limit 1/s --limit-burst 3 -j RETURN
 iptables -A SYNFLOOD_C -j DROP
 #
 echo "Habilitando DNS..."
 iptables -t nat -A PREROUTING -p udp ! -i ${ETH_LAN} --dport 53 -j DNAT --to-destination ${PROXYSERVER}
 iptables -A FORWARD -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A FORWARD -p udp --sport 53 -i ${ETH_LAN} -s ${PROXYSERVER} -j ACCEPT
 #
 echo "Habilitando Servidor Web..."
 iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 80 -j DNAT --to-destination ${PROXYSERVER}
 iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 443 -j DNAT --to-destination ${PROXYSERVER}
 iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 #
 echo "Habilitando SSH a Desktop..."
 iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 22 -j DNAT --to-destination ${DESKTOPSERVER}
 iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 #
 echo "Habilitando POP3s, SMTP..."
 iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 995 -j DNAT --to-destination ${WEBSERVER}
 iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 25 -j DNAT --to-destination ${WEBSERVER}
 iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
 #
 echo "Permitindo saida a servicio web por parte do proxy e servidor web..."
 iptables -A FORWARD -p tcp -s ${PROXYSERVER} --dport 80 -j ACCEPT
 iptables -A FORWARD -p tcp -s ${PROXYSERVER} --dport 443 -j ACCEPT
 iptables -A FORWARD -p tcp -s ${WEBSERVER} --dport 80 -j ACCEPT
 iptables -A FORWARD -p tcp -s ${WEBSERVER} --dport 443 -j ACCEPT
 #
 echo "Facendo NAT..."
 iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source ${ADSL2}
 iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source ${ADSL1}
 #
 echo "Iniciando Fail2ban..."
 /etc/init.d/fail2ban start

Si non nos interesa ter unha imaxe copy on write dunha imaxe base podemos convertila a unha imaxe normal:

 vhd-util coalesce -n RodeiraRouter.vhd -o RodeiraRouterFull.vhd -p
 # Xa non precisamos a copia CoW
 rm RodeiraRouter.vhd
 mv RodeiraRouterFull.vhd RodeiraRouter.vhd

E incluso, a unha imaxe raw que ofrecerá mellor rendimento. Nese caso Debemos modificar o ficheiro de configuración Xen de modo que o disco sexa disk = ['file:RodeiraRouter.vhd,xvda,w']:

 #convertimos
 qemu-img convert RodeiraRouter.vhd -O raw RodeiraRouter.raw

Proxy

A Máquina Virtual "Proxy" será a encargada de facilitar acceso web tanto dende a rede do ciclo ASIR, como dende a rede de CICLOS a través da conexión Internet da Xunta. Ademáis fará as veces de servidor de dominio (DNS) para o dominio iesrodeira.com, tanto para as redes internas como para os accesos dende internet aos distintos servizos.

Este servidor terá un portal web que permitira regular o acceso a internet por parte das distintas aulas (WebSqusr), e ademáis recollerá as páxinas dos distintos servidores web das redes para servilas hacia internet.

A Xunta non admite o acceso aos seus servizos dende detrás dun proxy, si a solicitude se fai dende a rede interna. Polo tanto, as peticións de páxinas da xunta serán desviadas para recollelas a través das ADSL.

Datos Técnicos

Máquina Virtual Xen e modo paravirtualizado (PVM) executando Debian Jessie

 * 2 Cores
 * 3584M de RAM
 * 3 Ethernet:
    eth0 - 172.20.2.1 (untagged), acceso a rede local ASIR
    eth1 - 172.16.2.1 (tag 4), acceso a rede CICLOS
    eth2 - 69.65.24.206 (tag 3), acceso a rede XUNTA

Configuración

Partimos dun disco VHD cunha instalación básica de Debian Jessie.

  1. Creamos unha copia utilizando a imaxe como base:
 vhd-util snapshot -n RodeiraProxy.vhd -p JessieBase.vhd
  1. Creamos a configuración da VM no ficheiro RodeiraProxy.cfg
 bootloader = 'pygrub'
 vcpus = '2'
 memory = '3584'
 disk = ['tap2:tapdisk:vhd:RodeiraProxy.vhd,xvda,w']
 name = 'RodeiraProxy'
 vif =   [ 'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0,model=e1000','mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0.4,model=e1000',
           'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0.3,model=e1000'
         ]
 on_poweroff = 'destroy'
 on_reboot = 'restart'
 on_crash = 'restart'
 acpi = '0'
 apic = '1'
 viridian = '0'
 xen_platform_pci='0'
 sdl = '0'
 vnc = '0'
 vnclisten = '0.0.0.0'
 vncpasswd = 
 stdvga = '0'
 usb = '0'
  1. Arrancamos a VM
 xm create RodeiraProxy.cfg
  1. Iniciamos sesión a través de ssh (usuario root e password root, a máquina iniciará con IP dinámica) ou co seguinte comando
 xm console RodeiraProxy
  1. Configurar as ethernet editando /etc/network/interfaces
 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
 #
 # The loopback network interface
 auto lo
 iface lo inet loopback
 #
 # The primary network interface
 #allow-hotplug eth0
 #iface eth0 inet dhcp
 auto eth0
 iface eth0 inet static
 address 172.20.2.1
 netmask 255.255.0.0
 nameserver 172.20.2.1
 #
 auto eth1
 iface eth1 inet static
 address 172.16.2.1
 netmask 255.255.0.0
 #
 auto eth2
 iface eth2 inet static
 address 69.65.24.206
 netmask 255.255.254.0
 gateway 69.65.24.1
  1. Configurar hostname a RodeiraProxy
 hostname "RodeiraProxy" && echo "RodeiraProxy">/etc/hostname
  1. Cambiar a password de root
 passwd root
  1. Reiniciamos a máquina
 shutdown -r now
  1. Iniciamos sesión como root por ssh
 ssh root@172.20.0.1
  1. Instalamos o software necesario
 apt-get install apache2 php5 bind9 bind9utils bind9-doc squid make
  1. Instalamos WebSqusr e especificamos o seguinte en /etc/squid/squid.conf:
 hosts_file /etc/hosts
 dns_nameservers 172.20.2.1 8.8.8.8
 cache_replacement_policy heap LFUDA
 cache_swap_low 90
 cache_swap_high 95
 maximum_object_size_in_memory 50 KB
 cache_dir aufs /var/spool/squid 40000 16 256
 cache_mem 100 MB
 logfile_rotate 10
 memory_pools off
 maximum_object_size 50 MB
 quick_abort_min 0 KB
 quick_abort_max 0 KB
 log_icp_queries off
 client_db off
 buffered_logs on
 half_closed_clients off
 
Configuración DNS (bind)

- Engadimos os seguintes ficheiros a /etc/bind/:

  • 0.20.172.in-addr.arpa.zone
  $TTL 86400
  @	IN	SOA	@	root.localhost (
  		2 ; serial
  		28800 ; refresh
  		7200 ; retry
  		604800 ; expire	
  		86400 ; ttk
  		)
  @	IN	NS	dns.iesrodeira.com.
  1	IN	PTR	router.iesrodeira.com.
  2	IN	PTR	web.iesrodeira.com.
  3	IN	PTR	desktop.iesrodeira.com.
  • 1.20.172.in-addr.arpa.zone
  $TTL 86400
  @	IN	SOA	@	root.localhost (
  		2 ; serial
  		28800 ; refresh
   		7200 ; retry
 		604800 ; expire	
  		86400 ; ttk
  		)
  @	IN	NS	dns.iesrodeira.com.
  1	IN	PTR	gandalf.iesrodeira.com.
  2	IN	PTR	nas.iesrodeira.com.
  10	IN	PTR	sauron.iesrodeira.com.
  20	IN	PTR	earendil.iesrodeira.com.
  30	IN	PTR	barbol.iesrodeira.com.
  • 2.20.172.in-addr.arpa.zone
  $TTL 86400
  @	IN	SOA	@	root.localhost (
  		2 ; serial
  		28800 ; refresh
  		7200 ; retry
  		604800 ; expire	
  		86400 ; ttk
  		)
  @	IN	NS	dns.iesrodeira.com.
  1	IN	PTR	proxy.iesrodeira.com.
  • 2.16.172.in-addr.arpa.zone
  $TTL 86400   
  @	IN	SOA	@	root.localhost (
  		2 ; serial
  		28800 ; refresh
  		7200 ; retry
  		604800 ; expire	
  		86400 ; ttk
  		)
  @	IN	NS	dns.iesrodeira.com.
  1	IN	PTR	proxy.iesrodeira.com.
  • 2.168.192.in-addr.arpa.zone
  $TTL 86400
  @	IN	SOA	@	root.localhost (
  		2 ; serial
  		28800 ; refresh
  		7200 ; retry
  		604800 ; expire	
  		86400 ; ttk
  		)
  @	IN	NS	dns.iesrodeira.com.
  2	IN	PTR	router.iesrodeira.com.
  • 1.168.192.in-addr.arpa.zone
 $TTL 86400
 @	IN	SOA	@	root.localhost (
 		2 ; serial
 		28800 ; refresh
 		7200 ; retry
 		604800 ; expire	
 		86400 ; ttk
 		)
 @	IN	NS	dns.iesrodeira.com.
 2	IN	PTR	router.iesrodeira.com.
  • 161.129.213.in-addr.arpa.zone.externa
  $TTL 86400
  @	IN	SOA	dns.iesrodeira.com. xavi.iesrodeira.com. (
  		2005030302 ; serial
  		28800 ; refresh
  		7200 ; retry
  		604800 ; expire	
  		86400 ; ttk
  		)
   	IN	NS	dns.iesrodeira.com.
    	IN      NS      esiami.tsai.es.
   	IN      NS      esiami2.tsai.es.
  27	IN	PTR	iesrodeira.com.
  • 166.129.213.in-addr.arpa.zone.externa
  $TTL 86400
  @	IN	SOA	dns.iesrodeira.com. xavi.iesrodeira.com. (
  		2005030302 ; serial
  		28800 ; refresh
  		7200 ; retry
  		604800 ; expire	 
  		86400 ; ttk
  		)
  	IN	NS	dns.iesrodeira.com.
  	IN      NS      esiami.tsai.es.
  	IN      NS      esiami2.tsai.es.
  29	IN	PTR	ssh.iesrodeira.com.
  • iesrodeira.com.zone
  $TTL 86400
  @	IN	SOA	@  root.localhost (
  			6 ; serial
  			28800 ; refresh
  			7200 ; retry
  			604800 ; expire	
  			86400 ; ttl
  			)
  @	    IN	NS	172.20.2.1.
  @	    IN	MX	10	correo.iesrodeira.com.
  @        IN      A       172.20.2.1
  proxy    IN	A	172.20.2.1
  correo   IN	A	172.20.0.2
  desktop  IN	A	172.20.0.3
  router   IN	A	172.20.0.1
  gandalf  IN	A 	172.20.1.1
  nas	    IN	A	172.20.1.2
  sauron   IN	A	172.20.1.10
  earendil IN	A	172.20.1.20
  barbol   IN	A	172.20.1.30
  dns      IN	CNAME	proxy.iesrodeira.com.
  internet IN 	CNAME   proxy.iesrodeira.com.
  pop		IN	CNAME	correo.iesrodeira.com.
  smtp		IN	CNAME	correo.iesrodeira.com.
  pop3		IN	CNAME	correo.iesrodeira.com.
  www		IN	CNAME	correo.iesrodeira.com.
  web		IN	CNAME	www.iesrodeira.com.
  asir		IN 	CNAME 	www.iesrodeira.com.
  inventario 	IN	CNAME	www.iesrodeira.com.
  fsala	IN	CNAME	www.iesrodeira.com.
  calendario 	IN	CNAME	www.iesrodeira.com.
  treasure 	IN	CNAME	www.iesrodeira.com.
  debuxo 	IN 	CNAME 	www.iesrodeira.com.
  ssh		IN	CNAME	desktop.iesrodeira.com.
  • iesrodeira.com.zone.externa
  $TTL 86400
  @	IN	SOA	dns.iesrodeira.com. xavi.iesrodeira.com. (
  	        2006061602  ; Serial	
  	        7200	    ; Refresh (1h)
  		7200	    ; Retry
  		604800      ; Expire
  		86400 )     ; Negative Cache TTL
  IN	NS	dns.iesrodeira.com.
  IN	NS      esiami.tsai.es.
  IN	NS      esiami2.tsai.es.
  @	IN	MX	10	correo.iesrodeira.com.
  @	IN	A	213.129.161.27
  correo	IN	A	213.129.161.27
  dns	IN	A	213.129.161.27
  ssh  IN	A       213.129.166.29
  iesrodeira.com. IN TXT "v=spf1 a mx ~all"
  correo.iesrodeira.com. IN TXT "v=spf1 a -all"
  desktop	IN	CNAME	ssh.iesrodeira.com.
  www		IN	CNAME	iesrodeira.com.
  web		IN	CNAME	iesrodeira.com.
  inventario 	IN	CNAME	iesrodeira.com.
  calendario 	IN 	CNAME 	iesrodeira.com.
  treasure 	IN	CNAME	iesrodeira.com.
  internet	IN	CNAME	iesrodeira.com.
  fsala	IN	CNAME	iesrodeira.com.
  debuxo	IN	CNAME	iesrodeira.com.
  pop		IN	CNAME	iesrodeira.com.
  smtp		IN	CNAME	iesrodeira.com.
  pop3		IN	CNAME	iesrodeira.com.


- Comentamos en /etc/bind/named.conf a liña include "/etc/bind/named.conf.default-zones";

- Asi quedará /etc/bind/named.conf.local

 //
 // Do any local configuration here
 //
 // Consider adding the 1918 zones here, if they are not used in your organization
 // include "/etc/bind/zones.rfc1918";
 view "internal" {
   match-clients { 172.20.0.0/16; 192.168.1.0/24; 172.16.0.0/16; 127.0.0.0/8; 69.65.24.206; };
   recursion yes;
   //
   // prime the server with knowledge of the root servers
   zone "." {
       type hint;
       file "/etc/bind/db.root"; 
   };
   //
   // be authoritative for the localhost forward and reverse zones, and for broadcast zones as per RFC 1912
   //
   zone "localhost" {
       type master;
       file "/etc/bind/db.local"; 
   };
   //
   zone "127.in-addr.arpa" {
       type master;
       file "/etc/bind/db.127"; 
   };
   //
   zone "0.in-addr.arpa" {
       type master;
       file "/etc/bind/db.0"; 
   };
   //
   zone "255.in-addr.arpa" {
       type master;
       file "/etc/bind/db.255"; 
   };
   //
   zone "com" { type delegation-only; };
   zone "net" { type delegation-only; };
   //
   zone  "0.20.172.in-addr.arpa" {
       type master;
       file  "/etc/bind/0.20.172.in-addr.arpa.zone"; 
   };
   //
   zone  "1.20.172.in-addr.arpa" {
       type master;
       file  "/etc/bind/1.20.172.in-addr.arpa.zone"; 
   };
   //
   zone  "2.20.172.in-addr.arpa" {
       type master;
       file  "/etc/bind/2.20.172.in-addr.arpa.zone"; 
   };
   //
   zone  "iesrodeira.com" {
       type master;
       file  "/etc/bind/iesrodeira.com.zone"; 
   };
 };
 view "external" {
   match-clients { any; };
   recursion no;
   //
   zone  "iesrodeira.com" {
      type master;
      file  "/etc/bind/iesrodeira.com.zone.externa";
   };
   //
   zone  "161.129.213.in-addr.arpa" {
      type master;
      file  "/etc/bind/161.129.213.in-addr.arpa.zone.externa";
   };
   //
   zone  "166.129.213.in-addr.arpa" {
      type master;
      file  "/etc/bind/166.129.213.in-addr.arpa.zone.externa";
   };
 };

- E así /etc/bind/named.conf.options:

  options {
       directory "/var/cache/bind";
       //
       // If there is a firewall between you and nameservers you want
       // to talk to, you may need to fix the firewall to allow multiple
       // ports to talk.  See http://www.kb.cert.org/vuls/id/800113
       //  
       // If your ISP provided one or more IP addresses for stable
       // nameservers, you probably want to use them as forwarders.
       // Uncomment the following block, and insert the addresses replacing
       // the all-0's placeholder.
       //
       // forwarders {
       //      0.0.0.0;
       // };
       //
       //========================================================================
       // If BIND logs error messages about the root key being expired,
       // you will need to update your keys.  See https://www.isc.org/bind-keys
       //========================================================================
       // dnssec-validation auto;
       auth-nxdomain no;    # conform to RFC1035
       // 
       forwarders {
         8.8.8.8; 212.166.64.1; 212.166.64.2;
       };
       version "iesrodeira.com 1.0";
       listen-on-v6 { any; };
  };
  logging {
     channel security_file {
       file "/var/log/named/security.log" versions 3 size 30m;
       severity dynamic;
       print-time yes;
     };
     category security {
       security_file;
     };
     category lame-servers {null; };
     category edns-disabled { null; };
  };

- Creamos a carpeta e o ficheiro para o logging cos permisos axeitados

  mkdir /var/log/named
  chown bind /var/log/named
  touch /var/log/named/security.log
  chown bind /var/log/named/security.log

- reiniciamos o servicio DNS

  service bind9 restart
WebSqusr

Servidor Web

O Servidor Web ofrecerá o servizo web principal para o centro. Aloxará a páxina mediawiki do ciclo e actuará de Proxy Inverso para outras web aloxadas no centro. Ademáis ofrecerá os servizos de e-mail e webmail. Se configurarán tamén servizos de recollida de correo mediante POP3 e envío con SMTP con autorización e sobre TLS/SSL.

Outra funcionalidade de este servidor será o aloxamento de proxectos de software mediante Trac

Datos Técnicos

Máquina Virtual Xen e modo paravirtualizado (PVM) executando Debian Wheezy

 * 2 Cores
 * 2048M de RAM
 * 1 Ethernet:
    eth0 - 172.20.0.2 (untagged), acceso a rede local ASIR

Configuración

Partimos dun disco VHD cunha instalación básica de Debian Wheezy.

  1. Creamos unha copia utilizando a imaxe como base:
 vhd-util snapshot -n RodeiraWebServer.vhd -p WheezyBase.vhd
  1. Creamos a configuración da VM no ficheiro RodeiraWebServer.cfg
 bootloader = 'pygrub'
 vcpus = '2'
 memory = '1024'
 disk = ['tap2:tapdisk:vhd:RodeiraWebServer.vhd,xvda,w']
 name = 'RodeiraWebServer'
 vif =   [ 'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0,model=e1000']
 on_poweroff = 'destroy'
 on_reboot = 'restart'
 on_crash = 'restart'
 acpi = '0'
 apic = '1'
 viridian = '0'
 xen_platform_pci='0'
 sdl = '0'
 vnc = '0'
 vnclisten = '0.0.0.0'
 vncpasswd = 
 stdvga = '0'
 usb = '0'
  1. Arrancamos a VM
 xm create RodeiraWebServer.cfg
  1. Iniciamos sesión a través de ssh (usuario root e password root, a máquina iniciará con IP dinámica) ou co seguinte comando
 xm console RodeiraWebServer
  1. Configurar as ethernet editando /etc/network/interfaces
 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
 #
 # The loopback network interface
 auto lo
 iface lo inet loopback
 #
 # The primary network interface
 #allow-hotplug eth0
 #iface eth0 inet dhcp
 auto eth0
 iface eth0 inet static
 address 172.20.0.2
 netmask 255.255.0.0
 gateway 172.20.2.1
 nameserver 172.20.2.1
 #
  1. Configurar hostname a RodeiraWebServer
 hostname "RodeiraWebServer" && echo "RodeiraWebServer">/etc/hostname
  1. Cambiar a password de root
 passwd root
  1. Reiniciamos a máquina
 shutdown -r now
  1. Iniciamos sesión como root por ssh
 ssh root@172.20.0.1
  1. Instalamos software necesario
 apt-get install apache2 mediawiki exim4-daemon-heavy exim4-doc-html roundcube roundcube-plugins roundcube-plugins-extra 
 apt-get install debmirror spam-assassin courier-imap courier-imap-ssl courier-pop-ssl fail2ban
Configuramos Mediawiki
  1. Creamos un servidor virtual para mediawiki creando o ficheiro mediawiki en /etc/sites-available activandoo despois mediante o comando a2ensite mediawiki && service apache2 reload
 <VirtualHost *:80>
    ServerName asir.iesrodeira.com
    ServerAdmin xavi@iesrodeira.com
    DocumentRoot /var/lib/mediawiki
 </VirtualHost>
  1. Creamos un tema para mediawiki derivando do tema Monobook no directorio /var/lib/mediawiki/skins
 cp Monobook.php Rodeira.php
 cp Monobook.deps.php Rodeira.deps.php
 mkdir rodeira
 cp -dp monobook/* rodeira/.

Persoalizaremos o tema engadindo unha cabeceira e modificando lixeiramente o css. E importante modificar o ficheiro /var/lib/mediawiki/resources/Resource.php para engadir o novo skin á lista de skins. O código a engadir sería o seguinte:

     'skins.rodeira' => array(
                'styles' => array(
                        'common/commonElements.css' => array( 'media' => 'screen' ),
                        'common/commonContent.css' => array( 'media' => 'screen' ),
                        'common/commonInterface.css' => array( 'media' => 'screen' ),
                        'rodeira/main.css' => array( 'media' => 'screen' ),
                ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),

O plugin Collection nos permitirá obter a versión PDF dos artigos de mediawiki. A renderización a faremos localmente mediante o servidor que lanzaremos co seguinte script de /etc/init.d:

#!/bin/sh

### BEGIN INIT INFO
# Provides: pdfserver
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Mediawiki PDF service 
# Description: Mediawiki export to PDF service 
###END INIT INFO

# Change the next 3 lines to suit where you install your script and what you want to call it
DIR=/usr/local/bin/
DAEMON_SRV=$DIR/nserve
DAEMON_SRV_NAME=nserve
DAEMON_QUE=$DIR/mw-qserve
DAEMON_QUE_NAME=mw-qserve
DAEMON_SPOOL=$DIR/nslave
DAEMON_SPOOL_NAME=nslave
SPOOL_OPTIONS="--cachedir /var/cache/mwcache"

# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=root

# The process ID of the script when it runs is stored here:
PIDFILE_SRV=/var/run/$DAEMON_SRV_NAME.pid
PIDFILE_QUE=/var/run/$DAEMON_QUE_NAME.pid
PIDFILE_SPOOL=/var/run/$DAEMON_SPOOL_NAME.pid

. /lib/lsb/init-functions

do_start () {
log_daemon_msg "Starting $DAEMON_SRV_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE_SRV --make-pidfile --user $DAEMON_USER --startas $DAEMON_SRV
[ $? -eq 0 ] || exit 1
log_daemon_msg "Starting $DAEMON_QUE_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE_QUE --make-pidfile --user $DAEMON_USER --startas $DAEMON_QUE
if ! [ $? -eq 0 ]; then
   start-stop-daemon --stop --pidfile $PIDFILE_SRV --retry 10
   exit 1
fi
log_daemon_msg "Starting $DAEMON_SPOOL_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE_SPOOL --make-pidfile --user $DAEMON_USER --startas ${DAEMON_SPOOL} -- ${SPOOL_OPTIONS}
if ! [ $? -eq 0 ]; then
   start-stop-daemon --stop --pidfile $PIDFILE_SRV --retry 10
   start-stop-daemon --stop --pidfile $PIDFILE_QUE --retry 10
   exit 1
fi
log_end_msg $?
}
do_stop () {
log_daemon_msg "Stopping system $DAEMON_SRV_NAME daemon"
start-stop-daemon --stop --pidfile $PIDFILE_SRV --retry 10
start-stop-daemon --stop --pidfile $PIDFILE_QUE --retry 10
start-stop-daemon --stop --pidfile $PIDFILE_SPOOL --retry 10
log_end_msg $?
}

case "$1" in

start|stop)
do_${1}
;;

restart|reload|force-reload)
do_stop
do_start
;;

status)
status_of_proc "$DAEMON_SRV_NAME" "$DAEMON_SRV" && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$DEAMON_NAME {start|stop|restart|status}"
exit 1
;;

esac
exit 0
Configuramos o servicio de correo exim4 com imap seguro e pop3s
  • En /etc/exim4/update-exim4.conf.conf desactivar ipv6 poñendo disable_ipv6='true'
  • En /etc/exim4/conf.d/auth/ poñemos:
login_saslauthd_server:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  # don't send system passwords over unencrypted connections
  server_condition = ${if saslauthd{{$auth1}{$auth2}}{1}{0}}
  server_set_id = $auth1
  .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
  server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
  .endif
  • En /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs engadimos o final:
  MAIN_TLS_ENABLE = true
  • Creamos os certificados:
  /usr/share/doc/exim4-base/examples/exim-gencert --force
  mkimapdcert

mkimapdcert utilizará o ficheiro /etc/courier/imapd.cnf para a creación dos certificados para imap.

  • O ficheiro /etc/exim4/update-exim4.conf.conf debe quedar:
 disable_ipv6='true'
 dc_eximconfig_configtype='internet'
 dc_other_hostnames='correo.iesrodeira.com;iesrodeira.com'
 dc_local_interfaces=
 dc_readhost=
 dc_relay_domains=
 dc_minimaldns='false'
 dc_relay_nets=
 dc_smarthost=
 CFILEMODE='644'
 dc_use_split_config='true'
 dc_hide_mailname=
 dc_mailname_in_oh='true'
 dc_localdelivery='maildir_home'
  • Creamos a configuración de exim4
 update-exim4.conf
  • Chegados a este punto, e unha vez reiniciado o servizo exim4 debería ser posible o envio de correos, o que podemos testar enviando algún e verificando a continuación a súa saída en /var/log/exim4/mainlog. Para que o servizo imap funcione correctamente, todos os usuarios deben dispoñer da carpeta Maildir que poderemos crear coa utilidade maildirmake (unha vez teñamos instalado o courier-imap).
  • A utilidade swaks nos permitirá verificar o funcionamento do correo cifrado, a instalamos e testamos:
 apt-get install swaks libnet-ssleay-perl
 $ swaks -a -tls -q HELO -s localhost -au usuario -ap '<>'
 === Trying localhost:25...
 === Connected to localhost.
 <-  220 RodeiraWebServer ESMTP Exim 4.50 Tue, 02 May 2006 17:56:25 -0400
 -> EHLO RodeiraWebServer
 <-  250-RodeiraWebServer Hello localhost [127.0.0.1]
 <-  250-SIZE 52428800
 <-  250-PIPELINING
 <-  250-STARTTLS
 <-  250 HELP
 -> STARTTLS
 <-  220 TLS go ahead
 === TLS started w/ cipher DHE-RSA-AES256-SHA
 ~> EHLO RodeiraWebServer
 <~  250-RodeiraWebServer Hello localhost [127.0.0.1]
 <~  250-SIZE 52428800
 <~  250-PIPELINING
 <~  250 HELP
 ~> QUIT
 <~  221 evie closing connection
  • Para a autenticación dos usuarios precisamos o paquete que nos proporciona SASL:
 apt-get install sasl2-bin
 adduser Debian-exim sasl
 service saslauthd restart
 service exim4 restart
  • Podemos testar que a autenticación se realiza sin problemas mediante un usuario do sistema:
 RodeiraWebServer:/etc/exim4# swaks -a -tls -q AUTH -s localhost -au usuario
 Password: passwd
 === Trying localhost:25...
 === Connected to localhost.
 <-  220 RodeiraWebServer ESMTP Exim 4.50 Fri, 05 May 2006 18:10:18 -0400
 -> EHLO RodeiraWebServer 
 <-  250-RodeiraWebServer Hello localhost [127.0.0.1]
 <-  250-SIZE 52428800
 <-  250-PIPELINING
 <-  250-STARTTLS
 <-  250 HELP
 -> STARTTLS
 <-  220 TLS go ahead
 === TLS started w/ cipher DHE-RSA-AES256-SHA
 ~> EHLO RodeiraWebServer
 <~  250-RodeiraWebServer Hello localhost [127.0.0.1]
 <~  250-SIZE 52428800
 <~  250-PIPELINING
 <~  250-AUTH PLAIN
 <~  250 HELP
 ~> AUTH PLAIN AGphc28uygBOaGVxMHc=
 <~  235 Authentication succeeded
 ~> QUIT
 <~  221 RodeiraWebServer closing connection

A instalación de pop3s e moi simple. En primeiro lugar debemos parar e desactivar o servizo pop3, e asegurarnos que en /etc/inetd.conf non se ten o servizo pop3 nin pop3s. Unha vez feito esto podemos comprobar o funcionamento iniciando unha conexión e realizando un diálogo pop3 no terminal:

  openssl s_client -connect correo.iesrodeira.com:995
Configuramos o WebMail.
  • Eliminamos a configuración por defecto de roundcube
 rm /etc/apache2/conf.d/roundcube
  • Creamos un host virtual para roundcube, e o activamos. Creamos /etc/apache2/sites-available/roundcube
 <VirtualHost *:80>
       ServerAdmin xavi@iesrodeira.com
       ServerName correo.iesrodeira.com
       ServerAlias correo.* mail.* webmail.*
       DocumentRoot /var/lib/roundcube
       Alias /program/js/tiny_mce/ /usr/share/tinymce/www/
       <Directory /var/lib/roundcube/>
               Options +FollowSymLinks
               AllowOverride All
               Order allow,deny
               Allow from all
       </Directory>
       <Directory /var/lib/roundcube/config>
               Options -FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /var/lib/roundcube/temp>
               Options -FollowSymLinks
               AllowOverride None
               Order allow,deny
               Deny from all
       </Directory>
       <Directory /var/lib/roundcube/logs>
               Options -FollowSymLinks
               AllowOverride None
               Order allow,deny
               Deny from all
       </Directory>
       <Directory /usr/share/tinymce/www/>
               Options Indexes MultiViews FollowSymLinks
               AllowOverride None
               Order allow,deny
               Allow from all
       </Directory>
       SSLEngine on
       SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
       SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
       <FilesMatch "\.(cgi|shtml|phtml|php)$">
          SSLOptions +StdEnvVars
       </FilesMatch>
       BrowserMatch "MSIE [2-6]" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
       # MSIE 7 and newer should be able to use keepalive
       BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
 </VirtualHost>
  • Activamos o sitio
 a2ensite roundcube
 service apache2restart

(Sería unha boa idea crear uns certificados para o uso co Mail dende roundcube).

  • en /etc/roundcube/main.inc.php debemos ter as opcions que siguen:
 $rcmail_config['imap_auth_type'] = ' ';
 $rcmail_config['mail_domain'] = 'iesrodeira.com';
 $rcmail_config['default_host'] = 'tls://localhost';'
 $rcmail_config['smtp_server'] = 'tls://smtp.iesrodeira.com';
Filtro de spam SpamAssasin

Instalaremos un filtro que marcará os correos que probablemente sexan spam.

  apt-get install spamassassin sa-exim

Debemos alimentar as regras bayes coa utilidade sa-learn. Para que os correos marcados como spam non sexan rexeitados, se non simplemente marcados, podemos agregar a /etc/exim4/conf.d/acl/40_exim4_config_check_data

 #@@
 accept        condition = ${if >={$message_size}{500k}{yes}{no}}
 warn          message = X-SA-Score: $spam_score
               spam = nobody:true
 warn          message = X-SA-Report: $spam_report
               spam = nobody:true
               condition = ${if >{$spam_score_int}{0}{true}{false}}
 warn          message = X-SA-Status: Yes
               spam = nobody:true
               condition = ${if >{$spam_score_int}{50}{true}{false}}

E posteriormente executar update-exim4.conf && service exim4 restart

Instalación de Trac

Trac é unha Wiki e un sistema de seguimento de incidencias (bugs) para proxectos de desenvolvemento de software mediante unha interface web simple. Proporciona interfaces a sistemas de control de versions como Subversion ou Git, unha Wiki integrada e utilidades de notificación.

Seguiremos os seguintes pasos:

a) Instalación
  apt-get update && apt-get install trac

Servidor de Escritorio

172.20.0.3

Outros Servizos

Kerberos e LDAP

Instalaremos o servidor Kerberos e LDAP para as montaxes NFS e para a autenticación dos usuarios. Se instalará un controlador primario krbldap-pdc e un secundario krbldap-bdc. Estos servidores serán tamén servidores de tempo ntp, que servirá tanto para sincronizar os tickets de kerberos como para manter os equipos da rede en hora.

 apt-get install ntp
 
  • Editamos /etc/ntp.conf e engadimos os seguintes servidores:
 hora.roa.es iburst
 server 0.es.pool.ntp.org
 server 1.es.pool.ntp.org
 server 2.es.pool.ntp.org
 server 3.es.pool.ntp.org

e configuramos o servidor para dar servizo a nosa rede

 broadcast 172.20.255.255
  • Paramos o servizo e sincronizamos con ntpdate-debian
 service ntp stop
 ntpdate-debian
 service ntp start

DNS

E-Mail

Servizos de Dominio e Active Directory

Servidor de Espazo en Disco (NAS)

Mantemento

Copias de Seguridade

Actualizacións