S-en-casa: (0.05) (potato) SEGURIDAD: Porque asegurar una instalación Debian en casa Cambios: 0.01 1.11.00 primera versión 0.02 2.11.00 +retoques 0.03 3.11.00 +resumen de comandos para cero servicios 0.04 4.11.00 +sugerencias de Debianeros, +posible solución de lpr 0.05 6.11.00 +sustituto lpr (falta depurar) *POR HACER* Probar y acabar script sustiruto de lpr PORQUE: Si no instalas ningún servicio expresamente al acabar de instalar Potato tienes 16 servicios activos (más o menos) Si conoces poco de Linux y "lo instalas todo" tendrás muchos más... Los servicios de Debian son muy seguros, y las configuraciones por defecto bastante seguras, pero aún así existe un riesgo... RIESGO DE SEGURIDAD DE SERVICIOS ABIERTOS: Riesgo es la posibilidad de un daño Antes o después alguien puede descubrir un fallo de seguridad en alguno de los servicios que ni sabes que tienes abiertos Antes o después alguien creará un exploit de ese fallo Antes o después alguien escaneará la red buscando sistemas que comprometer Cualquiera que esté conectado a Internet de forma permanente y registre los intentos de acceso (yo lo hago) sabe que hay docenas de escaneos buscando sistemas con fallos de seguridad cada día Si tienes una conexión ADSL el riesgo es _MUCHO_ mayor, la tendencia de los últimos ataques de denegación de servicio distribuidos es troyanizar usuarios con ADSL para emplearlos como "amplificador" y creo recordar que precisamente los Linux eran de los más afectados UNA RELACIÓN DE FALLOS DE SEGURIDAD: Debian en mi opinión es una de las distribuciones más seguras, aún así estos son fallos de seguridad en Debian, pero solo de los servicios activos por defecto, que son los que afectarían a usuarios caseros: (si me equivoco me lo decís) 15.7.2000 rpc.statd -remote root exploit- (Detectado *antes* de liberar Potato estable) 9.1.2000 lpr -root exploit- (Este requería de una interacción con sendmail) 14.8.1999 cfingerd -root exploit- (No afectaba al paquete deb, solo a los fuentes) *POR CONFIRMAR que se instala por defecto* Si el fallo de rpc.statd se hubiera descubierto dos meses más tarde (con Potato liberado) hubiera sido un desastre... De momento hemos estado seguros... POLÍTICA CERO SERVICIOS: Mi opinión es que para usuarios caseros la mejor política de seguridad es cero servicios, (cero servicios = cero riesgo por culpa de los servicios) Si prevemos el _PEOR_ caso posible, si llega a suceder, estaremos preparados ;-) POLÍTICA DE DEBIAN: Potato no te avisa del riesgo (creo recordar), ni te permite desactivar todos los servicios durante la instalación De momento tu decides si aceptas el riesgo o tomas algunas medidas preventivas, que es lo que yo recomiendo Creo que las distribuciones Linux deberían dar la opción de desactivar TODOS los servicios durante la instalación, no debiendo ser difícil volver a activarlos COMO ASEGURAR (CERO SERVICIOS): Mira mis chuletas (miniGuias), aqui hago un resumen: S-puertos Mirar los servicios que tienes activos lsof -ni | grep -v "\->" # Muestra puertos escuchando S-inetd.conf Cerrar inetd update-rc.d -f inetd remove # Desactivo inetd S-rpc Cerrar el portmap dpkg --remove nfs-common # Desinstalar nfs-common dpkg --remove nfs-kernel-server # Desinstalar nfs-kernel-server update-rc.d -f portmap remove # Desactivo portmap S-X-potato Cerrar el puerto 6000 de las X Editar gdm/kdm/xdm para arrancar las X con la opción "-nolisten tcp" ejemplo (gdm): ---8<--- 0=/usr/bin/X11/X vt7 -bpp 16 -nolisten tcp --->8--- telinit 1 # Cambiamos a modo monousuario telinit 2 # Volvemos al runlevel normal activando cambios ¿Que hacemos con el demonio de impresión lpd? En lpr corre como root y no se puede restringir a un interface local En LPRng no corre como root pero tampoco se puede restringir (lo he reportado como un bug) cupsys se puede restringir en interface pero esta verde... :-( ALTERNATIVA A LPR Es factible usar el filtro de impresión de magicfilter sin necesidad de tener lpr instalado (Anexo-1 script sustituto de lpr) : 1) Unir usuario que debe imprimir a grupo lp (sino permiso denegado) adduser manel lp 2) Salir de las X y volver a entrar para hacer efectivo el cambio de grupo, asegurarse con: id # muestra uid, gid y grupos de usuario 3) Imprimir con: cat archivo | /etc/magicfilter/dj690c-low-filter > /dev/lp0 4) Si se intenta imprimir mientras otro trabajo está en impresión se obtiene inmediatamente "Dispositivo o recurso ocupado" y se devuelve "$? = 1" 5) Cancelar o matar el script detiene la impresión inmediatamente ALTERNATIVAS: Si decides tener servicios activos, ya no tienes un PC casero, tienes un servidor y tienes que profundizar más en la seguridad... Mira mis chuletas (miniGuias): S-tcp-wrapper Restricción de acceso por IP _tcp-wrapper_ S-interface Restricción de acceso por interface (en desarrollo) Cortafuegos MAS INFO: El articulo de Jay "Why do I have to tighten security on my system? (why can't I just patch)" http://www.securityportal.com/topnews/tighten20000720.html Puedes encontrar más artículos de seguridad de Jay en http://www.bastille-linux.org/jay/ -Bastille es un endurecedor de seguridad para RedHat y Mandrake- ¿Hay algo como el endurecedor de seguridad bastille para Debian? Security-HOWTO IPChains-HOWTO Anexo-1: Scripts sustitutos de lpr (*EN DESARROLLO* falta mejorar/depurar) ---8<--- #!/bin/sh # lpr seguro - Manel Marin (c) 2000 licencia GNU GPL # Solo es seguro si desinstalas los spoolers lpr / LPRng # Necesitas los filtros de magicfilter exec 2>&1 > /dev/null # No enviar salidas ni errores slpr $1 & # Lanzar en segundo plano slpr --->8--- ---8<--- #!/bin/sh # slpr (lpr para terminal) - Manel Marin (c) 2000 licencia GNU GPL # Utilidad de impresión sin spooler, imprime directamente en /dev/lp0 # Pon aqui abajo el filtro de tu impresora (ruta completa) y tu impresora FILTRO=/etc/magicfilter/dj690c-low-filter IMPRESORA=/dev/lp0 EMPEZANDO="Imprimiendo $1" OCUPADA="Impresora ocupada" # Dispositivo o recurso ocupado FINALIZADO="--- lpr $1 finalizado ---" trap ":" SIGHUP SIGTERM # Evito que el fin del script padre lpr acabe con este echo $EMPEZANDO # Bucle para reintentar cada segundo si la impresora ya está en uso while true do cat $1 | $FILTRO 2>/dev/null > $IMPRESORA # No mostrar errores case $? in 0) # No hubo error echo echo $FINALIZADO exit ;; 1) # Ocupada echo -n $OCUPADA # Tras "ocupada"... OCUPADA="." # pongo un "." cada segundo sleep 1 # Esperar 1 segundo ;; *) # Otros casos (CTRL+C, etc...) echo exit esac done --->8---