<===========================================================> TITULO <=> Tcp-wrapper AUTOR <=> Anghel MAIL <=> anghel@linuxpower.zzn.com <===========================================================> 1.0 <=> Que es Tcp-wrapper 2.0 <=> Donde consigo Tcp-wrapper 3.0 <=> Como se si tengo instalado Tcp-wrapper 4.0 <=> Configuracion 5.0 <=> Banners 6.0 <=> tcpdchk y tcpdmatch <===========================================================> <=> 1.0 <=> Que es Tcp-wrapper <============================> <===========================================================> Primero vamos a empezar con la definicion de que es un wrapper. Un wrapper es un programa para controlar los accesos a otro programa, asi de sencillo, logrando de esta forma un aumento de seguridad en sistemas UNIX. Tcp-wrapper, es una herramienta escrita por Wietse Venema, en 1990, y sirve para controlar los accesos a los distintos servicios que ofrezca un sistema (telnet, ftp, rlogin, etc) mediante la configuracion de dos archivos de los cuales Tcp- wrapper toma referencia para efectuar el control. Tcp-wrapper no requiere grandes conocimientos sobre redes ni nada por el estilo, ademas es una herramiente muy sencilla (esto se puede ver en que toda la seguridad esta concentrada en un solo programa, como se vera mas adelante) y solo se basa en dos archivos de configuracion. <===========================================================> <=> 2.0 <=> Donde consigo Tcp-wrapper <=====================> <===========================================================> Tcp-wrapper se puede conseguir en ftp://ftp.porcupine.org/pub/security/tcp_wrappers_7.6.tar.gz, pero igualmente no te preocupes mucho por andar buscandolo por internet, porque si tenes una distribucion de linux mas o menos nueva, lo mas probable es que ya lo tengas instalado y listo para usar. <===========================================================> <=> 3.0 <=> Como se si tengo instalado Tcp-wrapper <========> <===========================================================> Para saber si ya esta instalado, hay que editar el fichero /etc/inetd.conf: vi /etc/inetd.conf al final de cada linea, se puede ver el nombre del programa que administra al servicio correspondiente, ademas de su argumento: telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd como vemos en este caso el programa es el TCPD y su argumento es in.telnetd, pero lo que mas nos importa es el nombre del programa, asi que vamos a dejar de lado el argumento. En el caso anterior, el programa es el /usr/sbin/tcpd, o TCPD , como quieran llamarlo, (que es el demonio del Tcp-wrapper) o sea que en este caso Tcp-wrapper ya vino instalado en el directorio /usr/sbin/ y se puede ver que esta configurado para administrar el servicio telnet. *** Importante: el TCPD no viene configurado por defecto para todos los servicios; pero si viene configurado para servicios como TELNET o FTP, que soy servicios que tienen un cierto grado de importancia, es por eso que se toma como ejemplo al servicio TELNET, ya que si el archivo /usr/sbin/tcpd existe, SEGURAMENTE va a venir configurado por defecto para el servicio TELNET *** Si Tcp-wrapper no estuviera instalado, la linea anterior se veria como esto: telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd como vemos aca, el programa que administra el servicio telnet es el in.telnetd (que es el demonio telnet), o sea que aca el servicio se administra a si mismo, por lo tanto Tcp-wrapper no esta instalado. <===========================================================> <=> 4.0 <=> Configuracion <=================================> <===========================================================> Como dije anteriormente, la configuracion de Tcp-wrapper se basa en dos archivos, estos son: /etc/hosts.allow y /etc/hosts.deny. El archivo /etc/hosts.allow esta destinado a contener todos los hosts a los que se les va a permitir el acceso al servicio configurado. Por el contrario, el archivo /etc/hosts.deny esta destinado a contener todos los hosts a los que se les va a denegar el acceso al servicio correspondiente, aunque con un poco de experiencia te vas a dar cuenta que solo hace falta configurar un solo archivo. Para empezar con la configuracion, hay que ingresar en cualquiera de los dos archivos, lineas que contengan el siguiente formato: SERVICIO : HOST : ACCION SERVICIO: es el nombre del servicio a configurar (in.telnetd, in.ftpd, etc). Para determinar como especificar un servicio, es conveniente fijarse en la ultima palabra de cada linea del fichero /etc/inetd.conf, que ahí esta el nombre del demonio del servicio correspondiente; ademas se pueden especificar muchos servicios en una linea separandolos entre comas. Ejemplo: in.telnetd : HOST : ACCION HOST: es la IP o HOST de la maquina a la que se le va a denegar o permitir el acceso al servicio correspondiente, se pueden poner muchos separados entre comas. Se pueden especificar palabras como: ALL: hace referencia a TODOS los hosts, tambien se puede usar en el campo correspondiente al servicio para dar referencia TODOS los puertos. LOCAL: coincide con cualquier cadena que no contenga el caracter ".". KNOWN: para maquinas que estan registradas en el archivo /etc/hosts. UNKNOWN: para maquinas que NO estan registradas en el /etc/hosts. EXCEPT: 1 EXCEPT 2: coincide con todo lo que esta en "1" a menos que se encuentre en "2". PARANOID: para maquinas cuyo nombre no coincida con la IP. Ejemplo: in.telnetd : cracker.com.ar : ACCION ACCION: es la accion que se va a efectuar cuando HOST trate de acceder a SERVICIO, o sea aceptar o denegar la conexion. Las posibilidades son: ALLOW: acepta la conexion cuando HOST se trate de conectar a SERVICIO. Ejemplo: in.telnetd : cracker.com.ar : ALLOW DENY: rechaza la conexion cuando HOST se trate de conectar a SERVICIO. Ejemplo: in.telnetd : cracker.com.ar : DENY SPAWN: hace lo mismo que ALLOW, solo que ademas ejecuta un comando SHELL. Ejemplo: in.telnetd : cracker.com.ar : SPAWN ( ) Ejemplo real: in.telnetd : cracker.com.ar : SPAWN ( echo "Se acepto una \ entrada al puerto TELNET" >> /tmp/fichero ) TWIST: hace lo mismo que DENY, solo que ademas ejecuta un comando SHELL. Ejemplo: in.telnetd : cracker.com.ar : TWIST ( ) Ejemplo real: in.telnetd : cracker .com.ar : SPAWN ( echo "Se rechazo una \ entrada al puerto TELNET" >> /tmp/fichero ) Como vemos en este punto ya reemplazamos el prototipo por valores correctos; no es tan dificil, no?. El primer ejemplo se leeria como: cuando la maquina cracker.com.ar se conecte al servicio telnet de nuestra maquina, aceptar la conexion. El segundo: cuando la maquina cracker.com.ar se conecte al servicio telnet de nuestra maquina, denegar la conexion. El tercero: cuando la maquina cracker.com.ar se conecte al servicio telnet de nuestra maquina, aceptar la conexion y ademas escribir en el archivo /tmp/fichero el mensaje "Se acepto una entrada al servicio TELNET". El cuarto: cuando la maquina cracker.com.ar se conecte al servicio telnet de nuestra maquina, denegar la conexion y ademas escribir en el archivo /tmp/fichero el mensaje "Se denego una entrada al servicio TELNET". *** Importante: si se quieren especificar muchos comandos en las ACCIONES SPAWN y TWIST, solo hace falta serpararlos mediante el caracter ";": Ejemplo: in.telnetd : ALL : SPAWN ( ; ) *** Como vemos los ultimos dos ejemplos (el de spawn y el de deny) hacen que se escriba en un LOG los accesos al servicio telnet, esto aumenta la seguridad en nuestro sistema, ya que vamos a tener conciencia de los accesos no autorizados a nuestra maquina. Parametros para las acciones SPAWN y TWIST: como vimos anteriormente, las acciones SPAWN y TWIST aceptan o rechazan conexiones respectivamente, y ademas tienen la posibilidad de ejecutar un comando SHELL. La cuestion es que estos comandos shell se pueden complementar con ciertos parametros especiales, que sirven para manejar informacion correspondiente al cliente y al servidor (o sea nosotros), con el fin de por ejemplo guardarla en un fichero. Estos parametros son: %a: dirección de la maquina cliente %c: INFO del cliente %d: demonio solicitado %h: IP cliente %p: PID del demonio solicitado %s: INFO del servidor %u: nombre del usuario cliente. Si el cliente esta en una maquina WIN, el usuario sera UNKNOWN. *** Importante: los parametros tienen que estar en minuscula *** Dos ejemplos de referencia: ALL : cracker.com.ar : DENY En este caso se deniega el acceso a cualquier puerto a la maquina cracker.com.ar in.ftpd : ALL : TWIST (echo "%h intento acceder a %d" >> \ /tmp/fichero) Como vemos, en este caso se deniega el acceso a cualquier maquina al servicio ftp, y ademas se ejecuta un comando SHELL (por eso se uso la ACCION TWIST) que guarda la IP de la maquina cliente (parametro %h) y el demonio solicitado (parametro %d) en el fichero /tmp/fichero. Fijense el caracter "\" al final del segundo ejemplo, este caracter se usa para que cuando una linea es muy larga y no nos entra en el renglon, Tcp-wrapper siga cotejando los caracteres en la linea siguiente y tome los dos renglones como una sola linea de configuracion. Creo que con estos ejemplos ya es suficiente para entender el funcionamiento de los archivos de configuracion. Si leen un poco mas arriba, van a encontrar con que les habia dicho que con un poco de experiencia se iban a dar cuenta de que solo hacia falta usar un archivo para la configuracion de Tcp-wrapper. Esto se ve reflejado en que no importa el archivo en donde se especifique la linea, sino el valor que contenga el campo correspondiente a la ACCION. Por ejemplo, si agregamos esta linea al archivo /etc/hosts.deny (el cual supuestamente esta destinado a contener los hosts a rechazar): ALL : ALL : ALLOW Tcp-wrapper va a entender que se tienen que aceptar todos los accesos provenientes desde cualquier host hasta cualquier puerto de nuestra maquina. Lo mismo sucede con el /etc/hosts.allow; aunque esta linea este en el /etc/hosts.allow (el cual supuestamente esta destinado a contener los hosts a aceptar): ALL : ALL : DENY Tcp-wrapper va a entender que se tienen que denegar todos los accesos provenientes desde cualquier host hasta cualquier puerto de nuestra maquina. En conclusión, se puede usar un solo archivo para configurar Tcp-wrapper, ya que lo que importa es el valor del campo ACCION (ALLOW, SPAWN, DENY y TWIST). <===========================================================> <=> 5.0 <=> Banners <=======================================> <===========================================================> Tcp-wrapper pone a disposicion del usuario una opcion para mandarle mensajes al cliente. Esta opcion se tiene que especificar en el campo correspondiente a la ACCION con la palabra "BANNERS", seguido del directorio en donde se encuentren todos los banners. Por ejemplo, supongamos que queremos que cada vez que alguien se conecte al servicio telnet, le mandemos un mensaje diciendole que su IP esta siendo guardada. Para esto primero vamos a crear un directorio que va a estar destinado a contener todos los banners: mkdir /banners Ahora pasamos a la creacion de los banners. Ustedes se estaran preguntando como hace Tcp-wrapper para saber que un banner es para tal servicio; la respuesta es sencilla: el fichero en donde va a estar el banner, se va a tener que llamar igual que el servicio que se quiere configurar. Por ejemplo, si queremos crear un banner que se la va a mandar al cliente cuando se conecte a nuestro servicio telnet, vamos a hacer los siguiente: cd /banners echo "!Hi %h, tu IP esta siendo guardada" >> in.telnetd Con esto ya tenemos el banner para el servicio telnet (como ven el banner se guardo en el fichero in.telnetd, ya que es el demonio del telnet), por lo tanto ahora solo queda configurar el fichero de configuracion con una linea como: in.telnetd : ALL : BANNERS /banners Y listo, cuando alguien quiera conectarse al servicio telnet de nuestra maquina, va a recibir el mensaje: !Hi %h, tu IP esta siendo guardada Obvio que el parametro %h va a ser reemplazado por la direccion IP del cliente, por lo que si el cliente tiene la IP 26.26.26.26, va a recibir el mensaje: !Hi 26.26.26.26, tu IP esta siendo guardada <===========================================================> <=> 6.0 <=> tcpdchk y tcpdmatch <===========================> <===========================================================> Ademas del tcpd, hay dos binarios interesantes que tambien vienen instalados por defecto en linux, o tambien lo pueden conseguir descomprimiendo el ftp://ftp.porcupine.org/pub/security/tcp_wrappers_7.6.tar.gz; estoy hablando de los programas tcpdchk y tcpdmatch. Tcpdchk: el tcpdchk lee todas las lineas de los archivos /etc/hosts.allow y /etc/hosts.deny en busca de errores; si encuentra alguno lo reporta diciendo cual es el error y la linea en que se encuentra (ver "man tcpdchk" para mas info). Tcpdmatch: este otro programa informa en stdout la forma en que cierto servicio reaccionaria a las conexiones. Su uso basico es el siguiente: # tcpdmatch pero para mas info, ver "man tcpdmatch".