DeveloZombie

Quemadas de un programador para muertos vivientes

Cómo crear reglas de comunicación entre Azure subnets bajo el modelo de 4 capas usando PowerShell

Queridos muertos vivientes, si lo que necesitas es proteger tu red y aplicar las mejores prác

Queridos muertos vivientes, si lo que necesitas es proteger tu red y aplicar las mejores prácticas para ganar mayor control y menos dolores de cabeza, usualmente pensamos en algo así:

Sin embargo, lograrlo es distinto a pensarlo :) es por eso que les traigo este script para asegurar tu entorno sin morir en el intento, no olvides completar las variables.

nsgazure.ps1

##################################################################################################################
# REGISTRAR LOS PARAMETROS CORRECTOS
##################################################################################################################
$NombreVNET = "VNETEU2DEMO01" #NOMBRE DE VNET
$ResourceGroup = "RGName" #NOMBRE DE GRUPO DE RECURSOS DE VNET
$Location = "eastus2" #CODIGO DE REGION
$FrontEndName = "EU2DESAFrontEnd02" #NOMENCLATURA SIN INCLUIR TIPO DE RECURSO
$FrontEndSubnet = "10.0.0.0/24" #SEGMENTO DE RED DE FrontEnd
$BackEndName = "EU2DESABackEnd02" #NOMENCLATURA SIN INCLUIR TIPO DE RECURSO
$BackEndSubnet = "10.1.0.0/24" #SEGMENTO DE RED DE BackEnd
$DataEndName = "EU2DESADataEnd02" #NOMENCLATURA SIN INCLUIR TIPO DE RECURSO
$DataEndSubnet = "10.2.0.0/24" #SEGMENTO DE RED DE DataEnd
$ADMSubnet = "10.3.0.0/24" #SEGMENTO DE RED DE ADMINISTRACION
##################################################################################################################
# RED DataEnd
##################################################################################################################
##################################################################################################################
# INBOUND
##################################################################################################################
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_BackEnd_ALLOW -Description "RULE_IN_BackEnd_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 100 `
    -SourceAddressPrefix $BackEndSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule2 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ADM_ALLOW -Description "RULE_IN_ADM_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 110 `
    -SourceAddressPrefix $ADMSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule3 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ALL_DENY -Description "RULE_IN_ALL_DENY" `
    -Access Deny -Protocol * -Direction Inbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# OUTBOUND
##################################################################################################################
$rule4 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_ALL_DENY -Description "RULE_OUT_ALL_DENY" `
    -Access Deny -Protocol * -Direction Outbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# CREAR NSG
##################################################################################################################
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $Location -Name "NSG$DataEndName" `
    -SecurityRules $rule1,$rule2,$rule3,$rule4
##################################################################################################################
# ASOCIAR NSG A SUBNET
##################################################################################################################
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup -Name $NombreVNET
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name "SNET$DataEndName" `
    -AddressPrefix $DataEndSubnet -NetworkSecurityGroup $nsg
##################################################################################################################
# RED BackEnd
##################################################################################################################
##################################################################################################################
# INBOUND
##################################################################################################################
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_FrontEnd_ALLOW -Description "RULE_IN_FrontEnd_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 100 `
    -SourceAddressPrefix $FrontEndSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule2 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ADM_ALLOW -Description "RULE_IN_ADM_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 110 `
    -SourceAddressPrefix $ADMSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule3 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ALL_DENY -Description "RULE_IN_ALL_DENY" `
    -Access Deny -Protocol * -Direction Inbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# OUTBOUND
##################################################################################################################
$rule4 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_DataEnd_ALLOW -Description "RULE_OUT_DataEnd_ALLOW" `
    -Access Deny -Protocol * -Direction Outbound -Priority 100 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix $DataEndSubnet -DestinationPortRange *
$rule5 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_ALL_DENY -Description "RULE_OUT_ALL_DENY" `
    -Access Deny -Protocol * -Direction Outbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# CREAR NSG
##################################################################################################################
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $Location -Name "NSG$BackEndName" `
    -SecurityRules $rule1,$rule2,$rule3,$rule4,$rule5
