martes, 27 de marzo de 2012

Instalar proxy Squid en Solaris 11

Instalar proxy Squid en Solaris 11

Para que funcione un proxy Squid necesitamos tener dos interfases instaladas en el equipo. En este caso es un server HP Proliant con dos adaptadores on-board. Solaris los reconoce como bnx0 y bnx1.

En la zona global, hay que crear las rutas permanentes para poder acceder sin problemas a los equipos de la red local y a internet.

En mi caso, el router que me conecta a internet tienen una dirección de 192.168.1.1. Ese router pasará a ser mi default gateway.


netstat -rn


Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface 
-------------------- -------------------- ----- ----- ---------- --------- 
default              192.168.1.1          UG       17     201030           
10.0.0.0             10.80.22.2           UG       22     230249           
10.80.22.0           10.80.22.30          U         3         13 bnx1      
127.0.0.1            127.0.0.1            UH        2        148 lo0       
192.168.1.0          192.168.1.20         U         3          0 bnx0      


Routing Table: IPv6
  Destination/Mask            Gateway                   Flags Ref   Use    If   
--------------------------- --------------------------- ----- --- ------- ----- 
::1                         ::1                         UH      2       4 lo0 


En la interfase conectada al router (la bnx0) creo una IP fija para el server (192.168.1.20), la otra IP fija esta sobre la bnx1 (10.80.22.30).

La idea es tener un proxy que me permita acceder a internet en los equipos que estan sobre la red interna (10.0.0.0 / 8).

Para eso se crea una zona nueva, que llamaremos 'proxy' a la cual le configuramos una dirección para cada interfase bnx0 = 192.168.1.30/24 y bnx1 = 10.80.22.8/24

# su
(poner clave de root)

# zonecfg -z proxy
create
set zonepath = /zonas/proxy
set autoboot = true
add net
set physical = bnx0
set address = 192.168.1.30/24
end
add net
set physical = bnx1
set address = 10.80.22.8/24
end
verify
commit
exit


#zoneadm -z proxy boot


#zlogin -C proxy

(responde las preguntas de inicialización del server virtual, si parece que no pasa nada, dar un ENTER)

(Salir con ~. y volver a entrar)

#pkg install squid

(tarda un rato hasta que instala el paquete. )

Para evitar que se produzca este error en el log del squid:

2012/03/27 12:50:12| icmpSend: send: (96) Destination address required

Hay que ejecutar:

# chmod 4555 /usr/squid/libexec/pinger

Iniciar el servicio:

#svcadm enable squid

Ahora los clientes pueden acceder a internet configurando la IP interna del proxy en el puerto 3128.
Si los clientes son otros solaris, hay que meter en el archivo /etc/profile una linea asi:

export http_proxy=http://10.80.22.8:3128

Para configurar clave de acceso y otras configuraciones mirar la documentación del Squid.
Yo le habilite el cache en memoria y en disco, para tener un poco mas de ancho de banda libre.


domingo, 25 de marzo de 2012

Envío de SMS desde plataforma4


Este articulo es una guía para usar el servicio de envío de SMS provisto por el proveedor
 SMSMASIVOS (ver http://www.smsmasivos.com.ar/ ).

Seteo inicial del entorno


La arquitectura de mensajería soporta múltiples servidores de ingreso y egreso de mensajes. Como tal el primer paso es configurar un servidor de SMS saliente en el entorno.
Ingresar con una cuenta que tenga permisos de administrador y abrir el menú “Administración” -> “Mensajería” -> “Nuevo Servidor”


Completar los campos como se muestra a continuación:




Tomar nota del código asignado al servidor, en este caso es el “2”

Una vez creado el servidor saliente, hay que indicar que este será el servidor por defecto. Para eso hay que editar el archivo /www/includes/configuration/any.php y agregar un define con el dato.


//Fin de la configuración
define("DEFAULT_SMS_SERVER",2);


En este caso, ponemos el valor “2” que es el código del servidor recién creado. En cada implementación el numero puede ser diferente.


Uso del servicio:

  • a) Incluir el archivo “common/cmessaging.php” al comienzo del script.
  • b) Crear un objeto mensaje ( $msg = new cmessage(); )
  • c) Invocar al método SendSMS ( $msg->SendSMS(); )

