miércoles, 14 de diciembre de 2016

Google Cloud Platform: Cómo crear una nueva instancia Windows


Como ya comenté en un post anterior, el futuro de la infraestructura está en las plataformas Cloud . Ahora que Google se ha sumado al carro del IaaS vamos a empezar a jugar con su entorno.




Lo primero que tenemos que hacer es obtener acceso al periodo de pruebas de 60 días, en que tenemos la posibilidad de jugar con la infraestructura de Google hasta el límite de 300€. Aquí tenéis los detalles del periodo de pruebas.

Una vez tenemos la cuenta de pruebas ya tenemos acceso al panel de control de GCP:



Dentro del panel de control es donde empezamos el procedimiento:

1. Vamos al menú y hacemos click en la opción de Cloud Launcher
Con la chincheta puedes pegar el Cloud Launcher a la barra superior

2. En el Cloud Launcher, seleccionamos la instancia que queremos crear. En este caso un Windows 2012 R2



3. Dentro del proceso de creación de la instancia, vemos los detalles de la instancia que vamos a crear. En este punto no podemos asignar recursos RAM o CPU, tendremos que esperar a tener la instancia creada para poder asignar estos recursos.


También podemos ver un detalle del coste:


4. Una vez revisada la información pasamos a crear la nueva VM apretando en el boto de Ejecutar en Compute Engine. 
Si es la primera VM que creamos, tendremos que configurar la cuenta de facturación. Esto es solamente para asociar las VMs a la cuenta con el periodo de prueba que hemos solicitado.




Y una vez seleccionada la cuenta, empieza la creación de la VM: 



5. En unos pocos minutos tenemos creada la VM y podemos asignar los recursos que queramos:


En la configuración de FW, le indicamos que permite el tráfico HTTP. Esto lo haremos para probar que la maquina esta activa y publicada en Internet:


6. Le damos al boto de crear y ...


7. Al cabo de un momento tenemos la VM disponible: 

las IPs les he ocultado, pero en el panel de control se muestran


Una vez esta disponible, el siguiente paso es conectarse a la VM de Windows a través de RDP.

8. Para poder conectar a través de RDP, es necesario crear unas credenciales de administración a través del botón Crear o establecer una contraseña de Windows .


Indicamos el nombre de usuario que queremos:


Y a continuación nos crea una horrible contraseña: 


9. Y con estas credenciales ya podemos acceder a la nueva instancia con un cliente de RDP




Y finalmente tenemos nuestra instancia de Windows lista para jugar.

Links:
https://cloud.google.com/free-trial/docs/
https://cloud.google.com/compute/docs/instances/windows/creating-passwords-for-windows-instances
https://cloud.google.com/compute/docs/instances/windows/connecting-to-windows-instance


jueves, 10 de noviembre de 2016

Añadir usuario de dominio al grupo de Administradores locales

Seguro que en algún momento te has encontrado con la necesidad de tener que dar permiso a un usuario del dominio como Administrador local de una serie de equipos del dominio, para hacer un despliegue de una aplicación o realizar algún cambio en la configuración local que no puedes hacer a través de las herramientas de gestión que uses habitualmente.

Como ir equipo por equipo añadiendo permisos es un rollo, la manera más sencilla de hacerlo es a través de las Directivas de Grupo GPO :

Pasos:

  1. El primer paso es crear un grupo en el AD. Este grupo es el que más adelante añadiremos a la lista de Administradores locales.


  2. En el nuevo grupo, añadimos el usuario que queremos añadir como Administrador local.
  3. Abrimos el "Group Policy Management" y creamos una nueva política




jueves, 8 de septiembre de 2016

Recordar la caducidad de las contraseña a los usuarios per email


La gestión de las contraseñas es siempre un dolor de cabeza para los administradores de sistemas. No solo las políticas si no sobretodo el hecho de educar a los usuarios para que hagan un buen uso.



Hoy solo quiero publicar una pequeña servicio que añadimos no hace mucho que envía un email a cada usuarios cuando su contraseña esta a punto de caducar. Es cierto que la mayoría de servicios ya tienen implementado un sistema de recordatorios mediante popups o advertencias, pero por norma general estas avisos suelen ser ignorados. En cambio, la gente sí que hace caso al email, y aunque parezca una tontería, estas notificaciones han reducido significativamente el número de tickets abiertos por caducidad de contraseña.

