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 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), con gateways 192.168.1.1 e 192.168.2.1. 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). A asignación dos Tag 802.11q será a seguinte:

  • RedeASIR: default (Tag 1)
  • RedeXUNTA: Tag 3
  • RedeCICLOS_ADSL: Tag 4

Os servidores de virtualización poderán estar situados en calqueira punto da rede 802.11q (switches do Aula 3, Aula 4 ou Departamento). Chamaremos ao porto onde se vai poñer un servidor de virtualizacion PV. As conexións nos switches son as seguintes:

Departamento
[UPL3,UPL4,PCA,PXU,PV] - Conexións aos switches do Aula 3 e Aula 4, aos equipos da Rede CICLOS_ADSL, a saída hacia a rede de acceso a internet (Rede XUNTA) e os portos de virtualización.

O esquema 802.11q quedaría así:

 VLAN ASIR: default. Eliminamos os portos PXU e PCA
 VLAN XUNTA (VID 3): PV (tagged),PXU (untagged, PVID 3),UPL3 (tagged), UPL4 (tagged)
 VLAN CICLOS_ADSL (VID 4): PV (tagged),PCA (untagged, PVID 4), UPL3 (tagged), UPL4(tagged)
Aula 3 e Aula 4
[UPL, PV] - Conexión ao switch do departamento e portos de virtualización.

O esquema 802.11q sería:

 VLAN ASIR: default
 VLAN XUNTA (VID 3): PV (tagged), UPL (tagged)
 VLAN CICLOS_ADSL (VID 4): PV (tagged), UPL (tagged)

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 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.

Sistemas de Virtualización

Os sistemas de virtualización elexidos son Xen para virtualizar as máquinas Linux mediante paravirtualización, e KVM para virtualización hardware (HVM) que utilizarán sobre todo as máquinas virtuais Windows. O que nos ocupa agora utilizará máquinas virtuais Paravirtualizadas con Xen, que son de vital importancia para o funcionamento da rede, polo que implantaremos unha solución de alta dispoñibilidade mediante dous servidores Xen.

Estos servidores estarán duplicando o espazo en disco a compartir mediante DRBD, e ofrecerán servicios de almacenamento SAN (NFS, SMB, iSCSI, NBD). En un momento determiñado únicamente un servidor SAN estará activo, actuando o outro como reserva. En caso de fallo do activo, o servidor reserva pasará a ofrecer estes servicios, e se fará cargo das máquinas virtuais que estaban funcionando no outro. Calqueira dos dous servidores poderá aloxar VMS Xen en calqueira momento.

Para detectar o posible fallo dun servidor e realizar a activación/migración de servizos poderemos facer uso de heartbeat ou corosync. O uso de pacemaker non parece necesario por tratarse dun cluster de so dous nodos.

Esta solución permitirá ademais que calqueira outro servidor de máquinas virtuais ou calqueira sistema que necesite acceso aos volumes compartidos poda seguir en funcionamento aínda que falle un dos servidores.

Os servidores Xen precisarán de 2 tarxetas de rede, aínda que se pode mellorar o rendimento mediante bonding sobre todo na línea do DRBD e na Ethernet de HA. Se empregara un alias na NIC estándar de xeito que poidamos establecer unha IP flotante para dar servizo a rede.

  • NIC estándar: E a tarxeta pola que se accederá normalmente aos equipos.
  • Tarxeta Ethernet de HA: Esta tarxeta compartirá a mesma IP entre os dous equipos. Cando cae o equipo 'activo', a IP pasa ao equipo 'pasivo'
  • Tarxeta Ethernet DRBD: Se encarga de transmitir o tráfico de duplicación de disco.

Servidor Xen A (Activo, proporcionando almacenamento compartido):

 NIC Estandar: 172.20.1.1/16 
 NIC HA: [172.20.1.2/16 - Flotante] 
 NIC DRBD: 172.21.1.10/16 

Servidor Xen B (Pasivo, non proporciona almacenamento, so executa VMS):

 NIC Estandar: 172.20.1.10/16 
 NIC HA: [0.0.0.0 - Flotante]
 NIC DRBD: 172.21.1.100/16

Configuración da Rede

Configuración da LAN

Os switches estarán configurados según o indicado no apartado anterior. En canto á configuración da rede que xestionará as máquinas virtuais dentro de cada host de VM (hostVM) existen varias posibilidades:

  1. As máquinas virtuais funcionan de modo completamente aillado.
    Esta opción non resulta de utilidade para a nosa instalación, e únicamente é de interese para facer probas con sistemas operativos de modo aillado da LAN. Mediante este tipo de configuración, a máquina virtual non ten tarxeta de rede, e si a ten, estará vinculada (ethernets virtuais emparelladas) a unha tarxeta virtual no hostVM completamente aillada (sen IP e sen pertencer a ningun bridge nin switch virtual)
  2. As máquinas virtuais estan ailladas, pero son accesibles mediante rutado e NAT.
    Tampouco é unha boa elección para o caso que nos ocupa. Este tipo de configuración permite a creación de máquinas virtuais ás que se pode controlar o acceso dende e hacia a LAN mediante NAT no hostVM co uso de iptables. A tarxeta de rede esta vinculada a unha tarxeta virtual do hostVM que terá unha dirección IP, permitindo o acceso dende o hostVM á máquina virtual. Si arrancamos varias máquinas virtuais e configuramos a ethernet emparellada no hostVM baixo unha misma ponte teremos unha LAN de máquinas virtuais independente da LAN real.
  3. As máquinas virtuais forman parte da LAN.
    Este é o modo ideal para a nosa configuración. Neste tipo de configuración, a ethernet virtual do hostVM emparellada coa máquina virtual forma parte dunha ponte cunha ethernet real conectada a LAN. Deste xeito a máquina virtual será completamente accesible dende a LAN como si se tratara dunha máquina real.

