Cómo abrir los puertos para la instancia predeterminada de SQL-Server y el SQL Server Browser en un servidor Windows

El título es largo, pero la entrada va a ser corta. ¿Cómo abrimos los puertos del firewall de un servidor Windows para poder acceder desde otro equipo a la base de datos SQL-Server y trabajar con ella? A veces nos encontramos con que el cortafuegos de Windows nos está bloqueando y solo podemos trabajar con la base de datos conectados al propio servidor. Pues con estos dos comandos desde el PowerShell podemos configurarlo para abrir los puertos predeterminados:

New-NetFirewallRule -DisplayName "SQLServer default instance" -Direction Inbound -LocalPort 1433 -Protocol TCP -RemoteAddress LocalSubnet -Action Allow

New-NetFirewallRule -DisplayName "SQLServer Browser service" -Direction Inbound -LocalPort 1434 -Protocol UDP -RemoteAddress LocalSubnet -Action Allow

Si queremos bloquear el acceso de nuevo solo tendríamos que cambiar el valor que le pasamos al parámetro –Action, poniendo Block en lugar de Allow. El parámetro -RemoteAddress está para limitar en este caso que solo se pueda acceder desde la red local, en el caso de querer bloquear podéis omitirlo para que bloquee el puerto desde cualquier ubicación remota.

Powershell: arrancar o parar el servidor web IIS.

¿Cómo arrancamos, paramos o reiniciamos el servidor web IIS desde comandos con Powershell?

Reiniciar: IISReset /RESTART
Parar: IISReset /STOP
Arrancar: IISReset /START

Esto para y arranca todo el servidor web. ¿Y si queremos arrancar o parar un sitio web concreto? Tenemos dos comandos que lo hacen por el nombre de sitio, que varían según la versión de nuestro sistema operativo:

Arrancar (Windows 8 o Windows server 2012): Start-WebSite -Name «Nombre de Nuestra Web»
Arrancar (Windows 10 o Windows server 2016): Start-IISSite -Name «Nombre de Nuestra Web»

Parar (Windows 8 o Windows server 2012): Stop-WebSite -Name «Nombre de Nuestra Web»
Parar (Windows 10 o Windows server 2016): Stop-IISSite -Name «Nombre de Nuestra Web»

Esta es la sintaxis básica, pero tanto Start-WebSite como Stop-WebSite tienen una serie de parámetros extra que puedes revisar en la web de Microsoft en los enlaces anteriores.

Cambiar el puerto de escucha para escritorio remoto en Windows 2k12

Si tienes un servidor Windows al que accedes a través del escritorio remoto es buena cosa cambiar el puerto de escucha para conexiones al escritorio remoto. Muchos ataques van contra el puerto 3389 y sobre el usuario Administrador, así que cambiar el nombre a dicho usuario y el puerto pondrá la cosa un poco más difícil al atacante. No es una garantía de seguridad, pero dificulta un poco la cosa.

Los pasos son los siguienes, válidos para Windows 2k12 y Windows 2k8:

  • Abrir el regedit (el editor de registro)
  • Navegar por él hasta llegar a esta ruta: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber
  • Editar esa entrada y poner el puerto deseado (por defecto estará el número del puerto en formato hexadecimal, pero lo puedes poner en decimal marcando esa opción). Microsoft recomienda usar uno comprendido entre el 1025 y el 65535, y hay que fijarse que no sea uno que ya esté siendo usado por otra aplicación.
  • Reiniciar, como siempre en sistemas Windows.

Creo haber leído que cambiar el puerto puede dar problemas a los usuarios que intenten conectarse con el cliente de escritorio remoto para Mac, ya que este sólo permite usar el puerto por defecto.

Utilizar ctrl + alt +del en una sesión de escritorio remoto de Windows

