Actualmente existe una oferta muy rica de proveedores de infraestructura o hosting y proveedores de tecnología para sacar el máximo provecho de dicha infraestructura, aún más importante, a un coste razonablemente bajo usando tecnología free y open source.

proxmox-logo En mi caso, esta infraestructura la usaré para construir una plataforma donde provea servicios alrededor de productos como WSO2 ESB, Liferay Portal, Alfresco ECM, Drupal, etc., para ello he contratado un hosting medianamente decente en Hetzner (repito experiencia) y he empleado Proxmox VE.

I. Por qué Proxmox VE ?

Principalmente, porque ya tenía experiencia previa con Proxmox con las versión 2.0 de años anteriores, aunque actualmente hay productos opensource y más sofisticados como Apache CloudStack, OpenStack y Eucalyptus, pero el conocimiento previo y su sencillez me hizo decidir su uso. Una cosa importante a destacar es el corto tiempo necesario para crear un nuevo servidor, por lo general me toma 10 minutos.

II. Qué servicios ofreceremos desde nuestra nube privada?

Los servicios ofrecidos estarán alrededor del desarrollo de aplicaciones usando el Stack de WSO2, Liferay Portal, Alfresco ECM, Gestión de Identidades con WSO2 IS, etc. En otras palabras, nuestra nube privada será nuestra plataforma base para desarrollar y explotar nuestras aplicaciones construidas con las anteriores tecnologías mencionadas.

III. Por qué no usar WSO2 Stratos, RedHat OpenShift u otro PaaS

Por la naturaleza del tipo de servicios a ofrecer, evidentemente lo mejor era usar algún PaaS stack y la más adecuada era WSO2 Stratos, aunque como indiqué en el punto anterior, el conocimiento previo de Proxmox me hizo decidir como primera opción. Bueno, una vez puesto mis argumentos, paso a explicar todo el proceso que seguí para tener mi nube privada.

IV. Defina una arquitectura de virtualización o mapa de VMs

Sí, es muy importante planear cómo quedará tu nube privada, IPs, Redes Virtuales, DMZ, Storage vs. Partitions, RAM / VM, Security y Firewalling, etc. Aquí os muestro mi mapa de VMs.

[caption id=”” align=”alignnone” width=”665”]A example of Private Cloud Architecture with Proxmox A example of Private Cloud Architecture with Proxmox[/caption] Después de planear la arquitectura de tu nube, los siguientes pasos están relacionados a la instalación y post-configuración de tu hosting.

V. Preparando la infraestructura base

Algunos requisitos previos:

  • Debian 7.0 (wheezy) o CentOS 6.4
  • Proxmox VE 3.0
  • IP pública de tu hosting: 144.76.70.175
  • Nuevo SSH port: 4141 y 8181

1. Instalar el S.O.

  • Ir a Robot > Linux y seleccionar Debian 7 - minimal, luego reboot desde ssh:

[sourcecode language=”html” gutter=”true” wraplines=”false”]

shutdown -rf now

[/sourcecode]

  • Verificar la versión de S.O. por defecto instalada en el Hosting

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # uname -a
Linux chkry1 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

[/sourcecode]

2. Preparación básica del S.O. (Debian Wheezy)

1) Cambiar password de root

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # passwd root

[/sourcecode]

2) Actualizar Debian

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # apt-get update

[/sourcecode]

3) Renombrar host

[sourcecode language=”html” gutter=”true” wraplines=”false”]

nano /etc/hostname

nano /etc/hosts

[/sourcecode]

  • Reinicie el servicio

[sourcecode language=”html” gutter=”true” wraplines=”false”]

/etc/init.d/hostname.sh

[/sourcecode]

  • Verifique los cambios, salga y vuelva a entrar o:

[sourcecode language=”html” gutter=”true” wraplines=”false”]

hostname –fqdn

[/sourcecode]

4) Cambiar puerto SSH

  • http://ubuntu-tutorials.com/2008/01/12/disabling-ssh-connections-on-ipv6/

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/ssh/sshd_config

[/sourcecode]

  • Reemplazar las líneas ‘Port 22’ y ‘Port 222’ por ‘Port 4141’ y añadir ‘AddressFamily inet’ (ipv4)

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # service ssh restart

