Hola a todos.
        Voy a dejar un poco el mutismo autoimpuesto en los ultimos meses
para salirme un poco de la tematica de la lista, que ha sido basicamente
resolucion de problemas de coneccion, busqueda de programas para tal o
cual proposito y la "propaganda" de Linux, que por cierto, hay que ser mas
cuidadoso en eso, porque viendo algunos argumentos esgrimidos como
puntos fuertes de Linux sobre otros SOs, la verdad, dejan cierto
desencanto y una mala impresion en cualquiera que los lea y que no
conozca mas que, por ejemplo, WindowsNT. 

        Asi, queria compartir con ustedes una serie de cositas que pueden ser
utiles de implementar en un servidor con Linux como SO, algunos de
estos consejos son implementaciones de servicios que *BSD han estado
como parte de los  "defaults" desde hace algun tiempo y que Linux, o mejor
dicho, las distribuciones de Linux no implementan sea por limitaciones
del nucleo, del sistema de archivos o simple y llanamente, pura pereza.

        Comenzare con uno de los servicios mas comunes en Linux, el
servicio de Traslacion de Nombres o DNS por "sus siglas en ingles" como
diria un periodista ...

En Unix, el servicio de DNS se implementa mediante BIND (Berkeley Name
Domain) que es un programa que realiza  operaciones tanto de cliente
como de servidor, por un lado esta el "resolver" y por el otro el
"named", resolver es utilizado para generar los pedidos de informacion
que luego son servidos por el "named", la configuracion de BIND
basicamente se refiere a la configuracion de "named". Como de aqui se
desprende facilmente, named es un servicio de red por lo tanto debe tener
algun puerto de escucha de los pedidos del "resolver" y si tiene un puerto
de escucha en una red entonces eso significa de que es un servicio
susceptible a un ataque de crakers o uebercrackers tal y como los llama
Wietse Venema. De lo anterior se desprende que es, o deberia ser, una
buena cosa el tener ese servicio (como todos los otros) en un ambiente sano, o 
restringido del resto del sistema-servidor. En este ensayo, lo que hare
sera describir como hago para ofrecer el servicio de named en tal
ambiente en un sistema Linux ( FreeBSD,OpenBSD ya lo implementa "Out of
the Box" ).
Para empezar, hay que seleccionar el directorio donde queremos tener el
servicio de named, por ejemplo:

#mkdir -p /var/chroot/named/etc/namedb 
#mkdir -p /var/chroot/named/usr/libexec
#mkdir -p /var/chroot/named/var/dev
#mkdir  /var/chroot/named/var/run
Creamos un pseudo device en /var/chroot/named/var/dev para null asi
#mknod /var/chroot/named/var/null c 1 3
#chmod 555  /var/chroot/named/var/null

luego hay que conseguirse la fuente de BIND en http://www.isc.org
descomprimirla 
$tar -xvzf bind-src.tar.gz
ahora, como la idea es tener un servicio "aislado" hay que generar 
un binario estatico (resulta ser un poco mas grande que uno con codigo
dinamico, pero ligeramente mas rapido) esto hay que indicarselo al  
al compilador mediante la edicion del "makefile" para Linux

$ vim src/port/linux/Makefile.set 
y cambiar la linea 'CDEBUG= -O2 -g' por 'CDEBUG= -O2 -static'
$ cd src/port/linux
$ make all

Lo que resta es poblar los directorios arriba creados con los binarios de
named
# cp -a src/bin/named/named  /var/chroot/named/usr/libexec
# cp -a src/bin/named-xfer/named-xfer /var/chroot/named/usr/libexec

Se crea un usuario, digamos named perteneciente a un grupo tambien llamado
bind y se le pone un falso "shell"

#useradd -g named -d /var/chroot/named -s /bin/date  named 
(Esto puede variar segun la distribucion que se use, la idea es
crear un usuario cuyo grupo primario sea named (-g named), cuyo directorio
de trabajo sea /var/chroot/named ( -d /var/chroot/named), cuya shell sea
date  (-s /bin/date), aqui se puede usar tambien nologin, que envia un
mensaje de alerta al administrador cada vez que algo sospechoso pase con
esa cuenta o bien /bin/false ).

#chown -R named.named /var/chroot/named
#chmod -R 700 /var/chroot/named

#cp -a /etc/localtime /var/chroot/named/etc
#cp -a src/conf/workstation/named.conf /var/chroot/named/etc
(este paso se puede substituir por la configuracion de named que ya se
tenga 
#cp -a /etc/named.conf /var/chroot/named/etc
#cp -a /etc/namedb /var/chroot/named/etc
)

Todo lo que falta es modificar los "escripts" de arranque para que se
inicie el nuevo servicio "enjaulado"
#vi /etc/rc.d/init.d/syslog
se cambia la linea 
daemon syslogd -m 0
por la linea
daemon syslogd -m 0 -a /var/chroot/named/dev/log

# vi /etc/rc.d/init.d/named
cambiamos la linea 
daemon named
por
daemon /chroot/named/usr/sbin/named -u named -g named -t /var/chroot/named 

y listo, todo lo que hay que hacer es reiniciar el servicio,

#/etc/rc.d/init.d/named stop
#/etc/rc.d/init.d/named start

Ejecute nslookup haga unas cuantas pruebas de que todo anda bien y listo,
su sistema acaba de ser configurado para que use named "enjaulad"
en este punto se puede decidir borrar la vieja version de bind, hagasmolo
asi.
en RedHat, Mandrake, o alguno de esos sabores
#rpm -e 'rpm -qa | grep bind'
OJO: Antes de dar ese comando, copie el archivo /etc/rc.d/init.d/named
en algun directorio temporal y luego de desinstalar bind vuelva a
colocarlo en /etc/rc.d/init.d , la razon es que cuando haga el comando 
#rpm -e 'rpm -qa | grep bind'
se va a borrar ese archivo.

JImmy
La proxima vez voy a hablar sobre como enjaular un servicio de ftp
utilizando proftp o wu-ftpd, los dos servicios mas usados al momento



Responder a