PEC3 Admnistracion Avanzada SO UOC

Page 1

PRUEBA DE EVALUACION CONTINUA Nº 3 “Administración de Redes, servidores y seguridad”.

JORGE ALBERTO AROCHA MUÑOZ

Trabajo presentado dentro de la asignación ADMINISTRACIÓN AVANZADA DEL SISTEMA OPERATIVO GNU/LINUX

ALAN WARD KOECK TUTOR REMO SUPPI BOLDRITO TUTOR

UNIVERSIDAD OBERTA DE CALUNYA MAESTRIA EN SOFTWARE LIBRE 2009


1. Realizar la configuración desde el inicio de la interfaz de red considerando el tipo de conexión hardware que se disponga (módem, módem/router ADSL, cable, LAN, etc) y los servicios que crea necesarios para un entorno de red. Para verificar este ejercicio se deberán realizar unas pruebas mínimas de conectividad en la misma red y hacia Internet analizando la calidad de la conexión (por ejemplo contabilizando los paquetes perdidos). En la PEC se deberán describir todos los pasos realizados para configurar el dispositivo y los servicios en los ficheros de configuración sin utilizar herramientas automáticas o gráficas. Tener en cuenta de extremar las precauciones si es el único ordenador que se dispone conectado a la red ya que si se configura en forma inadecuada no se podrá disponer de ella para solicitar ayuda (a los foros de la UOC por ejemplo). En este caso particular no se aceptarán configuraciones automáticas hechas por dhcp (de un router local por ejemplo). Para la correcta configuración de la red en el sistema operativo GNU/Linux hay que realizar los siguiente: 1. Instalación del dispositivo a nivel físico y que el sistema operativo lo haya reconocido, es decir, disponga los controladores adecuados y los cargue correctamente. 2. Configurar el dispositivo a nivel IP de acuerdo a la red en la cual se encuentra, para lo cual se cuenta con varios comandos que permiten su manipulación (por ejemplo ifconfig e ip), teniendo en cuenta que los cambios realizados de esta manera no son permanentes, si se desea hacerlos permanentes cada distribución ofrece un mecanismo particular, por lo general por medio de archivos, para que con cada reinicio la máquina cargue la misma configuración. 3. En este punto se dispondrá de conectividad a nivel IP, es decir, se pueden hacer ping por ejemplo, es necesario terminar de configurar la red para usar los otros servicios por ejemplo el DNS, si en la red hay proxy etc. Nivel Físico: Si el dispositivo de red estaba presente al momento de la instalación del sistema operativo por lo general este los reconoce correctamente, existen casos especiales en que no lo hace y es necesario instalar manualmente los controladores , e incluso compilarlos. En este caso y teniendo en cuenta que el taller se está realizando en el mismo equipo que la PEC1 se retomará la configuración de la tarjeta de red y la tarjeta wifi realizadas en ese taller debido a que el sistema operativo no los reconoció correctamente al momento de la instalación y fue necesario configurar estos dispositivos en forma manual. Ver anexo “A” y anexo “B”. Configuración de la interfaz de Red:


Antes de continuar con esta sección, es pertinente mostrar el ambiente de trabajo en el cual se está desarrollando este ítem.

Ilustración 1: Ambiente en que se desarrolla este numeral del taller. El proveedor de servicio de internet (ISP) suministra una dirección IP dinámica al cable módem y este a su vez asigna las del segmento de red 192.168.2.XXX, al cable módem se le ha instalado un enrutador inalámbrico (Linksys WRTG54G2 V2) que me permite tener una lan de cuatro equipos y acceso inalámbrico, este tiene un servidor DHCP que asigna direcciones en el rango 192.168.1.1XX, en el portátil pc-caliope se está desarrollando este taller tiene Debian Lenny instalado y accede a la red por medio de la tarjeta de red inalámbrica, para cumplir con lo solicitado en el enunciado se va a configurar la tarjeta de red ethernet con la dirección IP 192.168.1.7 y se deshabilitará la interfaz inalámbrica para realizar el análisis respectivo. Como ya se mencionó el equipo tiene instalado Debian Lenny y para la configuración manual de la tarjeta se debe modificar el archivo /etc/network/interfaces de la siguiente manera. auto lo iface lo inet loopback auto eth0


iface eth0 inet static address 192.168.1.7 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1

Listado 1: Archivo /etc/network/interfaces Este archivo contiene la información que los comandos ifup e ifdown utilizan, en el se puede apreciar la configuración de dos interfaces de red: ● ●

lo, la interfaz local. eth0, primera interfaz ethernet.

Este archivo está compuesto por ninguno o mas párrafos que comienzan con las palabras “auto”, “mapping”, “iface” y “allow-”, donde: auto

Especifica que interfaces deben ser inicializadas cuando se usa el comando ifup -a, que es el comando usado al arrancar el sistema.

allow-

Indica que la interfaz es inicializada por algún subsistema, por ejemplo allow-hotplug se usa para que la interfaz sea configurada cuando tenga el cable de red conectado.

mapping

Es un mecanismo para decidir que configuración utilizar para una interfaz física, se usa cuando hay que configurar la tarjeta dependiendo de algún evento o ambiente, por ejemplo, un portátil donde en la oficina necesita una configuración y en el hogar otra.

iface

Acá es donde se configura realmente la interfaz, esta palabra va seguida del nombre de la interfaz ya sea “lógico” (dado en mapping) o la interfaz física que se va a configurar, en caso de no usar mapping. Este párrafo tiene este inicio: iface interfaz tipo_dirección método Donde interfaz es el nombre de una interfaz ya sea lógico o físico, tipo_dirección puede ser inet, ipx o inet6 y método depende del tipo_dirección, que para el caso específico de inet (ipv4) provee los métodos: loopback, static, dhcp, etc.

Analizando el “Listado 1”: auto lo

La interfaz lo será iniciada cuando se use el comando ifup -a.


iface lo inet loopback

La interfaz lo es de tipo inet (ipv4) y usará el método loopback, estableciendo que es la interfaz de loopback.

auto eth0

La interfaz eth0 (física en este caso porque no se está usando mapping) será iniciada cuando se use el comando ifup -a.

iface eth0 inet static

La interfaz eth0 también es inet (ipv4) y el método usado para su configuración es static, direccion IP fija podría ser dchp si en nuestra red se usa asignación dinámica de direcciones.

address 192.168.1.7 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255

Estas líneas son propias del método static y su significado es obvio, sirven para establecer la dirección, la máscara de red, la pasarela, la dirección de red y de broadcast.

gateway 192.168.1.1

El archivo de configuración /etc/network/interfaces tiene muchas mas opciones las cuales se encuentran bien documentadas con man o en http://www.debian.org/doc/manuals/debian-reference/ch-gateway.es.html, entre ellas vale la pena resaltar las opciones pre-up, up, pre-down y down, que sirven para ejecutar comandos antes de inicializar la interfaz (pre-up), una vez arriba (up), antes de bajar la interfaz (pre-dow) y una vez abajo(down). Bien, una vez modificado el archivo y con el fin de que se hagan efectivos los cambios de la nueva configuración se debe ejecutar el comando: pc-caliope:/home/caliope# invoke-rc.d networking restart

y para verificar los cambios: pc-caliope:/home/caliope# ip a l 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:23:5a:a7:42:9d brd ff:ff:ff:ff:ff:ff inet 192.168.1.7/24 brd 192.168.1.255 scope global eth0 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 00:21:00:ef:14:36 brd ff:ff:ff:ff:ff:ff pc-caliope:/home/caliope# ip r l 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.7 default via 192.168.1.1 dev eth0


Como se puede observar la tarjeta eth0 tiene la dirección dada y esta arriba. Para verificar realmente la conectividad se hace ping al enrutador inalámbrico y a una dirección externa: pc-caliope:/home/caliope# ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.00 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.729 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.760 ms 64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.762 ms 64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.747 ms 64 bytes from 192.168.1.1: icmp_seq=6 ttl=64 time=0.728 ms 64 bytes from 192.168.1.1: icmp_seq=7 ttl=64 time=0.759 ms 64 bytes from 192.168.1.1: icmp_seq=8 ttl=64 time=0.783 ms 64 bytes from 192.168.1.1: icmp_seq=9 ttl=64 time=0.780 ms 64 bytes from 192.168.1.1: icmp_seq=10 ttl=64 time=0.727 ms ^C --- 192.168.1.1 ping statistics --10 packets transmitted, 10 received, 0% packet loss, time 9004ms rtt min/avg/max/mdev = 0.727/0.777/1.000/0.081 ms pc-caliope:/home/caliope# ping www.google.com PING www.l.google.com (74.125.45.99) 56(84) bytes of data. 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=1 ttl=52 time=85.9 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=2 ttl=52 time=92.8 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=3 ttl=52 time=87.6 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=4 ttl=52 time=84.8 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=5 ttl=52 time=98.3 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=6 ttl=52 time=93.9 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=7 ttl=52 time=81.8 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=8 ttl=52 time=96.3 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=9 ttl=52 time=91.5 ms 64 bytes from yx-in-f99.1e100.net (74.125.45.99): icmp_seq=10 ttl=52 time=93.9 ms ^C --- www.l.google.com ping statistics --10 packets transmitted, 10 received, 0% packet loss, time 9035ms rtt min/avg/max/mdev = 81.829/90.723/98.313/5.115 ms

Concluyendo que no hay perdida de paquetes y que se tiene comunicación tanto con la LAN como con internet, observando que es mas lenta la respuesta desde internet que la de la propia LAN como podía esperarse. Post-configuración: Varios de estos ajustes durante la instalación ya debieron ser realizados, sin embargo al cambiar la configuración puede ser necesario verificarlos y ajustarlos, es así como a continuación se presenta el tópico a configurar y de qué forma: TOPICO A CONFIGURAR

PROCEDIMIENTO

Nombre de la máquina

Editar en /etc/hostname

Resolución de nombres

Editar en /etc/resolv.conf, ó Agregar directivas dns-nameservers y dns-search, en el archivo /etc/network/interfaces


TOPICO A CONFIGURAR

PROCEDIMIENTO

Agregar rutas estáticas

Usar el comando /etc/network/interfaces.

up

en

el

archivo

Direcciones locales y conocidas

La dirección localhost, la(s) interfaz que tenga configurada se pueden actualizar en el archivo /etc/hosts, también y las máquinas conocidas.

2. Configurar un servidor de DHCP y verificar que el mismo funciona adecuadamente asignando como mínimo los parámetros necesarios para la configuración de una tarjeta de red. Para ello lo más fácil es utilizar otra máquina como cliente (indistintamente del operativo que disponga) para probar que se asignan correctamente las direcciones. Prestar atención en redes domésticas con router ADSL ya generalmente en la mayoría de los casos llevan activo un servidor de dhcp y podría dar servicio antes que el servidor bajo estudio. En caso de no disponer dos máquinas para realizar las pruebas, utilizar los métodos en el modo de prueba/depuración . Primero hay que instalar el servidor, en este caso el taller se está desarrollando en un equipo con Debian Lenny, y el servidor a utilizar es el paquete dhcp3-server el cual podemos instalar en con cualquier manejador de paquetes, para este caso se eligió usar apt-get. pc-caliope:/home/caliope# apt-get install dhcp3-server Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Paquetes sugeridos: dhcp3-server-ldap Se instalarán los siguientes paquetes NUEVOS: dhcp3-server 0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados. Necesito descargar 333kB de archivos. Se utilizarán 782kB de espacio de disco adicional después de esta operación. AVISO: ¡No se han podido autenticar los siguientes paquetes! dhcp3-server ¿Instalar estos paquetes sin verificación [s/N]? s Des:1 http://security.debian.org lenny/updates/main dhcp3-server 3.1.1-6+lenny3 [333kB] Descargados 333kB en 6s (51,8kB/s) Preconfigurando paquetes ... Seleccionando el paquete dhcp3-server previamente no seleccionado. (Leyendo la base de datos ... 142302 ficheros y directorios instalados actualmente.) Desempaquetando dhcp3-server (de .../dhcp3-server_3.1.1-6+lenny3_i386.deb) ... Procesando disparadores para man-db ... Configurando dhcp3-server (3.1.1-6+lenny3) ... Generating /etc/default/dhcp3-server... Starting DHCP server: dhcpd3check syslog for diagnostics. failed! failed! invoke-rc.d: initscript dhcp3-server, action "start" failed. pc-caliope:/home/caliope#

Como se observa en la salida del comando, este instaló el servidor pero al


tratar de arrancarlo da error, esto se debe a que trata de arrancar con el archivo de configuración que tiene por defecto. Para configurar correctamente el servicio de DHCP se debe editar el archivo /etc/dhcp3/dhcpd.conf así: ddns-update-style none; option domain-name-servers 200.13.249.101, 200.13.224.254; default-lease-time 86400; max-lease-time 604800; authoritative; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.1 192.168.1.50; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.1; }

Listado2: Archivo /etc/dhcp3/dhcpd.conf Analizando el “Listado 2”: ddns-update-style

Le indica al servidor dhcp si debe y como actualizar las direcciones asignadas en un servidor de nombres de dominio. Como no se va a actualizar ningún DNS por ahora se configuró none.

option domain-name-servers

El servidor DNS de la red.

default-lease-time

El tiempo por defecto de asignación de la dirección en segundos. Por defecto se coloca un dia.

max-lease-time

Tiempo máximo de segundos.

authoritative

Si un cliente envía un requerimiento incorrecto el servidor lo obliga a que tome los parámetros del servidor, evitando posibles errores.

subnet

La red en que se está trabajando, con su respectiva máscara.

range

Rango de direcciones a asignar.

option subnet-mask

Máscara de red que usarán los clientes.

option broadcast-address

Dirección de broadcast que usarán los clientes.

option routers

Pasarela que usarán los clientes.

asignación de la dirección en

Una vez realizados los cambios se puede comprobar el funcionamiento del servidor, con el comando ps se puede verificar si el procesos dhcpd3 se está ejecutando: pc-caliope:/etc/dhcp3# ps -fea | grep dhcpd root 4634 1 0 21:32 ? 00:00:00 /usr/sbin/dhcpd3 -q


root

4685 4010 0 21:57 pts/1

00:00:00 grep dhcpd

y, con el comando netstat se puede observar si en efecto nuestro servidor está recibiendo peticiones de dhcp: pc-caliope:/etc/dhcp3# netstat -uap | grep dhcp udp 0 0 *:bootps *:*

4634/dhcpd3

