Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Archive for June, 2007

Simple Network Management Protocol en FreeBSD 6.2

Buenos Dias

La razon de este “How to” es a razon de un amigo que tengo en Guadalajara, (y eso que wey!, jajaj), el cual me comento si podia recolectar datos como el Uptime, procesos corriendo, bytes tranferidos entrantes y salientes en ciertas tarjetas de red, de un servidor con sistema FreeBSD 6.2 Stable.

Le comente que para esto requeria SNMP (Simple Network Management Protocol), windows tiene SNMP, linux lo tiene, solaris lo tiene, y FreeBSD lo tiene… lo podemos instalar utilizando el arbol de ports.

mayte# cd /usr/ports/net-mgmt/net-snmp && make install clean

Ya instalado, procedemos a llenar el archivo de configuracion de el nuevo demonio SNMPD:
mayte# edit /usr/local/share/snmp/snmpd.conf

###################################################
#Comunidades permitidas
com2sec local 127.0.0.1/32 public
com2sec localnet 192.168.192.0/24 public

#grupos con acceso RW(Read/Write) version snmp 1, y 2c
group MyRWGroup v1 local
group MyRWGroup v2c local

# grupos con acceso modo RO(Read Only)
group MyROGroup v1 localnet
group MyROGroup v2c localnet

#desplegar todo la info del arbol snmp con mascara 80
view all included .1 80

# Lista de control de acceso
access MyROGroup “” any noauth exact all none none
access MyRWGroup “” any noauth exact all all all

syslocation FreeBSD 6.2 Server on mayte.oxkintok.com.mx #datos del host
syscontact Ing. Edwin Plauchu pianodaemon@hotmail.com

###################################################

Ahora agrega el demonio de SNMPD al arranque de nuestro FreeBSD, para esto agrega las siguientes lineas al /etc/rc.conf

snmpd_enable=”YES”
snmpd_flags=”-a -p /var/run/snmpd.pid”
snmptrapd_enable=”YES”
snmptrapd_flags=”-a -p /var/run/snmptrapd.pid”

Ahora reinicia y has la prueba de pedir info al demonio SNMPD :)
Aqui yo le pido el tiempo que lleva prendido nuestro servidor FreeBSD

mayte# snmpget -v 2c -c public localhost sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (167665) 0:27:56.65

Nat en Centos 5

network address translation an internet standard that enables a local-area network lan to use one set of ip addresses for internal traffic and a second set of addresses for external traffic a nat box located where the lan meets the internet makes all necessary ip address translations nat serves three main purposes provides a type of firewall by hiding internal ip addresses enables a company to use more internal ip addresses since they’re used internally only there there’s no possibility of conflict with ip addresses used by other companies and organizations allows a company to combine multiple isdn connections into a single internet connection.

Para configurar NAT en Centos 5 procedamos a editar el archivo /etc/rc.local y agreguemosle las siguientes lineas

iptables = /sbin/iptables
intranet = 192.168.10.0/24
inet = ppp0
lan = eth1

$iptables -t nat -a postrouting -o $inet -s $intranet -j masquerade

Una vez hecho lo anterior modifiquemos la siguiente linea en el archivo “/etc/sysctl.conf ” su valor por default es 0 cambiemos este a 1

net.ipv4.conf.default.forwarding=1

ndiswrapper cargando drivers win32 de tarjetas wireless en linux

Tengo una tarjeta de red airlink no se que modelo que en linux 2.4.x no tiene soporte asi que decidi probar ndiswrapper y con este he conseguido que funcione perfectamente.

pre-requisitos para instalar ndiswrapper
- linux-source
- linux-headers
- drivers de windows de la tarjeta
- Codigo fuente de ndiswrapper

Una vez descargado ndiswrapper lo descomprimimos e instalamos
tar -xvzf ndiswrapper-1-1.tar.gz && cd ndiswrapper-1.1 && ./configure nice -20 make && make -j2 install

Despues de compilar e instalar, creamos una carpeta donde guardar los drivers para windows de nuestra tarjeta airlink modelo patito.

