¿Cómo "cerrar" los puertos abiertos?


22

Hace unos días comencé a preocuparme mucho por la seguridad de mis datos, nmapy terminé con:nmap 127.0.0.1

Sorpresa, sorpresa, tengo muchos servicios activos escucha localhost:

$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
53/tcp  open  domain
111/tcp open  rpcbind
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

El único que podría usar es ssh(aunque probablemente no esté bien configurado, mantendré este asunto en otra pregunta).

Por lo que sé ipp, CUPS utiliza el protocolo para compartir mis impresoras, no necesito compartirlas, solo acceder a las impresoras desde un servidor.

Esta es la salida del netstat -lntupusuario raíz, eliminando las direcciones localhost:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      497/sshd        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      2217/dropbox    
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:50022           0.0.0.0:*               LISTEN      1021/rpc.statd  
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      906/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      497/sshd        
tcp6       0      0 :::42712                :::*                    LISTEN      1021/rpc.statd  
tcp6       0      0 :::445                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::111                  :::*                    LISTEN      906/rpcbind     
udp        0      0 0.0.0.0:51566           0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7362/dhclient   
udp        0      0 0.0.0.0:111             0.0.0.0:*                           906/rpcbind     
udp        0      0 192.168.1.255:137       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:137        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.255:138       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:138        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:655             0.0.0.0:*                           906/rpcbind     
udp        0      0 0.0.0.0:17500           0.0.0.0:*                           2217/dropbox    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:34805           0.0.0.0:*                           1021/rpc.statd  
udp6       0      0 :::40192                :::*                                1021/rpc.statd  
udp6       0      0 :::111                  :::*                                906/rpcbind     
udp6       0      0 :::655                  :::*                                906/rpcbind     
udp6       0      0 :::5353                 :::*                                615/avahi-daemon: r
udp6       0      0 :::42629                :::*                                615/avahi-daemon: r

¿Cómo configuro esos servicios para que solo escuchen el mundo exterior cuando realmente los estoy usando?


¿Cómo quieres decir que los estás usando?
Reactormonk

iniciar los servicios yo mismo (con privilegios de usuario y un shell principal)
RSFalcon7

2
Correcto, también si está utilizando CUPS solo desde el sistema local, puede hacer que escuche solo el puerto 631 en el host local (127.0.0.1). Volvería a ejecutar el nmap usando la IP real que tiene la máquina y no solo 127.0.0.1.
slm

1
un mejor comando para ejecutar sería netstat -lntup-l = escuchar -n = número -t = tcp -u = udp -p = pid. Muestra qué procesos está ejecutando y qué puertos están exponiendo. Cualquier cosa abierta a 127.0.0.1 es inaccesible a internet.
frogstarr78

1
Si no necesita Samba, simplemente desinstálelo. Si lo necesita, puede restringirlo a la interfaz local (por ejemplo eth0,?) Agregando smb.conflas dos directivas bind interfaces only = yesy interfaces = eth0.
LSerni

Respuestas:


26

Determina tu exposición

Tomando su salida del netstatcomando, lo que parece una gran cantidad de servicios es en realidad una lista muy corta:

$ netstat -lntup | awk '{print $6 $7}'|sed 's/LISTEN//'| cut -d"/" -f2|sort|uniq|grep -v Foreign
avahi-daemon:r
dhclient
dropbox
nmbd
rpcbind
rpc.statd
smbd
sshd

Obteniendo un plano de la tierra

Mirando esta lista, hay varios servicios que dejaría en paz.

  • dhclient
    • El servidor DHCP daemon responsable de obtener su dirección IP, debe tener esta.
  • Dropbox
    • obviamente Dropbox, tiene que tener

Comience a reducirlo - deshabilite Samba

Probablemente puede desactivar de inmediato Samba, representa 2 de los servicios anteriores nmbdy smbd. Es cuestionable que realmente necesite que se ejecute en una computadora portátil, ya sea en localhost o su IP frente a su red.

