martes, 9 de agosto de 2016

Primer prototipo LoadBalancer con IPtables

El siguiente script en bash es el primer prototipo de LoadBalancer para un servicio TCP en dos o mas servidores simultaneamente utilizando iptables.
#!/bin/bash
local_ip="10.10.50.81"

ip1="10.10.96.50"
ip2="10.10.50.106"
tcp_port="80"


#Se valida que los servicios esten disponibles
nmap $ip1 -p $tcp_port | grep -i open >> /dev/null
service1=$?
nmap $ip2 -p $tcp_port | grep -i open >> /dev/null
service2=$?
let status=$service1+$service2
echo "Valor: $status"
let remakerules=10

while [ 0 -eq 0 ]; do

        if [ "$remakerules" != "$status" ]; then
                # You need these system settings.
                echo 1 > /proc/sys/net/ipv4/ip_forward
                for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

                # Clear iptables/netfilter settings.
                iptables -F
                iptables -X
                iptables -t nat -F
                iptables -t nat -X
                iptables -t filter -F
                iptables -t filter -X
                iptables -t mangle -F
                iptables -t mangle -X


                iptables -P INPUT ACCEPT
                iptables -P OUTPUT ACCEPT
                iptables -P FORWARD ACCEPT
                iptables -t nat -P PREROUTING ACCEPT
                iptables -t nat -P POSTROUTING ACCEPT

                if [ "$service1" == "0" -a "$service2" == "0" ]; then
                        #Los dos servicios estan disponibles
                        iptables -t nat -A PREROUTING -p tcp -d $local_ip --dport $tcp_port -m state --state NEW -m statistic --mode random --probability .5 -j DNAT --to $ip1:$tcp_port
                        iptables -t nat -A PREROUTING -p tcp -d $local_ip --dport $tcp_port -m state --state NEW -m statistic --mode random --probability .5 -j DNAT --to $ip2:$tcp_port
                else
                        if [ "$service2" == "0" ]; then
                                #Unicamente el servicio2 esta arriba
                                iptables -t nat -A PREROUTING -p tcp -d $local_ip --dport $tcp_port -m state --state NEW -m statistic --mode nth --every 1 --packet 0 -j DNAT --to $ip2:$tcp_port
                        else
                                if [ "$service1" == "0" ]; then
                                        #Unicamente el servicio1 esta arriba
                                        iptables -t nat -A PREROUTING -p tcp -d $local_ip --dport $tcp_port -m state --state NEW -m statistic --mode nth --every 1 --packet 0 -j DNAT --to $ip1:$tcp_port
                                else
                                        echo "CRITICAL: Los dos Servicios estan abajo"
                                fi
                        fi
                fi


                iptables -A INPUT -j ACCEPT
                iptables -A OUTPUT -j ACCEPT
                iptables -A FORWARD -j ACCEPT
                iptables -A INPUT -j LOG --log-prefix "iptables: " --log-level 4
                iptables -A OUTPUT -j LOG --log-prefix "iptables: " --log-level 4
                iptables -A FORWARD -j LOG --log-prefix "iptables: " --log-level 4

                iptables -t nat -A POSTROUTING  -j MASQUERADE
                echo "Cambio de reglas..."
        fi

        #sleep 1200
        sleep 1

        #Se valida que los servicios esten disponibles
        nmap $ip1 -p $tcp_port | grep -i open >> /dev/null
        service1=$?
        nmap $ip2 -p $tcp_port | grep -i open >> /dev/null
        service2=$?
        let remakerules=$status
        let status=$service1+$service2
        echo "Valor: $status"

done

domingo, 29 de mayo de 2016

Certificados SSL para Web Server

La instalación de certificados sobre un web server es muy sencilla. En este post vamos a mostrar como instalar un certificado en Apache Web Server.

En sintesis primeramente debemos escoger un proveedor de certificados digitales para hacer el proceso de compra con el, este proveedor requiere que le enviemos una solicitud conocido como archivo CSR, es muy importante generar este archivo CSR en el servidor donde vamos a instanciar el web server y que al mismo tiempo debe ser el mismo donde se colocara el certificado. Despues de que enviemos el CSR el proveedor nos enviara un archivo CRT, con este archivo podremos configurar el certificado.