mkdir -p /etc/ndiswrapper/modelopatito

insertamos el cd con los drivers y copiamos los drivers al directorio modelopatito

cp /mnt/cdrom/driver /etc/ndiswrapper/modelopatito
ls /etc/ndiswrapper/modelopatito/

ndiswrapper -i /etc/ndiswrapper/modelopatito/cvn3ab.inf

listo ahora reinicia.

VPN Multipunto (Multihomed) en Centos 5 con OpenVPN

Buenas Tardes a todos! (usuarios de solaris, bsderos ), dejo a su disposicion este guia, para la instalacion de openvpn en modo multihomed, modo muy requerido por todos aquellos roadwarriors que requiera tu empresa. Lo hice para linux, debido a que ya lo tenia hecho de tiempo atras :).. y debido a que soy un gran amante del tiempo libre fuera de la compu…. asi que pues se quedo en linux el howto…. no lo habia publicado solo por decidia.. espero y les sea util.

1 - Software a instalar

j4nusx@zorrita$> yum install bridge-utils openvpn lzo openssl
j4nusx@zorrita$> yum install openssl
j4nusx@zorrita$> rpm -Uvh http://dag.wieers.com/rpm/packages/lzo2/lzo2-2.02-2.el5.rf.i386.rpm
j4nusx@zorrita$> rpm -Uvh http://dag.wieers.com/rpm/packages/lzo2/lzo2-devel-2.02-2.el5.rf.i386.rpm
j4nusx@zorrita$> rpm -Uvh http://dag.wieers.com/rpm/packages/openvpn/openvpn-2.0.9-1.el5.rf.i386.rpm

2 - Dispositivos y Puentes a crear

j4nusx@zorrita$> openvpn –mktun –dev tap0
Tue Jun 19 23:22:06 2007 TUN/TAP device tap0 opened
Tue Jun 19 23:22:06 2007 Persist state set to: ON openvpn –mktun –dev tap0

Estableceremos un bridging que inclulla a las interfaces tap0 y eth1 (en este caso la interface conectada a nuestra lan coorporativa)

j4nusx@zorrita$> brctl addbr br0 && brctl addif br0 eth1 && brctl addif br0 tap0

Establecemos la interfaces que conforman el bridging en modo promiscuo

j4nusx@zorrita$> ifconfig eth1 0.0.0.0 promisc up && ifconfig tap0 0.0.0.0 promisc up
j4nusx@zorrita$> ifconfig br0 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255


3 - Generacion de certificados de autentificacion solo root para determinar si un cliente tiene permisos de coneccion o no, openvpn verifica si este tiene las firmas que lo certifica en un servidor

j4nusx@zorrita$> cd /etc/openvpn && mkdir ssl && cd ssl
j4nusx@zorrita$> mkdir certs

3.1 - Creamos nuestro certificado de autoridad ca privado

j4nusx@zorrita$> openssl req -x509 -newkey rsa:1024 -out openvpn-ca.crt -outform pem -days 10000

“Generating a 1024 bit rsa private key
……………………………..++++++
…………………………………………..++++++
writing new private key to ‘privkey pem’
enter pem pass phrase verifying: mayte
enter pem pass phrase: mayte
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:MX
State or Province Name (full name) [Berkshire]:Sinaloa
Locality Name (eg, city) [Newbury]:Culiacan
Organization Name (eg, company) [My Company Ltd]:Oxkintok
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:EdwinPlauchu
Email Address []:plauchu@oxkintok.com

“Ahora Echaremos un vistazo a lo que hemos creado”

j4nusx@zorrita$> ls
openvpn-ca.crt privkey.pem

“Renombremos el archivo privkey.pem”

j4nusx@zorrita$> mv privkey.pem openvpn-ca.key

3.2 - Llave diffie hellman a 1024 bits

j4nusx@zorrita$> openssl dhparam -out dh1024.pem 1024


3.3 - Generacion de certificados individuales por cada cliente “cada punto”

