sábado, 5 de marzo de 2016

Asegurar un sitio web en Ubuntu con un certificado PFX solicitado en una PKI Windows

Hay veces que las empresas tienen su PKI para asegurar todos los servicios windows.
Como suele ser de Directorio Activo, todos los equipos de la empresa confían automáticamente en esa CA. 
Pero que pasa si quiero asegurar un sitio apache/linux. Pues se suele hacer un certificado autofirmado en el que nadie confía.

Pues esto se soluciona en el siguiente video:


Los pasos son los siguientes:


Certificados

Obtener el certificado en la PKI Windows

  • Certificado de autenticación del servidor
  • Marcar la clave como exportable
  • Nombre descriptivo igual al que vas a poner en la URL del navegador




Llevar el certificado al ubuntu y:

Clave pública  del sitio

openssl pkcs12   -in apacheXX.domi.com.pfx   -clcerts -nokeys  -out apacheXX.domi.com.cer

Clave privada  del sitio

openssl pkcs12   -in apacheXX.domi.com.pfx   -nocerts -nodes  -out apacheXX.domi.com.key

Clave de la CA (Autoridad Certificadora)

openssl pkcs12   -in apacheXX.domi.com.pfx -nodes -nokeys -cacerts  -out  WS2012XX-CA-1.crt    

Explicación de valores

-nocerts               don't output certificates.
-clcerts                only output client certificates.
-cacerts               only output CA certificates.
-nokeys               don't output private keys.

Habilitar módulo SSL en Apache

Se debe habilitar el módulo SSL en el servidor para poder asegurar sitios web
a2enmod ssl

Configuración de Apache.

Configuración a añadir al sitio web que quiero asegurar. Dentro de la directiva virtualhost:443

 SSLEngine on
 SSLCertificateFile          /etc/ssl/private/apacheXX.domi.com.cer
 SSLCertificateKeyFile     /etc/ssl/private/apacheXX.domi.com.key
 SSLCACertificateFile      /etc/ssl/certs/WS2012XX-CA.crt
 ...


Los certificados los puedes crear en ubuntu donde quieras. pero debería acabar en las carpetas /etc/ssl.


Espero que os haya servido.
Un saludo

sábado, 27 de febrero de 2016

Aplicacion Access en Office 365. Access Web. 2. Conexión con el SQL Server Management Studio (SSMS) o a través de ODBC.

La base de datos de la aplicación Access Web se crea en una Base de Datos Azure 

Se puede ver la creación de la aplicación Access Web en Office 365 en el siguiente enlace:
Aplicacion Access en Office 365. Access Web. 1. Creación, consejos iniciales.

En este video veremos como conectar a la base de datos de una aplicación ACCESS WEB en Office 365 utilizando el Sql Server Management Studio y Excel con ODBC.



Aplicacion Access en Office 365. Access Web. 1. Creación, consejos iniciales.

Consejos:

1. Todas las tablas deben tener un ID autonumérico.
Si no se creará uno en la migración y descuadrará los datos.

 2. Crear relaciones entre las tablas para exigir integridad referencial.

3. No poner campos de búsqueda.
Automáticamente generará en la aplicación los campos de búsqueda y sus subformularios. Si pones campos de búsqueda, NO LO HARA!!!

4. Poner título en todos los campos para que aparezca correctamente en la aplicación final.




Para ver la segunda parte:
Aplicacion Access en Office 365. Access Web. 2. Conexión con el SQL Server Management Studio (SSMS) o a través de ODBC.

miércoles, 17 de febrero de 2016

Azure RM (ARM). Crear Máquina Virtual en Azure con Powershell .Crear Grupo de Recursos, Almacen, RED, Grupo de Seguridad, IP pública, IP privada y Tarjeta de Red

Hay veces que tengo que generar varias máquinas en mis suscripciones de Azure.
O utilizo Azure con mis alumnos y quiero que todos tengan las máquinas configuradas de la misma manera.

Esto se podría hacer por la web http://portal.azure.com. Pero hay demasiados pasos y posibilidades de error. Es por eso que me he decidido a crear un powershell utilizando Azure RM que cree TODO desde cero con la configuración que quiero.



Creo todas las variables que voy a usar posteriormente:

#Con ARM.... la nueva versión de máquinas virtuales
$MiNN = "32" #Número a cambiar para crear varias máquinas virtuales
$MiDNS = "40.127.177.225" #Dirección IP del servidor DNS de la organización que quieres que utilicen las máquinas
#=============================================
$Migr = "gr$MiNN" #Grupo de recursos
$MiRed = "red$MiNN" #Nombre de red
$MiSubred = "misubred$MiNN" #Nombre de la subred
$MiRangoIP = "10.4.1$MiNN.0/24" #Rango de direcciones subrede
$MiLoc = "North Europe" #Localización de todos los recursos. Podría ser también "East US" o ....
$MiAlmacen = "almacensri$MiNN" #Nombre del almacenamiento
$MiVMSize = "Basic_A1" #Tamaño de la máquina virtual
#=============================================
$MiMVws = "ws2015$MiNN" #WINDOWS. Nombre de la máquina virtual
$MiIpPrivws = "10.4.1$MiNN.101" #WINDOWS. Dirección IP privada estática
$MiIPws = "IPws$MiNN" #WINDOWS. Nombre de la Dirección IP pública estática
$MiNICws = "NICws$MiNN" #WINDOWS. Tarjeta de red
$MiGSws = "GS_ws$MiNN" #WINDOWS. Grupo de seguridad. Se definirar las reglas de entrada y salida del tráfico
#=============================================
$MiMVus = "us2015$MiNN" #UBUNTU. Nombre de la máquina virtual
$MiIpPrivus = "10.4.1$MiNN.100" #UBUNTU. Dirección IP privada estática
$MiIPus = "IPus$MiNN" #UBUNTU. Nombre de la Dirección IP pública estática
$MiNICus = "NICus$MiNN" #UBUNTU. Tarjeta de red
$MiGSus = "GS_us$MiNN" #UBUNTU. Grupo de seguridad. Se definiran las reglas de entrada y salida del tráfico
#=============================================
Hay que crear:

GRUPO DE RECURSOS en la ubicación que quieras. En nuestro caso será el "Norte de Europa".
New-AzureRmResourceGroup
#Añadir Grupo de Recursos
$GrupoRecursos = New-AzureRmResourceGroup -Location $MiLoc -Name $Migr
#$GrupoRecursos = Get-AzureRmResourceGroup -Name $Migr

GRUPO DE ALMACENAMIENTO
ew-AzureRmStorageAccount
#Añadir Cuenta de almacenamiento
$CuentaAlmacen = New-AzureRmStorageAccount -Location $MiLoc -Name $MiAlmacen -Type Standard_LRS -ResourceGroupName $Migr

RED Y SUBRED. New-AzureRmVirtualNetworkSubnetConfig
New-AzureRmVirtualNetwork

#Añadir Red y Subred
$SubRed = New-AzureRmVirtualNetworkSubnetConfig -Name $MiSubred -AddressPrefix $MiRangoIP
$RedVirtual = New-AzureRmVirtualNetwork -Location $MiLoc -Name $MiRed -AddressPrefix "10.0.0.0/8" -DnsServer $MiDNS -Subnet $SubRed -ResourceGroupName $Migr

GRUPO DE SEGURIDAD (Sólo muestro la regla del RDP, las otras serían similares con distinta prioridad). New-AzureRmNetworkSecurityGroup
#WINDOWS. Añadir Grupo de seguridad
New-AzureRmNetworkSecurityGroup -Location $MiLoc -Name $MiGSws -ResourceGroupName $Migr
Get-AzureRMNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr | Add-AzurermNetworkSecurityRuleConfig -Name "allow-rdp-in" -Direction Inbound -Priority 100 -Access Allow -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Protocol TCP | Set-AzureRmNetworkSecurityGroup
Get-AzureRMNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr | Add-AzureRmNetworkSecurityRuleConfig -Name "allow-rdp-out" -Direction Outbound -Priority 100 -Access Allow -SourceAddressPrefix * -SourcePortRange 3389 -DestinationAddressPrefix * -DestinationPortRange * -Protocol TCP | Set-AzureRmNetworkSecurityGroup
$GrupoSeg_ws = Get-AzureRmNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr

CREACIÓN DE IP PÚBLICA ESTÁTICA Y DE LA TARJETA DE RED New-AzureRmPublicIpAddress
New-AzureRmNetworkInterface

$pipws = New-AzureRmPublicIpAddress -Location $MiLoc -Name $MiIPws -AllocationMethod static -ResourceGroupName $Migr -DomainNameLabel $MiMVws
$nicws = New-AzureRmNetworkInterface -Location $MiLoc -Name $MiNICws -SubnetId $RedVirtual.Subnets[0].Id -PublicIpAddressId $pipws.Id -PrivateIpAddress $MiIpPrivws -ResourceGroupName $Migr -NetworkSecurityGroupId $GrupoSeg_ws.Id