Para enviar estas notificaciones, busque en la galeria de scripts de microsoft y encontré uno de un tal RoberPearman que encaja como anillo al dedo con lo que necesitábamos. Sobre este script, solo he tenido que añadir la posibilidad de enviar emails a través de Office 365, que requiere autenticación y cifrado SSL.

El script permite:

  • configurar el servidor y la cuenta de envío
  • el número de días en que caducará la contraseña
  • personalizar el asunto y el mensaje del email. El cuerpo del mensaje puede ser en HTML. 

Requiere:

  • El modulo de Active Directory de Powershell

Sin más el enlace para descargar el script y el código:

https://gallery.technet.microsoft.com/Password-Expire-Office-365-4e0b0459

#################################################################################################################
# Version 1.0 September 2016
# Fernando Pérez 
# Based on Robert Pearman (WSSMB MVP)
# Script to Automated Email using Office 365 account to remind users Passwords Expiracy.
# Office 365 require SSL
# Requires: Windows PowerShell Module for Active Directory
#
#
##################################################################################################################
# Please Configure the following variables....
$smtpServer="smtp.office365.com" # Office 365 official smtp server
$expireindays = 10 # number of days for password to expire 
$from = "Your email address <youremail@domain.com>" # email from 
$logging = "Enabled" # Set to Disabled to Disable Logging
$logFile = "c:\Scripts\PasswordChangeNotification.csv" # ie. c:\Scripts\PasswordChangeNotification.csv
$testing = "Disabled" # Set to Disabled to Email Users
$testRecipient = "yourtestrecipient@domain.com" 
$date = Get-Date -format ddMMyyyy
#
###################################################################################################################

# Add EMAIL Function
Function EMAIL{

Param(
$emailSmtpServer = $smtpServer,   #change to your SMTP server
$emailSmtpServerPort = 587,
$emailSmtpUser = "username@domain.com",   #Email account you want to send from
$emailSmtpPass = "passsword",   #Password for Send from email account
$emailFrom = "emailfromaddress@domain.com",   #Email account you want to send from
$emailTo,
$emailAttachment,
$emailSubject,
$emailBody
)
Process{
$emailMessage = New-Object System.Net.Mail.MailMessage( $emailFrom , $emailTo )
$emailMessage.Subject = $emailSubject
$emailMessage.IsBodyHtml = $true
$emailMessage.Priority = [System.Net.Mail.MailPriority]::High
$emailMessage.Body = $emailBody
$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
$SMTPClient.Send( $emailMessage )
}
}

# Check Logging Settings
if (($logging) -eq "Enabled")
{
    # Test Log File Path
    $logfilePath = (Test-Path $logFile)
    if (($logFilePath) -ne "True")
    {
        # Create CSV File and Headers
        New-Item $logfile -ItemType File
        Add-Content $logfile "Date,Name,EmailAddress,DaystoExpire,ExpiresOn"
    }
} # End Logging Check

# Get Users From AD who are Enabled, Passwords Expire and are Not Currently Expired
Import-Module ActiveDirectory
$users = get-aduser -filter * -properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress |where {$_.Enabled -eq "True"} | where { $_.PasswordNeverExpires -eq $false } | where { $_.passwordexpired -eq $false }
$DefaultmaxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