Dentro de un enlace openvpn corriendo en modo tls devera de poseer su propio certificado cert y un archivo de llave privada key para lograr esto primero obtendremos de la ca un certificate signing request mi_certificado.csr de la siguiente manera, tambien obtenemos la llave que requerimos en el proceso:

j4nusx@zorrita$> openssl req -newkey rsa:1024 -keyout llave.key -keyform pem -out mi_certificado.csr -outform pem -nodes

“ahora firmamos el certificate signing request asi:”

j4nusx@zorrita$> openssl x509 -req -days 10000 -in ./mi_certificado.csr -CA ../../openvpn-ca.crt -CAkey ../../openvpn-ca.key -CAcreateserial -out ./mi_certificado.crt
Signature ok
subject=/C=MX/ST=Sinaloa/L=Culiacan/O=Oxkintok/OU=Developers/CN=EdwinPlauchu/emailAddress=pianodaemon@hotmail.com
Getting CA Private Key
Enter pass phrase for ../../openvpn-ca.key: mayte

j4nusx@zorrita$> ls

llave.key mi_certificado.crt mi_certificado.csr

##j4nusx@zorrita$> openssl x509 -req -days 10000 -in mi_certificado csr -ca certs openvpn-ca ##crt -cakey openvpn-ca key -cacreateserial -out certs mi_certificado.crt

Listo hemos obtenido nuestro certificado individual “mi_certificado.crt” ahora borramos el archivo csr que utilizamos para fabricarlo.

j4nusx@zorrita$> rm mi_certificado csr

4 -archivo de configuracion de openvpn 2 lado servidor linux

####dispositivo a utilizar###########
dev tap0

##### bandera que permite a los clientes visualizarce entre ellos ##
client-to-client
################################

#### mantiene vivo el servidor vpn
keepalive 10 30
################################

#### instrucciones que se ejecutaran
#### en los clientes al conectarce
push "ping-restart 60"
################################

#### archivo que indica el estado de openvpn
status tmp maxima-vpn status ################################ #### numero de clientes permitidos max-clients 150 ################################

#### net mask de la vpn ##########
server-bridge 192.168.2.1 255.255.255.0 192.168.2.50 192.168.2.250 ################################

#### implementacion de la trasmision de capa segura tsl #####
tls-server
################################

#### llaves ssl a utilizar ###########
dh /etc/openvpn/ssl/dh1024.pem
ca /etc/openvpn/ssl/certs/openvpn-ca.crt
cert /etc/openvpn/ssl/certs/mi_certificado.crt
key /etc/openvpn/ssl/llave.key
################################

#### protocolo y puerto ########
proto tcp-server port 5000
################################

#### modus operandi ############
mode server
################################

#### compresor de informacion ##
comp-lzo
################################

### nivel de verbose ###########
verb 0
# 0 — no output except fatal errors
# 5 — output r and w characters to the console for
# each packet read and write uppercase is used for
# tcp udp packets and lowercase is used for tun tap
# packets
################################

persist-key
persist-tun

5.- Configurando el Lado cliente con SO windows XP

Archivo de configuracion multihomed-client.conf

#puerto
port 5000
dev tap
remote mayte.homeunix.net
# tls parametros

tls-client
ca c:\vpn\openvpn-ca.crt
cert c:\vpn\alberto_certificado.crt
key c:\vpn\llave.key

# this parm is required for connecting
# to a multi-client server it tells
# the client to accept options which
# the server pushes to us pull
ping 20

Pentaho Integracion de Datos

Un amigo del IRC escribio lo siguiente ayer en #opensolaris-mx
GHReyes: Acabo de descubrir una herramienta muy grossa para hacer ETL de bases de datos multiplataforma (incluido Solaris)
GHReyes: :)
GHReye: http://kettle.pentaho.org/screenshots/

Cambiar el Hostname en Solaris 10

Despues de haber instalado Solaris 10… el nombre de mi host ha quedado como “unknow”, asi que me di a la tarea de buscar como cambiarlo al nombre que deseo:

1. - Cambie el hostname en los siguientes archivos:

/etc/nodename
/etc/hostname.*interface
/etc/inet/hosts
/etc/inet/ipnodes

y renombre el directorio bajo /var/crash

# cd /var/crash
# mv oldname newname

ahora reinicie el servidor.

Explicando DTrace

DTrace es una de las características mas novedosas e importantes introducidas a partir de Solaris 10. Tanto es así que ya se han anunciado ports del sistema DTrace para otros sistemas operativos

Existen tanto en la pagina de BigAdmin como en la comunidad opensolaris sobre DTrace numerosos recursos de introducción a DTrace, pero quiero introducir mi punto de vista a la par que vengo leyendo e investigando un poco mas del uso de este juguetito.

¿ Que es DTrace ?

DTrace es un sistema, que permite obtener información de utilidad sobre virtualmente cualquier cosa que haga tanto el sistema operativo como los programas que se ejecutan encima de el.

DTrace es una aplicacion ligera que podran entender un poco mejor, todos aquellos que alguna vez programaron en “C” cosas triviales, como algun acceso a archivos mediante “file descriptors”, o que invocaron a la API de algun UNIX/LINUX usando lenguaje “C”.

DTrace, es como poder tener un depurador sobre todo el sistema (tanto kernel como programas).

¿ Que tiene de especial DTrace ?

DTrace permite la depuración sea realizada sobre sistemas en producción, con un bajisimo impacto en el rendimiento (practicamente 0 si no se hace uso de el, aunque este activo).

El administrador maneja el sistema DTrace basicamente mediante el comando “dtrace”, DTrace requiere de programas en lenguaje D (que suelen tener extension .d) para realizar su magia :).

El lenguaje D es un lenguaje hibrido entre C y algo de awk ( “sabia que haber estudiado awk no habia sido en vano … :P” ) , que sirve para “enganchar” trozos de codigo a “puntos de prueba”.

Nuestro primer programa en lenguaje D implementado con DTrace

Un ejemplo de lenguaje D es el siguiente fichero (hello.d):

dtrace:::BEGIN
{
trace(”Hello Foxy Lady”);
exit(0);
}

Este programa lo que hace es cada vez que “ocurra” el probe BEGIN dentro del provider dtrace se ejecute el codigo entre corchetes, en este caso mediante el comando trace(”Hello Foxy Lady”) imprimiria en la salida estandar un bonito “Hello Foxy Lady” y saldria asi ;-)

Ejecutandolo de la siguiente manera:

root@jimmyhendrix ~ # dtrace -s hello.d
dtrace: script ‘hello.d’ matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN Hello Foxy Lady

root@jimmyhendrix ~ #

En concreto este punto de prueba (”probe”) BEGIN dentro del provider dtrace ocurre cuando se inicia un programa D.

Existen mas de 30000 puntos de prueba (” en ingles se hace referencia a ellos como probes .. checalos, estan disponibles mediante un “dtrace -l ”) en el sistema Solaris 10, pudiendo un programador añadir mas cosas que comprobar (probes) implementando lo que se llama un provider dentro de sus programas.

Por ejemplo, el autor de un servidor web puede añadir codigo a este para que el administrador pueda ejecutar acciones (normalmente de información) cada vez que se solicita una pagina web, cada vez que suceda un error u otras informaciones de alto nivel sobre el programa.

No obstante, aunque no existiera ese código dentro del programa, el administrador siempre puede obtener mediante dtrace(1m) información de menor nivel sobre el proceso ( por ejemplo, cuando abre un archivo, cuando solicita mas memoria etc etc ).

Creating an IPF Firewall with Solaris 10

Outline
=======

1. Background
2. Configuring IPF
3. Enabling IPF
4. Common IPF commands

Background
==========

With the release of Solaris 10, ipfilter is now supported. Before
Solaris 10, EFS or SunScreen Lite was the default firewall. IPfilter
is a mature product traditionally found in BSDish Operating Systems.

Configuring IPF
===============

First, you will need an ipf ruleset. The Solaris default location for
this file is /etc/ipf/ipf.conf. Below is the ruleset I used for a
Solaris 10 x86 workstation. Note that the public NIC is called elx10.
Simply copy this ruleset to a file called /etc/ipf/ipf.conf, and edit
to your needs.