Finalmente, verificar si asigna la dirección a una máquina que lo solicite, para realizar esta prueba conecto el equipo con una máquina windows xp por medio de un cable cruzado. pc-caliope:/etc/dhcp3# cat /var/lib/dhcp3/dhcpd.leases # The format of this file is documented in the dhcpd.leases(5) manual page. # This lease file was written by isc-dhcp-V3.1.1 lease 192.168.1.1 { starts 4 2009/12/10 03:34:14; ends 5 2009/12/11 03:34:14; cltt 4 2009/12/10 03:34:14; binding state active; next binding state free; hardware ethernet 00:06:4f:6d:16:55; uid "\001\000\006Om\026U"; client-hostname "fliarocha"; } pc-caliope:/etc/dhcp3# cat /var/log/syslog ... Dec 9 22:33:20 pc-caliope kernel: [11264.504073] r8101: eth0: link up Dec 9 22:33:24 pc-caliope dhcpd: DHCPREQUEST for 192.168.1.100 from 00:06:4f:6d:16:55 via eth0: unknown lease 192.168.1.100. Dec 9 22:33:27 pc-caliope dhcpd: DHCPREQUEST for 192.168.1.100 from 00:06:4f:6d:16:55 via eth0: unknown lease 192.168.1.100. Dec 9 22:33:36 pc-caliope dhcpd: DHCPREQUEST for 192.168.1.100 from 00:06:4f:6d:16:55 via eth0: unknown lease 192.168.1.100. Dec 9 22:34:03 pc-caliope dhcpd: DHCPDISCOVER from 00:06:4f:6d:16:55 via eth0 Dec 9 22:34:04 pc-caliope dhcpd: DHCPOFFER on 192.168.1.1 to 00:06:4f:6d:16:55 (fliarocha) via eth0 Dec 9 22:34:05 pc-caliope dhcpd: DHCPDISCOVER from 00:06:4f:6d:16:55 (fliarocha) via eth0 Dec 9 22:34:05 pc-caliope dhcpd: DHCPOFFER on 192.168.1.1 to 00:06:4f:6d:16:55 (fliarocha) via eth0 Dec 9 22:34:14 pc-caliope dhcpd: DHCPDISCOVER from 00:06:4f:6d:16:55 (fliarocha) via eth0 Dec 9 22:34:14 pc-caliope dhcpd: DHCPOFFER on 192.168.1.1 to 00:06:4f:6d:16:55 (fliarocha) via eth0 Dec 9 22:34:14 pc-caliope dhcpd: DHCPREQUEST for 192.168.1.1 (192.168.1.7) from 00:06:4f:6d:16:55 (fliarocha) via eth0 Dec 9 22:34:14 pc-caliope dhcpd: DHCPACK on 192.168.1.1 to 00:06:4f:6d:16:55 (fliarocha) via eth0 Dec 9 22:35:43 pc-caliope kernel: [11407.390194] r8101: eth0: link down ...

En el archivo /var/lib/dhcp3/dhcpd.leases el servidor va guardando que direcciones ha asignado, al revisar su contenido se ve que asignó la dirección 192.168.1.1 a la interfaz con dirección física 00:06:4f:6d:16:55. Al revisar el archivo /var/log/syslog se puede encontrar información mas detallada, por ejemplo:


22:33:20 22:33:24

22:34:14

Conecto el cable de red y se registra el mensaje de link up. Recibe un requerimiento para usar la dirección 192.168.1.100 desde la máquina con dirección física 00:06:4f:6d:16:55, el responde que es una dirección que no conoce y como se usó la sentencia authoritative en el archivo de configuración no permite su uso. Finalmente después que la máquina cliente haya desistido de usar la dirección que tenía anteriormente el servidor le asigna la dirección 192.168.1.1 a la máquina fliarocha.

Aspecto de la prueba desde windows, primero la interfaz de red tenía la dirección 192.168.1.100 asignada por el enrutador wireless de la ilustración Nº1.

Ilustración 2: Interfaz antes de desconectarla y conectarla al nuevo dhcp.


Ilustración 3: Durante la soliccitud de dirección.

Ilustración 4: Después de asignada la dirección. Se puede observar la tomó todos los datos de la nueva configuración, pasarela, dirección de broadcast, máscara de red, etc. incluso, si se observa con detenimiento se cometió un error en la configuración pues si la pasarela es la dirección 192.168.1.1 esta no se debe asignar a ninguna máquina, solución: ajusta el parámetro range desde la 192.168.1.2 en adelante. El archivo de configuración de dhcpd.conf tiene muchas opciones bien documentadas en man dhcpd.conf, una importante es poder asignar direcciones IP a los clientes con base en la dirección física, en el caso que nos ocupa se han agregado las siguientes lineas al archivo /etc/dhcp3/dhcpd.conf con el fin de asignarle específicamente la dirección 192.168.1.45. host familiar { hardware ethernet 00:06:4f:6d:16:55;


}

fixed-address 192.168.1.45;

Se conecta nuevamente el cliente y estos son los resultados en el archivo de syslog y en el cliente: Dec 9 23:16:46 pc-caliope kernel: [13876.917480] r8101: eth0: link up Dec 9 23:16:51 pc-caliope dhcpd: DHCPREQUEST for 192.168.1.100 from 00:06:4f:6d:16:55 via eth0: lease 192.168.1.100 unavailable. Dec 9 23:16:51 pc-caliope dhcpd: DHCPNAK on 192.168.1.100 to 00:06:4f:6d:16:55 via eth0 Dec 9 23:16:52 pc-caliope dhcpd: DHCPDISCOVER from 00:06:4f:6d:16:55 via eth0 Dec 9 23:16:52 pc-caliope dhcpd: DHCPOFFER on 192.168.1.45 to 00:06:4f:6d:16:55 via eth0 Dec 9 23:16:52 pc-caliope dhcpd: Dynamic and static leases present for 192.168.1.45. Dec 9 23:16:52 pc-caliope dhcpd: Remove host declaration familiar or remove 192.168.1.45 Dec 9 23:16:52 pc-caliope dhcpd: from the dynamic address pool for 192.168.1/24 Dec 9 23:16:52 pc-caliope dhcpd: DHCPREQUEST for 192.168.1.45 (192.168.1.7) from 00:06:4f:6d:16:55 via eth0 Dec 9 23:16:52 pc-caliope dhcpd: DHCPACK on 192.168.1.45 to 00:06:4f:6d:16:55 via eth0 Dec 9 23:17:01 pc-caliope /USR/SBIN/CRON[5504]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Dec 9 23:17:30 pc-caliope kernel: [13921.623282] r8101: eth0: link down

Ilustraci贸n 5: Cliente windows con la direcci贸n fija por su direcci贸n f铆sica.