##################################################################################################################
# ASOCIAR NSG A SUBNET
##################################################################################################################
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup -Name $NombreVNET
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name "SNET$BackEndName" `
    -AddressPrefix $BackEndSubnet -NetworkSecurityGroup $nsg
##################################################################################################################
# RED FrontEnd
##################################################################################################################
##################################################################################################################
# INBOUND
##################################################################################################################
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_HTTP_ALLOW -Description "RULE_IN_HTTP_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 100 `
    -SourceAddressPrefix * -SourcePortRange 80 `
    -DestinationAddressPrefix * -DestinationPortRange 80
$rule1A = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_HTTPS_ALLOW -Description "RULE_IN_HTTPS_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 110 `
    -SourceAddressPrefix * -SourcePortRange 443 `
    -DestinationAddressPrefix * -DestinationPortRange 443
$rule2 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ADM_ALLOW -Description "RULE_IN_ADM_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 120 `
    -SourceAddressPrefix $ADMSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule3 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ALL_DENY -Description "RULE_IN_ALL_DENY" `
    -Access Deny -Protocol * -Direction Inbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# OUTBOUND
##################################################################################################################
$rule4 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_DataEnd_ALLOW -Description "RULE_OUT_BackEnd_ALLOW" `
    -Access Deny -Protocol * -Direction Outbound -Priority 100 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix $BackEndSubnet -DestinationPortRange *
$rule5 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_ALL_DENY -Description "RULE_OUT_ALL_DENY" `
    -Access Deny -Protocol * -Direction Outbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# CREAR NSG
##################################################################################################################
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $Location -Name "NSG$FrontEndName" `
    -SecurityRules $rule1,$rule1A,$rule2,$rule3,$rule4,$rule5