[/sourcecode]

5) Desabilite IPV6

  • http://forums.debian.net/viewtopic.php?f=16&t=85551
  • Verificar que realmente este funcionando ipv6

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # netstat -tunlp |grep p6 |wc -l
5

[/sourcecode]

  • Actualizar el kernel y hosts para no cargar ipv6

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.conf
root@chkry1 ~ # sed ‘/::/s/^/#/’ /etc/hosts >/etc/dipv6-tmp; cp -a /etc/hosts /etc/hosts-backup && mv /etc/dipv6-tmp /etc/hosts

[/sourcecode]

  • Al no tener avahi (multi-cast) instalado, no ejecutar esto:

[sourcecode language=”html” gutter=”true” wraplines=”true”]
root@chkry1 ~ # sed ‘/ipv6=yes/s/yes/no/’ /etc/avahi/avahi-daemon.conf > /etc/avahi/dipv6-tmp; cp -a /etc/avahi/avahi-daemon.conf /etc/avahi/avahi-daemon.conf-backup && mv /etc/avahi/dipv6-tmp /etc/avahi/avahi-daemon.conf

[/sourcecode]

  • NTP

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/default/ntp

[/sourcecode] .. debería quedar así “NTPD_OPTS=’-4 -g’”, luego reiniciar:

[sourcecode language=”html” gutter=”true” wraplines=”false”]

service ntp restart

[/sourcecode]

  • RPCBIND (rpc.statd, rpc.mountd, verificar tambien HTTP)

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/netconfig

[/sourcecode] dejarlo así:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
udp tpi_clts v inet udp - -
tcp tpi_cots_ord v inet tcp - -

#udp6 tpi_clts v inet6 udp - -

#tcp6 tpi_cots_ord v inet6 tcp - -
rawip tpi_raw - inet - - -
local tpi_cots_ord - loopback - - -
unix tpi_cots_ord - loopback - - -

[/sourcecode]

  • Quitar la interface eth0 de ipv6

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/network/interfaces

[/sourcecode]

  • Rebootear y probar si ipv6 aún funciona

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # shutdown -rf now root@chkry1 ~ # netstat -tunlp Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:4141 0.0.0.0:* LISTEN 2340/sshd
tcp6 0 0 :::4141 :::* LISTEN 2340/sshd
udp 0 0 144.76.70.175:123 0.0.0.0:* 2277/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 2277/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 2277/ntpd

[/sourcecode]

  • Si observa que SSH está en ipv6 corriendo en el puerto 4141 (mi nuevo puerto SSH), si no hay nada de ipv6, pues eso quiere decir que ipv6 ha sido desabilitado.

3. Preparación del S.O. para la instalación de Proxmox VE

  • http://www.wepoca.net/node/42
  • Crear una carpeta destinada a alojar los backups (iso, config files, etc.) de PVE (lo haremos desde la Consola Web de Proxmox)

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # mkdir -p /datos_pve_backups (lo configuraremos desde PVE Web)

[/sourcecode]

  • Verificar que esté usando GUID Partition Table (no MS-DOS) ya que permite usar más de 2T de disco usando gdisk (fdisk es para otro tipo de FS como MS-DOS) o df -h
  • http://wiki.hetzner.de/index.php/Partitionsgr%C3%B6%C3%9Fenlimit_bei_gro%C3%9Fen_Festplatten/en

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.5 Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): B2B420AE-59BE-44E7-ADCE-EA6EB3EB3C63
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name
1 4096 33558527 16.0 GiB 8200
2 33558528 34607103 512.0 MiB 8300
3 34607104 2182090751 1024.0 GiB 8300
4 2182090752 5860533134 1.7 TiB 8300
5 2048 4095 1024.0 KiB EF02

[/sourcecode] y el otro disco:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.5 Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4B205997-E657-433A-8DC7-28B356D3656C
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name
1 4096 33558527 16.0 GiB FD00
2 33558528 34607103 512.0 MiB FD00
3 34607104 2182090751 1024.0 GiB FD00
4 2182090752 5860533134 1.7 TiB FD00
5 2048 4095 1024.0 KiB EF02