Ejemplo:
Se crea una clase y un formulario para enviar mensajes SMS. El código de envío se implementa en el hook.



Clase (Modelo):


<!-- Clase SMS TEST -->
<make object="class">
  <build out_file="csms_test.php" classname="csms_test" classlabel="Test SMS">
    <parse tablename="reg_test" />
      <field name="sms_destino" type="varchar" size="30"/>
      <field name="sms_mensaje" type="varchar" size="140"/>
  </build>
</make>


La clase define dos campos, uno para el numero de teléfono y otro para el mensaje a enviar.

Table Maint (Vista):


<!-- ABM de SMS TEST -->
<make object="table_maint">
  <build out_file="sms_maint.php" classname="csms_test" title="Test de envio de SMS">
    <group title="Mensaje" id="basicos">
      <field name="sms_destino" presentation="PHONE" label="Destino" ismandatory="true" note="Usar formato 15-4444-5555"/>

      <field name="sms_mensaje" presentation="TEXTAREA" label="Mensaje" ismandatory="true" rows="2" cols="70"/>
    </group>
  </build>
</make>


El formulario simplemente presenta estos dos campos al operador.

Hook (controller):


<?php
include_once "common/cmessaging.php";

class csms_test_hooks extends cclass_maint_hooks {

  public function canSaveDB()
  {
    return false;
  }

  public function beforeSaveDB() {
    $err = array();
    $data = $this->m_data;

    $dest = $data->getField("sms_destino")->getValue();
    $mensaje = $data->getField("sms_mensaje")->getValue(); 
    
    $msg = new cmessage();
    $ret = $msg->sendSMS(DEFAULT_SMS_SERVER,$dest,$mensaje);
    if($ret!="OK")
      $err[] = "MENSAJE: ".$ret;
    return $err;
  }
}
?>


El Hook utiliza el método beforeSaveDB() y el canSaveDB() para evitar que el framework quiera salvar el registro a la base de datos (recordar que la clase no se basa en una tabla real en la base).

Se recuperan los valores del formulario y se los pasa al método sendSMS() para el envío del mensaje. Si todo esta bien, el servicio contesta “OK” caso contrario responde con el mensaje de error apropiado.
En este ejemplo, el mensaje de error, se empuja al usuario, con el prefijo “MENSAJE: “ (Si no se le pone este prefijo, el error no llega al usuario, solo va a los logs de errores).


Proceso de la cola de mensajes:

Para que los mensajes efectivamente salgan a la calle, hay que ejectuar un proceso de envío de la cola de mensajes. Es semejante al proceso de envío de mails.

Crear un script:


#!/bin/bash
#Envio mensajes

cd /Users/jcordero/plataforma4/modules/messaging

/Applications/XAMPP/xamppfiles/bin/php -dinclude_path=.:/Users/jcordero/plataforma4_sites/roac/www/includes:/Users/jcordero/plataforma4/includes -f email_process.php $1

/Applications/XAMPP/xamppfiles/bin/php -dinclude_path=.:/Users/jcordero/plataforma4_sites/roac/www/includes:/Users/jcordero/plataforma4/includes -f sms_process.php $1



En este script deberá ajustar:
  • La ubicación del ejecutable php
  • La ubicación del sitio del proyecto y su nombre
  • La ubicación del código de plataforma4

Una vez creado el script apropiado (verificar bien los paths). En el ejemplo yo llame el script “run.sh”
Darle permiso de ejecutable con “chmod +x run.sh” y acceso a la cuenta del cron de ser necesario.