CREACIÓN DE LA MÁQUINA VIRTUAL New-AzureRmVM
#=========================== #WINDOWS. Creación de la máquina virtual
$imagePublisher = "MicrosoftWindowsServer"
$imageOffer = "WindowsServer"
$VersionOSSku = "2012-R2-Datacenter"
$pipws = New-AzureRmPublicIpAddress -Location $MiLoc -Name $MiIPws -AllocationMethod static -ResourceGroupName $Migr -DomainNameLabel $MiMVws
$nicws = New-AzureRmNetworkInterface -Location $MiLoc -Name $MiNICws -SubnetId $RedVirtual.Subnets[0].Id -PublicIpAddressId $pipws.Id -PrivateIpAddress $MiIpPrivws -ResourceGroupName $Migr -NetworkSecurityGroupId $GrupoSeg_ws.Id

$cred = Get-Credential -Message "Introduce el nombre del usuario y la contraseña"
$vm = New-AzureRmVMConfig -VMName $MiMVws -VMSize $MiVMSize
$vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName $MiMVws -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName $imagePublisher -Offer $imageOffer -Skus $VersionOSSku -Version "latest"
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nicws.Id
$osDiskUri = $CuentaAlmacen.PrimaryEndpoints.Blob.ToString() + "vhds/$MiMVws.vhd"
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $MiMVws -VhdUri $osDiskUri -CreateOption fromImage

New-AzureRmVM -ResourceGroupName $Migr -Location $MiLoc -VM $vm


De la misma forma se podría hacer con una máquina virtual Ubuntu.

Si queréis descargar el código podéis hacerlo de:
https://github.com/javiteran/powershellAzureRM
Espero que os sirva.



Para hacer esto hay que primero conectarse a la suscripción de Azure mediante powershell. Login-AzureRmAccount
$subscriptionId =
( Get-AzurermSubscription |
Out-GridView `
-Title "Selecciona cuenta ..." `
-PassThru
).SubscriptionId
Select-AzurermSubscription -SubscriptionId $subscriptionId

#Comprobación
Get-AzurermSubscription

viernes, 16 de octubre de 2015

Creación de Zona DNS con Powershell

Hay momentos en los que necesito crear múltiples zonas y crearlas correctamente.
Siempre necesito crear registros de tipo A, AAAA, CNAME, MX y además configurar correctamente los registro NS y el registro SOA.

He estado investiganco como crearlo automáticamente por powershell y parece que se peude hacer todo lo que quieras.

Utilizando el Powershell ISE y su ayuda con intellisense se puede hacer bastante fácil.

Aconsejo utilizar el parámetro "update-help dnsserver" en el powershell para que funcione el intellisense.



Los cmdlets que he utilizado son:

  • Remove-DnsServerZone
  • Add-DnsServerPrimaryZone
  • Remove-DnsServerResourceRecord
  • Add-DnsServerResourceRecordAAAA
  • Add-DnsServerResourceRecordA
  • Add-DnsServerResourceRecordCName
  • Add-DnsServerResourceRecordMX
  • Add-DnsServerResourceRecord
  • Set-DnsServerResourceRecord

Aunque hay muchos mas.

Al final he hecho el script de powershell utilizando una variable para automatizarlo lo máximo posible. Lo pongo a continuación:

#Descarga la ayuda del dnsserver para que funcione el intellisense
update-help dnsserver


#Introducir el nombre de la zona en la siguiente variable
$QueZona ='prueba.es'
#Como es un ejemplo. BORRA la zona si está creada
Remove-DnsServerZone -Name $QueZona -force 
#Crea una zona primaria con un archivo de zona llamadao zona.dns
Add-DnsServerPrimaryZone -Name $QueZona -ZoneFile "$QueZona.dns"
#Elimina TODOS los registros NS de la zona recien creada. El registro inicial suele ser erroneo.
Remove-DnsServerResourceRecord -Name "@" -RRType Ns -ZoneName $QueZona -Force
#Crea registros de tipo AAAA, A, CNAME, MX
Add-DnsServerResourceRecordAAAA -IPv6Address 2001::115 -Name ns1 -ZoneName $QueZona
Add-DnsServerResourceRecordAAAA -IPv6Address 2001::115 -Name www -ZoneName $QueZona
Add-DnsServerResourceRecordA -IPv4Address 172.20.140.254 -Name ns2 -ZoneName $QueZona
Add-DnsServerResourceRecordAAAA -IPv6Address 2001::115 -Name mail -ZoneName $QueZona

Add-DnsServerResourceRecordCName -HostNameAlias "www.$QueZona" -Name ftp -ZoneName $QueZona
Add-DnsServerResourceRecordCName -HostNameAlias "www.google.es" -Name google -ZoneName $QueZona

Add-DnsServerResourceRecordMX -MailExchange "mail.$QueZona" -Name "@" -Preference 10 -ZoneName $QueZona