# Process Each User for Password Expiry
foreach ($user in $users)
{
    $Name = $user.Name
    $emailaddress = $user.emailaddress
    $passwordSetDate = $user.PasswordLastSet
    $PasswordPol = (Get-AduserResultantPasswordPolicy $user)
    # Check for Fine Grained Password
    if (($PasswordPol) -ne $null)
    {
        $maxPasswordAge = ($PasswordPol).MaxPasswordAge
    }
    else
    {
        # No FGP set to Domain Default
        $maxPasswordAge = $DefaultmaxPasswordAge
    }
  
    $expireson = $passwordsetdate + $maxPasswordAge
    $today = (get-date)
    $daystoexpire = (New-TimeSpan -Start $today -End $Expireson).Days
        
    # Set Greeting based on Number of Days to Expiry.

    # Check Number of Days to Expiry
    $messageDays = $daystoexpire

    if (($messageDays) -ge "1")
    {
        $messageDays = "in " + "$daystoexpire" + " days."
    }
    else
    {
        $messageDays = "today."
    }

    # Email Subject Set Here
    $subject="Your password will expire $messageDays"
  
    # Email Body Set Here, Note You can use HTML, including Images.
    $body ="    
<p>Dear $name,<br></P><br>
    <p>Your Password will expire $messageDays.<br>
    Please change your password before it expires to avoid problems accessing to your work services. <br></P><br>
    <p>Thanks, <br> 
    </P><br><br>
    <p>Dear $name,<br></P><br>
    <P>Su contrase&ntilde;a caducar&aacute; en $daystoExpire d&iacute;as.<br>
    Por favor cambie su contrase&ntilde;a antes de que &eacute;sta expire para evitar problemas al acceder a su entorno de trabajo. <br></P><br>
    <P>Gracias, <br> 
    </P><br><br>
<p>Caro $name,<br></P><br>
    <p>A sua password vai expirar dentro de $daystoExpire dias<br>
    Por favor altere a mesma antes dela expirar de forma a evitar ter problemas de acesso ao seu ambiente de trabalho. <br></P><br>
    <p>Obrigado, <br> 
    </P>"

   
    # If Testing Is Enabled - Email Administrator
    if (($testing) -eq "Enabled")
    {
        $emailaddress = $testRecipient
    } # End Testing

    # If a user has no email address listed
    if (($emailaddress) -eq $null)
    {
        $emailaddress = "youremailaddress@domain.com"    
    }# End No Valid Email

    # Send Email Message
    if (($daystoexpire -ge "0") -and ($daystoexpire -lt $expireindays))
    {
         # If Logging is Enabled Log Details
        if (($logging) -eq "Enabled")
        {
            Add-Content $logfile "$date,$Name,$emailaddress,$daystoExpire,$expireson" 
        }

EMAIL -emailTo $emailaddress -emailSubject $subject -emailBody $body

    } # End Send Message
    
} # End User Processing



# End

Si te ha parecido útil este post, por favor haz click en alguno de los banners, no te costará nada y ayudaras a mantener este blog.

Links:


martes, 24 de mayo de 2016

Crear diversas webs en una instancia AWS EC2


Si quieres publicar varios websites en una sola instancia de AWS EC2 , en con cualquier servicio Apache, sigue estos pasos:


1. Iniciamos sesión SSH en la instancia de EC2 y conseguimos permiso de super ususario
#sudo su
2. Creamos la carpeta de destino donde dejaremos el website.
# mkdir /var/www/lasendadeladmin
3. En la configuración recomendada de LAMP para la instancia EC2, el servicio Apache va a buscar en la /etc/httpd/conf.d todos los archivo de configuración adicionales. Creamos un archivo para la configuración del nuevo sitio web y después lo editamos.
# touch /etc/httpd/conf.d/lasendadeladmin.conf
# vim /etc/httpd/conf.d/lasendadeladmin.conf
4. En el editor añadimos la siguiente configuración
<VirtualHost *:80>
  ServerName lasendadeladmin.com
  ServerAlias www.lasendadeladmin.com
  DocumentRoot /var/www/lasendadeladmin
  DirectoryIndex index.html

  <Directory /var/www/lasendadeladmin>
    AllowOverride All
  </Directory>
</VirtualHost>
5. Una vez completada la configuración pasamos a configurar los permisos de la carpeta creada y el contenido para que el servicio de Apache pueda leer y ejecutar en él, y que el usuario standar ec2-user pueda añadir y editar contenido
# cd /var/www/lasendadeladmin
# find . -type d -exec chmod 0755 {} \;
# find . -type f -exec chmod 0644 {} \;
# chown -R ec2-user:apache .
# chmod -R g+w .
# chmod g+s .
6. Una vez completado la configuración, reniciamos el servicio de apache
# service httpd restart 
Y ahora ya podemos añadir contenido a la carpeta y publicar nuestro website.

Links:

http://nouveauframework.org/blog/vhosts-running-multiple-sites-on-a-single-aws-ec2-instance/

viernes, 29 de abril de 2016

ACTUALIZACIÓN 29/04/2016: Nuevos ataques Ransomware


Estas semanas los "virus" del tipo ransomware se están volviendo a disparar y se están recibiendo muchas alertas de nuevos casos de gente a la que le han secuestrado sus datos:

El proceso del ataque es el mismo que el del caso de hace un año:

1. El usuario recibe un email de correos de un dominio extraño, indicando que tiene que descargar las instrucciones para recoger un paquete, y que si no lo hace tendrá que pagar una multa de 79€ !! (el año pasado eran solo de 7€ . Han multiplicado x10 la tarifa, se ha acabado la crisis! )


2. Al hacer click en el enlace, se descarga y ejecuta un archivo .SWF que se ejecuta en background y empieza a encriptar todos los datos que hayan en el equipo que se ejecuta.

