SafeChildren Banner

Havoc Oracle Solaris Experts

jueves, 28 de diciembre de 2006

:: OFF TOPIC :: Mi Scalextric :D

Este es mi nuevo circuito de Scalextric Digital con la nueva "Chicanne" montada en la bodega


Y esta es otra ;)

Y por último .... en funcionamiento con este video

xD

jueves, 21 de diciembre de 2006

Instalar Bind de forma segura en un CHROOT

Parte 1 - Para los impacientes

Aquí esta una versión creada para Solaris 9 compilado sin parametrización

Parte 2 - Para los que queremos aprender

La instalación de BIND sobre un CHROOT en Solaris 9 no difiere demasiado de instalaciones sobre otras plataformas UNIX.

He escrito un script que realiza gran parte de las tareas por nosotros. Tiene que estar instalado en un directorio con permisos de escritura y debe ser ejecutado como root.

#!/bin/bash
#####################################################################
## CREATE.STRUCTURE
##
## Autor
## Urko Benito
## Version
## 1.0
## Fecha
## 17.ABR.2007
## Descripcion
## - crea la estructura de archivos para la instalacion de un
## servidor DNS BIND sobre Solaris
## - utiliza el directorio base $CHROOT_BASE/dns.server para
## su directorio principal
##
## Revision 1.1 - 19.ABR.2007
## - Ajustes y creaciones para el blog
###################################################################

# variable base
CHROOT_BASE=/chroot
DNS_SERVER=${CHROOT_BASE}/dns.server
UMASK_BIN=$(which umask)
MKDIR_BIN=$(which mkdir)
LN_BIN=$(which ln)
ECHO_BIN=$(which echo)
GREP_BIN=$(which grep)
AWK_BIN=$(which awk)
USERADD_BIN=$(which useradd)
GROUPADD_BIN=$(which groupadd)
LDD_BIN=$(which ldd)
COPY_BIN=$(which cp)
FIND_BIN=$(which find)
XARGS_BIN=$(which xargs)
SORT_BIN=$(which sort)
UNIQ_BIN=$(which uniq)
LS_BIN=$(which ls)
SED_BIN=$(which sed)
MKNOD_BIN=$(which mknod)
ZONENAME_BIN=$(which zonename)

##########################################################
## configuracion instalcion BIND
##
## debemos tener una instalacion de bind ya en el servidor
## en la BIND_BASE=/usr/local/bind
##########################################################
BIND_BASE=/root/scripts/install-bind/bin/bind-9.4.0
BIND_BIN=${BIND_BASE}/bin
BIND_SBIN=${BIND_BASE}/sbin
NAMED_BIN=${BIND_SBIN}/named

##########################################################
## archivos temporales
##########################################################
OUTPUTFILETEMP=/tmp/ldd.output

###########################################################
## en SunOS tenemos que tener una estructura igual
## y existen las biblitoecas de kernel unidas a la plataforma
## por eso, debemos crear los mismo
###########################################################
IS_SUN=$(uname -s)
SUN_VERSION=$(uname -r)
IS_SUNOS=$(uname -s)
ZONENAME=$(${ZONENAME_BIN})

############################################################
## CONFIGURACION ACTIVA/NO
## Para Evitar que se haga uso sin configurar por lo menos
## lo del BIND-SOURCE
###########################################################

# message
function show_start_help {
# if [ -z ${BIND_BASE} ]; then
${ECHO_BIN}<###############################################################
## WARNING
###############################################################

No esta configurado el sistema, debes introducir la ubicacion
para BIND_BASE con la direccion de los binarios de BIND

###############################################################
## END
###############################################################

EOF_ECHO
}

# chroot - structure
function create_directory {
# mascara mas segura
${UMASK_BIN} ${UMASK_OPT}
# sistema general de archivos
${MKDIR_BIN} -p ${DNS_SERVER}/{dev,opt,usr,var,etc};
cd ${DNS_SERVER}
${MKDIR_BIN} -p ${DNS_SERVER}/usr/bin
${MKDIR_BIN} -p ${DNS_SERVER}/usr/sbin
${MKDIR_BIN} -p ${DNS_SERVER}/usr/lib
${MKDIR_BIN} -p ${DNS_SERVER}/usr/local
${LN_BIN} -s ./usr/bin ./bin
${LN_BIN} -s ./usr/sbin ./sbin
${LN_BIN} -s ./usr/lib ./lib
${MKDIR_BIN} -p ${DNS_SERVER}/var/{run,log,named}
# si es SunOS
if [ ${IS_SUN} = "SunOS" ]; then
SUN_TYPE=$(uname -i)
${MKDIR_BIN} -p ${DNS_SERVER}/platform/${SUN_TYPE}/lib
${MKDIR_BIN} -p ${DNS_SERVER}/usr/platform/${SUN_TYPE}/lib
else
${ECHO_BIN} "No SunOS"
fi

}