[/sourcecode] y mostrando el disco principal:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
S.ficheros Tamaño Usados Disp Uso% Montado en
rootfs 1016G 260G 705G 27% /
udev 10M 0 10M 0% /dev
tmpfs 3,2G 316K 3,2G 1% /run
/dev/disk/by-uuid/d85c9428-b39f-434c-8140-3e46f0ffe770 1016G 260G 705G 27% /
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 9,5G 22M 9,5G 1% /run/shm
/dev/sda2 508M 87M 396M 18% /boot
/dev/sda4 1,7T 25G 1,6T 2% /home
/dev/fuse 30M 16K 30M 1% /etc/pve

[/sourcecode]

  • Configurar el idioma:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # dpkg-reconfigure locales

[/sourcecode]

  • Configurar la zona horaria:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # dpkg-reconfigure tzdata

[/sourcecode]

  • Para evitar warnings como este:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = “UTF-8”,
LANG = “C”
are supported and installed on your system.

[/sourcecode] .. hay que regenerar los locales:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # locale-gen es_ES.UTF-8

[/sourcecode] … o comentar en ‘/etc/ssh/sshd_config’ la siguiente línea ‘AcceptEnv LANG LC_*’

VI. Instalación del software de virtualización

4. Instalación de Promox VE

  • Añadir a la sourcelist de apt lo sgte:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # echo “deb http://download.proxmox.com/debian wheezy pve” » /etc/apt/sources.list
root@chkry1 ~ # wget -O- “http://download.proxmox.com/debian/key.asc” | apt-key add -
root@chkry1 ~ # apt-get upgrade
root@chkry1 ~ # aptitude upgrade
root@chkry1 ~ # aptitude full-upgrade
root@chkry1 ~ # aptitude install proxmox-ve-2.6.32

[…]
The following packages have unmet dependencies:
pve-firmware : Conflicts: firmware-linux-free but 3.2 is installed.
Conflicts: firmware-realtek but 0.36+wheezy.1 is installed.
The following actions will resolve these dependencies: Remove the following packages:
1) firmware-linux-free
2) firmware-realtek Leave the following dependencies unresolved:
3) linux-image-3.2.0-4-amd64 recommends firmware-linux-free (>= 3~) Accept this solution? [Y/n/q/?] Y

[/sourcecode] ==» Postfix configuración => NO CONFIGURATION
==» Finalmente se instalará un Apache con PVE web: https://your-server.com:8006

  • Verificar que no esten abiertos puertos de IPV6 Basta con comentar los protocolos en /etc/netconfig

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/netconfig

[/sourcecode]

VII. Post configuración

5. Configuración de Redes virtuales con Promox VE

1) Crear 2 redes virtuales de tipo Bridge desde la consola de Proxmox.

  • Name: vmbr0
  • IP address: 10.10.10.1
  • Subnet mask: 255.255.255.0
  • Autostart: checked
  • Name: vmbr1
  • IP address: 192.168.0.1
  • Subnet mask: 255.255.255.0
  • Autostart: checked Reiniciar para que los cambios sean aplicados.
  • vmbr0, representará mi DMZ y estará NATeada. Publicaremos servidores web, balanceadores, proxies, etc.
  • vmbr1, representaráuna red privada y aislada de internet, aquí ubicaremos DB servers, LDAP servers, etc.
  • También es posible hacerlo editando /etc/network/interfaces.
  • Verificar la existencia de 3 interfaces de red después de reiniciar.

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # ifconfig
eth0 Link encap:Ethernet HWaddr 08:60:6e:68:14:cc
inet addr:144.76.70.175 Bcast:144.76.70.191 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:67937 errors:0 dropped:2098 overruns:0 frame:0
TX packets:48468 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23352396 (22.2 MiB) TX bytes:37412958 (35.6 MiB)
Interrupt:43 Base address:0x2000 lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:9141 errors:0 dropped:0 overruns:0 frame:0
TX packets:9141 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6859893 (6.5 MiB) TX bytes:6859893 (6.5 MiB) vmbr0 Link encap:Ethernet HWaddr da:ec:a5:7f:fa:59
inet addr:10.10.10.1 Bcast:10.10.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:384 (384.0 B) TX bytes:0 (0.0 B) vmbr1 Link encap:Ethernet HWaddr 52:3d:18:b6:29:0a
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

