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