# create user
function create_dns_user {
# start
${ECHO_BIN} "Starting Creating User NAMED"

${GROUPADD_BIN} -g 6000 named
${USERADD_BIN} -g named -s /bin/false -c "BIND daemon" -d /dev/null -m named
${GREP_BIN} named /etc/passwd > ${DNS_SERVER}/etc/passwd
${GREP_BIN} named /etc/shadow > ${DNS_SERVER}/etc/shadow
${GREP_BIN} named /etc/group > ${DNS_SERVER}/etc/group
# flag seguridad (aunque con -d /dev/null ;) )
${ECHO_BIN} "named" > ${DNS_SERVER}/etc/ftpusers

# fin
${ECHO_BIN} "Finising Creating User NAMED"
}

# find required LD
function find_required_so {
# start
${ECHO_BIN} "Searching for SO files ... "

# evolution
# find bin/bind-9.4.0/*bin -type f -perm 755 -print|xargs ldd 2>/dev/null |grep "\=\>"|awk '{print $3}'|sort|uniq
# buscamos todos los binarios menos *.sh y aplicamos
${FIND_BIN} ${BIND_BASE} -type f -perm 755 -print | ${XARGS_BIN} ${LDD_BIN} 2>/dev/null | ${GREP_BIN} "\=\>" | ${AWK_B
IN} '{print $3}' | ${SORT_BIN} | ${UNIQ_BIN} > ${OUTPUTFILETEMP}

# y ahora las de SunOS
${FIND_BIN} ${BIND_BASE} -type f -perm 755 -print | \
${XARGS_BIN} ${LDD_BIN} 2>/dev/null | \
${GREP_BIN} -v "\=\>" | \
${GREP_BIN} -v "^${BIND_BASE}" | \
${AWK_BIN} '{print $1}' | ${SORT_BIN} | ${UNIQ_BIN} >> ${OUTPUTFILETEMP}

# fin
${ECHO_BIN} "Searching END"
}

# copy SO files to CHRoot
function copy_so_files {
# start
${ECHO_BIN} "Copy SO files ... "

while read source_file
do
${ECHO_BIN} "(1) ${COPY_BIN} ${source_file} to ${DNS_SERVER}${source_file}"
${COPY_BIN} ${source_file} ${DNS_SERVER}${source_file}
done < ${OUTPUTFILETEMP}

# despues de copiarlas, hacemos la busqueda de las que nos quedan
${FIND_BIN} ${BIND_BASE} -type f -name "lib*" -print | \
${XARGS_BIN} ${LDD_BIN} 2>/dev/null | \
${GREP_BIN} "\=\>" | \
${AWK_BIN} '{print $3}' | ${SORT_BIN} | ${UNIQ_BIN} > ${OUTPUTFILETEMP}
while read source_file
# volvemos a copiar
do
#${ECHO_BIN} "(2) ${COPY_BIN} ${source_file} to ${DNS_SERVER}${source_file}"
${COPY_BIN} ${source_file} ${DNS_SERVER}${source_file} 2>/dev/null
done < ${OUTPUTFILETEMP}
# copiamos LD.SO
${COPY_BIN} /lib/ld* ${DNS_SERVER}/lib/ 2>/dev/null
# copiamos el BIND
${COPY_BIN} -r ${BIND_BASE} ${DNS_SERVER}/usr/local/

# fin
${ECHO_BIN} "Copy END"
}

