SQL en una Azure VM (Classic Deployment) - Configuración de EndPoint

Por: Luis Ramirez

Tener SQL Server en una máquina virtual de Azure tiene grandes beneficios, como:

  • Escalabilidad/Flexibilidad
  • Disponibilidad.
  • Data Center en la nube
  • Disponibilidad de recursos
  • Soporte
  • Seguridad
  • etc

Al crear un puerto público (EndPoint) para SQL Server nos permitirá conectarnos desde cualquier computadora con acceso a internet siempre y cuando se provea las credenciales.

Esto último es muy importante a considerar ya que se ha visto muchos clientes configurando el mismo puerto default de SQL como puerto público (EndPoint) en 1433. Al tenerlo expuesto al internet y siendo un puerto conocido para SQL Server, es propenso a ataques.

Si uno abre el SQL Errorlog se podrá ver intentos de conexión de la misma IP con diferentes cuentas como el siguiente:

2015-07-10 12:57:06.51 Logon Error: 18456, Severity: 14, State: 5.

2015-07-10 12:57:06.51 Logon Login failed for user 'kisadmin'. Reason: Could not find a login matching the name provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:06.86 Logon Error: 18456, Severity: 14, State: 5.

2015-07-10 12:57:06.86 Logon Login failed for user 'Chred1433'. Reason: Could not find a login matching the name provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:06.92 Logon Error: 18456, Severity: 14, State: 5.

2015-07-10 12:57:06.92 Logon Login failed for user 'kisadmin'. Reason: Could not find a login matching the name provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:07.29 Logon Error: 18456, Severity: 14, State: 5.

2015-07-10 12:57:07.29 Logon Login failed for user 'Chred1433'. Reason: Could not find a login matching the name provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:07.61 Logon Error: 18456, Severity: 14, State: 5.

2015-07-10 12:57:07.61 Logon Login failed for user 'kisadmin'. Reason: Could not find a login matching the name provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:07.67 Logon Error: 18456, Severity: 14, State: 8.

2015-07-10 12:57:07.67 Logon Login failed for user 'sa'. Reason: Password did not match that for the login provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:07.79 Logon Error: 18456, Severity: 14, State: 5.

2015-07-10 12:57:07.79 Logon Login failed for user 'Chred1433'. Reason: Could not find a login matching the name provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:08.16 Logon Error: 18456, Severity: 14, State: 5.

2015-07-10 12:57:08.16 Logon Login failed for user 'kisadmin'. Reason: Could not find a login matching the name provided. [CLIENT: NN.221.49.200]

2015-07-10 12:57:08.24 Logon Error: 18456, Severity: 14, State: 8.

2015-07-10 12:57:08.24 Logon Login failed for user 'sa'. Reason: Password did not match that for the login provided. [CLIENT: NN.221.49.200]

Si el atacante no logra ingresar a SQL lo que puede pasar es que los mecanismos de seguridad en Azure al detectar una actividad inusual no permitirá más el acceso por un tiempo determinado INCLUYENDO a las cuentas válidas.

La recomendación es que se use un puerto diferente para el puerto público (EndPoint), el privado se puede dejar en 1433, agregándose una capa más de seguridad en el ambiente.

Si se desea usar el 1433 se recomienda agregar políticas de acceso (ACL) para restringir el acceso a solo las IP definidas.

En este ejemplo se conectarían al puerto publico 57500 con la cadena SERVIDORVIRTUAL.cloudapp.net, 57500 e internamente existirá un ruteo a 1433 (Puerto privado)

clip_image002

Si se desea agregar ACL usando este mismo ejemplo, bajo la barra de tareas seleccionar “MANAGE ACL” y abrir “Specify ACL Details”. Y desde ahí agregar por rango las IP que tendrán acceso a ese puerto público (EndPoint)

clip_image004

Mas Información:

Connect to a SQL Server Virtual Machine on Azure (Classic Deployment)

https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-sql-server-connectivity/

How to set up endpoints on a classic Azure virtual machine

https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-set-up-endpoints/#manage-the-acl-on-an-endpoint