Para cambiar el puerto utilizado para la conexión SSH no basta solo con cambiar el puerto en el archivo de configuración «/etc/ssh/sshd_config»
[code language=»bash»]
vi /etc/ssh/sshd_config
Port 2292
[/code]
siempre debemos permitir en el Cortafuegos(firewall) del sistema el puerto indicado en el archivo de configuración «/etc/ssh/sshd_config».
Permitimos el puerto 2292 para SSH en firewalld
Ahora agregaremos de manera permanentemente la nueva regla en la zona activa con Firewalld la cual es una solución completa de cortafuegos (firewall) dinámico disponible de manera predeterminada en CentOS, pero primero debemos utilizar el siguiente comando para encontrar la(s) zona(s) activa(s):
[code language=»bash»]
firewall-cmd –get-active-zones
public
interfaces:enp0s3
[/code]
Los resultados pueden ser (public, drop, block, external, internal, dmz, work, home, trusted) zonas predefinidas por Firewalld, pero en nuestro caso es public. Sólo debe aplicar las reglas a las zonas activas.
Agregamos la siguiente regla al cortafuego (firewall) indicándole el puerto y la zona activa «public».
[code language=»bash»]
firewall-cmd –permanent –zone=public –add-port=2292/tcp
success
[/code]
reiniciamos el cortafuego (firewall)
[code language=»bash»]
firewall-cmd –reload
[/code]
Comprobamos el puerto SSH de escucha con el comando ss
[code language=»bash»]
ss -tnlp|grep ssh
LISTEN 0 128 *:2292 *:* users:(("sshd",2547,3))
LISTEN 0 128 :::2292 :::* users:(("sshd",2547,4))
[/code]
Aunque esto suele ser suficiente en algunas distribuciones Linux, en el caso de CentOS no es así, ya que implementa SELinux y tal como
vemos a continuación al intentar reiniciar el servicio sshd va a provocar un error.
[code language=»bash»]
systemctl restart shhd
job for sshd.service failed because the control process exited with error code
See "systemctl status ssh.service" and "journalctl -xe" for details.
[/code]
Permitimos el puerto 2292 para SSH en SELINUX
Por defecto, SELINUX sólo permite el puerto 22 para SSH. para cambiar el puerto se debe modificar el contexto de seguridad para la etiqueta «ssh_port_t» indicándole el nuevo puerto, en este ejemplo el puerto «2292».
[code language=»bash»]
semanage port -a -t ssh_port_t -p tcp 2292
[/code]
no podemos borrar el puerto 22 de SELINUX ya que esta definido por defecto si lo intentamos podremos aprecias el siguiente error «ValueError: value error el puerto tcp/22 está definido en la política no se puede borrar», pero si te equivocas o deseas borrar puertos asignados por ti puedes hacerlo con el siguiente comando.
[code language=»bash»]
semanage port -d -t ssh_port_t -p tcp 2292
[/code]
Ahora verificamos el contexto de seguridad para la etiqueta «ssh_port_t», como podemos ver hay dos puertos agregados, el 22 y el 2292.
semanage port -l | grep ssh
[code language=»bash»]
ssh_port_t tcp 2292, 22
[/code]
Restauramos el servicio ssh
[code language=»bash»]
systemctl restart sshd
[/code]
Todo funcionando perfectamente 🙂