Configuraremos entonces as máquinas virtuais que nos van a proveer dos servicios necesarios no terceiro modo descrito. Existen principalmente dous modos de implementar esta solución: mediante o bridge estándar de Linux (brctl) ou mediante openvswitch. Ambos modos soportan LAN baixo 802.11q, necesario para esta implementación. A configuración das VLAN no modo ponte se realiza coa utilidade vconfig do paquete debian vlan.

A elección preferida é openvswitch, xa que nos ofrece un conxunto maior de características, aínda que o uso de pontes sexa mais simple e non requira a modificación dos scripts de configuración de máquina virtual de Xen.

Configuración de Servicios

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

  1. VM_ROUTER (Router)
    Firewall, DNAT.
  2. VM_PROXY (Proxy)
    Proxy Squid + WebSqusr (Control acceso a internet), DNS, Servicio Web recollendo dominios das máquinas internas.
  3. VM_WEBSERVER (Servidor Web)
    Servicio Web ASIR + WebMail + Mail (exim4) + Mirror Debian
  4. VM_DESKTOP (Servidor de Escritorio)
    Acceso mediante x2go e NX (ssh) a KDE,GNOME,FLUXBOX,XFCE ... e ás aplicacións hospedadas.

Outros servizos a ofrecer son o servicio de copias de seguridade, un repositorio svn e/ou git, servicios de dominio para a LAN (Windows ou Samba), LDAP, Kerberos, Radius... Estos servizos poden ser ofrecidos tanto por máquinas físicas como por máquinas virtuais situadas en las VLAN 802.11q axeitadas.

Configuración dos Servidores Xen

En principio calqueira máquina pode ser utilizada para ofrecer servicio de virtualización Xen, incluso sen extensións de virtualización no procesador, xa que imos empregar paravirtualización. No noso caso imos empregar en principio dúas máquinas (que poderán ser sustituidas en calqueira momento) coas seguintes características:

  • Servidor Intel:
    CPU Quad Core, 8Gb RAM, Soporte de virtualización na CPU, 2Tb de disco para share de VMs e servicio SAN: gandalf.iesrodeira.com, IP: 172.20.1.1
  • Servidor HP:
    CPU Dual Core, 8Gb RAM, Soporte de virtualización na CPU, 2Tb de disco para share de VMs e servicio SAN. earendil.iesrodeira.com, IP: 172.20.1.20


Estes dous equipos contarán cunha VLAN 802.11q con VID 5 para o intercambio DRBD.


  1. Instalación de Debian Jessie
  2. Instalación de Xen
  apt-get install xen-system-amd64
  1. Si queremos soporte de VLAN 802.11q nos bridge, paquete VLAN (utilidade vconfig), e precisaremos tamén as utilidades para imaxes VHD
  apt-get install vlan blktap-utils
  1. Preferentemente utilizaremos openvswitch. Esto incluirá o paquete openvswitch-brcompat que nos ofrecerá compatibilidade cos bridge estándar. Os scripts de Xen non soportan directamente openvswitch, e con brcompat, os comandos de bridge utilizarán openvswitch. Tamén se instalarán paquetes adicionais dos que non imos facer uso (de momento), como as utilidades IPSec como racoon
  apt-get install openvswitch-*
  1. Por defecto, openvswitch non utiliza a compatibilidade cos bridge, temos que activala editando /etc/default/openvswitch-switch e poñendo BRCOMPAT=yes
  1. Si se inserta no kernel o módulo bridge antes que o de compatibilidade de openvswitch (brcompat_mod), este non funcionará. O eliminamos do kernel.
  rmmod bridge
  1. 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. Recordemos que o noso host terá dúas tarxetas de rede como mínimo (si ten máis se unirán nun bonding para aumentar o rendimento e fiabilidade), unha para o DRBD e a outra para a comunicación coa rede local. Supoñamos eth0 para a rede local (172.20.0.0/16), e eth1 para a replicación DRBD (172.21.0.0/16).
  ovs-vsctl add-br xenbr
  ovs-vsctl add-br drbdbr
  ovs-vsctl add-port xenbr eth0
  ovs-vsctl add-port drbdbr eth1
  1. Configuramos a rede dos servidores. O script /etc/init.d/networking se executa antes de levantar o openvswitch, polo que teremos que reconfigurala unha vez todo esté en orde. Para elo alteraremos /etc/rc.local engadindo service networking restart xusto antes da liña exit 0. As redes quedarán do seguinte xeito:

Nos dous servidores en /etc/resolv.conf:

  #
  nameserver 172.20.2.1

Servidor 172.20.1.1 (gandalf.iesrodeira.com)

  #
  auto lo
  iface lo inet loopback
  #
  auto eth0
  address 0.0.0.0
  #   
  auto xenbr
  address 172.20.1.1
  netmask 255.255.0.0
  gateway 172.20.2.1
  

Servidor 172.20.1.20 (earendil.iesrodeira.com)

  #
  auto lo
  iface lo inet loopback
  #
  auto eth0
  address 0.0.0.0
  #   
  auto xenbr
  address 172.20.1.20
  netmask 255.255.0.0
  gateway 172.20.2.1
  
  1. Configuramos xen para garantizar un mínimo de memoria no dom-0 e para permitir a migración das máquinas virtuais entre o cluster. Para elo, debemos modificar o ficheiro /etc/xen/xend-config.sxp, en particular as seguintes liñas:
  # Nos aseguramos que o Dom0 non se queda sen memoria
  (dom0-min-men 1024)
  (enable-dom0-ballooning no)
  #
  # Teclado por defecto
  (keymap 'es')
  #
  # Configuramos migración
  (xend-relocation-server yes)
  (xend-relocation-port 8002)
  (xend-realocation-address 'xenbr')
  (xend-relocation-hosts-allow '^localhost$ ^earendil.iesrodeira.com$ ^gandalf.iesrodeira.com$')

Configuración do clustering HA e Servizo de SAN

Espacio de disco a compartir

Repartiremos o espazo en disco do seguinte xeito:

  • Para o DRBD precisamos únicamente o espazo ocupado polas máquinas virtuais cos servizos ofrecidos polo cluster, sen contar as imaxes base. Deixaremos espazo suficiente para agregar futuras máquinas ou ampliar o espazo das actuais. Polo tanto o ideal serían uns 500GB, nun volume LVM sobre un RAID 5 para crear o DRBD.
  • 1.5TB de disco repartidos mediante volumes lóxicos LVM, destiñados a crear volumes para almacenamento compartido por NFS, SMB, iSCSI e NBD. Idealmente deberían tamén estar sobre RAID 5, ou polo menos RAID 1.
Servidor SAN: NFS, SMB, iSCSI, NBD
DRBD
Hearbeat

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 "RouterRodeira" && 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/sh
 #
 ETH_LAN="eth0"
 ETH_ADSL1="eth1"
 ETH_ADSL2="eth2"
 #
 WEBSERVER="172.20.0.2"
 PROXYSERVER="172.20.2.1"
 DESKTOPSERVER="172.20.0.3"
 #
 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 ACCEPT
 #
 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 22 -j ACCEPT
 #
 echo "Habilitando saida dende maquina local..."
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A OUTPUT -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
 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ó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 "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 -A FORWARD -p udp -s 172.20.0.0/16 --dport 53 -j DROP
 iptables -A FORWARD -p udp -s 172.16.0.0/16 --dport 53 -j DROP
 iptables -A FORWARD -p udp -s 69.65.24.0/23 --dport 53 -j DROP
 iptables -t nat -A PREROUTING -p udp ! -i ${ETH_LAN} --dport 53 -j DNAT --to-destination ${PROXYSERVER}
 iptables -A FORWARD -p udp ! -i ${ETH_LAN} --dport 53 -m state --state NEW,ESTABLISHED -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..."
 iptables -A FORWARD -p tcp -s 172.20.2.1 --dport 80 -j ACCEPT
 iptables -A FORWARD -p tcp -s 172.20.2.1 --dport 443 -j ACCEPT
 #
 echo "Facendo NAT..."
 iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.2.2
 iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.2
 #
 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
 * 4096M 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 = '600'
 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
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

172.20.0.2

openbsd-inetd apache2 mediawiki exim4-daemon-heavy exim4-doc-html roundcube mailutils-imap4d debmirror spam-assassin

en /etc/exim4/update-exim4.conf.conf desactivar ipv6 poñendo disable_ipv6='true'

creamos un host virtual para roundcube, e o activamos:

  • Eliminamos a configuración por defecto de roundcube
 rm /etc/apache2/conf.d/roundcube
  • 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>
 </VirtualHost>
  • Activamos o sitio
 a2ensite roundcube
 service apache2restart


en /etc/roundcube/main.inc.php cambiamos $rcmail_config['imap_auth_type'] = LOGIN;

en /etc/exim4/update-exim4.conf.conf desactivar ipv6 poñendo disable_ipv6='true'

Servidor de Escritorio

Outros Servizos

Kerberos e LDAP

DNS

E-Mail

Servizos de Dominio e Active Directory

Servidor de Espazo en Disco (NAS)

Mantemento

Copias de Seguridade

Actualizacións