# creamos los dev necesarios
function create_devices {
# buscamos el device y lo creamos
# si esta en una zona y es SunOS entonces es como UNIX, sino, esta en DEVICES
DEVBASE=/devices/pseudo
if [ ${IS_SUNOS} = "SunOS" ]; then
if [ "${SUN_VERSION}" = "5.10" ]; then
if [ "${ZONENAME}" = "global" ]; then
DEVBASE=/devices/pseudo/*
else
DEVBASE=/dev/
fi
else
DEVBASE=/devices/pseudo/*
fi
else
DEVBASE=/dev/
fi

# info
${ECHO_BIN} "Configuring devices at ${DEVBASE}$1"

# base DEV
NODE=$(${LS_BIN} -l ${DEVBASE}$1|${AWK_BIN} '{print $5}'|${SED_BIN} s/\,//)
SINGLE=$(${LS_BIN} -l ${DEVBASE}$1|${AWK_BIN} '{print $6}')

# creamos el NODO
${MKNOD_BIN} ${DNS_SERVER}/dev/$1 c ${NODE} ${SINGLE}
}

# is solaris 10 at non global zone
function verify_sunos_10_zone {
if [ "${IS_SUNOS}" = "SunOS" ]; then
if [ "${SUN_VERSION}" = "5.10" ]; then
if [ "${ZONENAME}" = "global" ]; then
${ECHO_BIN} "Configuring System at ${IS_SUNOS} ${SUN_VERSION}"
else
${ECHO_BIN} "No Tiene Sentido Instalar un CHROOT en SunOS 5.10, porque tiene"
${ECHO_BIN} "soporte para zonas que hacen mejor uso de ello"
${ECHO_BIN} " "
${ECHO_BIN} "Puedes encontrar mas informacion aqui http://sunsolve.sun.com"

exit 1
fi
else
${ECHO_BIN} "Configuring System at ${IS_SUNOS} ${SUN_VERSION} / NON 5.10"
fi
else
${ECHO_BIN} "Configuring System at NON SunOS Version ... "
fi

}



# ---
#verify_sunos_10_zone
show_start_help

create_directory
create_dns_user
find_required_so
copy_so_files

create_devices null
create_devices tcp
create_devices udp
create_devices log
create_devices zero
create_devices syscon



Una vez ejecutado, ya sólo tenemos que configurar las entradas en nuestro /chroot/dns.server/etc/named.conf y /chroot/dns.server/var/named/



Urko

miércoles, 20 de diciembre de 2006

Instalar IPFilter Sobre Solaris 8/9

Introducción
 IPFilter es un módulo de traducción (NAT) o Filtrado (Firewall) capáz de ser cargado como un módulo de kernel o en el propio kernel.

Está diseñado para funcionar con SunOS 5.x (tanto en Solaris como SunOS 4.x) de una forma muy sencilla.


UPDATED: Si quieres, puedes ver Cómo Instalar y Configurar IPFilter en Solaris 10


Vamos a empezar con su instalación, para ello, vamos a proceder a descargar las aplicaciones necesarias IPFilter 4.1.16, además de el módulo PFIL. Una vez tenemos las aplicaciones, procederemos con los pasos para su instalación.

Parte 1 - Instalación de PFil

Para realizar la instalación según los parámetros por defecto, sólo debemos realizar los siguientes pasos

# uname -s
SunOS
# mkdir -p /tmp/ipfilter-pkg
# cd /tmp/ipfilter-pkg
# gzip -dc /export/home/blogger/pfil-2.1.11.tar.gz |tar xpf -
# mv pfil pfil-2.1.11
# cd pfil-2.1.11/
# make package
// -- mensajes de compilacion -- //
# pkgadd -d /tmp/pfil.pkg

The following packages are available:
1 pfil Packet Filtering Interface
(i386) 2.1.11,REV=23:22:20 12/20/06

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

// ---- mensajes instalación ---

Si nos fijamos en los pasos marcados en azul, hemos realizado algunos cambios. Creamos un directorio para poder compilar el paquete porque, por defecto, crea el paquete en el directorio /tmp/pfil por lo que no podemos descomprimirlo en /tmp.

Si hacemos caso al manual, podemos ver que la compilación de PFil sobre Solaris, no incluye ninguna modificación para SunCC cuando estamos sobre x86, por ello, hemos hecho algunos cambios. Hemos introducido una nueva variable llamada S32FLAGS=-native -fast. Tener en cuenta que esta modificación sólo es válida para el compilador SunCC, y cuando estemos compilando en una máquina igual a la de producción.

Aquí puedes encontrar la versión modificada de Makefile (si lo prefieres aqui tienes el patch)

Una vez instalado el paquete, debemos reiniciar la máquina para que la instalación de pfil se encuentre correctamente utilizando el siguiente comando

# ifconfig e1000g0 modlist
0 arp
1 ip
2 pfil
3 e1000g


Este comando muestra la lista de módulos instalados y si aparece PFIL, entonces, podemos continuar con la instalación de IPFilter.

Parte 2 - Instalación de IPFilter

Antes de continuar con la instalación, debemos realizar las siguiente comprobaciones.

  • No usar GNU Make
  • Si hemos compilado PFIL con SunCC IPFilter se debe compilar con SunCC

Una vez hemos realizado las comprobaciones necesarias, podemos proceder a compilar e instalar el paquete.

# gzip -dc /export/home/blogger/ip_fil4.1.15.tar.gz | tar xpf -
# cd ip_fil4.1.15/
# make solaris


Si todo ha ido bien, podemos realizar la instalación del paquete SunOS5/arquitectura y proceder a rebootar la máquina.

Parte 3 - Configuración Básica de IPF

Los archivos de configuración se encuentran en /etc/opt/ipf dentro de dos archivos ipf.conf y ipnat.conf.

Esta configuración, la comentaremos con más detalle en la siguiente actualización (ahora no tengo mucho tiempo)


Referencias

martes, 5 de diciembre de 2006

Instalar Solaris como Router (Parte II - Instalar IPFilter)

En la primera parte de Instalar Solaris como Router establecimos los requisitos mínimos para poder iniciar la configuración. Hasta aquí todo era muy sencillo, simplemente necesitabamos al menos dos tarjetas y establecer la variable de kernel ip_forwarding a 1 (si contamos con algún interface por DHCP), además dibujamos un esquema con la configuración final a crear.

Ahora bien, si queremos que nuestros clientes puedan hacer una conexión desde la lan hasta Internet, será necesario establecer una configuración NAT correcta. Esta utilidad nos la va a proporcionar IPFilter, puedes saber más en Qué es IPFilter y para que me Sirve.

lunes, 4 de diciembre de 2006

Instalar Solaris como Router (Parte I - Introducción)

No sabía muy bien como empezar a escribir el artículo, pero luego me dije "si lee esto es porque sabe que quiere un router, no?", así que vamos a obvier esos pequeños apartados donde hacemos mención de "Qué es un router, para qué sirve ... " y nos centramos un poco en "Cómo hacerlo".

Para hacer que Solaris enrute necesitamos pocas cosas, pero una de ellas es que tenga al menos dos tarjetas de red (DualHomed Host). Si Solaris detecta dos tarjetas de red durante el arranque establecerá la variable ip_forwarding a 1, indicando que está capacitado para hacer routing, podemos comprobarlo de la siguiente forma:

# ndd -get /dev/tcp ip_forwarding

Debemos tener en cuenta que si una de las tarjetas de red está en modo DHCP, la variable ip_forwarding no estará puesta a 1, sino a 0(desactivada), por ello, debemos poner el siguiente script en el arranque del sistema para forzar el valor así mismo, si nuestra tarjeta principal está configurada por DHCP, tendremos el problema de que nos resuelva el nombre de nuestro sistema, aquí tienes una solución "Cómo eliminar el "Unknown hostname" de Solaris"

Esta es la arquitectura que vamos a crear en nuestro Mini HowTo

Como hemos comentado antes, los requisitos mínmos para que Solaris haga de Router, son esencialmente, que tenga al menos dos tarjetas de Red (no tendría sentido enrutar sobre el mismo segmento de red, no?). A esto se llama Dual Homed Host (DHH). Como segundo requisito es que la variable ip_forwarding se encuentre establecida a 1.

Una vez establecido que los requisitos mínimos se cumplen, podemos comenzar a planificar la configuración basándonos en el gráfico adjunto.


Como vemos en la configuracion, queremos que nuestra máquina Sun (solaris9-sparc) haga de router entre nuestra red de usuarios (lan) y nuestro acceso a internet. También hemos incluido otra segunda red que puede hacer las veces de DMZ, esto es opcional. A todo esto, tenemos que unir un software capáz de hacer NATing ya que un Router por sí solo, sólo enruta.

Para poder establecer una comunicación desde nuestra red lan hacia internet, necesitamos que se produzca un soporte NAT, que nos lo proporciona IPFilter - IPNat

Continuaremos con la configuración de solaris en Instalar Solaris como Router (Parte II - Instalar IPFilter)



::OFF TOPIC:: Cena de Fin de Año

Este fin de semana nos hemos vuelto a reunir todos esos amigos que empezamos (allá por el 2000) la carrera de Ingeniería Informática de Sistemas en Zaragoza.

Como en otras ocasiones, todo comenzó con el mensaje por correo electrónico que nuestro amigo Roberto envió, y ... de ahí en adelante ... Txispas, Ton, Pablo y GariPues

Esta entrada es para felicitar a mis compañeros, y dar fe (cómo suena) de lo bien que nos/me lo pasamos.

A por la próxima!!! En mi casa

Un Saludo,
Urko