Virtualización do Ciclo ASIR do IES de Rodeira

De Wiki do Ciclo ASIR do IES de Rodeira
Saltar á navegación Saltar á procura

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 KSM (Kernel Samepage Merging).
echo 1 > /sys/kernel/mm/ksm/run
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs

Estas dúas liñas deben agregarse a /etc/rc.local de xeito que se active KSM en cada reinicio.

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.

Servicio SSH

Normalmente o acceso dende o exterior á rede do centro se realizará a través da conexión ADSL, e da máquina virtual router.iesrodeira.com que se encargará de xestionar os distintos servicios e establecer as políticas de firewall indicadas. O inconvinte de esta configuración é que en caso de caida do servizo de virtualización nos quedaremos sen posibilidade de acceder remotamente para solucionar os posibles problemas, de xeito que implantaremos un acceso ssh directo dende a ADSL aos servidores de virtualización gandalf.iesrodeira.com (porto 63000), earendil.iesrodeira.com (porto 63001) e barbol.iesrodeira.com (porto 63002).

Servidor de Tempo (NTP)

Ter todos os equipos da rede sincronizados ao mesmo tempo é fundamental para servicios como Kerberos e Active Directory. gandalf.iesrodeira.com se sincronizará mediante o protocolo NTP con proveedores de sincronización de internet, e proporcionará ese mesmo servicio á rede interna. earendil.iesrodeira.com se sincronizará con gandalf e con proveedores en internet.


driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable


# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
#
# Esta liña so en earendil.iesrodeira.com
server gandalf.iesrodeira.com iburst
#

#Estas liñas so en barbol.iesrodeira.com
server gandalf.iesrodeira.com iburst
server earendil.iesrodeira.com iburst
#
server 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


server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst


# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

# Clients from this (example!) subnet have unlimited access, but only if
# cryptographically authenticated.
restrict 172.20.0.0 mask 255.255.0.0 nomodify notrap

# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
broadcast 172.20.255.255

Servidores Kerberos

Co obxecto de poder securizar os accesos ás comparticións NFS, montaremos un servidor Kerberos sin LDAP. gandalf.iesrodeira.com actuará como PDC, e earendil.iesrodeira.com como BDC no Realm IESRODEIRA.COM.

Servicio NFS

Configuraremos as comparticións NFS e prepararemos os keytab de Kerberos para o acceso seguro entre os servidores de virtualización. barbol.iesrodeira.com únicamente será cliente NFS, mentras que tanto gandalf.iesrodeira.com como earendil.iesrodeira.com seran tanto clientes como servidores. O share servers será ofrecido a través da IP virtual nfs.iesrodeira.com de xeito que os clientes continúen funcionando aínda que caiga un dos servidores.

# Instalamos NFS
apt-get install nfs-kernel-server nfs-common
#
# Creamos o principal e Keytab para Kerberos (supoñemos que o admin é root)
kadmin -p root 
# En earendil engadimos: addprinc -randkey host/earendil.iesrodeira.com
#                        addprinc -randkey nfs/nfs.iesrodeira.com
#                        ktadd host/earendil.iesrodeira.com
#                        ktadd nfs/nfs.iesrodeira.com
# En gandalf engadimos:  addprinc -randkey host/gandalf.iesrodeira.com
#                        ktadd host/gandalf.iesrodeira.com

#copiamos o keytab de earendil a /tmp en gandalf
scp earendil:/etc/krb5.keytab gandalf:/tmp/earendil.keytab
# En gandalf Mediante ktutil cargamos krb5.keytab, engadimos /tmp/earendil.keytab e eliminamos 
# as entradas correspondentes a host/earendil.iesrodeira.com. Gardamos o resultado en /tmp/krb5.keytab
# rkt, delent, wkt
ktutil
# 
# Copiamos o keytab
cp /tmp/krb5.keytab /etc/krb5.keytab

As comparticións serán as seguintes:

  • gandalf.iesrodeira.com