Para verificar que se estén ejecutando, puede usar el siguiente comando status:

$ status nmbd
nmbd start/running, process 19457
$ status smbd
smbd start/running, process 19423

Desactivar los servicios puede ser confuso con todo el flujo que ha estado ocurriendo con los negocios nuevos, /etc/rc.d, por lo que puede ser difícil determinar qué servicio está bajo qué tecnología. Para Samba puedes usar el servicecomando:

$ sudo service nmbd stop
nmbd stop/waiting
$ sudo service smbd stop
smbd stop/waiting

Ahora están fuera:

$ status nmbd 
nmbd stop/waiting
$ status smbd 
smbd stop/waiting

Manteniéndolos fuera ... permanentemente

Para que se mantengan alejados, he estado usando esta herramienta sysv-rc-conf, para administrar servicios desde una consola, funciona mejor que la mayoría. Le permite verificar qué servicios desea ejecutar y en qué nivel de ejecución deben iniciarse / detenerse:

$ sudo apt-get install sysv-rc-conf

   ss de sysv-rc-conf

Deshabilitar el resto de lo que NO es necesario

Así que ahora que Samba está fuera, nos queda lo siguiente:

  • avahi-daemon
    • parte de zeroconf (plug-n-play), apáguelo
  • rpcbind
    • necesario para NFS - apáguelo
  • rpc.statd
    • necesario para NFS - apáguelo

Para los 3 restantes, puede hacer lo mismo que hicimos para que Samba los apague también.

¿TAZAS?

Para desactivar CUPS, que por cierto no necesita, puede seguir el mismo baile de desactivar el servicio y luego desactivarlo para que no se inicie. Para poder imprimir necesitará configurar cada impresora individualmente en su sistema. Puede hacerlo a través de la system-config-printerGUI.

¿Hacer estos servicios a pedido?

Este es realmente el corazón de su pregunta, pero en realidad no hay una solución definitiva para hacer que estos servicios sean "inteligentes" para que funcionen cuando se usan, en lugar de todo el tiempo.

# 1 - systemd vs. advenedizo

Parte de esto es la división actual entre systemd y upstart . Hay una buena visión general de las tecnologías de la competencia 2 aquí .

Ambas tecnologías están tratando de hacer cosas ligeramente diferentes, en mi opinión, dado su conjunto de características, systemd parece estar más orientado hacia los servidores, mientras que el arranque parece más orientado hacia el rollo de escritorio. Con el tiempo, esto funcionará solo, IMO, y ambos servicios serán estables y ricos en funciones.

Eventualmente, ambos servicios ofrecerán a pedido, comenzando y deteniéndose en todos los ámbitos de todos los servicios que administran. Características como las que StopWhenUnneeded=yesya existen, systemdpor ejemplo, por lo que es solo cuestión de tiempo hasta que estas capacidades se desarrollen.

# 2 - soporte de servicio

Algunos servicios no permiten detener / iniciar muy bien, si es que lo hacen. Los servicios que sshdparecen tener poco sentido para ejecutarse como a pedido, especialmente si se usan mucho. Además, algunos servicios como Apache proporcionan mecanismos dentro de sí mismos para hacer que más o menos sus propios oyentes se administren. Por lo tanto, no está claro cómo los servicios a pedido brindan systemdo upstartse integrarán con este tipo de servicios.

¿Es esto realmente necesario?

Escuchará de ambos lados que esto es excesivo o que debe adoptar un enfoque minimalista solo instalando lo que absolutamente necesita, pero es realmente una elección personal. Comprender que estos servicios están ahí y que lo que hacen es realmente lo importante. Al final del día, una computadora es una herramienta, y al usar un sistema Unix ya estás diciendo que estás dispuesto a mirar detrás de la cortina y entender qué hace que tu computadora funcione.

Diría que este tipo de preguntas es exactamente el estado de ánimo por el que uno debe luchar cuando se trata de computadoras y Unix en general.

Referencias


2
@ RSFalcon7: ¡de nada! Gracias por la pregunta!
slm