Seguro que te ha pasado alguna vez, estás conectado a un servidor Windows por medio de escritorio remoto y necesitas pulsar ctrl+alt+del (o en en teclados españoles ctrl+alt+supr), pero si lo haces se ejecuta en tu equipo, no en el remoto. ¿Cómo conseguir lo que quieres? Pues cambiando el del por end. Es decir, debes pulsar ctrl+alt+end (o con teclado en español ctrl+alt+fin). Sin más, así de simple.

Abrir el escritorio remoto de Windows como administrador desde línea de comandos

Esta mañana me topaba con un problemilla técnico al intentar conectar remotamente con un servidor: me decía que dicho servidor no podía servir más licencias de escritorio remoto. ¡Cáspita, qué contrariedad! (eso último ha sido muy Roberto Alcázar) ¿cómo lo solucionamos?

Si lanzamos una consola de comandos podemos utilizar el comando mstsc para abrir el servicio de escritorio remoto y pasarle determinadas opciones. La clave para lo que tenía que hacer era usar el parámetro /admin.

La sintaxis de mstsc es la siguiente: mstsc [<connection file>] [/v:<server[:port]>] [/admin] [/f[ullscreen]] [/w:<width>] [/h:<height>] [/public] | [/span] [/edit «connection file»] [/migrate] [/?]

En la web de Microsoft podéis mirar más información sobre todas las opciones comentadas arriba.

Vamos con un ejemplo práctico basado en el caso que os decía antes. Vamos a suponer que la dirección del servidor al que hay que conectarse sería la 192.168.100.7 ¿cómo lo haríamos con mstsc?

mstsc /v:192.168.100.7 /admin

De esta forma ya entraríais al servidor con credenciales de administrador, desbloqueando el problema del servicio de licencias.

Script para automatizar backups de MySQL en servidores Windows

Aunque en servidores Windows lo más habitual es trabajar con el SQL-Server de Microsoft como SGBD a veces puede tocarnos instalar un MySQL. Entonces nos asalta la duda ¿cómo automatizo un backup de la base de datos? Una de las tareas más habituales de todo administrador.

En la instalación de la base de datos se os instalará el programa mysqldump.exe para la gestión de copias de seguridad. Este programa nos permite, por medio de la línea de comandos, realizar un backup de la base de datos. Con la siguiente sintaxis, a grosso modo, haréis la copia de seguridad:

mysqldump –u (TuUsuario) –p(password) (nombre_base_datos) > (nombreArchivo).sql

Dato importante: entre -u y el nombre de vuestro usuario hay un espacio, entre -p y el password NO. Para más información sobre este comando, podéis visitar el artículo pertinente en el manual de MySQL.

Podéis abrir con CMD un terminal de comandos, situaroes en vuestra carpeta de MySQL y, situándoos allí en la carpeta bin, ejecutar el comando con los parámetros que correspondan para comprobar su funcionamiento. Una vez visto que mysqldump funciona el siguiente paso es crear un script de batch (con la extensión .bat) que ejecute el comando incluyendo la fecha. Los backups los guardaremos en una carpeta llamada C:\backups, y a la hora de escribir el script os vale cualquier editor, mismo el Notepad (aunque yo suelo usar en Windows Notepad++):

echo off                                        
set FECHA= %date%
set FECHA=%FECHA:/=%
mysqldump -e -u root –p7j91lt0y articulos > C:\backups\backuparticulos%FECHA%.sql

NOTA:Edito porque esta semana me he topado con que en el PowerShell de Windows 2k12 no me estaba funcionado esa instrucción, y también me han comentado hoy que el script no funcionaba. Lo mejor es que probéis primero en el intérprete de comandos si funciona, y si os falla la de arriba podéis cambiar la sintaxis por esta:

mysqldump --user=root --password=7j91lt0y articulos > C:\backups\backuparticulos%FECHA%.sql

Con la primera instrucción desactivamos la salida por pantalla de la consola, luego recogemos la fecha actual, la formateamos y finalmente creamos el backup anexando a su nombre la fecha de la copia. En este ejemplo he usado el usario root, recordad siempre que el usuario que utilicéis debe tener permisos en la base de datos para realizar la copia de seguridad. Guardad este script en la carpeta bin de vuestra instalación de MySQL.