/NFS/templates estará no DRBD igual que /NFS/templates, de xeito que se atopa duplicado en earendil.iesrodeira.com
/NFS            -sec=sys:krb5,ro,fsid=0,no_subtree_check       		172.20.0.0/16
# Imaxes de restauración.
/NFS/images     -sec=sys,acl,fsid=1,ro,no_subtree_check            	172.20.0.0/16
# Mirror de Debian
/NFS/mirror     -sec=sys,acl,ro,fsid=5,ro,no_subtree_check         	web.iesrodeira.com
# Discos de Máquinas Virtuais
/NFS/machines   -sec=sys,acl,rw,fsid=4,no_subtree_check,all_squash,anongid=65534,anonuid=65534   172.20.0.0/16
# Backups
/NFS/datos	-sec=krb5,acl,rw,fsid=7,no_subtree_check                	172.20.0.0/16
# Servidores do Sistema
/NFS/servers      -sec=sys,acl,rw,fsid=6,no_subtree_check,all_squash,anongid=65534,anonuid=65534  gandalf earendil barbol 
# Plantillas de Instalación de Sistemas
/NFS/templates  -sec=sys,acl,fsid=60,ro,no_subtree_check                    172.20.0.0/16
  • earendil.iesrodeira.com
/NFS            -sec=sys:krb5,ro,fsid=0,no_subtree_check        172.20.0.0/16
# ISOS de instalación e aplicacións para instalar
/NFS/isos       gandalf(sec=sys,rw,acl,fsid=1,no_subtree_check)		172.20.0.0/16(sec=sys,ro,acl,fsid=1,no_subtree_check)
# Espacio para discos virtuais (Sen RAID, Stripped de 3 discos)
/NFS/storage	-sec=sys,acl,rw,fsid=2,no_subtree_check,all_squash,anongid=65534,anonuid=65534  172.20.0.0/16
# Espacio para discos virtuais (Con RAID 1)
/NFS/machines   -sec=sys,acl,rw,fsid=3,no_subtree_check,all_squash,anongid=65534,anonuid=65534  gandalf earendil barbol
# Servidores do sistema (DRBD)
/NFS/servers    -sec=sys,acl,rw,fsid=6,no_subtree_check,all_squash,anongid=65534,anonuid=65534  gandalf earendil barbol
# Plantillas de instalación (DRBD)
/NFS/templates  -sec=sys,acl,fsid=60,ro,no_subtree_check                    172.20.0.0/16

Servicios en Máquinas Virtuais (KVM)

Para axilizar a instalación das máquinas virtuais, o máis práctico é facer unha instalación limpia de Debian Jessie da que se irán facendo copias dos discos para as distintas máquinas virtuais. A primeira tarefa debería ser reconfigurar o nome do host. Deberíamos:

#editar /etc/hostname
vim /etc/hostname
#editar /etc/hosts
vim /etc/hosts
#configurar hostname
hostname nomehost
#Copia de seguridade LVM co novo hostname
vgcfbackup
#Correo electrónico
vim /etc/mailname
vim /etc/exim4/update-exim4.conf.conf
update.exim4.conf

O correo electrónico xerado localmente en todos os servidores debería chegar ao administrador. Si non o facemos na instalación deberíamos:

#reconfigurar exim4
dpkg-reconfigure exim4-config
# Elexiremos
# - mail sent by smarthost; received via SMTP or fetchmail
# - System mail name localhost
# - IP para conexións SMTP 127.0.0.1
# - Vacios outros destiños  e relay
# - IP del el outgouing smarthost: correo.iesrodeira.com
# - NO ocultar local mail name
# - DNS-querys minimal: NO
# - format: mbox en /var/mail
# - split configuration: NO

# Editamos os alias e poñemos como alias  root: usuario_administrador_da_rede@correo.iesrodeira.com 
vim /etc/aliases
newaliases
/etc/init.d/exim4 restart

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 (ssh) hacia o Servidor de Escritorio Linux
  • Servizos de Correo
    • SMTP,POP,e IMAP hacia o Servidor Web
    • WebMail (no servidor Web)
  • Servizo DNS hacia o Proxy

Esta máquina deberá tamen facilitar acceso a Internet a rede local, sempre e cando a solicitude sexa no porto 80 ou 443 e a mesma se produza dende o Proxy, de xeito que sexa posible no proxy habilitar o acceso a internet á toda a rede en caso de fallo do servicio da Xunta.

Datos Técnicos

Máquina Virtual KVM executando Debian Jessie

  * hostname: router
  * domain: iesrodeira.com
  * 1 CPU
  * 512MB de RAM
  * 2 Ethernet:
     '''eth0''' - 172.20.0.1 (untagged), acceso a rede local ASIR
     '''eth1''' - 192.168.1.2 (tag 4), acceso a ADSL na rede CICLOS
  * 80GB HDD
Configuración