3. Configurar un servidor de ficheros NFS y un servidor NIS en la misma máquina que servirá para que clientes remotos o locales se conecten solo a través de NIS montando su directorio HOME por NFS. Para el servidor NFS se debe verificar su funcionamiento con restricciones de tipo de acceso (p.e. sólo lectura), usuarios, máquinas clientes (esta prueba se puede realizar desde un cliente externo montando el directorio en cuestión o desde la misma máquina (no tiene ningún beneficio sino simplemente hacer la prueba). Para el sistema NIS las pruebas se pueden hacer configurando el cliente tanto en una máquina externa como en el mismo servidor (para probar cliente/servidor en la misma máquina deben crearse usuarios/grupos NIS -es decir que no estén dados de alta en el /etc/passwd ni en el /etc/group- y verificar su conexión a través de un terminal -AltFi o CrtlAltFi-). Se deben incluir en este ejercicio todos los cambios realizados en todos los archivos de configuración (incluido el del /etc/passwd, / etc/group). Este punto se puede dividir en: ●

NIS ○ Instalación y configuración del servidor. ○ Instalación y configuración en el cliente. ○ Pruebas.

NFS ○ Instalación y configuración del servidor. ○ Instalación y configuración en el cliente. ○ Pruebas.

NIS Instalación y configuración del servidor Lo primero es verificar el archivo /etc/hosts, que el nombre del servidor no este apuntando a la dirección de loopback, incluimos las máquinas conocidas de la red. 127.0.0.1 192.168.1.101 192.168.1.100

localhost.localdomain caliope.arocha.com.co familiar.arocha.com.co

localhost caliope familiar

Para instalar el servidor se usa apt-get: caliope:/home/caliope# apt-get install nis Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalaron de forma automática los siguientes paquetes y ya no son necesarios. libqt4-opengl libqt4-assistant libqt4-gui rsync pax Utilice «apt-get autoremove» para eliminarlos. Se instalarán los siguientes paquetes NUEVOS:


nis 0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados. Necesito descargar 204kB de archivos. Se utilizarán 668kB de espacio de disco adicional después de esta operación. Des:1 http://http.us.debian.org lenny/main nis 3.17-17 [204kB] Descargados 204kB en 2s (68,5kB/s) Preconfigurando paquetes ... Seleccionando el paquete nis previamente no seleccionado. (Leyendo la base de datos ... 160681 ficheros y directorios instalados actualmente.) Desempaquetando nis (de .../archives/nis_3.17-17_i386.deb) ... Procesando disparadores para man-db ... Configurando nis (3.17-17) ... Setting NIS domainname to: arocha.com.co. Starting NIS services: ypbindbinding to YP server......

Este paquete en Debian viene configurado por defecto para funcionar como cliente, así que para usarlo como servidor se deben realizar unos cambios: Nombre del dominio NIS, este dato fue preguntado durante la instalación del paquete pero verificarlo: caliope:/home/caliope# vi /etc/defaultdomain arocha.com.co

Se le indica a NIS que se comporte como servidor cambiando las siguientes líneas: caliope:/home/caliope# vi /etc/default/nis ... NISSERVER=master ... NISCLIENT=false ...

Para agregar seguridad se limita el acceso a la red en que se está trabajando: caliope:/home/caliope# vi /etc/ypserv.securenets 255.0.0.0 127.0.0.0 255.255.255.0 192.168.1.0

Se inicializa el servidor NIS con el comando: caliope:/home/caliope# /usr/lib/yp/ypinit -m At this point, we have to construct a list of the hosts which will run NIS servers. caliope.arocha.com.co is in the list of NIS server hosts. Please continue to add the names for the other hosts, one per line. When you are done with the list, type a <control D>. next host to add: caliope.arocha.com.co next host to add: The current list of NIS servers looks like this: caliope.arocha.com.co Is this correct? [y/n: y] y We need a few minutes to build the databases...


Building /var/yp/arocha.com.co/ypservers... Running /var/yp/Makefile... make[1]: se ingresa al directorio `/var/yp/arocha.com.co' Updating passwd.byname... Updating passwd.byuid... Updating group.byname... Updating group.bygid... Updating hosts.byname... Updating hosts.byaddr... Updating rpc.byname... Updating rpc.bynumber... Updating services.byname... Updating services.byservicename... Updating netid.byname... Updating protocols.bynumber... Updating protocols.byname... Updating netgroup... Updating netgroup.byhost... Updating netgroup.byuser... Updating shadow.byname... make[1]: se sale del directorio `/var/yp/arocha.com.co' caliope.arocha.com.co has been set up as a NIS master server. Now you can run ypinit -s caliope.arocha.com.co on all slave server.

Se coloca el servidor NIS en: caliope:/home/caliope# vi /etc/yp.conf ypserver caliope.arocha.com.co

Finalmente se reinicia el servidor y se hacen unas pruebas: caliope:/home/caliope# invoke-rc.d nis restart Starting NIS services: ypserv yppasswdd ypxfrd ypbind. caliope:/home/caliope# ypwhich caliope.arocha.com.co caliope:/home/caliope# ypwhich -m passwd caliope.arocha.com.co caliope:/home/caliope# ypwhich -x Use "ethers" for map "ethers.byname" Use "aliases" for map "mail.aliases" Use "services" for map "services.byname" Use "protocols" for map "protocols.bynumber" Use "hosts" for map "hosts.byname" Use "networks" for map "networks.byaddr" Use "group" for map "group.byname" Use "passwd" for map "passwd.byname" caliope:/home/caliope# ypcat passwd nemesis:x:1002:1002:,,,,:/home/nemesis:/bin/bash euridice:x:1001:1001:,,,,:/home/euridice:/bin/bash caliope:x:1000:1000:Jorge Alberto Arocha Muñoz,,,:/home/caliope:/bin/bash

NIS Instalación y configuración del cliente La configuración en el cliente es mas sencilla, prácticamente instalar el paquete: familiar:/home/caliope# apt-get install nis


Durante la instalación se pregunta por el dominio NIS y se especifica arocha.com.co, el archivo /etc/default/nis no se altera y en /etc/yp.conf se coloca el nombre del servidor: caliope.arocha.com.co. Se agregan las siguientes lineas en los archivos que a continuación se indican: familiar:/home/caliope# vi /etc/passwd +:::::: familiar:/home/caliope# vi /etc/shadow +:::::::: familiar:/home/caliope# vi /etc/group +:::

En el archivo /etc/nsswitch.conf se debe verificar que exista la linea: netgroup:

nis

Se reinicia el servicio: familiar:/home/caliope# invoke-rc.d nis restart

NIS Pruebas desde el cliente Se hacen las misma pruebas que se hicieron en el servidor y las respuestas son las mismas. La prueba final es habilitarse en la máquina cliente con un usuario que exista en el servidor y no en la máquina local, en este caso nemesis: caliope@familiar:~$ su - nemesis Contraseña: Sin directorio, entrando con HOME=/ nemesis@familiar:/$

Y se observó que se podía entrar y el sistema advierte que no encuentra el directorio home del usuario, porque pues en la máquina no se encuetra /home/ nemesis como se especifica en el map de passwd de NIS. En cuanto a NFS retomo lo explicado en la PEC2, en servidor: pc-caliope:~# apt-get install nfs-kernel-server pc-caliope:~# echo “/home localhost(rw,no_root_squash)” >> /etc/exports pc-caliope:~# cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)


# /home *.arocha.com.co(rw,no_root_squash)

Tal como se puede observar en el listado anterior se está exportando el directorio /home a cualquier maquina del dominio arocha.com.co, en este home esta el directorio de los usuarios caliope, némesis y eurídice. En el cliente solo es necesario instalar el paquete nfs-common y modificar el fstab para que monte por defecto la partición NFS: root@familia:/home# root@familia:/home# /etc/fstab root@familia:/home# root@familia:/home# root@familia:/home#

apt-get nfs-common echo “caliope.arocha.com.co:/home

/home/movil

nfs

defaults

0

2”

>>

mkdir /home/movil chmod ugo+x /home/movil mount /home/movil

Con esto ya está montado el directorio /home del servidor en el directorio /home/movil del cliente, ahora se cambiará el home del usuario némesis para que sea /home/movil/nemesis: caliope:~# vi /etc/passwd ... nemesis:x:1002:1002:,,,,:/home/movil/nemesis:/bin/bash ...

Pero es necesario actualizar la información de NIS, par lo cual se hace: caliope:~# cd /var/yp/ caliope:/var/yp# make make[1]: se ingresa al directorio `/var/yp/arocha.com.co' Updating netid.byname... make[1]: se sale del directorio `/var/yp/arocha.com.co' caliope:/var/yp# ypcat passwd nemesis:x:1002:1002:,,,,:/home/movil/nemesis:/bin/bash euridice:x:1001:1001:,,,,:/home/euridice:/bin/bash caliope:x:1000:1000:Jorge Alberto Arocha Muñoz,,,:/home/caliope:/bin/bash caliope:/var/yp#

Con esto realizado procedemos a probar nuevamente el usuario nemesis en el equipo familiar.arocha.com.co: caliope@familiar:~$ su - nemesis Contraseña: nemesis@familiar:~$ pwd /home/movil/nemesis nemesis@familiar:~$ touch prueba nemesis@familiar:~$ cd .. nemesis@familiar:/home/movil$ pwd /home/movil nemesis@familiar:/home/movil$ ls caliope euridice nemesis nemesis@familiar:/home/movil$ cd caliope nemesis@familiar:/home/movil/caliope$ ls 11949856671936903385modem.svg.hi.png Maildir 1236267749763452241AX11_WLAN-router.svg.hi.png mbox


ACTAENTREGA.odt nuvo.txt ACTAENTREGA_r1.odt org_detel1.odg autosave.xmi org_detel1.png backup PDF bak.tac pec2_des.xmi bind pec2_ejemplo.xmi ç PEC2_Solucion_JCivera.pdf canal_coms.txt pec2_UML.png config-2.6.26-2-686 pec2.xmi config-2.6.31 postfix deps.awk ~prueba Desktop prueba.bak Diagrama1.dia prueba.txt Diagrama1.png pxelinux.0 dir qsort.awk eclipse r8101-1.013.00.tar.bz2 hcal radi1.txt hical radi1.txt~ highres%2C17.jpg raid1.txt impresoras.mawk recompilar.txt impresoras.mawk~ red_casa.dia install.pdf.es red_casa.dia~ interfaces red_casa.png linux-2.6_2.6.26-19lenny2.diff.gz runtime-EclipseApplication linux-2.6_2.6.26-19lenny2.dsc serv_mail.txt linux-2.6_2.6.26.orig.tar.gz uml linux-2.6.31.6.tar.bz2 webmin_1.500_all.deb listar.sh workspace listar.sh~ zimbra-0.jpg lsb-hardware4linux.info-collector-auto-0.10.0 zimbra3_540x411.bmp lsmodgenrico.txt zimbra_full.jpg maestria_semestreII zimbra_skin_sky.jpg Mail nemesis@familiar:/home/movil/caliope$ touch prueba touch: no se puede efectuar `touch' sobre «prueba»: Permiso denegado nemesis@familiar:/home/movil/caliope$

Como se demostró en la anterior salida, todo funciona de acuerdo a lo esperado, el usuario nemesis esta vez encontró su directorio “home” y además funcionan los permisos entre usuarios y grupos del servidor NIS pues permite crear archivos en el “home” de nemesis y solo deja leer el contenido del subdirectorio del usuario caliope del servidor. Cada vez que se modifica alguno de los archivos mapeados es necesario reconstruir las tablas de NIS pasándose al directorio /var/yp y ejecutando el comando make, existen comandos para como son yppasswd, ypchfn, ypchsh para cambiar la información directamente en la base de datos NIS. 4. Servidores: a) Montar un servicio de mail configurando una MTA y que al mismo se pueda acceder por IMAP4 en forma segura. Hacer las pruebas de funcionamiento en modo local para la MTA y remoto para el IMAP4. El servicio deberá también hacer control de correo de basura (Spam). Si bien se deja libertad de elección al estudiante en cuanto a los paquetes utilizar tener en cuenta


como esto puede afectar al entorno donde se esté trabajando y se aconseja extremar las precauciones para evitar problemas con el proveedor de Internet o con el entorno. Incluir todos los ficheros de configuración y las pruebas que demuestren que el servicio funciona en un entorno controlado y privado. El servidor de correo se instalará en una máquina virtual llamada pec3 del dominio arocha.com.co con dirección 10.0.2.15, como es una dirección dinámica es difícil que otros servidores de correo acepten correo de ella hay varias formas de hacerlo pero no es el tema de este taller, por lo tanto solo será un servidor de correo a nivel de la intranet arocha.com.co, para cumplir con los objetivos propuestos se llevarán a cabo las siguientes tareas: ● ● ● ● ● ● ●

Instalación de un dns para que resuelva localmente las peticiones y se encuentre el como el servidor de correo. Instalación de Postfix y su configuración. Instalación de Courier-imap como servidor Imap. Instalación de Squirrelmail para dar acceso al correo por medio de una interfaz web. Pruebas de funcionamiento. Instalación de Spamassassin. Pruebas de funcionamiento del filtro de spam.

Instalación del DNS Verificamos el nombre de la maquina: pec3:/home/qwerty# vi /etc/hostname pec3 pec3:/home/qwerty# vi /etc/hosts 127.0.0.1 localhost 127.0.1.1 pec3.arocha.com.co

pec3

pec3:/home/qwerty# invoke-rc.d hostname.sh start pec3:/home/qwerty# hostname pec3 pec3:/home/qwerty# hostname -f pec3.arocha.com.co

En el archivo /etc/hostname se guarda el nombre de la máquina, el archivo /etc/hosts sirve para resolver nombres mediante files y allí colocamos igualmente el nombre de nuestra máquina. El script hostname.sh se encarga al iniciar el sistema operativo de colocar el nombre, acá lo ejecutamos mediante el comando invoke-rc.d y comprobamos que esté de acuerdo a lo configurado mediante el comando hostname.


El servidor de nombres de dominio que se ha seleccionado es BIND, por seguridad es mejor configurarlo para que trabaje como chroot en este caso y como es un ambiente de pruebas se dejará como viene por defecto, para instalarlo se utiliza apt-get: pec3:/home/qwerty# apt-get install bind9 Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalarán los siguientes paquetes extras: bind9utils Paquetes sugeridos: bind9-doc resolvconf ufw Se instalarán los siguientes paquetes NUEVOS: bind9 bind9utils 0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados. Se necesita descargar 0B/335kB de archivos. Se utilizarán 1028kB de espacio de disco adicional después de esta operación. ¿Desea continuar [S/n]? s Preconfigurando paquetes ... Seleccionando el paquete bind9utils previamente no seleccionado. (Leyendo la base de datos ... 160688 ficheros y directorios instalados actualmente.) Desempaquetando bind9utils (de .../bind9utils_1%3a9.5.1.dfsg.P3-1_i386.deb) ... Seleccionando el paquete bind9 previamente no seleccionado. Desempaquetando bind9 (de .../bind9_1%3a9.5.1.dfsg.P3-1_i386.deb) ... Procesando disparadores para man-db ... Configurando bind9utils (1:9.5.1.dfsg.P3-1) ... Configurando bind9 (1:9.5.1.dfsg.P3-1) ... wrote key file "/etc/bind/rndc.key" # Stopping domain name service...: bind9rndc: connection to remote host closed This may indicate that * the remote server is using an older version of the command protocol, * this host is not authorized to connect, * the clocks are not syncronized, or * the key is invalid. . Starting domain name service...: bind9.

Para configurarlo se deben modificar varios archivos, en el archivo /etc/bind/named.conf.options agregamos las siguientes líneas, cuidando que queden antes del corchete final: pec3:/home/qwerty# vi /etc/bind/named.conf.options ... forwarders { 10.0.2.3; }; ...

Con esto se especifica un dns externo que nos permitirá resolver los dominios que no sean de nuestro conocimiento. Para agregar las zonas de nuestro dominio arocha.com.co, se deben agregar dos zonas de resolución y la de resolución inversa, esto se hace en /etc/bind/


named.conf.local agregando las siguientes lineas: pec3:/home/qwerty# vi /etc/bind/named.conf.local zone "arocha.com.co" { type master; file "/var/lib/bind/arocha.com.co.hosts"; }; zone "2.0.10.in-addr.arpa" { type master; file "/var/lib/bind/10.0.2.rev"; };

Con esto se le indica a bind que zonas va a resolver él y en que lugar se encuentra la información correspondiente, en este caso los archivos: /var/lib/bind/arocha.com.co.hosts y /var/lib/bind/10.0.2.rev, los cuales se han editado con los siguientes datos: Este es el archivo de la /var/lib/bind/arocha.com.co.hosts:

zona

directa

(o

de

forwarding),

$ttl 38400 arocha.com.co. IN SOA pec3.arocha.com.co. admin.arocha.com.co ( 1260684512 10800 3600 604800 38400 ) arocha.com.co. IN NS pec3.arocha.com.co. pec3.arocha.com.co. IN A 10.0.2.15 arocha.com.co. IN MX 10 pec3.arocha.com.co.

Explicar este archivo no es del alcance de este taller, pero es importante ver la tres últimas líneas: en la primera se indica que el servidor de nombres de arocha.com.co es la máqina pec3.arocha.com.co, que la dirección de pec3.arocha.com.co es 10.0.2.15 y que el servidor de correo de arocha.com.co es pec3.arocha.com.co. El archivo de resolución inversa es /var/lib/bind/10.0.2.rev: $ttl 38400 2.0.10.in-addr.arpa. IN SOA pec3.arocha.com.co. admin.arocha.com.co ( 1260684560 10800 3600 604800 38400 ) 2.0.10.in-addr.arpa. IN NS pec3.arocha.com.co. 15.2.0.10.in-addr.arpa. IN PTR pec3.arocha.com.co.

Se reinicia el servidor mediante el comando invoke-rc.d: pec3:/home/qwerty# invoke-rc.d bind9 restart


Comprobamos su funcionamiento con el comando nslookup: pec3:/home/qwerty# nslookup > server 10.0.2.15 Default server: 10.0.2.15 Address: 10.0.2.15#53 > pec3.arocha.com.co Server: 10.0.2.15 Address: 10.0.2.15#53 Name: pec3.arocha.com.co Address: 10.0.2.15 > set type=mx > arocha.com.co Server: 10.0.2.15 Address: 10.0.2.15#53 arocha.com.co mail exchanger = 10 pec3.arocha.com.co. > set type=any > arocha.com.co Server: 10.0.2.15 Address: 10.0.2.15#53 arocha.com.co origin = pec3.arocha.com.co mail addr = admin.arocha.com.co.arocha.com.co serial = 1260684512 refresh = 10800 retry = 3600 expire = 604800 minimum = 38400 arocha.com.co nameserver = pec3.arocha.com.co. arocha.com.co mail exchanger = 10 pec3.arocha.com.co.

Una vez verificado se actualiza el archivo /etc/resolv.conf para usar la máquina local como servidor de nombres: pec3:/home/qwerty# vi /etc/resolv.conf domain arocha.com.co search arocha.com.co nameserver 10.0.2.15

Instalación de Postfix y su configuración Usando apt-get se procede a instalar postfix: pec3:/home/qwerty# apt-get install postfix

Durante la instalación pregunta el tipo de servidor selecciona “Sitio Internet”, se supone que es un servidor de correo con acceso a internet y por donde los usuarios de arocha.com.co enviarán sus correos. Para su configuración postfix usa dos archivos: /etc/postfix/main.cf y /etc/postfix/master.cf. Editamos inicialmente /etc/postfix/main.cf: pec3:/home/qwerty# vi /etc/postfix/main.cf


# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yesyes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. myhostname = pec3.arocha.com.co alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = arocha.com.co, pec3.arocha.com.co, localhost.arocha.com.co, localhost #relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.2.0/24 inet_interfaces = all smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $mydomain broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination home_mailbox = Maildir/

Durante la instalaci贸n Debian configura varios elementos dejando el archivo casi listo para funcionar, desinstala Exim4 que lo trae Debian por defecto para el manejo del correo y si se dejara no funcionaria nuestro postfix. Del archvio anterior son de comentar: smtpd_banner: Es el mensaje de texto que se despliga cuando se inicia la sesi贸n, en este caso algo como: pec3.arocha.com.co ESMTP Postfix (Debian/ GNU), aconsejan a cambiarlo por seguridad. myorigin: El dominio de correo que usara, Debian lo guarda por defecto en este archivo, el cual si se revisa solo contiene arocha.com.co mydestination: Qu茅 dominios de correo va a recibir.


relayhost: Como se comento anteriormente, se supone que este servidor debería entregar el los correos de los usuarios arocha.com.co hacia otros dominios, por lo tanto este parámetro no debería configurarse, pero como tiene una ip dinámica los servidores no aceptan su correo, existen formas de hacerlo mediante este parámetro pero no fueron desarrolladas en este taller. home_mailbox: Los correos serán guardados directamente en el directorio del usuario. Postfix es altamente configurable permitiendo realizar configuraciones muy detallas en aras de la seguridad, para mayor información se puede verificar http://www.postfix.org/postconf.5.html en los parámetros de este archivo. Instalación de Courier-imap Se instala con la ayuda de apt-get: pec3:/home/qwerty# apt-get install courier-imap Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalaron de forma automática los siguientes paquetes y ya no son necesarios. libqt4-opengl libqt4-assistant libqt4-gui rsync pax Utilice «apt-get autoremove» para eliminarlos. Paquetes sugeridos: courier-doc courier-imap-ssl Se instalarán los siguientes paquetes NUEVOS: courier-imap 0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados. Se necesita descargar 0B/593kB de archivos. Se utilizarán 1516kB de espacio de disco adicional después de esta operación. Seleccionando el paquete courier-imap previamente no seleccionado. (Leyendo la base de datos ... 160652 ficheros y directorios instalados actualmente.) Desempaquetando courier-imap (de .../courier-imap_4.4.0-2_i386.deb) ... Procesando disparadores para man-db ... Configurando courier-imap (4.4.0-2) ... Starting Courier IMAP server: imapd.

Durante la instalación pregunta que si instala la interfaz web para administración, se contestó que no. Al igual que el caso anterior la instalación toma casi todos los parámetros de configuración automáticamente dejando casi a punto el servicio, en este caso solo se adicionó a /etc/courier/authmodulelist lo siguiente: pec3:/home/qwerty# vi /etc/courier/authmodulelist authdaemon


Aún así, el directorio de configuración es /etc/courier y en el podemos encontrar el archivo imapd para configurar el servicio imap y el authdaemonrc para configurar la autenticación. Es importante que MAILDIRPATH=Maildir en imapd es el mismo valor que homedir en main.cf. Instalación de Squirrelmail Squirrelmail es una interfaz web para el correo electrónico, accesa al correo por medio de imap, su instalación es bastante sencilla: pec3:/home/qwerty# apt-get install squirrelmail Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalaron de forma automática los siguientes paquetes y ya no son necesarios. libqt4-opengl libqt4-assistant libqt4-gui rsync pax Utilice «apt-get autoremove» para eliminarlos. Se instalarán los siguientes paquetes extras: squirrelmail-locales Paquetes sugeridos: squirrelmail-decode imapproxy php-pear php4-pear php5-ldap php4-ldap Se instalarán los siguientes paquetes NUEVOS: squirrelmail squirrelmail-locales 0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados. Se necesita descargar 0B/3113kB de archivos. Se utilizarán 12,6MB de espacio de disco adicional después de esta operación. ¿Desea continuar [S/n]? Y Seleccionando el paquete squirrelmail previamente no seleccionado. (Leyendo la base de datos ... 159376 ficheros y directorios instalados actualmente.) Desempaquetando squirrelmail (de .../squirrelmail_2%3a1.4.15-4+lenny2_all.deb) ... Seleccionando el paquete squirrelmail-locales previamente no seleccionado. Desempaquetando squirrelmail-locales (de .../squirrelmail-locales_1.4.13-20071220-1_all.deb) ... Procesando disparadores para man-db ... Configurando squirrelmail (2:1.4.15-4+lenny2) ... Installing default squirrelmail config. Run /usr/sbin/squirrelmail-configure as root to configure/upgrade config. Configurando squirrelmail-locales (1.4.13-20071220-1) ...

La configuración por defecto funciona sin problemas solo es necesarios copiar la configuración que trae propuesta para apache y ubicar el directorio de squirrelmail en el DocumentRoot acuerdo nuestra distribución: pec3:/home/qwerty# ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf pec3:/home/qwerty# ln -s /usr/share/squirrelmail /var/www/squirrelmail pec3:/home/qwerty# chgrp -R www-data /usr/share/squirrelmail/

Pruebas de funcionamiento Antes de continuar se configuran dos usuarios, aunque postfix permite usar usuarios virtuales, tal como se ha configurado el servicio es para usuarios reales del sistema, por lo tanto para agregar un usuario solo es necesario agregarlo normalmente y además crear la carpeta Maildir así:


pec3:/home/qwerty# su usuario pec3:/home/qwerty# maildirmake.courier /home/usuario/Maildir

Inicialmente se verificar谩 el servicio de correo haciendo un telnet al puerto 25, e incluso haciendo llegar un mensaje a un buz贸n: pec3:/home/qwerty# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 pec3.arocha.com.co ESMTP Postfix (Debian/GNU) EHLO LOCALHOST 250-pec3.arocha.com.co 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH PLAIN Y2FsaW9wZTBjYWxpb3BlMGNhbGlvcGU= 535 5.7.8 Error: authentication failed: bad protocol / cancel Y2FsaW9wZWNhbGlvcGVjYWxpb3Bl 502 5.5.2 Error: command not recognized Y2FsaW9wZWNhbGlvcGVjYWxpb3Bl 502 5.5.2 Error: command not recognized AUTH PLAIN Y2FsaW9wZWNhbGlvcGVjYWxpb3Bl 535 5.7.8 Error: authentication failed: bad protocol / cancel MAIL FROM:<you@example.com> 250 2.1.0 Ok RCPT TO:<caliope@arocha.com.co> 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> SUBJECT: Prueba Pruebas desde aca. . 250 2.0.0 Ok: queued as 868B35276A QUIT 221 2.0.0 Bye Connection closed by foreign host. pec3:/home/qwerty#

Como se puede observar al final acepto el mensaje y lo encol贸, ahora hay que probar si llego o no, para lo que se puede usar squirrelmail.


Y para comprobar el funcionamiento de imapd, aunque squirrelmail lo hace, se configuró evolution para tener acceso a esas carpetas:

Instalación y configuración de Spamassassin. Se requiere spamassassin y el cliente para comunicarse con él, spamc: es el cliente para comunicarse con spamd, la versión demonizada de SpamAssassin


(véase el paquete spamassassin). Está escrito en C para que funcione a la máxima velocidad y cargue lo mínimo. spamc es bastante útil para integrar spamassassin en un MTA o en un archivo .procmailrc debido a su velocidad. 1 Para esto se utiliza el comando apt-get: pec3:/home/qwerty# apt-get install spamassassin spamc

Se deben realizar algunos ajuste porque la instalación por defecto de Debian corre spamassassin con el usurio root, lo que no es buena idea, por lo tanto se crea un usuario spamd, su directorio home y se cambia la configuración por defecto de acuerdo al nuevo usuario: pec3:/home/qwerty# groupadd -g 1500 spamd pec3:/home/qwerty# useradd -u 1500 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd pec3:/home/qwerty# mkdir /var/lib/spamassassin pec3:/home/qwerty# chown spamd:spamd /var/lib/spamassassin pec3:/home/qwerty# vi /etc/default/spamassassin ENABLED=1 SAHOME="/var/lib/spamassassin/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} {SAHOME}spamd.log" PIDFILE="${SAHOME}spamd.pid"

-s

$

Ahora se retoca la configuración de postfix, añadiendo un nuevo filtro, para lo cual se edita el archivo /etc/postfix/master.cf y al final se añaden las siguientes lineas: pec3:/home/qwerty# vi /etc/postfix/master.cf ...... spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Y después de smtp inet n - - - - smtpd se agrega: -o content_filter=spamassassin, teniendo en cuenta dejar unos espacios en blanco al principio de la linea, así: smtp inet n - - - - smtpd -o content_filter=spamassassin

esto le indica que debe utilizar un filtro de contenido que se llama spamassassin, que se definió en las tres lineas que se agregaron al final del archivo y este filtro consiste en pasar el mensaje por spamc, el cual decidirá si es o no spam. 1 Tomado de Debian: http://packages.debian.org/lenny/spamc


Se hace la aclaración que como solo se requería el filtro de spam, tan solo se configuró de esta forma, porque existe amavis que además del spamassassin nos permite usar antivirus, teniendo una solución mas completa. Después de esto se reinicia el servidor de correo con: pec3:/home/qwerty# invoke-rc.d postfix restart

y para probarlo enviamos un correo que contenga un texto que sabemos de antemano que es spam: Otra manera de revisar todo esto es la bitácora de postfix, la cual podemos hallar en /var/log/mail.log, allí encontramos informcación sobre los mensajes que entran y salen, el login de los clientes, etc

Ilustración 6: Mensaje con contenido SPAM


Ilustración 7: Mensaje enviado al usuario informando que se ha bloqueado un mesaje con SPAM.

b) Montar un servidor de ficheros vía un servidor web mediante WebDav. Se deberán dar muestras que el servicio funciona haciendo pruebas para las siguientes acciones: mover o copiar ficheros en el servidor, modificar sus propiedades, verificar niveles de acceso y seguridad. Como en el ejercicio anterior describir todos los pasos para la instalación, configuración y las pruebas realizadas. Para este ejercicio se deben realizar las siguientes tareas: • • •

Instalar servidor web Apache. Habilitar el módulo que soporta WebDav. Configurar el directorio a compartir y la seguridad.

Instalar servidor web Apache: En este orden de ideas, para la instalación de Apache se usa el comando aptget: pc-caliope:/home/caliope# apt-get install apache2 Leyendo lista de paquetes... Hecho


Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalarán los siguientes paquetes extras: apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 Paquetes sugeridos: apache2-doc apache2-suexec apache2-suexec-custom Se instalarán los siguientes paquetes NUEVOS: apache2 apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 0 actualizados, 6 se instalarán, 0 para eliminar y 0 no actualizados. Necesito descargar 1396kB de archivos. Se utilizarán 4915kB de espacio de disco adicional después de esta operación. ¿Desea continuar [S/n]? S AVISO: ¡No se han podido autenticar los siguientes paquetes! libapr1 libaprutil1 apache2-utils apache2.2-common apache2-mpm-worker apache2 ¿Instalar estos paquetes sin verificación [s/N]? s 0% [Conectando a security.debian.org (128.101.240.212)]^C pc-caliope:/home/caliope# export FTP_PROXY=http://192.168.1.1:3128 pc-caliope:/home/caliope# apt-get install apache2 Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalarán los siguientes paquetes extras: apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 Paquetes sugeridos: apache2-doc apache2-suexec apache2-suexec-custom Se instalarán los siguientes paquetes NUEVOS: apache2 apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 0 actualizados, 6 se instalarán, 0 para eliminar y 0 no actualizados. Necesito descargar 1396kB de archivos. Se utilizarán 4915kB de espacio de disco adicional después de esta operación. ¿Desea continuar [S/n]? S AVISO: ¡No se han podido autenticar los siguientes paquetes! libapr1 libaprutil1 apache2-utils apache2.2-common apache2-mpm-worker apache2 ¿Instalar estos paquetes sin verificación [s/N]? s Des:1 http://security.debian.org lenny/updates/main libapr1 1.2.12-5+lenny1 [109kB] Des:2 http://security.debian.org lenny/updates/main libaprutil1 1.2.12+dfsg-8+lenny4 [73,8kB] Des:3 http://security.debian.org lenny/updates/main apache2-utils 2.2.9-10+lenny6 [143kB] Des:4 http://security.debian.org lenny/updates/main apache2.2-common 2.2.9-10+lenny6 [783kB] Des:5 http://security.debian.org lenny/updates/main apache2-mpm-worker 2.2.9-10+lenny6 [241kB] Des:6 http://security.debian.org lenny/updates/main apache2 2.2.9-10+lenny6 [45,2kB] Descargados 1396kB en 3s (410kB/s) Seleccionando el paquete libapr1 previamente no seleccionado. (Leyendo la base de datos ... 142315 ficheros y directorios instalados actualmente.) Desempaquetando libapr1 (de .../libapr1_1.2.12-5+lenny1_i386.deb) ... Seleccionando el paquete libaprutil1 previamente no seleccionado. Desempaquetando libaprutil1 (de .../libaprutil1_1.2.12+dfsg-8+lenny4_i386.deb) ... Seleccionando el paquete apache2-utils previamente no seleccionado. Desempaquetando apache2-utils (de .../apache2-utils_2.2.9-10+lenny6_i386.deb) ... Seleccionando el paquete apache2.2-common previamente no seleccionado. Desempaquetando apache2.2-common (de .../apache2.2-common_2.2.9-10+lenny6_i386.deb) ... Seleccionando el paquete apache2-mpm-worker previamente no seleccionado. Desempaquetando apache2-mpm-worker (de .../apache2-mpm-worker_2.2.9-10+lenny6_i386.deb) ... Seleccionando el paquete apache2 previamente no seleccionado. Desempaquetando apache2 (de .../apache2_2.2.9-10+lenny6_all.deb) ... Procesando disparadores para man-db ... Configurando libapr1 (1.2.12-5+lenny1) ... Configurando libaprutil1 (1.2.12+dfsg-8+lenny4) ... Configurando apache2-utils (2.2.9-10+lenny6) ... Configurando apache2.2-common (2.2.9-10+lenny6) ... Enabling site default. Enabling module alias.


Enabling module autoindex. Enabling module dir. Enabling module env. Enabling module mime. Enabling module negotiation. Enabling module setenvif. Enabling module status. Enabling module auth_basic. Enabling module deflate. Enabling module authz_default. Enabling module authz_user. Enabling module authz_groupfile. Enabling module authn_file. Enabling module authz_host. Configurando apache2-mpm-worker (2.2.9-10+lenny6) ... Starting web server: apache2. Configurando apache2 (2.2.9-10+lenny6) ...

Una vez instalado y para comprobar que se ha instalado correctamente abrimos un navegador y se apunta hacia la dirección IP de la máquina debe responder una página con el mensaje “It works!”, también podemos probar desde la consola de texto de la misma máquina el comando ps si el proceso apache2 está en ejecución: pc-caliope:/home/caliope# ps -fea | grep apache2 root 4480 1 0 08:27 ? 00:00:00 /usr/sbin/apache2 -k start www-data 4481 4480 0 08:27 ? 00:00:00 /usr/sbin/apache2 -k start www-data 4484 4480 0 08:27 ? 00:00:00 /usr/sbin/apache2 -k start www-data 4487 4480 0 08:27 ? 00:00:00 /usr/sbin/apache2 -k start root 4634 3846 0 09:00 pts/1 00:00:00 grep apache2

y, un telnet al puerto 80 así: pc-caliope:/home/caliope# telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET <html><body><h1>It works!</h1></body></html> Connection closed by foreign host.

El servidor apache instalado así tiene su configuración por defecto, la cual se encuentra en /etc/apache2 y consta de un archivo principal apache2.conf desde el cual por medio de la directiva include carga otros archivos de configuración para habilitar y deshabilitar los sitios y módulos disponibles y otras características, estos archivos vienen bien documentados y son fáciles de modificar, sin embargo el paquete apacheutils nos provee unas herramientas como a2en... o a2dis... para estas labores administrativas. Habilitar el módulo que soporta WebDav Los

módulos

disponibles

en

la

instalación

se

encuentran

en


/etc/apache2/mods-available en este directorio se verifica la existencia de dav_fs.conf y dav.con los cuales cargaremos con el comando a2enmod, así: pc-caliope:/home/caliope# a2enmod dav dav_fs Enabling module dav. Considering dependency dav for dav_fs: Module dav already enabled Enabling module dav_fs. Run '/etc/init.d/apache2 restart' to activate new configuration!

o, pc-caliope:/home/caliope# a2enmod Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack version vhost_alias Which module(s) do you want to enable (wildcards ok)? dav dav_fs Enabling module dav. Considering dependency dav for dav_fs: Module dav already enabled Enabling module dav_fs. Run '/etc/init.d/apache2 restart' to activate new configuration!

La diferencia entre los dos es que uno es interactivo y el otro ya conocemos y estamos seguros de los módulos que se cargaran, al final ambos comandos advierten que es necesario reiniciar el servidor para que tome los cambios. Analizando el comando a2enmod: Como se mencionó anteriormente el archivo de configuración del servidor web es /etc/apache2/apache2.conf si se revisa detenidamente las lineas 185 y 186 cargan dentro de la configuración los archivos *.conf y *.load que se encuentren en el directorio /etc/apache2/mods-enabled, lo que hace a2enmod crear enlaces en /etc/apache2/mods-enabled desde /etc/apache2/ mods-available que son los archivos de configuración disponibles, esto es equivalente a editar el archivo /etc/apache2/httpd.conf, que es donde se aconseja hacer las configuraciones manuales del usuario,y agregar el contenido a mano. Lo mismo pero mas elegante. A continuación una comparación de los dos métodos: a2enmod dav dav_fs

vi /etc/apache2/httpd-conf

Enlace a archivos preconfigruados, si se hace Agregar las siguientes líneas: un ls a /etc/apache2/mod-enabled vemos:


lrwxrwxrwx 1 root root 29 dic 10 09:40 dav_fs.conf -> ../mods-available/dav_fs.conf lrwxrwxrwx 1 root root 29 dic 10 09:40 dav_fs.load -> ../mods-available/dav_fs.load lrwxrwxrwx 1 root root 26 dic 10 09:40 dav.load -> ../mods-available

LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so

LoadModule dav_lock_module /usr/lib/apache2/modules/mod_dav_lock.so DAVLockDB /var/lock/apache2/DAVLock

El contenido de los archivos es: # cat /etc/apache2/mods-available/dav* DAVLockDB /var/lock/apache2/DAVLock # Depends: dav LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so LoadModule dav_lock_module /usr/lib/apache2/modules/mod_dav_lock.so

Una vez realizados estos pasos se procede al paso final de configurar el directorio a compartir. Configurar el directorio a compartir y la seguridad Lo primero es crear un directorio en el mismo “DocumentRoot” del servidor que ya se tiene configurado, para ello un directorio en /var/www que es el sitio por defecto donde Debian lo tiene configurado, si existe duda se puede verificar en el archivo /etc/apache2/sites-available/default y ubicar la línea DocumentRoot y es recomendable cambiarlo de usuario al del servidor apache, en este caso es www-data pero en otras distribuciones puede ser apache o nobody. pc-caliope:~# mkdir /var/www/dav pc-caliope:~# chown www-data:www-data /var/www/dav

Ahora en el sitio que tenemos configurado se agrega el directorio, para lo cual se edita el archivo /etc/apache2/sites-available/default y se agregan las siguientes líneas: Alias /webdav "/var/www/dav" <Location /webdav> DAV On </Location>

Después es necesario reiniciar el servidor web: pc-caliope:/home/caliope# invoke-rc.d apache2 force-reload Reloading web server config: apache2.


Para verificar desde otra máquina con Debian en el menu Lugares->Conectar con el servidor , se escoge el protocolo WebDav y se llenan los datos como se observa en la ilustración:

Ilustración 8: Configuración cliente gnome WebDav Después de esto la carpeta se puede usar como si fuera local, para comprobar se copiaron archivos del cliente al servidor, y su registro queda en la bitácora del servidor apache en /var/log/apache2/access.log: 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav HTTP/1.1" 301 320 "-" "gnomevfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/ HTTP/1.1" 207 669 "-" "gnomevfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo.png HTTP/1.1" 404 303 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "HEAD /webdav/Pantallazo.png HTTP/1.1" 404 - "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PUT /webdav/Pantallazo.png HTTP/1.1" 201 280 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PUT /webdav/Pantallazo.png HTTP/1.1" 204 - "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav HTTP/1.1" 301 320 "-" "gnomevfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/ HTTP/1.1" 207 669 "-" "gnomevfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo-1.png HTTP/1.1" 404 305 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "HEAD /webdav/Pantallazo-1.png HTTP/1.1" 404 - "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PUT /webdav/Pantallazo-1.png HTTP/1.1" 201 282 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PUT /webdav/Pantallazo-1.png HTTP/1.1" 204 - "-" "gnome-vfs/2.22.0 neon/0.25.4"


172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo-1.png HTTP/1.1" 207 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo.png HTTP/1.1" 207 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo.png HTTP/1.1" 207 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo-1.png HTTP/1.1" 207 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo.png HTTP/1.1" 207 "-" "gnome-vfs/2.22.0 neon/0.25.4" 172.24.31.7 - - [10/Dec/2009:17:12:45 -0500] "PROPFIND /webdav/Pantallazo-1.png HTTP/1.1" 207 "-" "gnome-vfs/2.22.0 neon/0.25.4"

564 562 562 564 562 564

Hasta ahora solos se ha configurado para que cualquier persona lo accese y pueda leer y escribir, para agregar seguridad se puede exigir que para escribir y/o leer sea un usuario validado, para validar el usuario se puede aprovechar cualquier método soportado por Apache, como por ejemplo LDAP, MySql, etc., en este caso a manera de ejemplo se va a restringir la escritura y se usará el sistema de validación básico de apache, para lograrlo se sigue el siguiente proceso: Agregar las siguiente lineas al archivo /etc/apache2/sites-avalaible/default : AuthType Basic AuthName DAV AuthUserFile /var/www/dav/user.passwd <LimitExcept GET OPTIONS> Require valid-user </LimitExcept>

Se debe crear el archivo user.passwd con: pc-caliope:/var/www/dav# htpasswd -c /var/www/dav/user.passwd jorge New password: Re-type new password: Adding password for user jorge

Una vez reiniciado el servidor y al hacer las mismas pruebas me pedirá contraseña. Es aconsejable colocar el archivo de contraseñas en otra carpeta y cambiar los pemisos para aumentar la seguridad. 5. Implementar un firewall por medio de iptables, que sólo permita acceso a Apache y SSH desde una(s) IP(s) determinadas descartando (DROP) todos los restantes paquetes. Verificar desde una máquina externa que el firewall funciona analizando que puertos permanecen abiertos utilizando alguna de las herramientas propuestas como nmap. En caso de no disponer otra máquina para probar el firewall se puede utilizar alguno de los sitios web que permiten verificar el acceso como por ejemplo GRC (http://grc.com) a través de


ShieldsUP! (Se debe tener en cuenta en este caso que muchas veces nuestro router bloquea el acceso a la máquina porque el ya está haciendo de FW). Como resultado del ejercicio se debe incluir que pasos se han seguido en la configuración, una descripción de cada regla y las verificaciones realizadas de funcionamiento. Antes de continuar es necesario presentar el ambiente de trabajo de este numeral:

Ilustración 9: Ambiente trabajo numeral 5. En la máquina 172.24.31.249 se instalará el firewall requerido y desde las otras máquinas se harán las pruebas, al equipo 192.168.1.1 se le autorizará el acceso al servidor web y al 172.24.31.7 el acceso a ssh. El script usado para configurar un firewall con iptables es: #!/bin/bash iptables -F iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -d 172.24.31.249 -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -d 172.24.31.249 -s 172.24.31.7 -p tcp --dport 22 -j ACCEPT

Listado 3: Script fw_pec3.sh Análisis script:


iptables -F

Con esto se eliminan las cadenas que pueda tener en el momento las tablas de iptables.

iptables -P INPUT DROP

Con la opción -P se establecen políticas para una cadena, en este caso, se están eliminando los paquetes entrantes (tabla FILTER cadena INPUT)

iptables -P OUTPUT ACCEPT

Se autorizan paquetes salientes.

iptables -P FORWARD ACCEPT

Se autorizan paquetes que pasan.

iptables -A INPUT -i lo -j ACCEPT

Se autorizan los paquetes a la interfaz de loopback.

iptables -A INPUT -d 172.24.31.249 -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT

Se autoriza la entrada de los paquetes de protocolo TCP puerto 80 (puerto donde esta escuchando apache los requerimientos) con destino a la máquina 172.24.31.249 (donde se está ejecutando el firewall) que provengan de la dirección 192.168.1.1.

iptables -A INPUT -d 172.24.31.249 -s 172.24.31.7 -p tcp --dport 22 -j ACCEPT

Se autoriza la entrada de los paquetes de protocolo TCP puerto 22 (puerto donde esta escuchando SSH los requerimientos) con destino a la máquina 172.24.31.249 (donde se está ejecutando el firewall) que provengan de la dirección 172.24.31.7.

La ejecución del script: arocha:~# iptables -L Chain INPUT (policy ACCEPT) target prot opt source

destination

Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source arocha:~# ./fw_pec3.sh arocha:~# iptables -L -n Chain INPUT (policy DROP) target prot opt source ACCEPT all -- 0.0.0.0/0 ACCEPT tcp -- 192.168.1.1 ACCEPT tcp -- 172.24.31.7

destination

destination 0.0.0.0/0 172.24.31.249 172.24.31.249

tcp dpt:80 tcp dpt:22

Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source

destination

Para verificar se intentaron abrir sesiones web y ssh desde distintas máquinas y los resultados obtenidos correspondieron a lo esperado, a manera de evidencia se utilizará iptraf, que es un programa que nos permite monitorear el


tráfico de red ejecutado en la máquina que nos interesa, en este caso el computador que hace de firewall.

1

2

3

Ilustración 10: Iptraf pruebas con SSH En la ilustración Nº 8 se puede observar la ejecución de iptraf en la máquina que tiene instalado el firewall, mientras se intenta abrir sesiones ssh desde distintos equipos de la red, se puede observar: 1. La sesión ssh entre el equipo y el de dirección 172.24.31.7 fue exitosa y esta activa, se puede ver que frente a cada equipo hay gran cantidad de paquetes enviados. 2. En las sesiones desde otros equipos no se estableció la conexión, por ejemplo se ve que desde la dirección IP 172.24.31.181 puerto 43741 se han enviado 4 paquetes a la dirección IP 172.24.31.249 al puerto 22 (SSH) que no respondido porque en paquetes enviados aparece 0 (cero). 3. Solicitudes a otros puertos tampoco contesta, en este caso solicitudes al puerto 445. Igualmente se hizo la prueba con acceso web y se observaron resultados


similares. nmap es un software para escanear puertos, con el se puede verificar que servicios tiene abiertos un equipo entre otros resultados. arocha:~# nmap -T Aggressive -A -v localhost Starting Nmap 4.62 ( http://nmap.org ) at 2009-12-11 17:50 COT Initiating SYN Stealth Scan at 17:50 Scanning localhost (127.0.0.1) [1715 ports] Discovered open port 80/tcp on 127.0.0.1 Discovered open port 22/tcp on 127.0.0.1 Discovered open port 111/tcp on 127.0.0.1 Completed SYN Stealth Scan at 17:50, 2.33s elapsed (1715 total ports) Initiating Service scan at 17:50 Scanning 3 services on localhost (127.0.0.1) Completed Service scan at 17:50, 6.07s elapsed (3 services on 1 host) Initiating OS detection (try #1) against localhost (127.0.0.1) SCRIPT ENGINE: Initiating script scanning. LUA INTERPRETER in nse_init.cc:763: /usr/share/nmap/scripts/robots.nse:4: module 'http' not found: no field package.preload['http'] no file '/usr/share/nmap/nselib/http.lua' no file './http.lua' no file '/usr/local/share/lua/5.1/http.lua' no file '/usr/local/share/lua/5.1/http/init.lua' no file '/usr/local/lib/lua/5.1/http.lua' no file '/usr/local/lib/lua/5.1/http/init.lua' no file '/usr/lib/nmap/nselib-bin/http.so' no file './http.so' no file '/usr/local/lib/lua/5.1/http.so' no file '/usr/local/lib/lua/5.1/loadall.so' SCRIPT ENGINE: Aborting script scan. Host localhost (127.0.0.1) appears to be up ... good. Interesting ports on localhost (127.0.0.1): Not shown: 1712 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh (protocol 2.0) 80/tcp open http Apache httpd 2.2.9 ((Debian)) 111/tcp open rpcbind 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi : SF-Port22-TCP:V=4.62%I=7%D=12/11%Time=4B22CCB1%P=i686-pc-linux-gnu%r(NULL, SF:20,"SSH-2\.0-OpenSSH_5\.1p1\x20Debian-5\r\n"); Device type: general purpose Running: Linux 2.6.X OS details: Linux 2.6.17 - 2.6.20 Uptime: 0.054 days (since Fri Dec 11 16:33:20 2009) Network Distance: 0 hops TCP Sequence Prediction: Difficulty=203 (Good luck!) IP ID Sequence Generation: All zeros Read data files from: /usr/share/nmap OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.404 seconds Raw packets sent: 1734 (77.058KB) | Rcvd: 3474 (147.092KB)

Listado 4: Resultado nmap en la misma mรกquina. Como se puede observar en el listado 4, desde la misma maquina se tiene acceso a los puertos 22(SSH), 80 (HTTP) y 111 (rcpbind).


jdifen:/home/caliope# nmap -T Aggressive -A -v 172.24.31.249 Starting Nmap 4.62 ( http://nmap.org ) at 2009-12-11 17:47 COT Initiating ARP Ping Scan at 17:47 Scanning 172.24.31.249 [1 port] Completed ARP Ping Scan at 17:47, 0.01s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at 17:47 Completed Parallel DNS resolution of 1 host. at 17:47, 0.00s elapsed Initiating SYN Stealth Scan at 17:47 Scanning 172.24.31.249 [1715 ports] Discovered open port 22/tcp on 172.24.31.249 Completed SYN Stealth Scan at 17:47, 8.82s elapsed (1715 total ports) Initiating Service scan at 17:47 Scanning 1 service on 172.24.31.249 Completed Service scan at 17:48, 6.00s elapsed (1 service on 1 host) Initiating OS detection (try #1) against 172.24.31.249 SCRIPT ENGINE: Initiating script scanning. LUA INTERPRETER in nse_init.cc:763: /usr/share/nmap/scripts/robots.nse:4: module 'http' not found: no field package.preload['http'] no file '/usr/share/nmap/nselib/http.lua' no file './http.lua' no file '/usr/local/share/lua/5.1/http.lua' no file '/usr/local/share/lua/5.1/http/init.lua' no file '/usr/local/lib/lua/5.1/http.lua' no file '/usr/local/lib/lua/5.1/http/init.lua' no file '/usr/lib/nmap/nselib-bin/http.so' no file './http.so' no file '/usr/local/lib/lua/5.1/http.so' no file '/usr/local/lib/lua/5.1/loadall.so' SCRIPT ENGINE: Aborting script scan. Host 172.24.31.249 appears to be up ... good. Interesting ports on 172.24.31.249: Not shown: 1714 filtered ports PORT STATE SERVICE VERSION 22/tcp open ssh (protocol 2.0) 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi : SF-Port22-TCP:V=4.62%I=7%D=12/11%Time=4B22CC20%P=i686-pc-linux-gnu%r(NULL, SF:20,"SSH-2\.0-OpenSSH_5\.1p1\x20Debian-5\r\n"); MAC Address: 00:00:24:C8:73:1C (Connect AS) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: firewall|general purpose Running: Linux 2.6.X OS details: Smoothwall firewall (Linux 2.6.16.53), Linux 2.6.13 - 2.6.20, Linux 2.6.17 (x86) Uptime: 0.056 days (since Fri Dec 11 16:28:05 2009) Network Distance: 1 hop TCP Sequence Prediction: Difficulty=201 (Good luck!) IP ID Sequence Generation: All zeros Read data files from: /usr/share/nmap OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 17.204 seconds Raw packets sent: 3468 (155.062KB) | Rcvd: 13 (700B)

Listado 5: Resultado nmap desde 172.24.31.7. En este caso solo aparece que tiene acceso al puerto de SSH, lo cual era de esperarse pues es el puerto que esta autorizado para esta máquina. Con la configuración actual desde la máquina con el firewall no se puede tener acceso a otros servidores web o a sesiones ssh en otros servidores, esto es porque está establecida la política DROP en la cadena INPUT, un forma de solucionarlo es adicionando al script la línea:


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

De esta forma se le indica a iptables que si el paquete de entrada que esta analizando la cadena INPUT hace parte de una conexión que inició nuestra máquina, o una conexión que ya estaba establecida o relacionada con una ya establecida dejará pasar los paquetes. Una vez hecho el cambio y aplicado el script, este es el resultado de listar las cadenas: arocha:~# iptables -L -n Chain INPUT (policy DROP) target prot opt source ACCEPT all -- 0.0.0.0/0 ACCEPT tcp -- 192.168.1.1 ACCEPT tcp -- 172.24.31.7 ACCEPT all -- 0.0.0.0/0

destination 0.0.0.0/0 172.24.31.249 tcp dpt:80 172.24.31.249 tcp dpt:22 0.0.0.0/0 state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source

destination

De esta forma desde la máquina se podrán iniciar conexiones a cualquier protocolo y servicio. 6. Tomando como referencia el capítulo de Administración de seguridad, realizar un análisis de seguridad completo de vuestra máquina centrado en la utilización de herramientas y archivos de información/configuración (generados por Uds o del sistema). Es imprescindible en este ejercicio analizar/realizar: a) Si han habido o no (intentos) intrusiones (se deben provocar/simular intentos y comentar que se han analizado y como han llegado a la conclusión final), b) estado de la seguridad de local, c) estado de la seguridad de red. El resultado final deberá ser un informe que permita definir los puntos débiles y su corrección y si no los hay que se ha analizado para llegar a esta conclusión.


Sobre este tema hay mucho escrito y por escribir, es un tema que no solo es de una máquina y su administrador, sino que involucra a los usuarios, al ambiente físico, a los desarrolladores de las aplicaciones que se ejecutan sobre esa plataforma, etc. Para efectos de desarrollo de este taller se realizará la prueba sobre un servidor web, la idea es que tenga disponible el servicio web y para administración ssh desde ciertas máquinas, además se asume que el estudio de seguridad se realizará en cuanto a la instalación y configuración de la máquina en sí, dejando fuera del alcance de este estudio la parte de desarrollo del website, es decir, vulnerabilidades como injection sql, cross-site scripting quedan fuera. El orden que se seguirá es: 1. 2. 3. 4. 5.

Descripción del servidor, su configuración. Diagnóstico inicial . Corrección de novedades halladas. Prueba de las correcciones. Otros.

Descripción del Servidor. El sistema que se está analizando es una máquina Soekris 4801-50, en la que se ha instalado Debian Lenny únicamente el sistema base, posteriormente se instalaron bind9 y apache2, dejando las configuraciones que trae por defecto y se iniciaron los servicios correspondietes. Su dirección IP local es 172.24.31.249 a la que se le hace un NAT con la 190.254.1.86. Diagnóstico inicial. Para esta fase se usó Nessus, que es un escáner de vulnerabilidades, básicamente su funcionamiento es escanear primero los puerto abiertos del objetivo y con base en ellos buscar si existen vulnerabilidades que puedan aprovecha una serie de exploits conocidos; con base en la información recuperada elabora un informe donde detalla sobre las vulnerabilidades y advertencias sobre la configuración errada de los servicios de nuestro sistema e incluso como solucionarlas. Es de anotar que para no se configuró un firewall y tiene una dirección publica por medio de NAT y el firewall no filtra nada.


Ilustración 11: Resultado de Nessus Como se puede observar en la imagen ha detectado algunas novedades que son: 1. DNS mal configurado. 2. Apache presenta una falla en la configuración y como se aprecia en la imagen dice como se puede corregir. 3. Esta presente el servicio sunrpc(portmap) que se conoce tiene varias vulnerabilidades. 4. Las fallas que dicen general estan asociadas a que se está usando la versión GPL de la herramienta y no tiene habilitados todos los plugins disponibles. En el “Anexo C” se adjunta la salida en texto del diagnóstico inicial con Nessus. Corrección novedades halladas Con base en el reporte se hicieron las siguientes correcciones:


Se eliminรณ el servicio de portmap y dns, ya que no serรกn usados ni requeridos: ns:~# apt-get remove portmap Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: nfs-common portmap 0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. After this operation, 549kB disk space will be freed. Do you want to continue [Y/n]? Y (Reading database ... 21494 files and directories currently installed.) Removing nfs-common ... Stopping NFS common utilities: statd. Removing portmap ... Stopping portmap daemon.... Processing triggers for man-db ... ns:~# apt-get remove bind9 Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: bind9utils Use 'apt-get autoremove' to remove them. The following packages will be REMOVED: bind9 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. After this operation, 762kB disk space will be freed. Do you want to continue [Y/n]? Y (Reading database ... 21441 files and directories currently installed.) Removing bind9 ... Processing triggers for man-db ...

Se corrigiรณ la configuraciรณn de Apache tal como lo sugiere Nessus, es necesario habilitar el modulo rewrite: ns:~# a2enmod Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack version vhost_alias Which module(s) do you want to enable (wildcards ok)? rewrite Enabling module rewrite. Run '/etc/init.d/apache2 restart' to activate new configuration! ns:~# vi /etc/apache2/sites-available/default ..... RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] ..... ns:~# invoke-rc.d apache2 stop Stopping web server: apache2. ns:~# invoke-rc.d apache2 start Starting web server: apache2.

Se configurรณ un firewall con iptables, partiendo del numeral anterior, restringiendo el acceso a ssh desde las unicas maquinas que se utilizan para administrar el servidor:


ns:~# vi fw_pec3.sh ns:~# ./fw_pec3.sh ns:~# iptables -L -n Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 172.24.31.249 tcp dpt:80 ACCEPT tcp -- 172.24.31.7 172.24.31.249 tcp dpt:22 ACCEPT tcp -- 190.9.201.179 172.24.31.249 tcp dpt:22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source

destination

Salida desde internet.

Prueba de Correcciones Se vuelve a ejecutar Nessus y en esta ocasi贸n esta es la salida:

Ilustraci贸n 12: Resultado Nessus una vez corregidas novedades.


En el “Anexo D” se puede encontrar el resultado de Nessus en formato de texto. Otros Es altamente recomendable verificar diariamente las bitácoras del sistema en ellas se pueden rastrear los posibles ataques, pues estos no son elaborados de un día para otro sino que son el resultado de días, semanas o meses de seguimientos, pruebas, etc. es mas, hay encargados de sistemas que ni se dan cuenta de la intrusión, porque como se aclara en los apuntes no necesariamente los atacantes producen daños; pero si con cada acceso al sistema se van dejando huellas que permiten establecer la existencia de una intrusión o un ataque en curso. Por tal motivo se debe revisar diariamente: ●

Comando last: este nos muestra qué usuarios se ha conectado al sistema y por cual medio, esto nos permite confrontar esta información y detectar patrones fuera de lo común (usuarios que accesan en horas no laborales, accessos desde lugares fuera de lo común). ns:~# last root pts/2 root pts/1 root pts/0 root pts/1 root pts/0 root pts/0 root pts/2 root pts/0 root pts/0 root pts/1 root pts/0 root pts/0 root ttyS0 root ttyS0 reboot system root ttyS0 root ttyS0 root pts/0 root pts/0 root ttyS0 root ttyS0

172.24.31.7 Mon Dec 14 15:42 still logged in 172.24.31.7 Mon Dec 14 14:48 still logged in 172.24.31.7 Mon Dec 14 08:43 still logged in 190.9.201.179 Sat Dec 12 23:20 - 23:47 (00:26) 190.9.201.179 Sat Dec 12 23:05 - 23:23 (00:17) 190.9.201.179 Sat Dec 12 22:41 - 22:42 (00:00) 190.9.201.179 Sat Dec 12 21:36 - 22:08 (00:31) 190.9.201.179 Sat Dec 12 21:28 - 22:39 (01:10) 190.9.201.179 Sat Dec 12 20:58 - 21:28 (00:29) 190.9.201.179 Sat Dec 12 20:45 - 22:42 (01:57) 190.9.201.179 Sat Dec 12 20:35 - 20:58 (00:23) 172.24.31.7 Sat Dec 12 20:29 - 20:30 (00:00) Sat Dec 12 20:28 - 20:30 (00:01) Sat Dec 12 20:28 - 20:28 (00:00) boot 2.6.26-2-486 Sat Dec 12 20:28 - 16:11 (1+19:43) Sat Dec 12 20:23 - down (00:01) Sat Dec 12 20:23 - 20:23 (00:00) 190.9.201.179 Sat Dec 12 18:52 - down (01:31) 190.9.201.179 Fri Dec 11 22:02 - 22:04 (00:01) Fri Dec 11 18:09 - 18:10 (00:00) Fri Dec 11 18:09 - 18:09 (00:00)

Como se ve a este servidor solo se accesa como root desde las IP 172.24.31.7 y 190.9.201.79, si aparece otro acceso debe n encenderse las alarmas. ●

/var/log/auth.log: En esta bitácora se lleva el registro de quienes intentan accesar el sistema y si se tiene éxito o no. Dec 14 07:59:24 ns sshd[6228]: Failed password for invalid user linux123456 from 125.63.78.196 port 43925 ssh2 Dec 14 07:59:28 ns sshd[6230]: Invalid user delutz23 from 125.63.78.196 Dec 14 07:59:28 ns sshd[6230]: pam_unix(sshd:auth): check pass; user unknown Dec 14 07:59:28 ns sshd[6230]: pam_unix(sshd:auth): authentication failure; logname= uid=0


euid=0 tty=ssh ruser= rhost=125.63.78.196 Dec 14 07:59:30 ns sshd[6230]: Failed password for invalid user delutz23 from 125.63.78.196 port 44972 ssh2 Dec 14 07:59:34 ns sshd[6232]: Invalid user gowno12 from 125.63.78.196 Dec 14 07:59:34 ns sshd[6232]: pam_unix(sshd:auth): check pass; user unknown Dec 14 07:59:34 ns sshd[6232]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.63.78.196 Dec 14 07:59:36 ns sshd[6232]: Failed password for invalid user gowno12 from 125.63.78.196 port 46863 ssh2 Dec 14 07:59:39 ns sshd[6234]: Invalid user tv from 125.63.78.196 Dec 14 07:59:39 ns sshd[6234]: pam_unix(sshd:auth): check pass; user unknown Dec 14 07:59:39 ns sshd[6234]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.63.78.196 Dec 14 07:59:41 ns sshd[6234]: Failed password for invalid user tv from 125.63.78.196 port 47926 ssh2 Dec 14 07:59:45 ns sshd[6236]: Invalid user dj from 125.63.78.196 Dec 14 07:59:45 ns sshd[6236]: pam_unix(sshd:auth): check pass; user unknown Dec 14 07:59:45 ns sshd[6236]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.63.78.196 Dec 14 07:59:47 ns sshd[6236]: Failed password for invalid user dj from 125.63.78.196 port 48984 ssh2 Dec 14 08:17:01 ns CRON[6240]: pam_unix(cron:session): session opened for user root by (uid=0) Dec 14 08:17:01 ns CRON[6240]: pam_unix(cron:session): session closed for user root Dec 14 08:43:25 ns sshd[6245]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.24.31.7 user=root Dec 14 15:51:28 ns sshd[15050]: Failed password for invalid user db2as from 172.24.31.7 port 43438 ssh2 Dec 14 15:51:39 ns sshd[15052]: Invalid user rewt from 172.24.31.7 Dec 14 15:51:39 ns sshd[15052]: Failed none for invalid user rewt from 172.24.31.7 port 39359 ssh2 Dec 14 15:51:39 ns sshd[15052]: pam_unix(sshd:auth): check pass; user unknown Dec 14 15:51:39 ns sshd[15052]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.24.31.7 Dec 14 15:51:41 ns sshd[15052]: Failed password for invalid user rewt from 172.24.31.7 port 39359 ssh2 Dec 14 15:51:45 ns sshd[15055]: Invalid user system from 172.24.31.7 Dec 14 15:51:46 ns sshd[15055]: Failed none for invalid user system from 172.24.31.7 port 39377 ssh2 Dec 14 15:51:46 ns sshd[15055]: pam_unix(sshd:auth): check pass; user unknown Dec 14 15:51:46 ns sshd[15054]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.24.31.7 user=root Dec 14 15:51:46 ns sshd[15055]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.24.31.7 Dec 14 15:51:47 ns sshd[15055]: Failed password for invalid user system from 172.24.31.7 port 39377 ssh2 Dec 14 15:51:48 ns sshd[15054]: Failed password for root from 172.24.31.7 port 39376 ssh2 Dec 14 15:51:55 ns sshd[15058]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.24.31.7 user=root Dec 14 15:51:57 ns sshd[15058]: Failed password for root from 172.24.31.7 port 39402 ssh2 Dec 14 15:51:59 ns sshd[15060]: Invalid user hax0r from 172.24.31.7 Dec 14 15:51:59 ns sshd[15060]: Failed none for invalid user hax0r from 172.24.31.7 port 39413 ssh2 Dec 14 15:52:02 ns sshd[15062]: Invalid user glftpd from 172.24.31.7 Dec 14 15:52:02 ns sshd[15062]: Failed none for invalid user glftpd from 172.24.31.7 port 39421 ssh2 Dec 14 15:52:02 ns sshd[15062]: pam_unix(sshd:auth): check pass; user unknown Dec 14 15:52:02 ns sshd[15062]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.24.31.7 Dec 14 15:52:02 ns sshd[15064]: Invalid user outofbox from 172.24.31.7 Dec 14 15:52:02 ns sshd[15064]: Failed none for invalid user outofbox from 172.24.31.7 port 39423 ssh2 Dec 14 15:52:05 ns sshd[15062]: Failed password for invalid user glftpd from 172.24.31.7 port 39421 ssh2 Dec 14 16:04:38 ns sshd[15066]: pam_unix(sshd:auth): authentication failure; logname=


uid=0 euid=0 tty=ssh ruser= rhost=172.24.31.7 user=root

En el fragmento anterior se puede observar un ataque desde la IP 125.63.78.196 porque esta intentando varios usuarios y en un corto lapso, al igual los accesos con usuarios del sistema es el escaneo de Nessus. ●

Las bitácoras de los servicios habilitados, en este caso en Apache se encuentran en /var/log/apache2, de especial interés error.log, por ejemplo en el fragmento que se aprecia a continuación, podemos concluir que alguien está tratando de detectar posibles brechas de seguridad para usarlas en su provecho, estas son hechas durante el escaneo con Nessus: [Mon Dec 14 17:03:16 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/WackoWiki [Mon Dec 14 17:03:16 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/WackoWiki [Mon Dec 14 17:03:17 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/ion-p. [Mon Dec 14 17:03:17 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/ion-p.exe [Mon Dec 14 17:03:17 2009] [error] [client 172.24.31.7] /var/www/include.php [Mon Dec 14 17:03:17 2009] [error] [client 172.24.31.7] /var/www/include.php [Mon Dec 14 17:03:18 2009] [error] [client 172.24.31.7] /var/www/everythingform.cgi [Mon Dec 14 17:03:18 2009] [error] [client 172.24.31.7] /var/www/everythingform.cgi [Mon Dec 14 17:03:18 2009] [error] [client 172.24.31.7] /var/www/WackoWiki [Mon Dec 14 17:03:18 2009] [error] [client 172.24.31.7] /var/www/WackoWiki [Mon Dec 14 17:03:19 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/ion-p.exe [Mon Dec 14 17:03:19 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/ion-p.exe [Mon Dec 14 17:03:19 2009] [error] [client 172.24.31.7] File does not [Mon Dec 14 17:03:19 2009] [error] [client 172.24.31.7] File does not [Mon Dec 14 17:03:20 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/ezadmin.cgi [Mon Dec 14 17:03:20 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/ezadmin.cgi [Mon Dec 14 17:03:20 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/index.php [Mon Dec 14 17:03:20 2009] [error] [client 172.24.31.7] script not /usr/lib/cgi-bin/index.php [Mon Dec 14 17:03:21 2009] [error] [client 172.24.31.7] File does p.exe [Mon Dec 14 17:03:21 2009] [error] [client 172.24.31.7] File does p.exe [Mon Dec 14 17:03:21 2009] [error] [client 172.24.31.7] File does not [Mon Dec 14 17:03:21 2009] [error] [client 172.24.31.7] File does not [Mon Dec 14 17:03:22 2009] [error] [client 172.24.31.7] /var/www/ezadmin.cgi [Mon Dec 14 17:03:22 2009] [error] [client 172.24.31.7] /var/www/ezadmin.cgi [Mon Dec 14 17:03:22 2009] [error] [client 172.24.31.7] /var/www/index.php [Mon Dec 14 17:03:22 2009] [error] [client 172.24.31.7] /var/www/index.php

found or unable to stat: found or unable to stat: found or unable to stat: found or unable to stat: File

does

not

exist:

File

does

not

exist:

File

does

not

exist:

File

does

not

exist:

File

does

not

exist:

File

does

not

exist:

found or unable to stat: found or unable to stat: exist: /var/www/ideabox exist: /var/www/ideabox found or unable to stat: found or unable to stat: found or unable to stat: found or unable to stat: not exist: /var/www/ionnot exist: /var/www/ionexist: /var/www/ca exist: /var/www/ca File does not exist: File

does

not

exist:

File

does

not

exist:

File

does

not

exist:


[Mon Dec 14 17:03:23 2009] [error] [client 172.24.31.7] File does p.exe [Mon Dec 14 17:03:23 2009] [error] [client 172.24.31.7] File does p.exe [Mon Dec 14 17:03:23 2009] [error] [client 172.24.31.7] File does not [Mon Dec 14 17:03:23 2009] [error] [client 172.24.31.7] File does not

not exist: /var/www/ionnot exist: /var/www/ionexist: /var/www/ca exist: /var/www/ca

La seguridad no es solamente la instalación y configuración correcta de la máquina y los servicios que se prestaran, esta labor es de estar constantemente revisando bitácoras, mantener actualizado el sistema, analizar comportamientos extraños en el sistema y las respectivas copias de seguridad. En estas labores GNU/Linux nos ofrece gran cantidad de herramientas libres que permiten agilzar y hacen el trabajo mas sencillo, por ejemplo: ● ● ● ● ● ●

logwatch: Para análisis de logs, altamente configurable y flexible, se puede configurar para que nos envíe un correo diariamente. Nessus: Escáner de vulnerabilidades. nmap: Para escanear puertos. Amanda: Para hacer backups. Snort: Monitorear el trafico de red y con una base de datos de ataques detectarlos. ScanLogd: Detecta escaneo de puertos.


ANEXO “A” SOLUCIÓN PROBLEMA DE RED LAN PROBLEMA: Durante la instalación no presentó ninguna advertencia o aviso de error en cuanto a tarjeta de red ethernet, pero al configurar la dirección IP de acuerdo a la red LAN no tenía conexión, verificando con el comando dmesg se encontró: [ [ [ [ [

14.069834] loop: module loaded 15.762202] r8169: eth0: link down 17.283179] NET: Registered protocol family 10 17.283575] lo: Disabled Privacy Extensions 17.283988] ADDRCONF(NETDEV_UP): eth0: link is not ready

Como si el patchcord no estuviera conectado, pero si lo estaba e incluso los leds de la interfaz de red titilaban. También se puede observar que está cargado el módulo r8169 para la eth0 y si se verifica la salida del comando lspci la tarjeta es una Realtek 8101E: ... 03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express ...

SOLUCIÓN: Cambiar el drive de la tarjeta de red, para lo cual se siguió el siguiente procedimiento: 1. Instalar paquetes de desarrollo y la herramienta modulue-assistant, que facilita la instalación de nuevos módulos desde sus paquetes fuente. pc-caliope:/home/caliope# aptitude install build-essential module-assistant Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Leyendo la información de estado extendido Inicializando el estado de los paquetes... Hecho Leyendo las descripciones de las tareas... Hecho Se instalarán los siguiente paquetes NUEVOS: binutils{a} build-essential dpkg-dev{a} g++{a} g++-4.3{a} gcc{a} gcc-4.3{a} libc6-dev{a} libgomp1{a} libstdc++6-4.3-dev{a} libtimedate-perl{a} linux-libc-dev{a} make{a} module-assistant 0 paquetes actualizados, 14 nuevos instalados, 0 para eliminar y 0 sin actualizar. Necesito descargar 0B/15,7MB de ficheros. Después de desempaquetar se usarán 51,9MB. ¿Quiere continuar? [Y/n/?] Y Escribiendo información de estado extendido... Hecho Seleccionando el paquete binutils previamente no seleccionado.


(Leyendo la base de datos ... 90754 ficheros y directorios instalados actualmente.) Desempaquetando binutils (de .../binutils_2.18.1~cvs20080103-7_i386.deb) ... Seleccionando el paquete linux-libc-dev previamente no seleccionado. Desempaquetando linux-libc-dev (de .../linux-libc-dev_2.6.26-15_i386.deb) ... Seleccionando el paquete libc6-dev previamente no seleccionado. Desempaquetando libc6-dev (de .../libc6-dev_2.7-18_i386.deb) ... Seleccionando el paquete libgomp1 previamente no seleccionado. Desempaquetando libgomp1 (de .../libgomp1_4.3.2-1.1_i386.deb) ... Seleccionando el paquete gcc-4.3 previamente no seleccionado. Desempaquetando gcc-4.3 (de .../gcc-4.3_4.3.2-1.1_i386.deb) ... Seleccionando el paquete gcc previamente no seleccionado. Desempaquetando gcc (de .../gcc_4.3.2-2_i386.deb) ... Seleccionando el paquete libstdc++6-4.3-dev previamente no seleccionado. Desempaquetando libstdc++6-4.3-dev (de .../libstdc++6-4.3-dev_4.3.2-1.1_i386.deb) ... Seleccionando el paquete g++-4.3 previamente no seleccionado. Desempaquetando g++-4.3 (de .../g++-4.3_4.3.2-1.1_i386.deb) ... Seleccionando el paquete g++ previamente no seleccionado. Desempaquetando g++ (de .../g++_4.3.2-2_i386.deb) ... Seleccionando el paquete make previamente no seleccionado. Desempaquetando make (de .../make-dfsg/make_3.81-5_i386.deb) ... Seleccionando el paquete libtimedate-perl previamente no seleccionado. Desempaquetando libtimedate-perl (de .../libtimedate-perl_1.1600-9_all.deb) ... Seleccionando el paquete dpkg-dev previamente no seleccionado. Desempaquetando dpkg-dev (de .../dpkg/dpkg-dev_1.14.25_all.deb) ... Seleccionando el paquete build-essential previamente no seleccionado. Desempaquetando build-essential (de .../build-essential_11.4_i386.deb) ... Seleccionando el paquete module-assistant previamente no seleccionado. Desempaquetando module-assistant (de .../module-assistant_0.10.11.0_all.deb) ... Procesando disparadores para man-db ... Configurando binutils (2.18.1~cvs20080103-7) ... Configurando linux-libc-dev (2.6.26-15) ... Configurando libc6-dev (2.7-18) ... Configurando libgomp1 (4.3.2-1.1) ... Configurando gcc-4.3 (4.3.2-1.1) ... Configurando gcc (4:4.3.2-2) ... Configurando make (3.81-5) ... Configurando libtimedate-perl (1.1600-9) ... Configurando dpkg-dev (1.14.25) ... Configurando module-assistant (0.10.11.0) ... Configurando libstdc++6-4.3-dev (4.3.2-1.1) ... Configurando g++-4.3 (4.3.2-1.1) ... Configurando g++ (4:4.3.2-2) ... Configurando build-essential (11.4) ... Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Leyendo la información de estado extendido Inicializando el estado de los paquetes... Hecho Escribiendo información de estado extendido... Hecho Leyendo las descripciones de las tareas... Hecho

2. Se prepara la herramienta module-assistant pc-caliope:/home/caliope# m-a update Actualizado los ficheros infos de los paquetes 85 pc-caliope:/home/caliope# m-a prepare Obteniendo los fuentes de la versión del núcleo: 2.6.26-2-686 apt-get install linux-headers-2.6.26-2-686 Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho


Se instalarán los siguientes paquetes extras: cpp-4.1 gcc-4.1 gcc-4.1-base linux-headers-2.6.26-2-common linux-kbuild-2.6.26 Paquetes sugeridos: gcc-4.1-locales gcc-4.1-multilib gcc-4.1-doc libmudflap0-dev Se instalarán los siguientes paquetes NUEVOS: cpp-4.1 gcc-4.1 gcc-4.1-base linux-headers-2.6.26-2-686 linux-headers-2.6.26-2-common linux-kbuild-2.6.26 0 actualizados, 6 se instalarán, 0 para eliminar y 0 no actualizados. Se necesita descargar 0B/7246kB de archivos. Se utilizarán 41,2MB de espacio de disco adicional después de esta operación. ¿Desea continuar [S/n]? S Seleccionando el paquete gcc-4.1-base previamente no seleccionado. (Leyendo la base de datos ... 93114 ficheros y directorios instalados actualmente.) Desempaquetando gcc-4.1-base (de .../gcc-4.1-base_4.1.2-25_i386.deb) ... Seleccionando el paquete cpp-4.1 previamente no seleccionado. Desempaquetando cpp-4.1 (de .../cpp-4.1_4.1.2-25_i386.deb) ... Seleccionando el paquete gcc-4.1 previamente no seleccionado. Desempaquetando gcc-4.1 (de .../gcc-4.1_4.1.2-25_i386.deb) ... Seleccionando el paquete linux-headers-2.6.26-2-common previamente no seleccionado. Desempaquetando linux-headers-2.6.26-2-common (de .../linux-headers-2.6.26-2-common_2.6.26-15_i386.deb) ... Seleccionando el paquete linux-kbuild-2.6.26 previamente no seleccionado. Desempaquetando linux-kbuild-2.6.26 (de .../linux-kbuild-2.6.26_2.6.26-3_i386.deb) ... Seleccionando el paquete linux-headers-2.6.26-2-686 previamente no seleccionado. Desempaquetando linux-headers-2.6.26-2-686 (de .../linux-headers-2.6.26-2-686_2.6.26-15_i386.deb) ... Procesando disparadores para man-db ... Configurando gcc-4.1-base (4.1.2-25) ... Configurando cpp-4.1 (4.1.2-25) ... Configurando gcc-4.1 (4.1.2-25) ... Configurando linux-headers-2.6.26-2-common (2.6.26-15) ... Configurando linux-kbuild-2.6.26 (2.6.26-3) ... Configurando linux-headers-2.6.26-2-686 (2.6.26-15) ... Creando enlace simbólico... apt-get install build-essential Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho build-essential ya está en su versión más reciente. 0 actualizados, 0 se instalarán, 0 para eliminar y 0 no actualizados. ¡Hecho!

3. Obtener los fuentes del módulo de la página de Realtek en el siguiente enlace: http://www.realtek.com.tw/downloads/downloadsView.aspx? Langid=1&PNid=7&PFid=7&Level=5&Conn=4&DownTypeID=3&GetDown=f alse#2 4. Compilación, instalación y configuración del módulo. pc-caliope:/home/caliope/Desktop# mv r8101-1.013.00.tar.bz2 /usr/src/ pc-caliope:/home/caliope/Desktop# cd /usr/src/ pc-caliope:/usr/src# tar -jxvf r8101-1.013.00.tar.bz2 r8101-1.013.00/ r8101-1.013.00/readme r8101-1.013.00/Makefile r8101-1.013.00/src/ r8101-1.013.00/src/r8101_n.c r8101-1.013.00/src/Makefile_linux24x r8101-1.013.00/src/rtl_eeprom.c r8101-1.013.00/src/Makefile r8101-1.013.00/src/rtl_eeprom.h


r8101-1.013.00/src/rtl_ethtool.h r8101-1.013.00/src/r8101.h pc-caliope:/usr/src# rm r8101-1.013.00.tar.bz2 pc-caliope:/usr/src# cd r8101-1.013.00/ pc-caliope:/usr/src/r8101-1.013.00# lsmod | grep r8169 r8169 23684 0 pc-caliope:/usr/src/r8101-1.013.00# rmmod r8169 pc-caliope:/usr/src/r8101-1.013.00# make clean modules make -C src/ clean make[1]: se ingresa al directorio `/usr/src/r8101-1.013.00/src' rm -rf *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags .tmp_versions Module.symvers Modules.symvers Module.markers *.order make[1]: se sale del directorio `/usr/src/r8101-1.013.00/src' make -C src/ modules make[1]: se ingresa al directorio `/usr/src/r8101-1.013.00/src' make -C /lib/modules/2.6.26-2-686/build SUBDIRS=/usr/src/r8101-1.013.00/src modules make[2]: se ingresa al directorio `/usr/src/linux-headers-2.6.26-2-686' CC [M] /usr/src/r8101-1.013.00/src/r8101_n.o /usr/src/r8101-1.013.00/src/r8101_n.c:435: warning: ‘rtl8101_phyio_read’ defined but not used /usr/src/r8101-1.013.00/src/r8101_n.c:483: warning: ‘rtl8101_ephy_read’ defined but not used CC [M] /usr/src/r8101-1.013.00/src/rtl_eeprom.o LD [M] /usr/src/r8101-1.013.00/src/r8101.o Building modules, stage 2. MODPOST 1 modules CC /usr/src/r8101-1.013.00/src/r8101.mod.o LD [M] /usr/src/r8101-1.013.00/src/r8101.ko make[2]: se sale del directorio `/usr/src/linux-headers-2.6.26-2-686' strip --strip-debug r8101.ko make[1]: se sale del directorio `/usr/src/r8101-1.013.00/src' pc-caliope:/usr/src/r8101-1.013.00# make install make -C src/ install make[1]: se ingresa al directorio `/usr/src/r8101-1.013.00/src' install -m 744 -c r8101.ko /lib/modules/2.6.26-2-686/kernel/drivers/net/ make[1]: se sale del directorio `/usr/src/r8101-1.013.00/src' pc-caliope:/usr/src/r8101-1.013.00# depmod -a pc-caliope:/usr/src/r8101-1.013.00# modprobe r8101 pc-caliope:/usr/src/r8101-1.013.00# lsmod | grep r8101 r8101 27792 0 pc-caliope:/usr/src/r8101-1.013.00# ifconfig -a pc-caliope:/usr/src/r8101-1.013.00# ping 172.24.7.3 PING 172.24.7.3 (172.24.7.3) 56(84) bytes of data. 64 bytes from 172.24.7.3: icmp_seq=1 ttl=64 time=1.92 ms 64 bytes from 172.24.7.3: icmp_seq=2 ttl=64 time=0.280 ms 64 bytes from 172.24.7.3: icmp_seq=3 ttl=64 time=0.284 ms 64 bytes from 172.24.7.3: icmp_seq=4 ttl=64 time=0.257 ms 64 bytes from 172.24.7.3: icmp_seq=5 ttl=64 time=0.266 ms ^C --- 172.24.7.3 ping statistics --5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 0.257/0.601/1.922/0.660 ms

Con esto ya se tiene andando la tarjeta de red, pero cada vez que reinicie la máquina tendrá que removerse el módulo r8169 y cargar el r8101 manualmente, para evitarlo se realiza el procedimiento descrito en el próximo numeral. 5. Post – configuración. pc-caliope:/home/caliope# echo "blacklist r8169">> /etc/modprobe.d/blacklist pc-caliope:/home/caliope# mv /lib/modules/2.6.26-2-686/kernel/drivers/net/r8169.ko /lib/modules/2.6.26-2-686/kernel/


drivers/net/r8169.ko.bak pc-caliope:/home/caliope# depmod pc-caliope:/home/caliope# insmod /lib/modules/2.6.26-2-686/kernel/drivers/net/r8101.ko pc-caliope:/home/caliope# mv /boot/initrd.img-2.6.26-2-686 /boot/initrd.img-2.6.26-2-686.ba pc-caliope:/home/caliope# mkinitramfs -o /boot/initrd.img-2.6.26-2-686 2.6.26-2-686


ANEXO “B” SOLUCIÓN PROBLEMA WIRELESS PROBLEMA El dispositivo wireless no fue detectado, como se puede observar en la salida del comando iwconfig: pc-caliope:~# iwconfig lo no wireless extensions. eth0

no wireless extensions.

SOLUCION En líneas generales se plantean tres soluciones a este problema: 1. Utilizar bc43xx-fwcutter que es un paquete que soporta los dispositivos wireless con chip Broadcom bcm43xx, se instala sencillamente como cualquier paquete .deb con las herramientas correspondientes para la gestión de paquetes. Esta fue la primera opción que aplique debido a su sencillez, pero no funcionó. 2. Utilizar ndiswrapper, la cual descarte por experiencia propia pues en varias ocasiones no he logrado hacer funcioner la red wireless con esta herramienta. 3. Buscar el controlador de la tarjeta, teniendo en cuenta que con Ubuntu el mismo equipo me ha funcionado correctamente, para su instalación y configuración se siguieron los siguientes pasos: pc-caliope:/home/caliope# wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5.10.91.9.3.tar.gz pc-caliope:/home/caliope# cd ~caliope/Desktop/Descargas/hybrid-portsrc-x86_32-v5.10.91.9.3 pc-caliope:/home/caliope# make -C /lib/modules/2.6.26-2-686/build M=`pwd` pc-caliope:/home/caliope# cp wl.ko /lib/modules/2.6.26-2-686/kernel/drivers/net/wireless pc-caliope:/home/caliope# depmod -a pc-caliope:/home/caliope# modprobe wl

Para comprobar su funcionamiento: pc-caliope:/home/caliope# iwconfig


lo eth0 eth1

no wireless extensions. no wireless extensions. IEEE 802.11bg ESSID:"" Nickname:"" Mode:Managed Frequency:2.412 GHz Access Point: Not-Associated Bit Rate:54 Mb/s Tx-Power:32 dBm Retry min limit:7 RTS thr:off Fragment thr:off Power Managementmode:All packets received Link Quality=5/5 Signal level=0 dBm Noise level=-86 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

pc-caliope:/home/caliope#

iwlist eth1 scanning


ANEXO “C” DIAGNÓSTICO INICIAL CON NESSUS Nessus Scan Report ------------------

SUMMARY - Number of hosts which were alive during the test : 1 - Number of security holes found : 2 - Number of security warnings found : 4 - Number of security notes found : 14

TESTED HOSTS 172.24.31.249 (Security holes found)

DETAILS + 172.24.31.249 : . List of open ports : o ssh (22/tcp) (Security notes found) o sunrpc (111/tcp) (Security notes found) o http (80/tcp) (Security warnings found) o unknown (53432/tcp) (Security notes found) o sunrpc (111/udp) (Security notes found) o unknown (45028/udp) (Security hole found) o domain (53/udp) (Security warnings found) o general/udp (Security notes found) o general/icmp (Security warnings found) o general/tcp (Security hole found) . Information found on port ssh (22/tcp) An ssh server is running on this port


. Information found on port ssh (22/tcp) Remote SSH version : SSH-2.0-OpenSSH_5.1p1 Debian-5 . Information found on port ssh (22/tcp) The remote SSH daemon supports the following versions of the SSH protocol : . 1.99 . 2.0 SSHv2 host key fingerprint : 31:1c:9e:8c:87:bd:fa:7a:57:20:75:37:93:1c:ae:9e . Information found on port sunrpc (111/tcp)

The RPC portmapper is running on this port. An attacker may use it to enumerate your list of RPC services. We recommend you filter traffic going to this port. Risk factor : Low CVE : CAN-1999-0632, CVE-1999-0189 BID : 205 . Information found on port sunrpc (111/tcp) RPC program #100000 version 2 'portmapper' (portmap sunrpc rpcbind) is running on this port . Warning found on port http (80/tcp)

Your webserver supports the TRACE and/or TRACK methods. TRACE and


TRACK are HTTP methods which are used to debug web server connections. It has been shown that servers supporting this method are subject to cross-site-scripting attacks, dubbed XST for "Cross-Site-Tracing", when used in conjunction with various weaknesses in browsers. An attacker may use this flaw to trick your legitimate web users to give him their credentials. Solution: Disable these methods. If you are using Apache, add the following lines for each virtual host in your configuration file : RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] If you are using Microsoft IIS, use the URLScan tool to deny HTTP TRACE requests or to permit only the methods needed to meet site requirements and policy. If you are using Sun ONE Web Server releases 6.0 SP2 and later, add the following to the default object section in obj.conf: <Client method="TRACE"> AuthTrans fn="set-variable" remove-headers="transfer-encoding" set-headers="content-length: -1" error="501" </Client> If you are using Sun ONE Web Server releases 6.0 SP2 or below, compile the NSAPI plugin located at: http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F50603 See http://www.whitehatsec.com/press_releases/WH-PR-20030120.pdf http://archives.neohapsis.com/archives/vulnwatch/2003-q1/0035.html http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F50603 http://www.kb.cert.org/vuls/id/867593