3. Una vez ha acabado, muestra una ventana con las instrucciones para pagar el rescate y recuperar los datos. 

Como la última vez:

Que hacer como Admin?

  • Tener los backups al día
  • Detectar y bloquear los posibles orígenes de los emails.
  • Informar a todo el personal de la empresa que no abran este correo. 
  • Estar a punto para cuando las empresas de antivirus saquen la firma de este nuevo virus y actualizar todos los equipos lo antes posible.

Y para los equipos ya infectados?

No queda otra que tirar de copias de seguridad.

Como se podría haber evitado?

Igual que la vez anterior, se trata de un Day-0, están pasando todas las medidas de seguridad, aunque algunos caso el usuario ha hecho todo lo posible de su parte para infectarse. 
La mejor manera que veo es educar al personal para detectar este tipo de emails y no caer en la trampa. 

Si te ha parecido útil este post, por favor haz click en algunos de los banner de publicidad, no te costará nada y ayudaras a mantener este blog.

miércoles, 27 de abril de 2016

Nuevo dominio de AD preparado para sincronizar con Office 365 2/2



Esta es la segunda parte del post Nuevo dominio de AD preparado para sincronizar con Office 365 en el que expliqué como preparar un nuevo dominio para poder sincronizarlo con el AD de Azure. 

Antes de empezar a sincronizar el Active Directory con la nube, hay que tener configurado y en marcha un tenant de Office 365 y añadir el dominio que queremos usar. 

Pasos

1. Microsoft recomienda pasar la herramienta IdFix antes de empezar con la sincronización del Active Directory para solucionar posibles problemas con la información de los objetos. En este caso se trata de una AD nuevo así que no vamos a encontrar problemas. 


2. Después de comprobar que no tenemos errores en nuestro AD, descargamos y ejecutamos la herramienta Azure AD Connect .



viernes, 22 de abril de 2016

Nuevo dominio de AD preparado para sincronizar con Office 365 1/2


Viendo que todo va hacia la nube, el siguiente post explicaré como crear un dominio local desde 0 y dejarlo preparado para sincronizar con un tenant de Office 365. Definiré también los pasos previos para permitir que el mismo usuario y contraseña nos sirve para identificarnos tanto en los sistemas locales como en los servicios de Azure.


Recomendaciones

Siguiendo las best practices de Active Directory, lo primero en tener en cuenta es el nombre del dominio. La recomendación es que si los servicios online de la empresa están en lasendadeladmin.com , el FQDN del AD sea por ejemplo ad.lasendadeladmin.com o internal.lasendadeladmin.com .

Así los nombres de los servidores serian: 
·         DC01.ad.lasendadeladmin.com
·         FILESERVER.ad.lasendadeladmin.com
·         ...

También se recomienda usar la dirección de email como UPN. Utilizar un login con un dominio público como puede ser la dirección de email, simplifica la integración con servicios cloud como Office365 y Azure. 

Pasos

1. El primer paso es definir el nombre del equipo que hará de Domain Controller y ponerle una IP fija.





miércoles, 16 de marzo de 2016

Bring me to the Cloud


Ya hace algunos años que me dedico a esto de la Administración de Sistemas, no soy un guru del sector ni un analista de reconocido prestigio, simplemente trabajo cada día en este mundillo y tengo la suerte de poder hablar con muchos compañeros que trabajan para diferentes sectores de negocio y en diversos países. Así que aprovechando que tengo este blog voy a plasmar aquí una reflexión que lleva tiempo cuajando en mi mente.

La tendencia hace tiempo que ha cambiando. Cuando empiezas cualquier proyecto de IT cada vez tiene menos sentido pensar en la Infraestructura clásica de hierro y cables, ya estamos de camino a la Nube. La mayoria de empresas que empieza de 0 ya no se plantean comprar servidores, donde pondrán el CPD o en pagar licencias. Ahora puedes obtener cualquier servicio mediante pago por uso (SaaS) o bien simplemente puede contratar una VM en alguna nube pública o privada (IaaS). Con la virtualización cualquier previsión de hardware se limita simplemente a calcular los recursos que serán necesarios: RAM, Disco, CPU, … Las VMs ya son más del 80% de la infraestructura en la mayoría de las empresas.