Realizáremos paso a paso el proceso en el interprete de comandos de GNU/Linux, como buena practica recomiendo llamar al archivo igual que el FQDN a certificar, para nuestro caso vamos a suponer que nuestro objetivo es certificar a www.midominio.com.

Creamos una llave de seguridad de 2048 bits, se nos pedirá que ingresemos el passphrase. Desde luego es muy importante guardar el passphrase.
openssl genrsa -des3 -out www.midominio.com.key 2048

Creamos el archivo csr a partir de la llave que creamos anteriormente y con una vigencia de 365 dias. Se nos pedirá información del FQDN a certificar y datos de ubicación de la empresa que solicita el certificado.
openssl req -days 365 -new -key www.midominio.com.key -out www.midominio.com.csr

Ahora ya podemos enviarle el csr al proveedor para que el nos regrese el CRT, este crt debe incluir el certificado para el webserver y un certificado de autoridad (CA). Ya que tenemos todo, podemos configurar los certificados en la secciones de host virtuales en el FQDN que estamos configurando, se modificaran los siguientes parametros:
SSLCertificateFile: Archivo CRT con el certificado para el web server.
SSLCertificateKeyFile: Archivo llave
SSLCACertificateFile: Archivo CRT con el CA.

Despues de hacer estos cambios se reiniciara el web server y por cuestiones de seguridad, cada reinicio o inicialización del servicio pedirá la clave, por un lado es bueno que solo las personas autorizadas puedan reiniciar el servicio web, pero que pasa si el servidor completo se reinicia... el web server no arrancara por que se quedara esperando el passphrase. Existe una manera de evitar esto y es reemplazar la llave por otra que no requiera passphrase, eso se puede reaizar con el siguiente comando:

openssl genrsa -out www.midominio.com.key.nopass 2048

Finalmente solo reemplazamos en el parametro del Apache "SSLCertificateKeyFile" con valor www.midominio.com.key por www.midominio.com.key.nopass

viernes, 5 de febrero de 2016

Recuperando password de Administrator de iLO4 en servidor HP

Despues de algunos meses o incluso años, esto pensando en retomar el blog con nuevos proyectos y problemas del día a día.

Hace unos días me tope con la necesidad de actualizar el driver de la interface de red de un servidor HP que esta en otra ciudad diferente a la ciudad donde vivo. Dada esta necesidad había una situación que no me dejaba tranquilo ya que el servidor esta en otra ciudad ¿que pasa si no queda funcionando la interface de red? ¿Voy a tener que ir físicamente a actualizarlo?. La única opción para hacer esto es a traves de la Consola Remota de la iLO, pero tampoco tenia la clave y había que conseguirla de algún modo sin tener que viajar solo a eso.

La información del equipo es:
SO: Debian GNU/Linux 7.1
Kernel: 3.2.0-4-686-pae
Hp Server: ProLiant DL360p Gen8 (i
LO 4)

Paso 1. Agregar los repositorios de HPe a Debian para instalar HP Advanced Server Recovery Daemon, el cual nos permitira el acceso a la HP iLO.

sudo echo "deb http://downloads.linux.hpe.com/downloads/ManagementComponentPack/ubuntu precise current/non-free" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install hponcfg
sudo apt-get install ams
sudo apt-get install hp-healt
Paso 2. Descargar "HP Lights-Out XML PERL Scripting Sample for Linux" al dia de hoy el archivo es linux-LOsamplescripts4.00.0.tgz, este archivo esta disponible en la URL http://h20564.www2.hpe.com/hpsc/swd/public/detail?swItemId=MTX_2e178c5435a742d5bbb60a3b0c

Ya en la linea de comandos con el archivo en el home, ejecutamos lo siguiente
mkdir linux-LOsamplescripts
mv linux-LOsamplescripts4.00.0.tgz linux-LOsamplescripts
cd linux-LOsamplescripts
tar -xvzf linux-LOsamplescripts4.00.0.tgz

Se modificara el archivo Administrator_reset_pw.xml, como se muestra a continuación:

   
      
         
            
         
      
   



En la etiqueta "PASSWORD" a su parametro value se le asigna la nueva contraseña para la iLO. y se ejecuta el siguiente comando

sudo hponcfg -f Administrator_reset_pw.xml -l log.txt > output.txt
Para el ejemplo, una vez realizado esto ya podemos ingresar a la iLO del servidor. Con las credenciales:
User: Administrator
Passwd: newpasswd