Risk factor : Medium . Information found on port http (80/tcp) A web server is running on this port . Information found on port http (80/tcp) The remote web server type is : Apache/2.2.9 (Debian) Solution : You can set the directive 'ServerTokens Prod' to limit the information emanating from the server in its response headers. . Information found on port unknown (53432/tcp) RPC program #100024 version 1 'status' is running on this port . Information found on port sunrpc (111/udp) RPC program #100000 version 2 'portmapper' (portmap sunrpc rpcbind) is running on this port . Vulnerability found on port unknown (45028/udp) :

The remote statd service may be vulnerable to a format string attack. This means that an attacker may execute arbitrary code thanks to a bug in this daemon. Only older versions of statd under Linux are affected by this problem. *** Nessus reports this vulnerability using only information that was gathered. *** Use caution when testing without safe checks enabled.


Solution : upgrade to the latest version of rpc.statd Risk factor : High CVE : CVE-2000-0666, CAN-2000-0800 BID : 1480 . Warning found on port unknown (45028/udp)

The statd RPC service is running. This service has a long history of security holes, so you should really know what you are doing if you decide to let it run. *** No security hole regarding this program have been tested, so *** this might be a false positive. Solution : We suggest that you disable this service. Risk factor : High CVE : CVE-1999-0018, CVE-1999-0019, CVE-1999-0493 BID : 127, 450, 6831 . Information found on port unknown (45028/udp) RPC program #100024 version 1 'status' is running on this port . Warning found on port domain (53/udp)