##################################################################################################################
# ASOCIAR NSG A SUBNET
##################################################################################################################
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup -Name $NombreVNET
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name "SNET$FrontEndName" `
    -AddressPrefix $FrontEndSubnet -NetworkSecurityGroup $nsg

##################################################################################################################
# GUARDANDO CAMBIOS                                                                                             #
##################################################################################################################
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
##################################################################################################################
# FIN DE SCRIPT                                                                                                  #
##################################################################################################################

 

Cómo automatizar la creación y configuración de clientes en Azure VPN Point-to-Site

Estimados muertos vivientes, Espero que este script les sea de utilidad, no se olviden modificar las

Estimados muertos vivientes, Espero que este script les sea de utilidad, no se olviden modificar las variables del inicio para que funcione correctamente.

Pre-requisitos:

  • Azure Powershell actualizado
  • Cuenta de Azure
  • VPN Gateway creado.

Me costó algo de trabajo automatizar el proceso así que Espero les sea de ayuda :)

EjecutarVPN.ps1

##################################################################################################
# EDITAR VARIABLES DE CONFIGURACION AQUÍ                                                         #
##################################################################################################
$directorioTrabajo = "C:\trabajo"
$subscriptionName = "Consumo interno de Microsoft Azure"
$vpnClientPool = "172.17.201.0/24"
$vpnGWName = "LitWareGW2"
$rgName = "VNET2RG"
##################################################################################################
# NO EDITAR DESDE ESTE PUNTO                                                                     #
##################################################################################################
$nombreusuario=[Environment]::UserName
$rootCertName = "$nombreusuario.cer" 
$urlMakeCert = "http://opsgilityweb.blob.core.windows.net/makecert/makecert.exe"
##################################################################################################
write-host -foregroundcolor green "------------------------------------------------------------"
write-host -foregroundcolor green "CREANDO VPN POINT TO SITE"
write-host -foregroundcolor green "DESARROLLADO POR JOSE YAPUR"
write-host -foregroundcolor green "------------------------------------------------------------"
mkdir $directorioTrabajo
write-host -foregroundcolor green "-----creando certificado"
cd $directorioTrabajo
Invoke-WebRequest -Uri $urlMakeCert.Replace("""","") -OutFile "$directorioTrabajo\makecert.exe"
.\makecert.exe -sky exchange -r -n "CN=$nombreusuario""ROOT" -pe -a sha1 -len 2048 -ss My .\$rootCertName
.\makecert.exe -n "CN=$nombreusuario""Client" -pe -sky exchange -m 96 -ss My -in $nombreusuario"Root" -is my -a sha1
certutil -encode $rootCertName $nombreusuario"PublicKeyFile.cer"
 
$valorCert = Get-Content -Path $nombreusuario"PublicKeyFile.cer"
 
$publicCertData = $valorCert[0..($valorCert.count - 2)]
$publicCertData = $publicCertData[1..($publicCertData.count - 1)] | Out-String
 
write-host -foregroundcolor green "-----añadiendo cuenta de azure"
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionName $subscriptionName
 
$vpnGW = Get-AzureRmVirtualNetworkGateway -ResourceGroupName $rgName -Name $vpnGWName  
Set-AzureRmVirtualNetworkGatewayVpnClientConfig -VirtualNetworkGateway $vpnGW -VpnClientAddressPool $vpnClientPool 
 
Add-AzureRmVpnClientRootCertificate -VpnClientRootCertificateName $rootCertName -VirtualNetworkGatewayName $vpnGWName -ResourceGroupName $rgName -PublicCertData $publicCertData
 
$downloadUrl = Get-AzureRmVpnClientPackage -ResourceGroupName $rgName -VirtualNetworkGatewayName $vpnGWName -ProcessorArchitecture Amd64  
write-host -foregroundcolor green "-----instalando cliente vpn"
Invoke-WebRequest -Uri $downloadUrl.Replace("""","") -OutFile "$directorioTrabajo\VPNclient.exe"
 
.\VPNclient.exe
write-host -foregroundcolor green "------------------------------------------------------------"
write-host -foregroundcolor green "SCRIPT FINALIZADO, VAYA A REDES Y CONECTESE A LA VPN, CONSULTAS A JOSE.YAPUR@L"
write-host -foregroundcolor green "------------------------------------------------------------"



Como construir arquitecturas resistentes y altamente disponibles en Azure

Mi entrevista en Channel 9

Construyendo una solución de envío de SMS y llamadas en Azure

Hola Muertos vivientes, hoy les traigo un how-to para todos los spammers en potencia, cómo en

Hola Muertos vivientes, hoy les traigo un how-to para todos los spammers en potencia, cómo enviar SMS y llamadas a celulares de todo el mundo usando Azure y voz generada por texto. Para ello tenemos que ir a http://Twilio.com y crearnos una cuenta, ahi solicitaremos:

  • Un número de telefonico.
  • Un api key de cuenta.

El primer paso es crear una clase Twimlo.aspx.cs que genere el texto en SSML:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Notificaciones
{
    public partial class Twimlo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "text/xml";
            Response.Write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response><Say voice=\"man\" language=\"es\" loop=\"2\">"+Request["mensaje"]+"</Say></Response>");
            Response.End();
        }
    }
}

Y en el Default.aspx yo he creado 4 controles, 2 cajas de texto, un checkbox y un botón, tal como se muestra en la imagen:

Luego en mi proyecto de Visual Studio he agregado desde NuGet el paquete de Twilio:

Install-Package Twilio

Ahora, vamos al code behind de Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Twilio;

namespace Notificaciones
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e){}

        protected void Button1_Click(object sender, EventArgs e)
        {
 
            string accountSID = "ID de cuenta";
            string authToken = "token de cuenta";

            TwilioRestClient client;
            client = new TwilioRestClient(accountSID, authToken);
            if (CheckBox1.Checked)
            {
                String Url = "http://{nombredeSitio}.azurewebsites.net/Twimlo.aspx?mensaje=" + TextBox2.Text.Replace(" ", "%20");
                CallOptions options = new CallOptions();
                options.From = "{numero generado}";
                options.To = TextBox1.Text;
                options.Url = Url;
                var call = client.InitiateOutboundCall(options);
            }

            else
            {
                    client.SendMessage(
                        "{numero generado}", // From number, must be an SMS-enabled Twilio number
                        "{numero destino}",     // To number, if using Sandbox see note above
                        TextBox1.Text);                // message content
            }
        }
    }
}

Ahora solo queda publicar a un Azure WebApp y listo!

Soporte Gratis para los clientes de Azure EA

Muchos de nosotros usamos Azure como una extensi&amp;oacute;n del centro de datos de nuestra empresa, al

Muchos de nosotros usamos Azure como una extensión del centro de datos de nuestra empresa, al hacerlo ganamos muchísima flexibilidad, sin embargo también nos vemos enfrentados al hecho de que algunas cosas necesitan un cierto nivel técnico y algún tiempo de lectura para hacer que funcionen siguiendo las mejores prácticas.

Hoy, Microsoft ha dado un paso súper importante, ha hecho el soporte de $3600 y $12000 gratuito para clientes que tengan un EA.

El enlace donde se publica es https://azure.microsoft.com/es-es/blog/announcing-azure-support-upgrade-for-enterprises/

Mi material del DevDays 2016

Como lo prometido es deuda, comparto con ustedes lo presentado en el DevDays 2016 Presentaci&amp;oacute;

Como lo prometido es deuda, comparto con ustedes lo presentado en el DevDays 2016

Presentación Azure Openess

Demo Script

#primer paso, crear grupo de recursos
azure group create AInterop "East US"
#crear cuenta de storage
azure storage account create demoperu0003
#plus, como crear un file share SMB 3.0
azure storage account connectionstring show demoperu0003

export AZURE_STORAGE_ACCOUNT=<account_name>
export AZURE_STORAGE_ACCESS_KEY=<key>
export AZURE_STORAGE_CONNECTION_STRING="<connection_string>"

azure storage share create sharedemo
azure storage directory create sharedemo prueba

#como automatizarlo en python
nano demo.py
#dentro de nano escribir
regiones = "East US"
grupo = "AInterop"
aplicacion = "demoperu00009"

from subprocess import call
call('azure storage account create '+aplicacion+' -l "'+regiones+'" -g "'+grupo+'"', shell=True)
#ctrl+x y luego Y
##########################
#containers, conectarse a la vm por ssh
ssh nomvm.cloudapp.net -l eladmin
#buscar repos
docker search debian
#correr un contenedor con debian
docker run -i -t debian /bin/bash
apt-get install zip
zip
exit
zip
#correr un contenedor con XAMPP
docker run -p 41061:22 -p 41062:80 -d -v ~/my_web_pages/my_testing_page1:/www tomsik68/xampp
#conectarse y modificar el index
ssh root@localhost -p 41061
cd /www
nano index.php



docker run -p 41072:22 -p 41078:80 -d -v ~/my_web_pages/my_testing_page1:/www tomsik68/xampp


 

Presentación de 0 a 100 en Azure ARM

Url usadas:

#Abrir la pagina de templates
https://github.com/Azure/azure-quickstart-templates/ 
#Navegar a la creacion de 2 vm con LB
https://github.com/Azure/azure-quickstart-templates/tree/master/201-2-vms-internal-load-balancer 

 

Exportando plantillas ARM de Grupos de Recursos

Con el nuevo modelo de Azure ARM podemos crear Grupos de Recursos y agrupar recursos de computo, red

Con el nuevo modelo de Azure ARM podemos crear Grupos de Recursos y agrupar recursos de computo, redes y almacenamiento de forma que:

  • Se garantiza la granularidad de accesos a los grupos y componentes.
  • Se pueden asignar etiquetas a los recursos para facilitar la gestión.
  • Y lo más importante, se pueden aprovisionar recursos desde plantillas en JSON.
  • Hace unas semanas anunciamos la posibilidad de exportar plantillas desde un Grupo de Recursos a JSON de tal forma que la arquitectura pueda ser reutilizada.

Vamos manos a la obra:

Entramos a Azure y busquemos un grupo de recursos creado previamente y podremos ver que se ha habilitado una nueva opción ¨Export Template¨

Al hacer clic podremos ver que se generó, le damos clic en Download, y nos descargará un archivo Zip, luego podemos ir a http://armviz.io/ y vamos a darle clic en Open from file, a lo cual veremos que se generó automáticamente la arquitectura

Resultado final

 

Crear un Container en Docker con XAMPP

Hola Muertos vivientes, hoy les ese&amp;ntilde;ar&amp;eacute; como crear contenedores en Docker con XAMPP y

Hola Muertos vivientes, hoy les eseñaré como crear contenedores en Docker con XAMPP y luego publicar un sitio web en el. Comencemos, para este how-to necesitamos:

  • Una cuenta de Azure
  • Putty, Terminal o Bash

Como primer paso vamos a ir a Azure y crear Docker Ubuntu, simplemente ingresamos a https://portal.azure.com y los loqueamos, una vez ahi, vamos a dar clic en el botón marketplace

En el marketplace vamos a buscar Docker on Ubuntu Server y le damos clic

Seguimos el wizard y configuramos que el método de autenticación es Password y no SSH Key.

Ahora nos vamos al Terminal y escribimos:

ssh nomvm.cloudapp.net -l eladmin

Eso nos conectará vía SSH al servidor de Docker, ahora crearemos el contenedor:

docker run -p 41061:22 -p 41062:80 -d -v ~/my_web_pages/my_testing_page1:/www tomsik68/xampp

En donde el puerto 41061 apunta al puerto 22 para SSH y el puerto 41062 apunta al puerto 80 para HTTP, para validar que el contenedor se haya creado correctamente, podemos usar el siguiente comando:

docker ps

Y veremos que nuestro contenedor se lista. Ahora que ya tenemos el contenedor funcionando, vamos a conectarnos vía SSH al contenedor para comenzar a crear código:

ssh root@localhost -p 41061
cd /www
nano index.php

En el nano escribiremos un clásico Hola Mundo:

<?php

echo 'Hola Mundo ', $_GET['nombre'];

?>

Ahora vamos al portal de Azure nuevamente y creamos una regla de entrada en el Network Security Group de la maquina virtual:

Con eso deberíamos poder ingresar a nuestro sitio Web sin problemas!