#Crea dos registros NS
Add-DnsServerResourceRecord -Name "@" -NameServer ns1.$QueZona -NS -ZoneName $QueZona
Add-DnsServerResourceRecord -Name "@" -NameServer ns2.$QueZona -NS -ZoneName $QueZona

#Modifica los parámetros de "Servidor primario" y "Número de serie" del registro SOA de la zona
$OSOA = Get-DnsServerResourceRecord -ZoneName $QueZona -RRType SOA
$NSOA = Get-DnsServerResourceRecord -ZoneName $QueZona -RRType SOA
$NSOA.RecordData.PrimaryServer = "ns1.$QueZona"
$NSOA.RecordData.SerialNumber = "2015101301"

Set-DnsServerResourceRecord -NewInputObject $NSOA -OldInputObject $OSOA -ZoneName $QueZona
 
Puedes descargar este y otros ejemplos de:

https://github.com/javiteran/Powershell.git

Espero que sea de vuestro interés.

Un saludo.

miércoles, 9 de enero de 2013

Configurar un FTP implicito/explicito con SSL/TLS en Windows Server 2008 R2

Instalar en Windows Server 2008 R2 un sitio FTP seguro tanto implícito (puerto 990) como explícito (puerto 21) obteniendo el certificado de una PKI instalada en el Server 2008 R2.
La configuración de las máquinas que he usado en el ejemplo es la siguiente:

===========================================
Parte 1 en la que se configura el ROL de la PKI/CA (Infraestructura de clave publica o Autoridad Certificadora) con el que vamos a obtener los certificados para poder asegurar en el siguiente vídeo nuestro sitio FTP.

Parte dos en la que realmente se configura el servicio FTP.

En la siguiente imagen se demuestra que tengo las dos conexiónes ftp realizadas:

  1. ftps   --> Conexión FTP IMPLICITA a través del puerto 990
  2. ftpes --> Conexión FTP EXPLICITA a través del puerto 21

Ambas son conexiones cifradas.
La primera realiza primero la negociación de los certificados y luego la conexión al FTP y las transferencias.
La segunda realiza primero la conexión al servidor FTP y después negocia con los certificados como se ve en la imagen también.


Espero que sea de utilidad.

jueves, 13 de diciembre de 2012

Captura de tráfico DHCP con el Wireshark

Ejemplo de Captura de paquetes DHCP con el Wireshark utilizando servidores windows server 2008 R2, Ubuntu Desktop y clientes windows y linux.
El Wireshark es un analizador de protocolos muy conocido y básico en formación para entender como son todos los paquetes que van por la red.
En este caso nos conformamos con el DHCP.


En este video se ve perfectamente el proceso de captura de todos los paquetes DHCP utilizando el filtro BOOTP y capturando los paquetes DHCPDiscover, DHCPOffer, DHCPRequest, DHCPACK.

Este proceso queda bastante explicado en la siguiente imagen.
Hay que tener en cuenta que como es IPv4 casi todo el proceso se hace mediante paquetes broadcast a la red y por lo tanto escuchados por "TODOS" los equipos de la red.


Además de ver donde están los datos de las concesiones y las capas OSI/TCP/IP desde la capa física, la capa de enlace de datos, la capa de red, la capa de transporte y el resto de las capas.


En la siguiente imagen se ve un ejemplo del archivo de log de un Ubuntu en el que se muestra también todo el proceso de obtención de IP para ese cliente.


Un saludo, espero que os sea útil.

domingo, 18 de diciembre de 2011

Instalar una PKI y una PKI subordinada de AD en Windows Server 2008 R2

Me ha surgido la duda de instalar una PKI subordinada de empresa perteneciente a un Directorio Activo dependiendo de una CA/PKI que no era de empresa.

A parte de mover certificados .cer, .p7b, .crl de un lado para otro lo importante es la CRL (Lista de Revocación de Certificados).

No se puede crear una entidad subordinada si la principal no publica una CRL con todos sus certificados revocados para estar al día la una con la otra. Eso se hace en las propiedades de la "Autoridad Certificadora" principal en la pestaña "Extensiones" en la que hay que añadir la ruta web del archivo .crl o la ruta de carpeta compartida donde está ese mismo archivo.
En local está en:
      c:\windows\system32\certsrv\certenroll\.crl
en remoto en:
         http://-equipo-/certenroll/-archivo-.crl
      ó 
        \\-equipo-\certenroll\-archivo-.crl

Una vez hecho eso correctamente instalas la PKI subordinada, le solicitas el certificado a la PKI principal (lo obtienes por la inscripción web) y poco mas.... a trabajar


Bueno, tengo una duda con las todas las propiedades que he marcado en las "extensiones".... pero ya investigaré detalladamente que es cada uno de los checkbox que he marcado.

Un saludo.