Finalmente hay que modificar el crontab del sistema.
Hacerlo con el comando crontab -e (editar)



    * * * * * /Users/jcordero/plataforma4/modules/messaging/run.sh www.ombu-test.com.ar

Nuevamente ajustar el path absoluto adonde se encuentra el script anterior (run.sh). Pasarle el ultimo valor con el identificador del sitio.

El editor del crontab es el “vi” así que recuerden que se inserta con la “i”, borra con la “x” y se sale con “ESC” -> “:” -> “wq”

Las cinco * indican que el script se ejecutara una vez por minuto.



ACTUALIZACION DEL APACHE/PHP EN SOLARIS 11


En una implementación se debe acceder simultaneamente a una base de datos MySQL y PostgreSQL. Como el combo Apache + PHP regular publicado por Oracle, no contiene el módulo de PostgreSQL vamos a tener que cambiar de repositorio de paquetes (o compilar el PHP que un gran problema).

- Se utilizará el repositorio http://www.opencsw.org (community software)

Para comenzar hay que detener el servicio nativo del web server apache:

svcadm disable apache22

Instalar el mantenedor de paquetes de CSW:


pkgadd -d http://get.opencsw.org/now

## Downloading...
..............25%..............50%..............75%..............100%
## Download Complete


The following packages are available:
 1  CSWpkgutil     pkgutil - Installs Solaris packages easily
                   (all) 2.6.4,REV=2012.02.21

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:


(Poner [Enter] y esperar a que termine)

Instalar el soporte de certificados PKI:

/opt/csw/bin/pkgutil -i CSWcswpki

(Muchos mensajes hasta llegar al final...)

Installation of <CSWcswpki> was successful.

Habilitar confianza con CSW

/opt/csw/bin/gpg --edit-key board@opencsw.org trust

Instalar paquete wget


/opt/csw/bin/pkgutil -i wget

Instalar firma de CSW

/opt/csw/bin/wget -q -O - http://www.opencsw.org/security/ | /opt/csw/bin/gpg --import -

Instalar APACHE2 version CSW

/opt/csw/bin/pkgutil -i apache2



esperar hasta que termine con:



Installation of <CSWapache2> was successful.

Instalar PHP 5.3 con los paquetes necesarios de Plataforma4

/opt/csw/bin/pkgutil -i php5 php5_apc php5_bcmath php5_curl php5_dom php5_gd php5_gettext php5_iconv php5_json php5_mbstring php5_mssql php5_mysql php5_mysqli php5_pgsql  php5_session php5_soap php5_sockets php5_xsl php5_zip



esperar hasta que termine con:



Installation of <CSWphp5-xsl> was successful.


Unir PHP con APACHE

/opt/csw/bin/pkgutil -i ap2_modphp5



Una vez que termina, hay que reiniciar el Apache



svcadm restart cswapache2


Validar la INSTALACION DEL APACHE + PHP


Crear en el document root una pagina de prueba

cd /opt/csw/apache2/share/htdocs/

echo "<?php phpinfo(); ?>" > info.php



Abrir el browser, poner la dirección IP del server, pagina info.php (en mi caso, la IP es 192.168.56.101)



http://192.168.56.101/info.php



Se debe ver una pagina como esta:










Notar donde estan guardados los archivos de configuracion del PHP (/etc/opt/csw/php5/php.ini) y del Apache (/opt/csw/apache2/etc/httpd.conf)
La configuración del PHP esta sobre /etc y la del apache sobre /opt


Tareas post instalación:

El modulo APC hay que agregarlo a mano en el php.ini



extension=apc.so



El modulo de graficos GD esta mal referenciado en el php.ini y no lo carga. Corregir el nombre:



original -> extension=gd2.so
debe decir -> extension=gd.so



Reiniciar el apache (svcadm restart cswapache2) y verificar con la info.php que los modulos están ahora activos.