The remote name server allows recursive queries to be performed by the host running nessusd. If this is your internal nameserver, then forget this warning. If you are probing a remote nameserver, then it allows anyone to use it to resolve third parties names (such as www.nessus.org). This allows hackers to do cache poisoning attacks against this nameserver. If the host allows these recursive queries via UDP, then the host can be used to 'bounce' Denial of Service attacks against another network or system.


See also : http://www.cert.org/advisories/CA-1997-22.html Solution : Restrict recursive queries to the hosts that should use this nameserver (such as those of the LAN connected to it). If you are using bind 8, you can do this by using the instruction 'allow-recursion' in the 'options' section of your named.conf If you are using bind 9, you can define a grouping of internal addresses using the 'acl' command Then, within the options block, you can explicitly state: 'allow-recursion { hosts_defined_in_acl }' For more info on Bind 9 administration (to include recursion), see: http://www.nominum.com/content/documents/bind9arm.pdf If you are using another name server, consult its documentation. Risk factor : High CVE : CVE-1999-0024 BID : 136, 678 . Information found on port domain (53/udp) BIND 'NAMED' is an open-source DNS server from ISC.org. Many proprietary DNS servers are based on BIND source code. The BIND based NAMED servers (or DNS servers) allow remote users to query for version and type information. The query of the CHAOS TXT record 'version.bind', will typically prompt the server to send the information back to the querying source. The remote bind version is : 9.5.1-P3 Solution : Using the 'version' directive in the 'options' section will block the 'version.bind' query, but it will not log such attempts. . Information found on port domain (53/udp)


