Tengo alguna pregunta al cerrar el puerto, creo que tengo algunas cosas extrañas.
Cuando uso ejecutar
nmap --top-ports 10 192.168.1.1
muestra que el puerto 23 / TCP está abierto.
Pero cuando ejecuto
nmap --top-ports 10 localhost
muestra que el puerto 23 / tcp está cerrado.
¿Cuál de ellos es cierto? Quiero cerrar este puerto en todo mi sistema, ¿cómo puedo hacerlo?
localhost
está accediendo a lalo
interfaz (loopback). La dirección IP es accesando su verdadera interfaz, probablemente,eth0
owlan0
, o algo por el estilo.Respuestas:
Nmap es un excelente escáner de puertos, pero a veces quieres algo más autorizado. Puede preguntarle al núcleo qué procesos tienen qué puertos se abren utilizando la
netstat
utilidad:Las opciones que he dado son:
-t
Solo TCP-l
Solo puertos de escucha-n
No busques nombres de servicio y host, solo muestra números-p
Mostrar información del proceso (requiere privilegio de root)En este caso, podemos ver que
sshd
está escuchando en cualquier0.0.0.0
puerto 22 de interfaz ( ) ycupsd
está escuchando en el127.0.0.1
puerto 631 de loopback ( ). Su salida puede mostrar quetelnetd
tiene una dirección local de192.168.1.1:23
, lo que significa que no responderá a las conexiones en el adaptador de loopback (por ejemplo, no puedestelnet 127.0.0.1
).Existen otras herramientas que mostrarán información similar (por ejemplo,
lsof
o/proc
), pero netstat es la más disponible. Incluso funciona en Windows (netstat -anb
). BSD netstat es un poco diferente: tendrá que usar sockstat (1) para obtener la información del proceso.Una vez que tenga la ID del proceso y el nombre del programa, puede buscar el proceso y eliminarlo si desea cerrar el puerto. Para un control más detallado, puede usar un firewall (iptables en Linux) para limitar el acceso a solo ciertas direcciones. Es posible que deba deshabilitar el inicio de un servicio. Si el PID es "-" en Linux, es probable que sea un proceso de kernel (esto es común con NFS, por ejemplo), así que buena suerte para descubrir qué es.
Nota: Dije "autorizado" porque las condiciones de la red y los cortafuegos no te obstaculizan. Si confías en tu computadora, eso es genial. Sin embargo, si sospecha que ha sido pirateado, es posible que no pueda confiar en las herramientas de su computadora. Reemplazar las utilidades estándar (y a veces incluso las llamadas al sistema) por otras que ocultan ciertos procesos o puertos (también conocidos como rootkits) es una práctica estándar entre los atacantes. Su mejor apuesta en este momento es hacer una copia forense de su disco y restaurar desde la copia de seguridad; luego use la copia para determinar la forma en que entraron y ciérrela.
fuente
Un sistema Linux tiene una interfaz llamada loopback, que es para comunicación interna. Su nombre de host es
localhost
y su dirección IP es127.0.0.1
.Cuando se ejecuta
nmap
enlocalhost
, en realidad se ejecuta el escaneo de puertos en el Virtual interfaz de bucle invertido.192.168.1.1
es la dirección IP de su interfaz física (lo más probableeth0
).Entonces, se ha ejecutado
nmap
en dos interfaces de red diferentes, por eso hay una diferencia en los puertos abiertos. Ambos son verdad.Si tiene abierto el puerto TCP 23, es probable que tenga un
telnet
servidor en funcionamiento (lo que no es bueno debido a su falta de cifrado) o que tenga algún tipo de caballo de Troya en su máquina.fuente
iptables
regla como sugiere una respuesta cercana, pero mantendrá el servicio sin usar, lo que consume recursos. Entonces, si tienestelnetd
corriendo, simplemente apágalo.Para "cerrar" el puerto puede usar
iptables
fuente
DROP
hace lo que dice, ve el paquete y luego lo ignora. Normalmente (sin iptables habilitado), el núcleo enviaría un paquete ICMP inalcanzable (que puede simularse con elREJECT
destino en lugar deDROP
).REJECT
objetivo escribiendo-j REJECT --reject-with tcp-reset
.Si lo hace
nmap localhost
, le informa sobre una situación diferente: algunos programas en Linux funcionan como servidor, aunque solo se usan localmente. Esto se debe a que otros programas los usan como un servidor al que se conectan. Entonces ambas respuestas son verdaderas, ya que preguntas algo diferente.El puerto 23 se usa para telnet. Normalmente ya no se usa. Intente hacer
nmap -sV 192.168.1.1
para averiguar qué programa abre el puerto.(192 ... es una IP de red local, por lo que el resultado
nmap <your outside world IP>
también dará un resultado diferente, debido a la posible configuración del firewall, etc.)fuente
Si tiene un servicio ejecutándose y escuchando en el puerto 23, podría decirse que es más limpio detener el proceso que escucha el puerto 23 (probablemente
telnet
) que mantenerlo ejecutándose y cerrar o bloquear el puerto 23 usandoiptables
.Cuando no hay un proceso escuchando en un puerto, incluso en ausencia de un bloqueo de firewall, cualquier intento de conectarse a él debería resultar en una "conexión rechazada" inmediata (
ECONNREFUSED
aconnect(2)
)Una forma de encontrar el proceso (y su pid) que escucha en el puerto 23, si existe dicho proceso, es:
En las
-i
listas anteriores , abra los puertos de Internet (tanto UDP como TCP), y -P inhibe la traducción de los puertos a los nombres de servicio (a través de/etc/services
)Después de encontrar el proceso en ejecución escuchando en el puerto 23, puede averiguar cómo comenzó mirando el árbol de procesos (con say,
pstree
). Si su padre esinit
(muy probable), puede buscar recursivamente el nombre del proceso en/etc
. p.ej:Esto debería llevarlo a la mejor manera de deshabilitar su ejecución en primer lugar.
fuente
sudo lsof -Pi :23
.23
) coincida. Si no incluye un espacio después:23
, coincidirá:234
,:2345
etc.lsof -Pi :23
) busca una coincidencia exacta.