—>8—
# 11/18/04 - Newest Firewall for testing.
# Rich Shattuck
# My IP: 172.16.1.100
#
# Block any packets which are too short to be real
block in log quick all with short
#
# drop and log any IP packets with options set in them.
block in log all with ipopts
#
# Allow all traffic on loopback.
pass in quick on lo0 all
pass out quick on lo0 all
#
# Public Network. Block everything not explicity allowed.
block in on elxl0 all
block out on elxl0 all
#
# Allow pings out.
pass out quick on elxl0 proto icmp all keep state
#
# for testing, allow pings from ben and jerry
pass in quick on elxl0 proto icmp from 172.16.1.11/32 to 172.16.1.100/32
pass in quick on elxl0 proto icmp from 172.16.1.12/32 to 172.16.1.100/32
#
# Allow outbound state related packets.
pass out quick on elxl0 proto tcp/udp from any to any keep state
#
# allow ssh from 172.16.0.0/16 only.
# pass in log quick on elxl0 from 172.16.0.0/16 to 172.16.1.100/32 port = 22
# Actually, allow ssh only from ben, jerry, MSU
pass in log quick on elxl0 proto tcp from 172.16.1.11/32 to 172.16.1.100/32 port = 22
pass in log quick on elxl0 proto tcp from 172.16.1.12/32 to 172.16.1.100/32 port = 22
pass in log quick on elxl0 proto tcp from 153.90.0.0/16 to 172.16.1.100/32 port = 22
—>8—

Enabling IPF
============

Now that you have an ipf ruleset in place, you’ll need to tell the
Solaris packet filter which interface to use. This is accomplished by
uncommenting your interface name from /etc/ipf/pfil.ap.

My pfil.ap file looks like this:

—>8—
# IP Filter pfil autopush setup
#
# See the autopush(1M) manpage for more information.
#
# Format of the entries in this file is:
#
#major minor lastminor modules

#iprb -1 0 pfil
elxl -1 0 pfil
#e1000g -1 0 pfil
#bge -1 0 pfil
#nf -1 0 pfil
#fa -1 0 pfil
#ci -1 0 pfil
#el -1 0 pfil
#ipdptp -1 0 pfil
#lane -1 0 pfil
#dnet -1 0 pfil
#pcelx -1 0 pfil
#spwr -1 0 pfil
—>8—

That’s It! The ipf firewall should be enabled and working with the next reboot!

Note that the Solaris 10 implementation of ipf will start ipmon.
Ipmon is the ipf utility used to monitor and log packets. By default,
ipmon will write logged packets to /var/adm/messages.

Some Commonly used ipf commands
===============================

ipf -E : Enable ipfilter when running
: for the first time.
: (Needed for ipf on Tru64)

ipf -f /etc/ipf/ipf.conf : Load rules in /etc/ipf/ipf.conf file
: into the active firewall.

ipf -Fa -f /etc/ipf/ipf.conf : Flush all rules, then load rules in
: /etc/ipf/ipf.conf into active firwall.

ipf -Fi : Flush all input rules.

ipf -I -f /etc/ipf/ipf.conf : Load rules in /etc/ipf/ipf.conf file
: into inactive firewall.

ipf -V : Show version info and active list.

ipf -s : Swap active and inactive firewalls.

ipfstat : Show summary

ipfstat -i : Show input list

ipfstat -o : Show output list

ipfstat -hio : Show hits against all rules

ipfstat -t -T 5 : Monitor the state table and refresh every
: 5 seconds. Output is similiar to
: ‘top’ monitoring the process table.

ipmon -s S : Watch state table.

ipmon -sn : Write logged entries to syslog, and
: convert back to hostnames and servicenames.

ipmon -s [file] : Write logged entries to some file.

ipmon -Ds : Run ipmon as a daemon, and log to
: default location.
: (/var/adm/messages for Solaris)
: (/var/log/syslog for Tru64)