A DNS server is running on this port. If you do not use it, disable it. Risk factor : Low . Information found on port general/udp For your information, here is the traceroute to 172.24.31.249 : 172.24.31.7 172.24.31.249 . Warning found on port general/icmp

The remote host answers to an ICMP timestamp request. This allows an attacker to know the date which is set on your machine. This may help him to defeat all your time based authentication protocols. Solution : filter out the ICMP timestamp requests (13), and the outgoing ICMP timestamp replies (14). Risk factor : Low CVE : CAN-1999-0524 . Vulnerability found on port general/tcp :

You are running a version of Nessus which is not configured to receive a full plugin feed. As a result, the security audit of the remote host produced incomplete results. To obtain a complete plugin feed, you need to register your Nessus scanner at http://www.nessus.org/register/ then run nessus-update-plugins to get the full list of Nessus plugins. . Information found on port general/tcp


Information about this scan : Nessus version : 2.2.10 Plugin feed version : 200704181215 Type of plugin feed : GPL only Scanner IP : 172.24.31.7 Port scanner(s) : nessus_tcp_scanner Port range : 1-15000 Thorough tests : no Experimental tests : no Paranoia level : 1 Report Verbosity : 1 Safe checks : yes Max hosts : 20 Max checks : 4 Scan duration : unknown (ping_host.nasl not launched?)