Pues ya tenemos el script listo, ejecutadlo con permisos de administrador para ver que funciona. Si os crea un archivo vacío es que algo falla, repasadlo (la sintaxis, la contraseña, el nombre, los permisos tanto en la bd como en el sistema operativo…). Ahora lo que nos queda es automatizar la ejecución del script para programar, por ejemplo, una copia diaria de la base de datos. Para eso os váis al menú de administración del servidor y creáis una tarea básica que ejecute el batch a diario a una hora predeterminada (a poder ser una hora con poca actividad para la base de datos). Para más ayuda con el tema de la automatización podéis visitar la web de Microsoft.

Aumentando el tiempo del timeout de FastCGI en IIS

El otro día comentaba que tuve que instalar GD (y un par de librerías más) en un servidor Windows con IIS para una instalación de PrestaShop. No fue la única modificación que tuve que hacer, a decir verdad. Al comenzar la instalación de PrestaShop se paraba en el 12% y daba un error creando las tablas. Ya había visto ese tipo de errores antes también en entornos Apache/Linux con alguna instalación de CMS: el proceso lleva demasiado tiempo y el servidor, por seguridad y optimizacion del rendimiento, cierra la conexión.

En el caso de PHP sobre IIS es la actividad fastCGI la que nos está fastidiando la instalación, así que debemos aumentar el tiempo de tiemout para poder acabar la instalación (luego ya lo volveremos a cambiar para asegurarnos el rendimiento del servidor).

Lo primero es lanzar el terminal de línea de comandos e ir a la carpeta c:\Windows\System32\inetsrv . Una vez allí si ejecutamos C:\Windows\System32\inetsrv>appcmd list config -section:system.webServer/fastCgi veremos los datos con la configuración de fastCGI.

Basta un solo comando para cambiar esa configuración, y vamos a poner una hora para ir sobrados de tiempo. Para este ejemplo vamos a suponer que nuestra instalación de php está en la carpeta C:\Program Files\PHP\v5.3\, como era en mi caso. En el vuestro cambiad esta ruta por la que corresponda.

C:\Windows\System32\inetsrv>appcmd set config -section:system.webServer/fastCgi "-[fullPath='C:\Program Files\PHP\v5.3\php-cgi.exe'].activityTimeout:3600"

Si todo va bien recibirás un mensaje tipo:

Applied configuration changes to section «system.webServer/fastCgi» for «MACHINE/WEBROOT/APPHOST» at configuration commit path «MACHINE/WEBROOT/APPHOST»

Tras eso basta con reiniciar el servicio y ya podrás seguir. Al acabar con la tarea que requiere tiempo extra lo recomendable sería volver a reducir el timeout de fastCGI.

Instalando la librería GD de php en IIS

Esta mañana preparaba una instalación de Prestashop en un servidor Windows. Ya había hecho varias en el pasado, pero siempre en entornos Apache-Linux, jamás en Windows con IIS. Supuse que no podría ser muy distinto.

La primera en la frente: PrestaShop me pide la librería de funciones de imágenes GD en el servidor, (y un par más, pero el procedimiento es el mismo) que no está instalada. ¿Qué toca?

Lo primero, abrir el php.ini, buscar la línea ;extension=php_gd2.dll y quitarle el ; para descomentarla. Si por lo que fuera esa línea no existe simplemente la metéis a mano. Luego o hacéis una copia del php.ini en la carpeta C:\Windows o creáis un enlace simbólico desde allí al archivo, cualquiera de las dos opciones vale.

Siguiente paso: dentro de la carpeta PHP buscáis la carpeta ext y allí mirad si está el archivo php_gd2.dll y, en caso afirmativo, lo copiáis al mismo directorio en el que tenéis el php.ini. En caso de que no esté allí (mirad bien, debería estar) debéis descargarla.

Tras estos sencillos pasos ya tenéis GD instalada en vuestro servidor PHP Windows con IIS.