Como cambiar el puerto por defecto de SSH en CentOS 8 / RHEL 8

Advertencia
Este artículo se actualizó por última vez el 2020-08-15, el contenido puede estar desactualizado.

Antes de comenzar, quería contarles que hay una promoción en DigitalOcean donde te dan un crédito de USD 100.00 durante 60 días para que puedas probar los servicios que este Proveedor Cloud ofrece. Lo único que tienes que hacer es suscribirte a DigitalOcean con el siguiente enlace: https://bit.ly/digitalocean-itsm



¡Hola a todos!

En esta guía vamos a cambiar el puerto por defecto del servicio SSH en CentOS 8 / RHEL 8.

SSH provee un canal seguro sobre un red insegura usando una architectura de cliente/servidor, conectando un cliente SSH a un servidor SSH. El puerto por defecto es el 22 en TCP, generalmente usado en sistemas basados en Unix/Linux, así como también en Microsoft Windows.

Es una buena práctica cambiar el puerto por defecto, ya que SSH es el punto de entrada favorito de los atacantes. A pesar de poder cambiarlo, no es garantía que no lo encuentren, debido a que hay escaner de puertos que pueden listar y encontrar los puertos abiertos de un servidor. Sin embargo, no se la vamos a poner tan fácil.


Comprobamos el estado actual del servicio SSH con el comando systemctl:

1
[root@centos82 ~]# systemctl status sshd

Obtendremos la siguiente salida:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-08-15 11:46:42 -04; 13min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 981 (sshd)
    Tasks: 1 (limit: 23956)
   Memory: 5.2M
   CGroup: /system.slice/sshd.service
           └─981 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc -oMACs=hmac-sha2-256-etm@openssh.com,hmac-sh>

ago 15 11:46:42 centos82.itsimplenow.com systemd[1]: Starting OpenSSH server daemon...
ago 15 11:46:42 centos82.itsimplenow.com sshd[981]: Server listening on 0.0.0.0 port 22.
ago 15 11:46:42 centos82.itsimplenow.com sshd[981]: Server listening on :: port 22.
ago 15 11:46:42 centos82.itsimplenow.com systemd[1]: Started OpenSSH server daemon.
ago 15 11:59:26 centos82.itsimplenow.com sshd[4970]: Accepted password for root from 192.168.20.1 port 49354 ssh2
ago 15 11:59:26 centos82.itsimplenow.com sshd[4970]: pam_unix(sshd:session): session opened for user root by (uid=0)

Podemos visualizar que ssh esta escuchando por el puerto 22.


El archivo de configuración del servidor SSH se encuentra ubicado en /etc/ssh/sshd_config, que deberemos modificar con su editor de textos de confianza para cambiar el puerto por defecto:

1
[root@centos82 ~]# vim /etc/ssh/sshd_config

Modificamos el parámetro Port:

1
#Port 22

Y descomentamos y modificamos el puerto:

1
Port 222

Guardamos los cambios y salimos del editor.


Por defecto, SELinux no permite la conexión a SSH por un puerto distinto al predeterminado, sin embargo, podemos configurar SELinux para que acepte el puerto al que hemos cambiado el servidor SSH.

Necesitaremos el programa semanage, que está contenido en el paquete policycoreutils-python-utils, por lo que procederemos a instalarlo:

1
[root@centos82 ~]# dnf install policycoreutils-python-utils

Ahora añadimos el puerto que hemos indicado:

1
[root@centos82 ~]# semanage port -a -t ssh_port_t -p tcp 222

Listamos los puertos del firewall abiertos:

1
[root@centos82 ~]# firewall-cmd --list-all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Bloqueamos el puerto por defecto, y permitimos la conexión a SSH por el puerto personalizado:

1
2
3
4
5
6
[root@centos82 ~]# firewall-cmd --permanent --remove-service=ssh
success
[root@centos82 ~]# firewall-cmd --permanent --add-port=222/tcp
success
[root@centos82 ~]# firewall-cmd --reload
success

Reinciamos el servicio SSH:

1
[root@centos82 ~]# systemctl restart sshd

Verificamos nuevamente el estatus del servicio SSH:

1
[root@centos82 ~]# systemctl status sshd
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-08-15 13:18:23 -04; 1min 14s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 26576 (sshd)
    Tasks: 1 (limit: 23956)
   Memory: 1.2M
   CGroup: /system.slice/sshd.service
           └─26576 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes>

ago 15 13:18:23 centos82.itsimplenow.com systemd[1]: Starting OpenSSH server daemon...
ago 15 13:18:23 centos82.itsimplenow.com sshd[26576]: Server listening on 0.0.0.0 port 222.
ago 15 13:18:23 centos82.itsimplenow.com sshd[26576]: Server listening on :: port 222.
ago 15 13:18:23 centos82.itsimplenow.com systemd[1]: Started OpenSSH server daemon.

Intentamos acceder por el puerto 22 al servidor SSH y comprobar si efectivamente está bloqueado:

1
2
$ ssh root@centos82.itsimplenow.com
ssh: connect to host centos82.itsimplenow.com port 22: Connection refused
1
2
3
4
$ sftp root@centos82.itsimplenow.com
ssh: connect to host centos82.itsimplenow.com port 22: Connection refused
Connection closed.
Connection closed

Nos conectamos a SSH por el nuevo puerto, tenemos que indicar el operador -p para indicar el puerto:

1
2
3
4
5
6
7
8
9
$ ssh root@centos82.itsimplenow.com -p 222
The authenticity of host '[centos82.itsimplenow.com]:222 ([centos82.itsimplenow.com]:222)' can't be established.
ECDSA key fingerprint is SHA256:4MDhGEIJQAbfnFPlrTwPOJrcYaAmARmsN8xAlWAb6u0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[centos82.itsimplenow.com]:222' (ECDSA) to the list of known hosts.
root@centos82.itsimplenow.com's password:
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat Aug 15 13:26:22 2020 from 192.168.20.1

Probamos sftp:

1
2
3
4
$ sftp -P 222 root@centos82.itsimplenow.com
root@centos82.itsimplenow.com's password:
Connected to root@centos82.itsimplenow.com.
sftp>

Espero les haya gustado este tutorial, ¡hasta la próxima!


Si te pareció útil este artículo y el proyecto en general, considera brindarme un café :)

Buy me a coffeeBuy me a coffee