-----------------------------------------------------This file was generated by the Nessus Security Scanner


ANEXO “D” DIAGNÓSTICO FINAL CON NESSUS Nessus Scan Report ------------------

SUMMARY - Number of hosts which were alive during the test : 1 - Number of security holes found : 1 - Number of security warnings found : 0 - Number of security notes found : 7

TESTED HOSTS 172.24.31.249 (Security holes found)

DETAILS + 172.24.31.249 : . List of open ports : o ssh (22/tcp) (Security notes found) o http (80/tcp) (Security notes found) o general/udp (Security notes found) o general/tcp (Security hole found) . Information found on port ssh (22/tcp) An ssh server is running on this port . Information found on port ssh (22/tcp) Remote SSH version : SSH-2.0-OpenSSH_5.1p1 Debian-5 . Information found on port ssh (22/tcp)


The remote SSH daemon supports the following versions of the SSH protocol : . 1.99 . 2.0 SSHv2 host key fingerprint : 31:1c:9e:8c:87:bd:fa:7a:57:20:75:37:93:1c:ae:9e . Information found on port http (80/tcp) A web server is running on this port . Information found on port http (80/tcp) The remote web server type is : Apache/2.2.9 (Debian) Solution : You can set the directive 'ServerTokens Prod' to limit the information emanating from the server in its response headers. . Information found on port general/udp For your information, here is the traceroute to 172.24.31.249 : 172.24.31.7 172.24.31.249 . Vulnerability found on port general/tcp :

You are running a version of Nessus which is not configured to receive a full plugin feed. As a result, the security audit of the remote host produced incomplete results.


To obtain a complete plugin feed, you need to register your Nessus scanner at http://www.nessus.org/register/ then run nessus-update-plugins to get the full list of Nessus plugins. . Information found on port general/tcp Information about this scan : Nessus version : 2.2.10 Plugin feed version : 200704181215 Type of plugin feed : GPL only Scanner IP : 172.24.31.7 Port scanner(s) : nessus_tcp_scanner Port range : 1-15000 Thorough tests : no Experimental tests : no Paranoia level : 1 Report Verbosity : 1 Safe checks : yes Max hosts : 20 Max checks : 4 Scan duration : unknown (ping_host.nasl not launched?)

-----------------------------------------------------This file was generated by the Nessus Security Scanner


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.