Faremos unha instalación básica de Debian Jessie sen entorno gráfico. Poderíamos copiar o disco comentado ao principio e facer os cambios apropiados.

  • Instalamos software necesario
  # Para protexer accesos dende internet. Ao cabo de varios intentos fallidos bloquea temporalmente ao atacante
  apt-get install fail2ban
  • 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
  • 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
#
  LOCAL_SSHPORT="23"

  ETH_LAN="eth0"
  ETH_ADSL="eth1"
  # 
  WEBSERVER="172.20.0.2"
  PROXYSERVER="172.20.2.1"
  DESKTOPSERVER="172.20.0.5"
  RDPSERVER="172.20.2.2"
  ADSL="192.168.2.2"
  LAN="172.20.0.1"
  VPNRANGE="172.20.80.0/24"
  #
  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 "Protecci\ufffdn 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 trafico interno..."
  iptables -I INPUT 1 -i lo -j ACCEPT
  iptables -I OUTPUT 1 -o lo -j ACCEPT
  #  
  echo "Habilitando acceso SSH"
  iptables -I INPUT 1 -p tcp --dport ${LOCAL_SSHPORT} -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\ufffd solo pueden encontrar cosas como protocolos de enrutado.
  # Los datagramas a estas direcciones no deber\ufffdan 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
  iptables -A FORWARD -s 224.0.0.0/5 -j DROP
  iptables -A FORWARD -d 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\ufffdns 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 "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_ADSL} -p tcp --syn -j SYNFLOOD_A
  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 "Permitindo acceso a VPN IPSec IKEv2"
  iptables -I INPUT 1 -p udp --dport 68 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 500 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 4500 -j ACCEPT
  #
  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 ${WEBSERVER}
  iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 443 -j DNAT --to-destination ${WEBSERVER}
  iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
  iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
  #
  echo "Habilitando OCSP Server..."
  iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 8888 -j DNAT --to-destination ${WEBSERVER}
  iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 8888 -m state --state NEW,ESTABLISHED -j ACCEPT

  echo "Habilitando Servidor RDP..."
  echo "Habilitando servicio RDP SAURON..."
  iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 3389 -j DNAT --to-destination ${RDPSERVER}
  iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 3389 -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 "Acceso SSH para servidor subversion"
  iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 2200 -j DNAT --to-destination ${WEBSERVER}:22
  iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 2200 -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

  # WEBSERVER
  iptables -A FORWARD -s 172.20.0.2 -m mac --mac-source 00:16:3E:51:20:10 -j ACCEPT

  #KRBLDAP-PDC
  iptables -A FORWARD -s 172.20.0.3 -m mac --mac-source 00:16:3E:51:20:07 -j ACCEPT

  #KRBLDAP-BDC
  iptables -A FORWARD -s 172.20.0.4 -m mac --mac-source 00:16:3E:51:20:08 -j ACCEPT

  iptables -A FORWARD -s 172.20.0.0/24 -p icmp -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 ${ETH_ADSL} -j SNAT --to-source ${ADSL}
  iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source ${LAN}
  #
  echo "Eliminando SNAT e DNAT para a VLAN"
  iptables -t nat -I POSTROUTING 1 -s ${VPNRANGE} -j RETURN
  iptables -t nat -I PREROUTING 1 -s ${VPNRANGE} -i eth1 -j RETURN 
  iptables -I FORWARD 1 -i eth1 -s ${VPNRANGE} -j ACCEPT
  iptables -I FORWARD 1 -i eth0 -d ${VPNRANGE} -j ACCEPT
  #	
  echo "Iniciando Fail2ban..."
  /etc/init.d/fail2ban start
  • Reconfiguramos o porto SSH, xa que o 22 será redirixido a desktop.iesrodeira.com.
# Poñemos: Port 23
vim /etc/ssh/sshd_config
# Reconfiguramos fail2ban para o porto ssh 23 na sección [ssh]
vim /etc/fail2ban/jail.conf

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.

Datos Técnicos

Máquina Virtual KVM 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 dunha copia do disco "orixinal" como explicamos anteriormente e persoalizamos o hostname e configuramos a rede e o correo do xeito indicado con anterioridade.

  • Instalamos o software necesrio
  apt-get install apache2 php5 bind9 bind9utils bind9-doc squid make
  • Instalamos WebSqusr e especificamos o seguinte en /etc/squid/squid.conf nos sitios axeitados:
  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
  • configuramos o DNS (bind) engadindo 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     krbldap-pdc.iesrodeira.com. ; Kerberos+LDAP Domain controller (PDC)
   4    IN      PTR     krbldap-bdc.iesrodeira.com  ; Kerberos+LDAP Domain controller (BDC)
   5	IN	PTR	desktop.iesrodeira.com.
   6    IN      PTR     saruman.iesrodeira.com.     ; Windows 2012 Server
   7    IN      PTR     radagast.iesrodeira.com.    ;Samba4 Active Directory Domain Controller
   8    IN      PTR     nazgul.iesrodeira.com.      ; Windows 8.1 Pro Desktop
