Virtualización do Ciclo ASIR do IES de Rodeira
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:
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.
A asignación dos Tag 802.11q será a seguinte:
- RedeASIR: default (Tag 1)
- RedeXUNTA: Tag 3
- RedeCICLOS_ADSL: Tag 4
- 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. As conexións nos switches son as seguintes:
- Departamento
O esquema 802.11q quedaría así:
VLAN ASIR (default). Todos os portos salvo o 21 (DRBD), (RedeCICLOS_ADSL) e o 24 (RedeXunta)
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.100/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.200/16
A configuración da rede final e dos switches implicados será a da figura:
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:
- 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)
- 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.
- 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:
- VM_ROUTER (Router)
- Firewall, DNAT.
- VM_PROXY (Proxy)
- Proxy Squid + WebSqusr (Control acceso a internet), DNS, Servicio Web recollendo dominios das máquinas internas.
- VM_WEBSERVER (Servidor Web)
- Servicio Web ASIR + WebMail + Mail (exim4) + Mirror Debian
- 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 : gandalf.iesrodeira.com, IP: 172.20.1.1
- Servidor HP:
- CPU Dual Core, 8Gb RAM, Soporte de virtualización na CPU : earendil.iesrodeira.com, IP: 172.20.1.10
Estes dous equipos contarán cunha VLAN 802.11q con VID 5 para o intercambio DRBD.
- Instalación de Debian Jessie
- Instalación de Xen
apt-get install xen-system-amd64
- 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
- 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-*
- Por defecto, openvswitch non utiliza a compatibilidade cos bridge, temos que activala editando /etc/default/openvswitch-switch e poñendo BRCOMPAT=yes
- 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
- 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
- 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
- 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
Dispoñeremos en principio do seguinte espazo:
- gandalf.iesrodeira.com: Dous discos de 750GB e dous discos de 2TB
- earendil.iesrodeira.com: Un disco de 500GB e dous discos de 2TB
Repartiremos o espazo en disco do seguinte xeito:
- earendil.iesrodeira.com
- Particionaremos os discos de 2TB en unha partición de 500GB, unha de 1TB e outra co resto (363GB). Se montarán unidades RAID 5: 500GB, RAID 1: 1TB, e sen RAID o resto: mais ou menos 363GB. No disco RAID 5 de 500GB montaremos un VG LVM (EARENDIL_R5) que repartiremos en dous LV unha para os servidores da rede montada en DRBD (200GB - Earendil-R5_Servers) e o resto para instalar máquinas virtuais (250GB - Earendil-R5_VMS).O disco RAID 1 de 1TB se repartirá: dúas particións: unha de arranque de (1GB - Boot) e outra dos 0.99TB restantes coa que se creará un VG LVM (EARENDIL_R1) no que se creará un volume lóxico para o sistema (9GB - Earendil-R1_System), un volume para as plantillas dos sistemas a virtualizar (300GB - Earendil-R1_Templates), un volume para backups (100GB - Earendil-R1_Backups) e o resto para almacenamento compartido (590GB - Earendil-R1_Data). As particións sen raid se agruparán nun VG de striped, de uns 600GB (EARENDIL_Data) para almacenamento compartido (Earendil-Data) e 2GB de swap para o Dom0 (Earendil-Swap), e outra para as ISOS de instalación (100GB - Earendil-Installs) .
fdisk /dev/sdb # Creamos particións 500G+1000G+Resto
fdisk /dev/sdc # Creamos particións 500G+1000G+Resto
pvcreate /dev/sdb3
pvcreate /dev/sdc3
vgcreate EARENDIL_Data /dev/sdb3 /dev/sdc3
lvcreate -i2 -I4 -L718G -n Earendil-Data EARENDIL_Data
lvcreate -i2 -I4 -L2G -n Earendil-Swap EARENDIL_Data
lvcreate -L100G -n Earendil-Installs EARENDIL_Data
mkswap /dev/EARENDIL_Data/Earendil-Swap
mkfs.ext4 /dev/EARENDIL_Data/Earendil-Data
mkfs.ext4 /dev/EARENDIL_Data/Earendil-Installs
A continuación poderíamos facer unha Migración a RAID 1 en ''Quente'' e particionar o que queda:
lvcreate -L300G -n Earendil-R1_Templates EARENDIL_R1
lvcreate -L100G -n Earendil-R1_Backups EARENDIL_R1
lvcreate -L550G -n Earendil-R1_Data EARENDIL_R1
# Crear RAID 1 de tres discos, ''/dev/sda'', ''/dev/sdb1'' e ''/dev/sdc1'', de momento so ''/dev/sdb1'' e ''/dev/sdc1''
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdc1
mdadm --create /dev/md1 --level=1 --raid-disks=2 /dev/sdb1 /dev/sdc1
# Creamos o VG
pvcreate /dev/md1
vgcreate EARENDIL_R5 /dev/md1
lvcreate -L200G -n Earendil-R5_Servers EARENDIL_R5
lvcreate -L250G -n Earendil-R5_VMS EARENDIL_R5
mkfs.ext4 /dev/EARENDIL_R1/Earendil-R1_Templates
mkfs.ext4 /dev/EARENDIL_R1/Earendil-R1_Backups
mkfs.ext4 /dev/EARENDIL_R1/Earendil-R1_Data
mkfs.ext4 /dev/EARENDIL_R5/Earendil-R5_Servers
mkfs.ext4 /dev/EARENDIL_R5/Earendil-R5_VMS
- gandalf.iesrodeira.com
- Particionaremos os discos de 2TB en uha partición de 750GB, e dúas de 625GB. Se montarán unidades RAID 10: 750GB, RAID 1: 625GB, e sen RAID: 625GB. No disco RAID 10 de 750GB montaremos un VG LVM repartido en dúas LV, unha para os servidores da rede (200GB - Servers) e outra para máquinas virtuais (500GB - GANDALF_R10_VMS). O disco RAID 1 de 625GB se repartirá: dúas particións: unha de arranque (1GB - Boot) e o resto (624GB) nun VG LVM cos volumes lóxicos para o sistema (9G - System), un volume para as plantillas dos sistemas a virtualizar (300GB-Templates) e o resto para almacenamento compartido (300GB - GANDALF_R1_Data). As particións sen raid as agruparemos nun VG de 1.2TB stripped (GANDALF_Data) para almacenamento compartido e 2G de swap para o Dom0.
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 deberí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.
En Gandalf, o RAID 10 se realizará sobre 4 discos co que os tempos de acceso deberían ser mellores que en Earendil (ademais de ter mellor hardware).
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.
- Creamos unha copia utilizando a imaxe como base:
vhd-util snapshot -n RodeiraRouter.vhd -p JessieBase.vhd
- 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'
- Arrancamos a VM
xm create RodeiraRouter.cfg
- 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
- 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
- Configurar hostname a RodeiraRouter
hostname "RodeiraRouter" && echo "RodeiraRouter">/etc/hostname
- Cambiar a password de root
passwd root
- Reiniciamos a máquina
shutdown -r now
- Iniciamos sesión como root por ssh
ssh root@172.20.0.1
- 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 # Xavi 2013 # ETH_LAN="eth0" ETH_ADSL1="eth1" ETH_ADSL2="eth2" # WEBSERVER="172.20.0.2" PROXYSERVER="172.20.2.1" DESKTOPSERVER="172.20.0.3" ADSL1="192.168.1.1" ADSL2="192.168.2.1" # echo "Parando fail2ban..." /etc/init.d/fail2ban stop # echo "Inicializando iptables..." iptables -F iptables -X iptables -Z iptables -t nat -F iptables -t mangle -F # echo "Establecendo politicas por defecto..." iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # echo "Habilitando trafico interno..." iptables -I INPUT 1 -i lo -j ACCEPT iptables -I OUTPUT 1 -o lo -j ACCEPT # echo "Habilitando acceso SSH no porto 22" iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT # echo "Habilitando saida dende maquina local..." iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # echo "Iniciando politicas de seguridade..." # 224.0.0.0/24 es solo para enlaces multicast locales. Aquí solo pueden encontrar cosas como protocolos de enrutado. # Los datagramas a estas direcciones no deberían ser reenviadas por los routers echo "Filtrando Multicast..." iptables -A FORWARD -d 224.0.0.0/8 -j DROP iptables -A INPUT -s 224.0.0.0/4 -j DROP iptables -A FORWARD -s 224.0.0.0/4 -j DROP iptables -A FORWARD -d 224.0.0.0/4 -j DROP iptables -A INPUT -s 224.0.0.0/5 -j DROP # echo "Filtrando clase A privada..." iptables -A INPUT -s 10.0.0.0/8 -j DROP iptables -A FORWARD -s 10.0.0.0/8 -j DROP # echo "Verificando conexións SYN..." iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP # echo "Filtrando fragmentos IP" iptables -A INPUT -f -j LOG --log-prefix "IP FRAG: " iptables -A INPUT -f -j DROP iptables -A FORWARD -f -j LOG --log-prefix "FORWARD IP FRAG: " iptables -A FORWARD -f -j DROP # echo "Protección ICMP..." iptables -A INPUT -m state -p icmp --state INVALID -j DROP iptables -A OUTPUT -m state -p icmp --state INVALID -j DROP # echo "Habilitando PING..." iptables -A INPUT -p icmp -j ACCEPT # echo "Proteccion SYN FLOODING..." iptables -N SYNFLOOD_A iptables -N SYNFLOOD_B iptables -N SYNFLOOD_C iptables -A INPUT -i ${ETH_ADSL1} -p tcp --syn -j SYNFLOOD_A iptables -A INPUT -i ${ETH_ADSL2} -p tcp --syn -j SYNFLOOD_B iptables -A INPUT -i ${ETH_LAN} -p tcp --syn -j SYNFLOOD_C iptables -A SYNFLOOD_A -m limit --limit 1/s --limit-burst 3 -j RETURN iptables -A SYNFLOOD_A -j DROP iptables -A SYNFLOOD_B -m limit --limit 1/s --limit-burst 3 -j RETURN iptables -A SYNFLOOD_B -j DROP iptables -A SYNFLOOD_C -m limit --limit 1/s --limit-burst 3 -j RETURN iptables -A SYNFLOOD_C -j DROP # echo "Habilitando DNS..." iptables -t nat -A PREROUTING -p udp ! -i ${ETH_LAN} --dport 53 -j DNAT --to-destination ${PROXYSERVER} iptables -A FORWARD -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A FORWARD -p udp --sport 53 -i ${ETH_LAN} -s ${PROXYSERVER} -j ACCEPT # echo "Habilitando Servidor Web..." iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 80 -j DNAT --to-destination ${PROXYSERVER} iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 443 -j DNAT --to-destination ${PROXYSERVER} iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT # echo "Habilitando SSH a Desktop..." iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 22 -j DNAT --to-destination ${DESKTOPSERVER} iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT # echo "Habilitando POP3s, SMTP..." iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 995 -j DNAT --to-destination ${WEBSERVER} iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -t nat -A PREROUTING -p tcp ! -i ${ETH_LAN} --dport 25 -j DNAT --to-destination ${WEBSERVER} iptables -A FORWARD -p tcp ! -i ${ETH_LAN} --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset # echo "Permitindo saida a servicio web por parte do proxy e servidor web..." iptables -A FORWARD -p tcp -s ${PROXYSERVER} --dport 80 -j ACCEPT iptables -A FORWARD -p tcp -s ${PROXYSERVER} --dport 443 -j ACCEPT iptables -A FORWARD -p tcp -s ${WEBSERVER} --dport 80 -j ACCEPT iptables -A FORWARD -p tcp -s ${WEBSERVER} --dport 443 -j ACCEPT # echo "Facendo NAT..." iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source ${ADSL2} iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source ${ADSL1} # echo "Iniciando Fail2ban..." /etc/init.d/fail2ban start
Si non nos interesa ter unha imaxe copy on write dunha imaxe base podemos convertila a unha imaxe normal:
vhd-util coalesce -n RodeiraRouter.vhd -o RodeiraRouterFull.vhd -p # Xa non precisamos a copia CoW rm RodeiraRouter.vhd mv RodeiraRouterFull.vhd RodeiraRouter.vhd
E incluso, a unha imaxe raw que ofrecerá mellor rendimento. Nese caso Debemos modificar o ficheiro de configuración Xen de modo que o disco sexa disk = ['file:RodeiraRouter.vhd,xvda,w']:
#convertimos qemu-img convert RodeiraRouter.vhd -O raw RodeiraRouter.raw
Proxy
A Máquina Virtual "Proxy" será a encargada de facilitar acceso web tanto dende a rede do ciclo ASIR, como dende a rede de CICLOS a través da conexión Internet da Xunta. Ademáis fará as veces de servidor de dominio (DNS) para o dominio iesrodeira.com, tanto para as redes internas como para os accesos dende internet aos distintos servizos.
Este servidor terá un portal web que permitira regular o acceso a internet por parte das distintas aulas (WebSqusr), e ademáis recollerá as páxinas dos distintos servidores web das redes para servilas hacia internet.
A Xunta non admite o acceso aos seus servizos dende detrás dun proxy, si a solicitude se fai dende a rede interna. Polo tanto, as peticións de páxinas da xunta serán desviadas para recollelas a través das ADSL.
Datos Técnicos
Máquina Virtual Xen e modo paravirtualizado (PVM) executando Debian Jessie
* 2 Cores * 3584M de RAM * 3 Ethernet: eth0 - 172.20.2.1 (untagged), acceso a rede local ASIR eth1 - 172.16.2.1 (tag 4), acceso a rede CICLOS eth2 - 69.65.24.206 (tag 3), acceso a rede XUNTA
Configuración
Partimos dun disco VHD cunha instalación básica de Debian Jessie.
- Creamos unha copia utilizando a imaxe como base:
vhd-util snapshot -n RodeiraProxy.vhd -p JessieBase.vhd
- Creamos a configuración da VM no ficheiro RodeiraProxy.cfg
bootloader = 'pygrub' vcpus = '2' memory = '3584' disk = ['tap2:tapdisk:vhd:RodeiraProxy.vhd,xvda,w'] name = 'RodeiraProxy' vif = [ 'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0,model=e1000','mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0.4,model=e1000', 'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0.3,model=e1000' ] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' acpi = '0' apic = '1' viridian = '0' xen_platform_pci='0' sdl = '0' vnc = '0' vnclisten = '0.0.0.0' vncpasswd = stdvga = '0' usb = '0'
- Arrancamos a VM
xm create RodeiraProxy.cfg
- 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
- 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
- Configurar hostname a RodeiraProxy
hostname "RodeiraProxy" && echo "RodeiraProxy">/etc/hostname
- Cambiar a password de root
passwd root
- Reiniciamos a máquina
shutdown -r now
- Iniciamos sesión como root por ssh
ssh root@172.20.0.1
- Instalamos o software necesario
apt-get install apache2 php5 bind9 bind9utils bind9-doc squid make
- Instalamos WebSqusr e especificamos o seguinte en /etc/squid/squid.conf:
hosts_file /etc/hosts dns_nameservers 172.20.2.1 8.8.8.8 cache_replacement_policy heap LFUDA cache_swap_low 90 cache_swap_high 95 maximum_object_size_in_memory 50 KB cache_dir aufs /var/spool/squid 40000 16 256 cache_mem 100 MB logfile_rotate 10 memory_pools off maximum_object_size 50 MB quick_abort_min 0 KB quick_abort_max 0 KB log_icp_queries off client_db off buffered_logs on half_closed_clients off
Configuración DNS (bind)
- Engadimos os seguintes ficheiros a /etc/bind/:
- 0.20.172.in-addr.arpa.zone
$TTL 86400 @ IN SOA @ root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) @ IN NS dns.iesrodeira.com. 1 IN PTR router.iesrodeira.com. 2 IN PTR web.iesrodeira.com. 3 IN PTR desktop.iesrodeira.com.
- 1.20.172.in-addr.arpa.zone
$TTL 86400 @ IN SOA @ root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) @ IN NS dns.iesrodeira.com. 1 IN PTR gandalf.iesrodeira.com. 2 IN PTR nas.iesrodeira.com. 10 IN PTR sauron.iesrodeira.com. 20 IN PTR earendil.iesrodeira.com. 30 IN PTR barbol.iesrodeira.com.
- 2.20.172.in-addr.arpa.zone
$TTL 86400 @ IN SOA @ root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) @ IN NS dns.iesrodeira.com. 1 IN PTR proxy.iesrodeira.com.
- 2.16.172.in-addr.arpa.zone
$TTL 86400 @ IN SOA @ root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) @ IN NS dns.iesrodeira.com. 1 IN PTR proxy.iesrodeira.com.
- 2.168.192.in-addr.arpa.zone
$TTL 86400 @ IN SOA @ root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) @ IN NS dns.iesrodeira.com. 2 IN PTR router.iesrodeira.com.
- 1.168.192.in-addr.arpa.zone
$TTL 86400 @ IN SOA @ root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) @ IN NS dns.iesrodeira.com. 2 IN PTR router.iesrodeira.com.
- 161.129.213.in-addr.arpa.zone.externa
$TTL 86400 @ IN SOA dns.iesrodeira.com. xavi.iesrodeira.com. ( 2005030302 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) IN NS dns.iesrodeira.com. IN NS esiami.tsai.es. IN NS esiami2.tsai.es. 27 IN PTR iesrodeira.com.
- 166.129.213.in-addr.arpa.zone.externa
$TTL 86400 @ IN SOA dns.iesrodeira.com. xavi.iesrodeira.com. ( 2005030302 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) IN NS dns.iesrodeira.com. IN NS esiami.tsai.es. IN NS esiami2.tsai.es. 29 IN PTR ssh.iesrodeira.com.
- iesrodeira.com.zone
$TTL 86400 @ IN SOA @ root.localhost ( 6 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttl ) @ IN NS 172.20.2.1. @ IN MX 10 correo.iesrodeira.com. @ IN A 172.20.2.1 proxy IN A 172.20.2.1 correo IN A 172.20.0.2 desktop IN A 172.20.0.3 router IN A 172.20.0.1 gandalf IN A 172.20.1.1 nas IN A 172.20.1.2 sauron IN A 172.20.1.10 earendil IN A 172.20.1.20 barbol IN A 172.20.1.30 dns IN CNAME proxy.iesrodeira.com. internet IN CNAME proxy.iesrodeira.com. pop IN CNAME correo.iesrodeira.com. smtp IN CNAME correo.iesrodeira.com. pop3 IN CNAME correo.iesrodeira.com. www IN CNAME correo.iesrodeira.com. web IN CNAME www.iesrodeira.com. asir IN CNAME www.iesrodeira.com. inventario IN CNAME www.iesrodeira.com. fsala IN CNAME www.iesrodeira.com. calendario IN CNAME www.iesrodeira.com. treasure IN CNAME www.iesrodeira.com. debuxo IN CNAME www.iesrodeira.com. ssh IN CNAME desktop.iesrodeira.com.
- iesrodeira.com.zone.externa
$TTL 86400 @ IN SOA dns.iesrodeira.com. xavi.iesrodeira.com. ( 2006061602 ; Serial 7200 ; Refresh (1h) 7200 ; Retry 604800 ; Expire 86400 ) ; Negative Cache TTL IN NS dns.iesrodeira.com. IN NS esiami.tsai.es. IN NS esiami2.tsai.es. @ IN MX 10 correo.iesrodeira.com. @ IN A 213.129.161.27 correo IN A 213.129.161.27 dns IN A 213.129.161.27 ssh IN A 213.129.166.29 iesrodeira.com. IN TXT "v=spf1 a mx ~all" correo.iesrodeira.com. IN TXT "v=spf1 a -all" desktop IN CNAME ssh.iesrodeira.com. www IN CNAME iesrodeira.com. web IN CNAME iesrodeira.com. inventario IN CNAME iesrodeira.com. calendario IN CNAME iesrodeira.com. treasure IN CNAME iesrodeira.com. internet IN CNAME iesrodeira.com. fsala IN CNAME iesrodeira.com. debuxo IN CNAME iesrodeira.com. pop IN CNAME iesrodeira.com. smtp IN CNAME iesrodeira.com. pop3 IN CNAME iesrodeira.com.
- Comentamos en /etc/bind/named.conf a liña include "/etc/bind/named.conf.default-zones";
- Asi quedará /etc/bind/named.conf.local
// // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your organization // include "/etc/bind/zones.rfc1918"; view "internal" { match-clients { 172.20.0.0/16; 192.168.1.0/24; 172.16.0.0/16; 127.0.0.0/8; 69.65.24.206; }; recursion yes; // // prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // // be authoritative for the localhost forward and reverse zones, and for broadcast zones as per RFC 1912 // zone "localhost" { type master; file "/etc/bind/db.local"; }; // zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; // zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; // zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; // zone "com" { type delegation-only; }; zone "net" { type delegation-only; }; // zone "0.20.172.in-addr.arpa" { type master; file "/etc/bind/0.20.172.in-addr.arpa.zone"; }; // zone "1.20.172.in-addr.arpa" { type master; file "/etc/bind/1.20.172.in-addr.arpa.zone"; }; // zone "2.20.172.in-addr.arpa" { type master; file "/etc/bind/2.20.172.in-addr.arpa.zone"; }; // zone "iesrodeira.com" { type master; file "/etc/bind/iesrodeira.com.zone"; }; };
view "external" { match-clients { any; }; recursion no; // zone "iesrodeira.com" { type master; file "/etc/bind/iesrodeira.com.zone.externa"; }; // zone "161.129.213.in-addr.arpa" { type master; file "/etc/bind/161.129.213.in-addr.arpa.zone.externa"; }; // zone "166.129.213.in-addr.arpa" { type master; file "/etc/bind/166.129.213.in-addr.arpa.zone.externa"; }; };
- E así /etc/bind/named.conf.options:
options { directory "/var/cache/bind"; // // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. // // forwarders { // 0.0.0.0; // }; // //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== // dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 // forwarders { 8.8.8.8; 212.166.64.1; 212.166.64.2; }; version "iesrodeira.com 1.0"; listen-on-v6 { any; }; }; logging { channel security_file { file "/var/log/named/security.log" versions 3 size 30m; severity dynamic; print-time yes; }; category security { security_file; }; category lame-servers {null; }; category edns-disabled { null; }; };
- Creamos a carpeta e o ficheiro para o logging cos permisos axeitados
mkdir /var/log/named chown bind /var/log/named touch /var/log/named/security.log chown bind /var/log/named/security.log
- reiniciamos o servicio DNS
service bind9 restart
WebSqusr
Servidor Web
O Servidor Web ofrecerá o servizo web principal para o centro. Aloxará a páxina mediawiki do ciclo e actuará de Proxy Inverso para outras web aloxadas no centro. Ademáis ofrecerá os servizos de e-mail e webmail. Se configurarán tamén servizos de recollida de correo mediante POP3 e envío con SMTP con autorización e sobre TLS/SSL.
Outra funcionalidade de este servidor será o aloxamento de proxectos de software mediante Trac
Datos Técnicos
Máquina Virtual Xen e modo paravirtualizado (PVM) executando Debian Wheezy
* 2 Cores * 2048M de RAM * 1 Ethernet: eth0 - 172.20.0.2 (untagged), acceso a rede local ASIR
Configuración
Partimos dun disco VHD cunha instalación básica de Debian Wheezy.
- Creamos unha copia utilizando a imaxe como base:
vhd-util snapshot -n RodeiraWebServer.vhd -p WheezyBase.vhd
- Creamos a configuración da VM no ficheiro RodeiraWebServer.cfg
bootloader = 'pygrub' vcpus = '2' memory = '1024' disk = ['tap2:tapdisk:vhd:RodeiraWebServer.vhd,xvda,w'] name = 'RodeiraWebServer' vif = [ 'mac=XX:XX:XX:XX:XX:XX,bridge=xenbr0,model=e1000'] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' acpi = '0' apic = '1' viridian = '0' xen_platform_pci='0' sdl = '0' vnc = '0' vnclisten = '0.0.0.0' vncpasswd = stdvga = '0' usb = '0'
- Arrancamos a VM
xm create RodeiraWebServer.cfg
- Iniciamos sesión a través de ssh (usuario root e password root, a máquina iniciará con IP dinámica) ou co seguinte comando
xm console RodeiraWebServer
- Configurar as ethernet editando /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # # The loopback network interface auto lo iface lo inet loopback # # The primary network interface #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 172.20.0.2 netmask 255.255.0.0 gateway 172.20.2.1 nameserver 172.20.2.1 #
- Configurar hostname a RodeiraWebServer
hostname "RodeiraWebServer" && echo "RodeiraWebServer">/etc/hostname
- Cambiar a password de root
passwd root
- Reiniciamos a máquina
shutdown -r now
- Iniciamos sesión como root por ssh
ssh root@172.20.0.1
- Instalamos software necesario
apt-get install apache2 mediawiki exim4-daemon-heavy exim4-doc-html roundcube roundcube-plugins roundcube-plugins-extra apt-get install debmirror spam-assassin courier-imap courier-imap-ssl courier-pop-ssl fail2ban
Configuramos Mediawiki
- Creamos un servidor virtual para mediawiki creando o ficheiro mediawiki en /etc/sites-available activandoo despois mediante o comando a2ensite mediawiki && service apache2 reload
<VirtualHost *:80> ServerName asir.iesrodeira.com ServerAdmin xavi@iesrodeira.com DocumentRoot /var/lib/mediawiki </VirtualHost>
- Creamos un tema para mediawiki derivando do tema Monobook no directorio /var/lib/mediawiki/skins
cp Monobook.php Rodeira.php cp Monobook.deps.php Rodeira.deps.php mkdir rodeira cp -dp monobook/* rodeira/.
Persoalizaremos o tema engadindo unha cabeceira e modificando lixeiramente o css. E importante modificar o ficheiro /var/lib/mediawiki/resources/Resource.php para engadir o novo skin á lista de skins. O código a engadir sería o seguinte:
'skins.rodeira' => array(
'styles' => array(
'common/commonElements.css' => array( 'media' => 'screen' ),
'common/commonContent.css' => array( 'media' => 'screen' ),
'common/commonInterface.css' => array( 'media' => 'screen' ),
'rodeira/main.css' => array( 'media' => 'screen' ),
),
'remoteBasePath' => $GLOBALS['wgStylePath'],
'localBasePath' => $GLOBALS['wgStyleDirectory'],
),
O plugin Collection nos permitirá obter a versión PDF dos artigos de mediawiki. A renderización a faremos localmente mediante o servidor que lanzaremos co seguinte script de /etc/init.d:
#!/bin/sh
### BEGIN INIT INFO
# Provides: pdfserver
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Mediawiki PDF service
# Description: Mediawiki export to PDF service
###END INIT INFO
# Change the next 3 lines to suit where you install your script and what you want to call it
DIR=/usr/local/bin/
DAEMON_SRV=$DIR/nserve
DAEMON_SRV_NAME=nserve
DAEMON_QUE=$DIR/mw-qserve
DAEMON_QUE_NAME=mw-qserve
DAEMON_SPOOL=$DIR/nslave
DAEMON_SPOOL_NAME=nslave
SPOOL_OPTIONS="--cachedir /var/cache/mwcache"
# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=root
# The process ID of the script when it runs is stored here:
PIDFILE_SRV=/var/run/$DAEMON_SRV_NAME.pid
PIDFILE_QUE=/var/run/$DAEMON_QUE_NAME.pid
PIDFILE_SPOOL=/var/run/$DAEMON_SPOOL_NAME.pid
. /lib/lsb/init-functions
do_start () {
log_daemon_msg "Starting $DAEMON_SRV_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE_SRV --make-pidfile --user $DAEMON_USER --startas $DAEMON_SRV
[ $? -eq 0 ] || exit 1
log_daemon_msg "Starting $DAEMON_QUE_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE_QUE --make-pidfile --user $DAEMON_USER --startas $DAEMON_QUE
if ! [ $? -eq 0 ]; then
start-stop-daemon --stop --pidfile $PIDFILE_SRV --retry 10
exit 1
fi
log_daemon_msg "Starting $DAEMON_SPOOL_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE_SPOOL --make-pidfile --user $DAEMON_USER --startas ${DAEMON_SPOOL} -- ${SPOOL_OPTIONS}
if ! [ $? -eq 0 ]; then
start-stop-daemon --stop --pidfile $PIDFILE_SRV --retry 10
start-stop-daemon --stop --pidfile $PIDFILE_QUE --retry 10
exit 1
fi
log_end_msg $?
}
do_stop () {
log_daemon_msg "Stopping system $DAEMON_SRV_NAME daemon"
start-stop-daemon --stop --pidfile $PIDFILE_SRV --retry 10
start-stop-daemon --stop --pidfile $PIDFILE_QUE --retry 10
start-stop-daemon --stop --pidfile $PIDFILE_SPOOL --retry 10
log_end_msg $?
}
case "$1" in
start|stop)
do_${1}
;;
restart|reload|force-reload)
do_stop
do_start
;;
status)
status_of_proc "$DAEMON_SRV_NAME" "$DAEMON_SRV" && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$DEAMON_NAME {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Configuramos o servicio de correo exim4 com imap seguro e pop3s
- En /etc/exim4/update-exim4.conf.conf desactivar ipv6 poñendo disable_ipv6='true'
- En /etc/exim4/conf.d/auth/ poñemos:
login_saslauthd_server: driver = plaintext public_name = LOGIN server_prompts = "Username:: : Password::" # don't send system passwords over unencrypted connections server_condition = ${if saslauthd{{$auth1}{$auth2}}{1}{0}} server_set_id = $auth1 .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} .endif
- En /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs engadimos o final:
MAIN_TLS_ENABLE = true
- Creamos os certificados:
/usr/share/doc/exim4-base/examples/exim-gencert --force mkimapdcert
mkimapdcert utilizará o ficheiro /etc/courier/imapd.cnf para a creación dos certificados para imap.
- O ficheiro /etc/exim4/update-exim4.conf.conf debe quedar:
disable_ipv6='true' dc_eximconfig_configtype='internet' dc_other_hostnames='correo.iesrodeira.com;iesrodeira.com' dc_local_interfaces= dc_readhost= dc_relay_domains= dc_minimaldns='false' dc_relay_nets= dc_smarthost= CFILEMODE='644' dc_use_split_config='true' dc_hide_mailname= dc_mailname_in_oh='true' dc_localdelivery='maildir_home'
- Creamos a configuración de exim4
update-exim4.conf
- Chegados a este punto, e unha vez reiniciado o servizo exim4 debería ser posible o envio de correos, o que podemos testar enviando algún e verificando a continuación a súa saída en /var/log/exim4/mainlog. Para que o servizo imap funcione correctamente, todos os usuarios deben dispoñer da carpeta Maildir que poderemos crear coa utilidade maildirmake (unha vez teñamos instalado o courier-imap).
- A utilidade swaks nos permitirá verificar o funcionamento do correo cifrado, a instalamos e testamos:
apt-get install swaks libnet-ssleay-perl $ swaks -a -tls -q HELO -s localhost -au usuario -ap '<>' === Trying localhost:25... === Connected to localhost. <- 220 RodeiraWebServer ESMTP Exim 4.50 Tue, 02 May 2006 17:56:25 -0400 -> EHLO RodeiraWebServer <- 250-RodeiraWebServer Hello localhost [127.0.0.1] <- 250-SIZE 52428800 <- 250-PIPELINING <- 250-STARTTLS <- 250 HELP -> STARTTLS <- 220 TLS go ahead === TLS started w/ cipher DHE-RSA-AES256-SHA ~> EHLO RodeiraWebServer <~ 250-RodeiraWebServer Hello localhost [127.0.0.1] <~ 250-SIZE 52428800 <~ 250-PIPELINING <~ 250 HELP ~> QUIT <~ 221 evie closing connection
- Para a autenticación dos usuarios precisamos o paquete que nos proporciona SASL:
apt-get install sasl2-bin adduser Debian-exim sasl service saslauthd restart service exim4 restart
- Podemos testar que a autenticación se realiza sin problemas mediante un usuario do sistema:
RodeiraWebServer:/etc/exim4# swaks -a -tls -q AUTH -s localhost -au usuario Password: passwd === Trying localhost:25... === Connected to localhost. <- 220 RodeiraWebServer ESMTP Exim 4.50 Fri, 05 May 2006 18:10:18 -0400 -> EHLO RodeiraWebServer <- 250-RodeiraWebServer Hello localhost [127.0.0.1] <- 250-SIZE 52428800 <- 250-PIPELINING <- 250-STARTTLS <- 250 HELP -> STARTTLS <- 220 TLS go ahead === TLS started w/ cipher DHE-RSA-AES256-SHA ~> EHLO RodeiraWebServer <~ 250-RodeiraWebServer Hello localhost [127.0.0.1] <~ 250-SIZE 52428800 <~ 250-PIPELINING <~ 250-AUTH PLAIN <~ 250 HELP ~> AUTH PLAIN AGphc28uygBOaGVxMHc= <~ 235 Authentication succeeded ~> QUIT <~ 221 RodeiraWebServer closing connection
A instalación de pop3s e moi simple. En primeiro lugar debemos parar e desactivar o servizo pop3, e asegurarnos que en /etc/inetd.conf non se ten o servizo pop3 nin pop3s. Unha vez feito esto podemos comprobar o funcionamento iniciando unha conexión e realizando un diálogo pop3 no terminal:
openssl s_client -connect correo.iesrodeira.com:995
Configuramos o WebMail.
- Eliminamos a configuración por defecto de roundcube
rm /etc/apache2/conf.d/roundcube
- Creamos un host virtual para roundcube, e o activamos. Creamos /etc/apache2/sites-available/roundcube
<VirtualHost *:80> ServerAdmin xavi@iesrodeira.com ServerName correo.iesrodeira.com ServerAlias correo.* mail.* webmail.* DocumentRoot /var/lib/roundcube Alias /program/js/tiny_mce/ /usr/share/tinymce/www/ <Directory /var/lib/roundcube/> Options +FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> <Directory /var/lib/roundcube/config> Options -FollowSymLinks AllowOverride None </Directory> <Directory /var/lib/roundcube/temp> Options -FollowSymLinks AllowOverride None Order allow,deny Deny from all </Directory> <Directory /var/lib/roundcube/logs> Options -FollowSymLinks AllowOverride None Order allow,deny Deny from all </Directory> <Directory /usr/share/tinymce/www/> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost>
- Activamos o sitio
a2ensite roundcube service apache2restart
(Sería unha boa idea crear uns certificados para o uso co Mail dende roundcube).
- en /etc/roundcube/main.inc.php debemos ter as opcions que siguen:
$rcmail_config['imap_auth_type'] = ' '; $rcmail_config['mail_domain'] = 'iesrodeira.com'; $rcmail_config['default_host'] = 'tls://localhost';' $rcmail_config['smtp_server'] = 'tls://smtp.iesrodeira.com';
- O WebMail estará accesible en https://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.
Seguiremos os seguintes pasos:
- a) Instalación
apt-get update && apt-get install trac
Servidor de Escritorio
172.20.0.3
Outros Servizos
Kerberos e LDAP
Instalaremos o servidor Kerberos e LDAP para as montaxes NFS e para a autenticación dos usuarios. Se instalará un controlador primario krbldap-pdc e un secundario krbldap-bdc. Estos servidores serán tamén servidores de tempo ntp, que servirá tanto para sincronizar os tickets de kerberos como para manter os equipos da rede en hora.
apt-get install ntp
- Editamos /etc/ntp.conf e engadimos os seguintes servidores:
hora.roa.es iburst server 0.es.pool.ntp.org server 1.es.pool.ntp.org server 2.es.pool.ntp.org server 3.es.pool.ntp.org
e configuramos o servidor para dar servizo a nosa rede
broadcast 172.20.255.255
- Paramos o servizo e sincronizamos con ntpdate-debian
service ntp stop ntpdate-debian service ntp start