Pages

miércoles, 28 de septiembre de 2011

Openfire OpenBSD 4.9 y PostgreSQL

Una combinacion divina, donde esta la libertad, la seguridad y el rendimiento, PostgreSQL claro que tambien se puede instalar en OpenBSD y el server de IM Openfire que maneja un protocolo jabber o xmpp claro que tambien.

Antes de empezar  con esta instalación, vale la pena aclarar que el entorno en que lo hago, tengo configurado un servidor DNS para la resolucion de nombres, simulando la red interna de una empresa, igualmente cuento con un servidor DHCP.

Hostname = ecalle.calle.tux
ip_lan = 192.168.2.5
ip_wan = 172.16.200.10


Empecemos instalando PostgreSQL, despues de la instalación, generamos la base de datos inicial, y le damos un password al super usuario de postgresql.

# pkg_add -v postgresql-server-9.0.3p0


# su - _postgresql
$ mkdir /var/postgresql/data
$ initdb -D /var/postgresql/data -A md5 -W          #(Esto pedira un password, que sera el password del super usuario de postgresql, el user por defecto es "postgres")

Despues de eso, nos da el mensaje que ya es posible iniciar el motor de base de datos, para cual nos valemos del demonio que creo el instalador en /etc/rc.d/postgresql, y hacemos lo siguiente para que se inicie de manera automatica con el sistema.

# echo 'rc_scripts="postgresql"' >> /etc/rc.conf.local
# sh /etc/rc

Despues de esto queda instalado y configurado el PostgreSQL, que por defecto solo acepta conexiones de localhost, y por el puerto 5432.

Ahora se instala el Openfire y se configura.

# pkg_add -v openfire


Configuramos la Base de datos para el Openfire, la cual la llamaremos openfire.

# su - _postgresql
$ createdb  -h localhost -U postgres -W openfire

Se copia la estructura de la DB de Openfire a la DB recien creada

$ psql -h localhost -U postgres -W -d openfire -f /usr/local/openfire/resources/database/openfire_postgresql.sql

Con esto queda la DB lista para el empleo por el Openfire, de este punto iniciamos el Openfire para poder acceder a la configuracion de este por la interfaz web por el puerto 9090.

# /usr/local/sbin/openfirectl start

ahora ingresamos a la interfaz web con la ip o el nombre del servidor



Muestro solo la configuracion de la base de datos, ya que el resto es intuitivo y por defecto.


Despues de hacer la configuracion del Openfire, se nos redirecciona a la pagina de login para acceder a la configuracion del servidor, y la administración de este, es recomendable esperar un tiempo de 5 a 10 min, ya que en ocaciones no acoge los cambios de contraseña del administrador de la plataforma.

El User por defecto es 'admin', el password es el ultimo que setearon en la configuración donde se les pedia un correo, vemos que esta correctamente conectado a la base de datos.


Ahora solo queda crear los usuarios y conectar los clientes.


Usuarios conectados y con una comunicación establecida.




Para finalizar, para que el Openfire se ejecute automaticamente cada ves que se inicie el sistema, se debe poner lo siguiente en el archivo /etc/rc.local

/usr/local/sbin/openfirectl restart

Asi se podra reiniciar en conjunto que se reinicien los servicios o inicie el sistema.

Apache + PHP + MySQL en OpenBSD 4.9

Como bien se sabe, lo mas común que se requiere para un proyecto actual, donde las aplicaciones son en la nube y necesitan ser user friendly, es la integración y correcto funcionamiento de un servidor WEB, que sea capaz de procesar como minimo php y a la ves que pueda obtener datos desde una base de datos como mysql (lo mas común), asi que con OpenBSD hay una manera sencilla de conseguir estos requerimientos.

Por defecto el servidor web es un apache que viene preinstalado y dentro de un chroot, mas el php y el mysql es necesario instalarlos.

# pkg_add -v mysql-server php5-mysql

Despues de la instalación de MySQL, se instala este fichero /etc/rc.d/mysqld, lo cual para el OpenBSD 4.9 se traduce como un demonio.