[/sourcecode]

  • Por cada VM creada en cualquier subred virtual, aparecerá una nueva interfaz de red virtual:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # ifconfig tap100i0 Link encap:Ethernet HWaddr da:ec:a5:7f:fa:59
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

[/sourcecode]

2) Verificar y configurar Kernel

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/sysctl.conf

Hetzner Online AG installimage

sysctl config

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.all.proxy_arp=1
net.ipv4.conf.default.proxy_arp=1

[/sourcecode]

3) Configurar hostname, hosts y DNS

[sourcecode language=”html” gutter=”true” wraplines=”false”]
nano /etc/hostname
nano /etc/hosts
nano /etc/resolv.conf (también es posible modificarlos desde Proxmox)

[/sourcecode]

6. Seguridad y Firewall

1) Instalar ShoreWall

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # apt-get install shorewall

[/sourcecode]

2) Configurar ShoreWall para auto-inicio

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/default/shorewall Cambiar:
startup = 0
a:
startup = 1 3) Continuar configurando ShoreWall

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/shorewall/shorewall.conf

[/sourcecode] Cambiar:
IP_FORWARDING=Keep
DISABLE_IPV6=No
a:
IP_FORWARDING=On
DISABLE_IPV6=Yes

4) Configurar las Zones en ShoreWall

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/shorewall/zones

http://linux.die.net/man/5/shorewall-zones

#ZONE TYPE OPTIONS IN OUT

OPTIONS OPTIONS

fw firewall
net ipv4
loc ipv4
dmz ipv4

[/sourcecode]

5) Configurar las Interfaces en ShoreWall

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/shorewall/interfaces

http://linux.die.net/man/5/shorewall-interfaces

#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect logmartians,tcpflags,nosmurfs
dmz vmbr0 detect logmartians,bridge,routefilter
loc vmbr1 detect logmartians,bridge,routefilter

[/sourcecode]

6) Configurar Policy en ShoreWall

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/shorewall/policy

http://linux.die.net/man/5/shorewall-policy

#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST

1. fw - loc

fw loc ACCEPT
loc fw ACCEPT

2. fw - dmz

fw dmz ACCEPT
dmz fw DROP info

3. fw - net

fw net ACCEPT
net fw DROP info

4. dmz - net

dmz net ACCEPT
net dmz DROP info

5. loc - dmz

loc dmz ACCEPT
dmz loc DROP info

6. loc - net

loc net ACCEPT
net loc DROP info

THE FOLLOWING POLICY MUST BE LAST

all all REJECT info

[/sourcecode]

7) Configurar las Rules en ShoreWall

  • http://www.shorewall.net/three-interface.htm

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/shorewall/rules

http://linux.die.net/man/5/shorewall-rules

#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE

PORT PORT(S) DEST LIMIT

#

Accept particular connections from Internet

#

Permit access to SSH port 4646

##ACCEPT net fw tcp 22 - - 6/min:5
ACCEPT net fw tcp 8080 - - 6/min:5
ACCEPT net fw tcp 4646 - - 6/min:5

#

Permit access to Proxmox Manager and Console

ACCEPT net fw tcp 443,5900:5999,8006

#

PING Rules

Ping/ACCEPT all all

#

Permit traffic to - certain - VMs in DMZ (via DNAT)

DNAT net dmz:$MY_PROXYWEB_IP tcp 80
DNAT net dmz:$MY_PROXYWEB_IP tcp 443

#

LAST LINE – DO NOT REMOVE

[/sourcecode]

8) Configurar NAT en ShoreWall

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/shorewall/masq

implements SNAT on vmbr0

#INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK
eth0 10.10.10.0/24

[/sourcecode]

9) Definir la variable o parámetro MY_PROXYWEB_IP

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # nano /etc/shorewall/params MY_PROXYWEB_IP=10.10.10.11

#LAST LINE – DO NOT REMOVE

[/sourcecode]

10) Validar y habilitar la configuración de ShoreWall

Es muy útil para probar antes de aplicarlo permanentemente.

  • Verificar la configuración

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # shorewall check

[/sourcecode]

  • Habilitar la configuración de ShoreWall por 120 segundos

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # shorewall try /etc/shorewall 120s

[/sourcecode]

