S-puertos: (0.11) (slink)(potato) SEGURIDAD: Ver puertos abiertos en nuestro sistema (netstat, nmap) y determinar los procesos que los abren (lsof, fuser) y el paquete Cambios: 0.09 22/10/00 +netstat -tuna | grep ..., +Objetivos 0.10 29/10/00 +determinar paquete de proceso 0.11 1/11/00 +separo métodos, +paquetes a instalar OBJETIVOS: - Evitar acceso desde Internet a nuestra máquina - Hay que identificar los procesos que abren puertos en este PC En un PC en casa el objetivo (más sencillo) es que no haya ningún servicio activo, esto no afecta a que podamos acceder a cualquier servicio en Internet En un servidor de una pequeña intranet conectada a Internet el objetivo principal (más complejo) es que no haya ningún servicio atendiendo peticiones de Internet, sino solamente de nuestra red local MÉTODO 1: Si lsof funciona lsof depende estrechamente del kernel, si has cambiado el kernel puede que no funcione... (slink) lsof precisa "System.map" instalar 'kernel-image' o recompilar kernel 1) Instalar paquete "lsof" (potato) (slink: usar Debian 2.0 Hamm CD 1) 2) Identificar puertos abiertos y procesos que los abren: Hacer como root: lsof -ni muestra todos los procesos que tienen puertos abiertos, también muestra los puertos con conexiones ESTABLISHED (potato: también muestra el número del puerto) (slink: no muestra el numero del puerto abierto) # -n = no resuelve IPs a nombres, es más rápido y no se "atasca" # -i = muestra procesos con puertos abiertos lsof -ni | grep -v "\->" | less muestra solo los puertos que escuchan (y no conexiones establecidas) (Los que _NO_ tienen IP:puerto->IP:puerto...) # -v = grep muestra las lineas que _NO_ contienen "->" # less = es un paginador, si la info excede la pantalla puedes subir y # bajar con las fechas de cursor y RePág/AvPág (como con "man") # se sale con "Q" o con "CTRL+C" lsof -ni | grep -v "\->" | lpr #como antes pero lo imprime lsof -ni | grep "\*:" | less muestra solo puertos escuchando en todos los interfaces (Internet) (Los que tienen *: en la columna NAME) lsof -i -r2 #repite cada dos segundos lsof -i tcp:1024 #muestra los procesos que escuchan el puerto 1024 en TCP lsof -i :1-1023 #muestra procesos UDP y TCP de puertos privilegiados MÉTODO 2: Si lsof _NO_ funciona 1) Instalar el paquete "psmisc" (potato) para tener el comando "fuser" 2) Identificar puertos abiertos: netstat -tuna # muestra puertos en uso, pero no el proceso # también muestra los puertos con conexiones ESTABLISHED # (fíjate que tienen Local Address y Foreign Address != 0.0.0.0 ) # -t = tcp # -u = udp # -w = raw (ping abre un socket raw) # -n = numérico, sin resolver direcciones (a veces se "encasquilla") # -a = mostrar "conectores" (sockets) # | less = permite subir y bajar con flechas y RePág/AvPág, es mejor # que "| more" netstat -tuna | grep ':\*' | less muestra todos los puertos escuchando (Foreign Address = 0.0.0.0:* ) netstat -tuna | grep ':\*' | lpr #como antes pero lo imprime netstat -tuna | grep '0\.0\.0\.0:.*0\.0\.0\.0:' | less muestra solo puertos escuchando en todos los interfaces (Internet) (Local Address = 0.0.0.0: y Foreign Address = 0.0.0.0: ) netstat -tunac # es como -tuna pero lo repite cada segundo # -c = continuamente (cada segundo) netstat -a y netstat -an (y Shift+RePág) también muestran sockets Unix 3) Identificar procesos que abren los puertos: Hacer como root: fuser -v 80/tcp # Devuelve procesos que usan el puerto TCP 80 NOTA: fuser no parece depender de la versión del kernel (al menos en slink) MÉTODO 3: Identificar puertos abiertos desde otro PC: (potato) nmap -P0 -sT -sU -v -p 1-65535 192.168.0.1 (slink) nmap -turvil -p 1-65535 192.168.0.1 COMÚN A TODOS LOS MÉTODOS: Determinar el paquete propietario del proceso que abre puertos dpkg --search comando # Muestra paquete que contiene el comando dpkg --status paquete # Muestra descripción y dependencias del paquete ATENCIÓN: En varios casos para eliminar el proceso no podemos desinstalar el paquete sin más ya que tiene comandos que necesitamos (paquetes netbase, XF86*) y hay que hacerlo de otras formas... dpkg --remove paquete # Desinstala el paquete, también lo puedes # desinstalar desde el "dselect" Eliminar procesos que abren puertos Esto es la solución más sencilla... mira también mis chuletas "S-inetd.conf", "S-rpc", "S-X-potato" Restringir servicios para que no escuchen en Internet Esto es la vía "dura", en principio solo para administradores... Vas a tener que sustituir inetd por xinetd y configurar servicio a servicio... mira mis chuletas "S-interface", "I-xinetd" Algunos servicios no pueden restringirse deberás valorar si los usas en otra máquina de la red o emplear un cortafuegos ATENCIÓN: (potato) Algunos servicios del portmap (nlockmgr) quedan por encima del puerto 1023, en udp (p.e.: 1025) y en tcp (p.e.: 1024) y no aparecen con lsof ni con fuser Puedes desactivarlos desactivando el portmapper y servicios asociados (mirar mi chuleta S-rpc) POR HACER: Los kernel 2.2 traen dos socket raw abiertos 0.0.0.0:1 y 0.0.0.0:6 ¿para que?, (nmap no los detecta...) MOTIVO: Todo puerto abierto en nuestra máquina es susceptible de ser atacado por un intruso y por tanto un punto débil.