Ahora habilitemos el php5 al apache, lo cual lo hacemos haciendo los links recomendados despues de terminar la instalacion del php5-mysql.

# ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules/
# ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/



Despues de esto, configuremos el MySQL, ya que sera el servicio principal de esta integración.

Al intalarse MySQL, no se instala automaticamente la base de datos, asi que para poder que nos funcione, debemos de instalarle la DB de MySQL, y despues de eso, agregar un password al usuario root, lo hacemos asi.

# /usr/local/bin/mysql_install_db

Installing MySQL system tables...
110928  6:22:29 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK
Filling help tables...
110928  6:22:29 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/local/bin/mysqladmin -u root password 'new-password'
/usr/local/bin/mysqladmin -u root -h ecalle.calle.tux password 'new-password'

Alternatively you can run:
/usr/local/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

Please report any problems with the /usr/local/bin/mysqlbug script!

# /usr/local/bin/mysqld_safe &   
[1] 21573
bash-4.1# 110928 06:23:41 mysqld_safe Logging to '/var/mysql/ecalle.calle.tux.err'.
110928 06:23:41 mysqld_safe Starting mysqld daemon with databases from /var/mysql


# /usr/local/bin/mysqladmin -u root password 'password_root'

Con esto nos queda instalado y configurado MySQL, (recordar que estos post son hechos con fines educativos, por lo tanto no se esta pensando en la seguridad para un entorno en producción, luego se haran referencias a esos items.)

Como el servidor web se encuentra en un chroot, hay que hacer un link al socket del MySQL para poder que el servidor web pueda accerder a las bases de datos de dicho gestor, esto lo hacemos asi.

# mkdir -p /var/www/var/run/mysql
# ln /var/run/mysql/mysql.sock /var/www/var/run/mysql/

Ahora solo falta que el MySQL y el Apache (httpd) se ejecuten al iniciar el sistema.

# echo 'mysqld_flags=""--socket=/var/run/mysql/mysql.sock""' >> /etc/rc.conf.local
# echo 'httpd_flags=""' >> /etc/rc.conf.local
# echo 'rc_scripts="mysqld"' >> /etc/rc.conf.local
# sh /etc/rc

Por ultimo reiniciamos los servicios, igualmente suben al inicio del sistema, y con esto queda lista la integración de dichos servicios, para hacer pruebas, los archivos .php de la pagina, se deben poner en la dirección /var/www/htdocs/, que por defecto viene con contenido de apache.

DNS en OpenBSD 4.9

El servicio DNS, podra ser uno de los mas importantes entre los servicios de red basicos, ya que para el usuario final es mas facil el recordar un nombre que una direccion IP, asi que nuestro servicio nos va a ayudar con semejante tarea, la de "recordar" las IP y nosotros solo le damos el nombre.. :D, asi que al grano, como bien sabemos, OpenBSD por defecto tambien nos permite activar y configurar este servicio de manera facil y relativamente segura, para hacerlo vamos a los pasos.

En este caso,esta es la configuración de nuestro equipo.
vic0 = wan = 172.16.200.10
vic1 = lan = 192.168.2.5
hostname = ecalle.pruebas.tux
archivo /etc/hosts
192.168.2.5          ecalle.pruebas.tux ecalle

Primero que todo debemos activarlo, ya que no viene activado por defecto, asi que digitamos el siguiente comando:

# echo 'named_flags=""' >> /etc/rc.conf.local

Bien hasta aqui esta activado, pero falta definir que queremos que sea nuestro servidor, un DNS cache o un servidor de zonas?, en este caso vamos a configurarlo como un servidor de zonas (master) y reenviador, ya que para hacerlo cache, es como viene la configuración por defecto y solo bastaria con habilitarlo.

Los archivos de configuración vienen en un chroot, que se encuentra en /var/named/, desde esta ruta como raiz es donde debemos de buscar todos los archivos de configuración.

Configuremos primero que todo nuestras zonas, para lo cual ya debemos de contar con un Dominio el cual para casos de ejemplo, utilizare el dominio pruebas.tux siendo este un dominio para la red interna, para configurar las zonas de nuestro servicio editamos el archivo /var/named/etc/named.conf:


Primero hacemos un backup de dicho archivo.

# cp /var/named/etc/named.conf /var/named/etc/named.conf.bak

Despues editamos el archivo y comentamos la zona ".", con esto deshabilitamos el DNS cache, quedando asi.

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

Buscamos la linea listen-on-v6 { any; }; modificamos "any" por "none" para deshabilitar que el servicio suba en IPv6 y comentamos la zona inversa de IPv6.

//zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
//      type master;
//      file "standard/loopback6.arpa";
//      allow-transfer { localhost; };
//};

Para setear nuestro servidor como forwarder, editamos la seccion "options", y le agragamos la linea forwarders {IP;}; donde reemplazamos IP, por el servidor DNS a quien deseamos reenviear las peticiones DNS que no podamos resolver, ademas de modificar la linea listen-on { 192.168.2.5; 127.0.0.1; }; , asi solo escuchara el servicio por las IP's que se le configuren, la sección quedaria asi.

options {
        version "";     // remove this to allow version queries

        listen-on    { 192.168.2.5; 127.0.0.1; };
        listen-on-v6 { none; };
        forwarders {172.16.200.2;};
        empty-zones-enable yes;

        allow-recursion { clients; };
};


Despues de esto, vamos al final del archivo de configuración y agregamos nuestra zona directa.
zone "pruebas.tux" {
        type master;
        file "master/pruebas.tux";
};

Hay que recordar que la ruta es tomada en cuenta desde el chroot, y que por defecto apuntara a "/", osea que en nuestro sistema los archivos de zonas estara en /var/named/master/pruebas.tux.

Ahora, para configurar la zona recien creada haremos lo siguiente, copiaremos un archivo de zona standar y lo modificaremos para adaptarlo a nuestra zona.

# cp /var/named/standard/localhost /var/named/master/pruebas.tux

Editamos nuestro archivo para adaptarlo.

$TTL 6h
@       IN      SOA     ecalle.pruebas.tux. root.pruebas.tux. (
                        1       ; serial
                        1h      ; refresh
                        30m     ; retry
                        7d      ; expiration
                        1h )    ; minimum

                NS      ns1.pruebas.tux.
ns1             A       192.168.2.5

Ahora hacemos estos 3 ultimos pasos pero con la zona inversa, primero creamos la zona.

zone "2.168.192.in-addr.arpa" {
        type master;
        file "master/2.168.192.in-addr.arpa";
};

Copiamos el archivo de zona de las estandar.

# cp /var/named/standard/loopback /var/named/master/2.168.192.in-addr.arpa

Editamos el archivo para adaptarlo.

$TTL 6h
@       IN      SOA     ecalle.pruebas.tux. root.pruebas.tux. (
                        1       ; serial
                        1h      ; refresh
                        30m     ; retry
                        7d      ; expiration
                        1h )    ; minimum

                NS      ns1.pruebas.tux.
5               PTR     ns1.pruebas.tux.

Hasta este punto esta configurado nuestro servidor como un servidor de Zonas y forwarder, reenviando  las peticiones que no pueda resolver al servidor 172.16.200.2.

Revisamos la configuración de nuestro archivo named.conf y de nustros archivos de zonas, para verificar que no hayan problemas, lo podemos hacer de la siguiente manera.

# named-checkconf /var/named/etc/named.conf
# named-checkzone pruebas.tux /var/named/master/pruebas.tux
zone pruebas.tux/IN: loaded serial 1
OK
# named-checkzone 2.168.192.in-addr.arpa /var/named/master/2.168.192.in-
zone 2.168.192.in-addr.arpa/IN: loaded serial 1
OK

Reiniciamos los servicios.

# sh /etc/rc

Listo un servidor DNS de zonas, solo se agrega como servidor DNS en el DHCP para que lo reparta a los clientes, y puedan usar el nuevo DNS, quiero recordar que este montaje es un montaje sencillo a modo de conocimiento, mas NO esta hecho pensando en la seguridad.

Al final, comprobamos con un cliente el funcionamiento, como prueba les dejo un pantallazo.