12

127.0.0.1 no es el "mundo exterior", está mirando dentro de la casa.

Verifique la configuración de su firewall (iptables en Linux hoy), la mayoría de ellos no deberían ser accesibles desde afuera.

No ejecute servicios que no necesita. Desinstale todo el software no requerido.

Cambia las contraseñas para ser más fuerte. Comprueba tu uso del sistema, no persigas ningún sitio web interesante al azar. Verifique la configuración antifraude, antiscripts, etc. del navegador. Revise su uso de SSH y su / sudo.

Pero, sobre todo, la paranoia excesiva es contraproducente. No te dejes atrapar por el brillo de la tecnología .


3
Estoy de acuerdo con "No ejecute servicios que no necesita". Pero "Desinstalar todo el software no requerido", ¿en serio? ¿Contra qué ayudará eso?
Hauke ​​Laging

66
@HaukeLaging, como dice el refrán, "los ratones anidan en montones de ropa sin usar". Cualquier pieza de software puede tener una vulnerabilidad que podría ser explotada. Si el programa no está allí, ese riesgo no existe. Si no se usa, el costo es insignificante. Además, un sistema más simple es más fácil de supervisar y mantener ordenado.
vonbrand

Gracias por recordar que 127.0.0.1 no es el mundo externo . Me suscribo totalmente a hacer servicios no administrados que no necesito , pero desinstalación es un poco de una exageración, si están aquí eran útiles en algún momento
RSFalcon7

2
@ RSFalcon7, si fueron útiles (o son útiles para otra persona, están en la distribución después de todo) no tiene consecuencia. Si no lo usa, tírelo. Menos uso de disco, menos actualización, menos riesgo en general. Si lo necesita más tarde, vuelva a instalarlo.
vonbrand

3

Si bien puede 'cerrar' los servicios individuales, tal vez sea más fácil configurar un firewall. Casi todas las distribuciones comunes (Ubuntu, Debian, Centos, etc.) tienen soporte para iptables incorporado.

Un conjunto de reglas simple para comenzar: (puede escribirlos en el símbolo del sistema; para que sean permanentes, agréguelos a sus scripts de inicio o díganos qué distribución está usando. En Centos por ejemplo: system-config -firewall es una buena interfaz de usuario para configurar las reglas de iptables)

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Básicamente - permitir ssh entrante; deja todo lo demás.

Su cadena de ENTRADA ahora se ve así:

  • Si un paquete está llegando a mi computadora para 'ssh' - permítelo
  • Si un paquete no coincide con ninguna de las reglas anteriores, simplemente deséchelo.

Luego, en una fecha posterior, digamos que desea permitir 'samba' (uso compartido de archivos de Windows): podría ejecutar

iptables -I INPUT-p tcp --dport 465 -j ACCEPT

El -Iantecede y gobierna a la lista; -Aañade una regla Entonces su cadena ahora se ve así:

  • Si un paquete llega a mi computadora para 'samba', permítelo
  • Si un paquete está llegando a mi computadora para 'ssh' - permítelo
  • Si un paquete no coincide con ninguna de las reglas anteriores, simplemente deséchelo.

La INPUTcadena se refiere a los paquetes destinados a su sistema. Otras cadenas son OUTPUTpara paquetes de su computadora, para ir a Internet y FORWARDpara paquetes que se enrutan a través de su computadora (es decir, paquetes que "transitan" a su computadora, como el área de tránsito de un aeropuerto; cosas que no INPUTse deben a que no ingresan a su computadora )

Como nota de despedida: nmap'ing 127.0.0.1 no es muy útil; Se puede acceder a muchos servicios solo desde 127.0.0.1 y desde ninguna otra dirección. Si no tiene otra máquina desde la que pueda ejecutar nmap, ¡intente usar Gibson Research 'Shields UP! ( https://www.grc.com/shieldsup ), que es un nmap-lite gratuito en línea. O agregue un comentario con su IP / correo electrónico y lo mapearé :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.