¿Cómo "cerrar" los puertos abiertos?

¿Cómo "cerrar" los puertos abiertos?

Hace unos días comencé a preocuparme mucho por la seguridad de mis datos, termino nmapcon: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 yopodríael uso es ssh(aunque probablemente no esté bien configurado, dejaré este asunto para otra pregunta).

Hasta donde yo sé, ippCUPS 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 root, eliminando las direcciones de host local:

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?

Respuesta1

Determina tu exposición

Tomando el resultado del netstatcomando, lo que parecen ser muchos 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

Obtener una visión del terreno

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

  • cliente dh
    • El demonio del servidor DHCP responsable de obtener su dirección IP debe tener este.
  • buzón
    • obviamente Dropbox, tiene que tener

Comience a reducirlo: desactive Samba

Probablemente puedas desactivar Samba desde el principio, representa 2 de los servicios anteriores nmbdy smbd. Es cuestionable que realmente necesite ejecutarlo en una computadora portátil, ya sea en el host local o en su IP frente a su red.

Para comprobar que se están ejecutando, puede utilizar el siguiente comando status:

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

Desactivar servicios puede resultar confuso con todo el cambio que ha estado ocurriendo con el nuevo negocio /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 se van:

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

Manteniéndolos apagados... permanentemente

Para que se mantengan apagados, he estado usando esta herramienta sysv-rc-confpara 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

Ahora que se acabó Samba, nos queda lo siguiente:

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

Para los 3 restantes, puedes hacer lo mismo que hicimos con Samba para desactivarlos también.

¿TAZAS?

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

¿Hacer estos servicios bajo demanda?

Este es realmente el meollo de su pregunta, pero en realidad no existe una solución mágica para hacer que estos servicios sean "inteligentes" para que se ejecuten cuando se utilizan, en lugar de todo el tiempo.

#1 - systemd versus advenedizo

Parte de esto es la división actual entresistemadyadvenedizo. Hay una buena descripción general de las 2 tecnologías en competencia.aquí.

Ambas tecnologías están tratando de hacer cosas ligeramente diferentes, en mi opinión, dados sus conjuntos de características, systemd parece más orientado a servidores, mientras que el advenedizo parece más orientado al escritorio. Con el tiempo, esto se solucionará solo, en mi opinión, y ambos servicios serán estables y ricos en funciones.

Con el tiempo, ambos servicios ofrecerán inicio y parada bajo demanda en todos los ámbitos para todos los servicios que gestionan. Funciones como las que StopWhenUnneeded=yesya existen, systemdpor ejemplo, por lo que es sólo cuestión de tiempo hasta que estas capacidades se desarrollen.

#2 - soporte de servicio

Algunos servicios no admiten muy bien que se detengan o inicien, si es que lo hacen. Servicios como este sshdparecen tener poco sentido para ejecutarse bajo demanda, 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 gestionen por sí mismos. Por lo tanto, no está claro cómo los servicios bajo demanda proporcionados por estos tipos de servicios se integrarán systemdo upstartse integrarán con ellos.

¿Es esto realmente necesario?

Escuchará de ambas partes que esto es excesivo o que debe adoptar un enfoque minimalista y solo instalar lo que sea absolutamente necesario, pero en realidad es una elección personal. Comprender que estos servicios existen y 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 comprender qué es lo que hace que tu computadora funcione.

Yo diría que este tipo de preguntas es exactamente el estado de ánimo que uno debería tener cuando se trata de computadoras y Unix en general.

Referencias

Respuesta2

127.0.0.1 no es el "mundo exterior", sino mirar el interior 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 el exterior.

No ejecute servicios que no necesita. Desinstale todo el software que no sea necesario.

Cambiarcontraseñasser más fuerte. Verifique su uso del sistema, no busque ningún sitio web interesante al azar. Comprueba la configuración antiphising, anti-scripts, etc. del navegador. Revise su uso de SSH y su/sudo.

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

Respuesta3

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

Un conjunto de reglas simple para comenzar: (puede simplemente escribirlas en el símbolo del sistema; para hacerlas permanentes, agréguelas 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 reglas de iptables)

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

Básicamente, permitir la entrada ssh; deja todo lo demás.

Su cadena INPUT ahora se ve así:

  • Si llega un paquete a mi computadora para 'ssh', permítalo
  • Si un paquete no cumple con ninguna de las reglas anteriores, simplemente deséchelo.

Luego, en una fecha posterior, digamos que desea permitir 'samba' (compartir archivos de Windows): puede ejecutar

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

Los -Iantepones y la regla de la lista; -Aañade una regla. Entonces tu cadena ahora se ve así:

  • Si llega un paquete a mi computadora para 'samba', permítalo
  • Si llega un paquete a mi computadora para 'ssh', permítalo
  • Si un paquete no cumple con ninguna de las reglas anteriores, simplemente deséchelo.

La INPUTcadena se refiere a paquetes destinados a su sistema. Otras cadenas son OUTPUTpara paquetes desde su computadora, que van a Internet y FORWARDpara paquetes que se enrutan a través de su computadora (es decir, paquetes que 'tránsitan' por su computadora, como el área de tránsito de un aeropuerto, cosas que no lo son INPUTporque no ingresan a su computadora). ).

Como nota de despedida: nmap'ing 127.0.0.1 no es muy útil; A muchos servicios solo se puede acceder 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 Shields UP de Gibson Research. (https://www.grc.com/shieldsup) - que es un nmap-lite en línea gratuito. O agrega un comentario con tu IP/correo electrónico y te mapearé :)

información relacionada