-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	nfs.iesrodeira.com.

   10	IN	PTR	earendil.iesrodeira.com.
   20	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    IN      PTR     sauron.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    IN      PTR     sauron.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.
   3    IN      PTR     gandalf.iesrodeira.com.
   4    IN      PTR     earendil.iesrodeira.com.
   5    IN      PTR     barbol.iesrodeira.com.
-124.4.212.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.
   1	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.5
   router   IN	A	172.20.0.1
   gandalf  IN	A 	172.20.1.1
   nfs	    IN	A	172.20.1.2
   sauron   IN	A	172.20.2.2
   earendil IN	A	172.20.1.10
   barbol   IN	A	172.20.1.20
   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.
   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	212.4.124.1
   correo	IN	A	212.4.124.1
   dns	        IN	A	212.4.124.1
   ssh          IN	A       212.4.124.1
   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.
   pop		IN	CNAME	iesrodeira.com.
   smtp		IN	CNAME	iesrodeira.com.
   pop3		IN	CNAME	iesrodeira.com.
   internet     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
  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;

    zone "." {
        type hint;
        file "/etc/bind/db.root"; 
    };

    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  "124.4.212.in-addr.arpa" {
       type master;
       file  "/etc/bind/124.4.212.in-addr.arpa.zone.externa";
    };
  };
  • /etc/bind/named.conf.options:
   options {
        directory "/var/cache/bind";
     
        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 e reiniciamos o servizo
   mkdir /var/log/named
   chown bind /var/log/named
   touch /var/log/named/security.log
   chown bind /var/log/named/security.log
   service bind9 restart

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, webmail e servidor de certificación X.509 mediante unha infraestructura PKI. 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
 * 1500M de RAM
 * 1 Ethernet:
    eth0 - 172.20.0.2 (untagged), acceso a rede local ASIR
Configuración
  • Instalamos software necesario
  apt-get install apache2 mediawiki exim4-daemon-heavy exim4-doc-html 
  apt-get install roundcube roundcube-plugins roundcube-plugins-extra 
  apt-get install debmirror spam-assassin courier-imap courier-imap-ssl courier-pop-ssl 
  apt-get install fail2ban openssl
  • Crearemos unha estructura PKI, que nos servirá para a emisión de certificados. Precisaremos un certificado para imap outro para pop e outro para o roundcube.
  • Creamos un servidor virtual para mediawiki creando o ficheiro mediawiki en /etc/sites-available activando o site mediante o comando a2ensite mediawiki && service apache2 reload
  <VirtualHost *:80>
     ServerName asir.iesrodeira.com
     ServerAdmin xavi@iesrodeira.co 
     DocumentRoot /var/lib/mediawiki
  </VirtualHost>
  • 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. É 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 desactivamos ipv6 poñendo disable_ipv6='true' e 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
  • Normalmente crearíamos os certificados. mkimapdcert utilizará o ficheiro /etc/courier/imapd.cnf para a creación dos certificados para imap, que deberíamos persoalizar en primeiro lugar. Pero nos non precisamos imap sobre SSL xa que será de uso local para roundcube, de xeito que o desactivamos en /etc/courier/imapd-ssl, e para pop3s que xeneraremos o noso propios certificados mediante a PKI, e a cadea de verificación concatenando os certificados ca.pem e o certificado creado para pop3s.
   /usr/share/doc/exim4-base/examples/exim-gencert --force
   mkimapdcert
  • 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
A execución do comando producirá unha saida similar a esta:
  $ 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:
  web:/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>
<source>

* Activamos o sitio. 
<source lang='bash'>
  a2ensite roundcube
  service apache2restart
  • 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';
  • O WebMail estará accesible en https://correo.iesrodeira.com, para o que crearemos mediante a nosa PKI un certificado para correo.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. Utilizaremos subversion como xestor de repositorios. Procederemos á Instalación dun sistema Trac con Subversion

Servidor de Escritorio

172.20.0.3

Servizos de Dominio e Active Directory

Mantemento

Copias de Seguridade

Actualizacións