11) Si todo está OK, reiniciar el servidor o Shorewall

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # shorewall stop
root@chkry1 ~ # shorewall start
root@chkry1 ~ # shorewall restart

[/sourcecode]

VIII. Virtualizando con Proxmox VE

7. Crear una primera VM (Proxy Web)

Previamente hay que descargar una ISO del S.O. de la VM que vamos a crear.

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chkry1 ~ # cd /var/lib/vz/template/iso/
root@chkry1 /var/lib/vz/template/iso # wget http://ftp.cica.es/CentOS/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso

[/sourcecode]

1) Configurar Red de la VM

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chky-apache1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=”eth0”
HWADDR=0a:98:a1:3b:9a:48
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=”yes”
BOOTPROTO=none
IPADDR=10.10.10.11
PREFIX=24
GATEWAY=10.10.10.1
DNS1=213.133.99.99
IPV6INIT=no

[/sourcecode]

2) Configure default gateway y hostname

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@soadev1 ~]# vi /etc/sysconfig/network NETWORKING=yes
HOSTNAME=chky-apache1
GATEWAY=10.10.10.1

[/sourcecode]

3) En el GUEST verificar que la MACs esté asociada a la interface eth0

por ejemplo:

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chky-apache1 ~]# nano /etc/udev/rules.d/70-persistent-net.rules

PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)

SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”? ” , ATTR{address}==”0a:98:a1:3b:9a:48”, ATTR{type}==”1”, KERNEL==”eth”, NAME=”eth0”

[/sourcecode]

3) Reinicie las interfases de red o la VM

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chky-apache1 ~]# /etc/init.d/network restart

[/sourcecode]

4) Instalar Apache

  • http://dev.antoinesolutions.com/apache-server

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chky-apache1 ~]# yum install httpd

[/sourcecode]

5) Set the apache service to start on boot

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chky-apache1 ~]# chkconfig –levels 235 httpd on

[/sourcecode]

6) Habilite name-based virtual hosting on port 80

No es necesario para proxy web: “Open the httpd configuration file located at /etc/httpd/conf/httpd.conf
Un-comment the line containing the text NameVirtualHost *:80
Save the file”

7) Restart the Apache HTTP Server daemon

[sourcecode language=”html” gutter=”true” wraplines=”false”]
root@chky-apache0 ~]# service httpd restart

[/sourcecode]

  • Ignore the “NameVirtualHost *:80 has no VirtualHosts” warning for now.

8) Añadir la regla a iptables para aceptar tráfico HTTP

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-apache1 ~]# nano /etc/sysconfig/iptables

[/sourcecode] …deberia quedar así:

[sourcecode language=”html” gutter=”true” wraplines=”false”]

Firewall configuration written by system-config-firewall

Manual customization of this file is not recommended.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

[/sourcecode]

9) Reiniciar iptables

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-apache1 ~]# /etc/init.d/iptables restart

[/sourcecode]

10) Ahora desde un navegador probar lo sgte:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
http://your-server.com

[/sourcecode]

11) Configura Apache HTTP como Proxy Web

Finalmente, deberías configurar este Apache HTTP para que haga de Proxy Web a las otras VM que expongan una interfase HTTP

8. Crear una segunda VM (Liferay Portal)

Esta segunda VM será un clone de la primera VM, es posible configurar la RAM, HD, NICs, etc. fácilmente desde la Consola Web de Proxmox.

1) Instalar Jdk

  • http://wiki.centos.org/HowTos/JavaOnCentOS

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-lfry1 ~]# yum list java-1 | grep open java-1.6.0-openjdk.x86_64 1:1.6.0.0-1.62.1.11.11.90.el6_4 updates
java-1.6.0-openjdk-demo.x86_64 1:1.6.0.0-1.62.1.11.11.90.el6_4 updates
java-1.6.0-openjdk-devel.x86_64 1:1.6.0.0-1.62.1.11.11.90.el6_4 updates
java-1.6.0-openjdk-javadoc.x86_64 1:1.6.0.0-1.62.1.11.11.90.el6_4 updates
java-1.6.0-openjdk-src.x86_64 1:1.6.0.0-1.62.1.11.11.90.el6_4 updates
java-1.7.0-openjdk.x86_64 1:1.7.0.25-2.3.10.4.el6_4 updates
java-1.7.0-openjdk-demo.x86_64 1:1.7.0.25-2.3.10.4.el6_4 updates
java-1.7.0-openjdk-devel.x86_64 1:1.7.0.25-2.3.10.4.el6_4 updates
java-1.7.0-openjdk-javadoc.noarch 1:1.7.0.25-2.3.10.4.el6_4 updates
java-1.7.0-openjdk-src.x86_64 1:1.7.0.25-2.3.10.4.el6_4 updates