La tendencia a la hora de desarrollar aplicaciones también cambio hace tiempo, ya no se desarrollan pesadas aplicaciones cliente-servidor. Ahora la tendencia es a desarrollo de Web services y API, puertas de acceso a servicios que permiten flexibilidad, poder usar un navegador web o una aplicación mobil para realizar cualquier gestión. Es necesario ofrecer acceso a los servicios IT desde cualquier dispositivo y en cualquier lado, accedemos a la información desde portátiles, tablets, móviles, en el hotel o desde el avión con o sin Wifi.

Como puede una empresa mediana mantener la infraestructura necesaria para ser competitiva sin invertir millones en hardware, licencias y seguridad? Mi conclusion, trasladándose a la nube. 



Los servicios de connectividad como el correo o las comunicaciones instantáneas son la punta de lanza de cualquier proyecto de migración a la nube. Los grandes players como Google o Microsoft ofrecen servicios integrados en su plataforma que hacen imposible competir con una arquitectura clásica de servidores de correo o mensajeria instanaea. La VoIP es el siguiente mercado a asimilar por las grandes. 

En lo que se refiere a computación y servidores Cloud, los precios de hosting son más y mas competitivos por no hablar del omnipresente Amazon Web Services. Los que se están poniendo también las pilas en este sector son Microsoft y VMWare. 

Cuanto tiempo falta para que las empresas no necesiten a alguien que les lleve el mantenimiento  de la infraestructura IT? cuanto tiempo falta para que las grandes corporaciones se coman todo el pastel?

Mi opinion y consejo, si eres un SysAdmin empieza a formarte en servicios cloud: abre una cuenta gratuita de AWS y juega creando instancias, estudia como se gestionan los servicios de Office 365 y de Google For Work y estate atento a las tendencias de servicios, dentro de no mucho tiempo casi todo va a pasar por sus redes.


miércoles, 10 de febrero de 2016

Qué es un DevOps?

 Después de todo lo que he leído, voy a empezar con mi definición de DevOps:
Un DevOps es el Anakin Skywalker del mundo IT, aquel que va a traer el equilibrio a la fuerza: el que va acabar la guerra entre los Developers en sus torres de marfil de oficinas luminosas y los SysAdmins en sus gigantescos datacenters oscuros y llenos de información.

DevOps es una de esas palabras del mundillo IT que surgió allá en el 2012/13 y se esta poniendo de moda. Me intriga el termino por el significado de las palabras en sí: Developer Operator . Se trata de un desarrollador que ha aprendido a crear usuarios en Linux o un operador que ha hecho su primera pagina web en PHP?

En la wikipedia se define de la siguiente manera:

DevOps es un acrónimo inglés de development (desarrollo) y operations (operaciones), que se refiere a una cultura o movimiento que se centra en la comunicación, colaboración e integración entre desarrolladores de software y los profesionales de operaciones en las tecnologías de la información (IT). DevOps es una respuesta a la interdependencia del desarrollo de software y las operaciones IT. Su objetivo es ayudar a una organización a producir productos y servicios software rápidamente.

Un DevOps no es un perfil de trabajador en sí, es más bien una seria de habilidades y comportamientos, una filosofía de trabajo. Alguien que está a la última de las nuevas tecnologías de sistemas y metodologías de desarrollo y que entiende de verdad conceptos como virtualización, IaaS, agile, la nube, scrum, framework, etc. Un puente entre los desarrolladores, los operadores y el usuario de un proyecto.

Algunas de las habilidades que se esperan de un DevOps son:

  • Amplia experiencia en Administración de Sistemas (sí, barro para casa). 
  • Experiencia real con servicios en la Nube: Amazon AWS, Google o Azure.
  • Un amplio background técnico: metodologías y lenguajes de desarrollo, networking o tecnologías de storage. Alguien con pasión en su trabajo. 
  • Gurú del scripting: no solo shell script, también Python, Ruby o uso de APIs.
  • Visión del entorno de producción real del proyecto.
  • Don de gentes con habilidad para comunicarse y hacerse entender. Va a ser el que va tener que lidiar con muchos egos y con perfiles muy diferentes.

Es un perfil bastante completo y excepcional, casi diría que un unicornio, pero es un perfil cada día más buscado. Según Gartner (el de los cuadrados que sirven para justificar licencias a precios desorbitados) el 2016 será el año de la explosión de los DevOps: Gartner Says By 2016, DevOps Will Evolve From a Niche to a Mainstream Strategy Employed by 25 Percent of Global 2000 Organizations

Así que ya sabes: refresca tus conocimientos de lenguajes de programación en sitios como codecademy , reconciliate con el departamento de desarrolo de tu empresa y actualiza tu perfil de linkedin incluyendo DevOps en tus Skills ;)