SSH se ejecuta por defecto en el puerto 22. Esto no es una coincidencia. Aquí está la historia de cómo consiguió este puerto.
Cuando yo (
Tatu Ilonen ) publiqué esta historia por primera vez en abril de 2017, se volvió viral: unos 120,000 lectores la leyeron en tres días.
Historial de recepción del puerto 22 para SSH
Escribí la primera versión de SSH (Secure Shell) en la primavera de 1995.
Telnet y
FTP fueron ampliamente utilizados en ese momento.
Pero aún desarrollé SSH para reemplazar tanto
telnet
(puerto 23) como
ftp
(puerto 21). El puerto 22 era gratuito y convenientemente ubicado entre los puertos para telnet y ftp. Pensé que ese número de puerto podría ser uno de esos pequeños detalles que le darán cierto aura de confianza SSH. ¿Pero cómo conseguirlo? Nunca asigné puertos, pero conocía a quienes hacen esto.
La asignación de puertos era bastante sencilla en ese momento. Internet era más pequeño y estábamos en las primeras etapas del auge de Internet. Los números de puerto fueron asignados por IANA (Autoridad de Números Asignados de Internet). En ese momento, esto significaba los respetados pioneros de Internet
John Postel y
Joyce C. Reynolds . Entre otras cosas, John fue el editor de protocolos menores como IP (RFC 791), ICMP (RFC 792) y TCP (RFC 793). Algunos de ustedes pueden haber oído hablar de ellos.
¡Francamente me asustó John como autor de todas las principales RFC para Internet!
De una forma u otra, pero antes del anuncio
ssh-1.0
en julio de 1995, envié el siguiente correo electrónico a IANA:
De ylo lun 10 de julio 11:45:48 +0300 1995
De: Tatu Ylonen <ylo@cs.hut.fi>
Para: Autoridad de Números Asignados de Internet <iana@isi.edu>
Asunto: solicitud de número de puerto
Organización: Universidad Tecnológica de Helsinki, Finlandia.
Estimado señor
Escribí un programa para iniciar sesión de forma segura de una máquina a otra a través de una red insegura. Esta es una mejora de seguridad significativa sobre los protocolos existentes de telnet y rlogin y sus implementaciones. En particular, evita la suplantación de IP, DNS y enrutamiento. Mi plan es distribuir libremente el programa en Internet y asegurar su uso más amplio posible.
Me gustaría obtener un número de puerto privilegiado registrado para el programa. Es deseable en el rango de 1-255 para que pueda usarse en el campo WKS en los servidores de nombres.
A continuación aplico el proyecto RFC para el protocolo. El software se ha utilizado localmente durante varios meses y está listo para su publicación, con la excepción del número de puerto. Si puede asignar rápidamente un número de puerto, me gustaría diseñar el programa esta semana. Actualmente estoy usando el puerto 22 en las pruebas beta. Sería genial usar este número (actualmente aparece como "no asignado" en las listas).
El nombre del servicio para el software es "ssh" (Secure Shell).
Saludos
Tatu Ilonen <ylo@cs.hut.fi>
... entonces la especificación del protocolo ssh-1.0 sigue
Al día siguiente, una carta de Joyce estaba en la bandeja de entrada:
Fecha: lunes 10 de julio de 1995 15:35:33 -0700
De: jkrey@ISI.EDU
Para: ylo@cs.hut.fi
Asunto: Re: solicitud de número de puerto
Cc: iana@ISI.EDU
Tatuaje
Hemos asignado el puerto 22 para SSH, que lo especifica como la persona de contacto.
Joyce
Lo hicimos! ¡Ahora SSH tiene el puerto 22!
El 12 de julio de 1995 a las 2:32 a.m., anuncié la versión beta final para mis probadores beta en la Universidad de Helsinki. A las 17:23 envió paquetes ssh-1.0.0 a los probadores, y a las 17:51 envió un anuncio sobre SSH (Secure Shell) a la
cypherpunks@toad.com
correo
cypherpunks@toad.com
. También dupliqué el anuncio en varios grupos de noticias, listas de correo y directamente a personas que discutieron temas relacionados en Internet.
Cambiar el puerto SSH en el servidor
De manera predeterminada, el servidor SSH todavía se está ejecutando en el puerto 22. Sin embargo, ocurre de manera diferente. Una razón es la prueba. Otra es ejecutar múltiples configuraciones en el mismo host. Es raro que un servidor se ejecute sin privilegios de root, en cuyo caso debe ubicarse en un puerto sin privilegios (es decir, con un número de 1024 o más).
El número de puerto se puede configurar cambiando la directiva del
Port 22
en
/ etc / ssh / sshd_config . También se especifica mediante el parámetro
-p <port>
en
sshd . El cliente SSH y los programas
sftp también admiten el parámetro
-p <port>
.
Especificar un puerto SSH en la línea de comando
El parámetro
-p <port>
se puede usar para especificar el número de puerto cuando se conecta utilizando el comando
ssh
en Linux.
SFTP y
scp
usan el parámetro
-P <port>
(nota: P mayúscula). Una instrucción de la línea de comando anula cualquier valor en los archivos de configuración.
Configuración de acceso SSH a través de firewalls
SSH es uno de los pocos protocolos que a menudo se permite que funcione a través de firewalls para acceso saliente, especialmente en compañías pequeñas y técnicas. SSH entrante generalmente se permite a uno o más servidores.
SSH saliente
Configurar ssh salientes en un firewall es muy simple. Si hay restricciones en el tráfico saliente en general, solo cree una regla que permita conexiones salientes en el puerto TCP 22. Eso es todo. Si desea limitar las direcciones de destino, puede crear una regla apropiada permitiendo el acceso solo a los servidores de su organización en la nube o a un
servidor de salto que proteja el acceso a la nube.
La tunelización inversa es un riesgo
Sin embargo, la SSH saliente ilimitada puede ser arriesgada. El protocolo SSH admite
túneles . La idea principal es que el servidor SSH en el servidor externo escucha las conexiones desde todas partes, las reenvía a la organización y establece una conexión con algún tipo de servidor interno.
En algunos casos, esto es conveniente. Los desarrolladores y administradores de sistemas a menudo usan túneles para obtener acceso remoto desde casa o desde una computadora portátil mientras viajan.
Pero por lo general, la tunelización viola la política de seguridad y toma el control de los administradores del firewall y del equipo de IS. Por ejemplo, puede violar
las normas
PCI ,
HIPAA o
NIST SP 800-53 . Puede ser utilizado por piratas informáticos y servicios especiales para dejar puertas traseras en la red local.
El programa
CryptoAuditor controla la tunelización en el firewall o en el punto de entrada a un grupo de servidores en la nube. Funciona junto con
Universal SSH Key Manager para obtener acceso a
las claves de host , usándolas para descifrar sesiones SSH en el firewall y bloquear el reenvío no autorizado.
SSH entrante
Para el acceso entrante, hay varias opciones:
- Configure un firewall para reenviar todas las conexiones al puerto 22 a una dirección IP específica en la red interna o DMZ . Ejecute un CryptoAuditor o un servidor de salto en esta dirección IP para controlar y verificar un mayor acceso a la organización.
- Use diferentes puertos en el firewall para acceder a diferentes servidores.
- Solo permita el acceso SSH después de iniciar sesión con una VPN, generalmente a través de IPsec .
Habilitar SSH a través de iptables
Iptables es un firewall host integrado en el kernel de Linux. Por lo general, está configurado para proteger el servidor al evitar el acceso a todos los puertos que no estaban explícitamente abiertos.
Si iptables está habilitado en el servidor, los siguientes comandos pueden permitir el acceso SSH entrante. Deben ejecutarse desde debajo de la raíz.
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Si desea mantener las reglas para siempre, en algunos sistemas esto se puede hacer con el comando:
service iptables save