[root@chk-lfry1 ~]# yum install java-1.6.0-openjdk.x86_64

[/sourcecode]

2) Verificar instalación de JDK

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chky-apache0 ~]# java -version
java version “1.6.0_24”
OpenJDK Runtime Environment (IcedTea6 1.11.11.90) (rhel-1.62.1.11.11.90.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

[/sourcecode]

3) Instalar liferay 6.1.1ga2

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-lfry1 tempo-files]# wget http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.1.1%20GA2/liferay-portal-tomcat-6.1.1-ce-ga2-20120731132656558.zip

[/sourcecode]

4) Añadir la regla a iptables para aceptar tráfico HTTP en el puerto 8080, 8009

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-lfry1 ~]# nano /etc/sysconfig/iptables

[/sourcecode] …deberia quedar así:

[sourcecode language=”html” gutter=”true” wraplines=”false”]

Firewall configuration written by system-config-firewall

Manual customization of this file is not recommended.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 8009 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

[/sourcecode]

4) Reiniciar IPtables

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-lfry1 ~]# /etc/init.d/iptables restart

[/sourcecode]

9. Crear una tercera VM (MySQL Server)

De igual forma que la segunda VM, esta tercera VM es, o podría ser, un clone de la primera VM, evidentemente con tamaño de HD diferente, RAM, CPUs/Cores, IP (privada y no en la DMZ), … unas configuraciones fácilmente de hacerlas a través de la Consola Web de Proxmox.

  • http://dev.antoinesolutions.com/mysql

1) Instalar MySQL

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-mysql1 ~]# yum install mysql-server mysql

[/sourcecode]

2) Hacer que inicie cuando bootee la VM

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-mysql1 ~]# chkconfig –levels 235 mysqld on

[/sourcecode]

3) Iniciar y acceder a MySQL

[sourcecode language=”html” gutter=”true” wraplines=”false”]
service mysqld start
mysql -u root

[/sourcecode]

  • Defina un password para el usuario root para todos los dominios locales:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘piscosour!!’);
SET PASSWORD FOR ‘root’@’localhost.localdomain’ = PASSWORD(‘piscosour!!’);
SET PASSWORD FOR ‘root’@’127.0.0.1’ = PASSWORD(‘piscosour!!’);

[/sourcecode]

  • Borre el “any user”:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
DROP USER ‘’@’localhost’;
DROP USER ‘’@’localhost.localdomain’;

[/sourcecode]

  • Salga de MySQL:

[sourcecode language=”html” gutter=”true” wraplines=”false”]
exit

[/sourcecode]

4) Añadir la regla a IPtables para aceptar tráfico MySQL desde chk-lfry1

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-mysql1 ~]# nano /etc/sysconfig/iptables

[/sourcecode] …deberia quedar así:

[sourcecode language=”html” gutter=”true” wraplines=”false”]

Firewall configuration written by system-config-firewall

Manual customization of this file is not recommended.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

[/sourcecode]

4) Reiniciar iptables

[sourcecode language=”html” gutter=”true” wraplines=”false”]

[root@chk-mysql1 ~]# /etc/init.d/iptables restart

[/sourcecode]

10. Referencias

  • Disabilitar IPV6: http://forums.debian.net/viewtopic.php?f=16&t=85551
  • Disabilitar SSH sobre IPV6: http://ubuntu-tutorials.com/2008/01/12/disabling-ssh-connections-on-ipv6/
  • Instalar Proxmox en Hetzner EX4 Server: http://www.wepoca.net/node/42
  • Instalar Apache HTTP: http://dev.antoinesolutions.com/apache-server
  • Instalar MySQL: http://dev.antoinesolutions.com/mysql