Kategoriarkiv: Teknologi

SSL cert til Ubiquiti Unifi AP

Jeg har, i erkendelse af at mine krav til trådløs dækning ikke helt kan opfyldes med en bilka router eller andre routere på markedet, købt et semi-enterprise produkt der hedder Ubiquiti UniFi. Semi-enterprise er måske lidt en hård vurdering da det fuldt lever op til mange enterprise krav. Men jeg synes det halter lidt på administrationsdelen. Dybest set så består det af nogle Access Points som man kan installere rundt om i huset og fra hvert af dem trækker man så kabel til sin switch eller router. Ind imellem switch og router skal man dog sætte en strømforsyning som så sender strøm til de forskellige Access Points via ethernet, altså POE. Hvis du har en switch som understøtter POE kan du imidlertid undvære strømforsyningerne og spare lidt strøm ;)

 

Der hvor det halter lidt med enterprise delen er at der ikke medfølger en hardware controller, dog er der en software controller, men denne er ikke OOTB til at få til at køre som en service. Men hvis du har en pc der kan køre applikationen 24/7 så er du alligevel meget godt med. Controlleren opsamler logs og kan agere hotspot voucher udbyder og meget meget andet. Denne controller dog ikke nødvendig for at dine Access Points fungerer, du kan nøjes med at installere den, starte den op, konfigurere dit netværk og slukke controlleren, så kører dine access points dit netværk helt fint. I mit tilfælde er dog ikke helt nok da jeg gerne vil have et gæstenetværk og dette gæstenetværk skal benytte vouchers med 24-timers adgang. For at disse vouchers kan udstedes og checkes når gæster logger på, så skal hotspot manageren køre og denne er en del af controlleren.. Så denne skal i mit tilfælde være i luften 24/7.

 

Så langt så godt. Men når man så logger på controlleren, så dukker der en certifikat fejl op. Dette skyldes at den kører med et self-signed certifikat. Umiddelbart kunne jeg nok leve med dette og bare acceptere certifikat fejlen når jeg tilgår siden. Men for nylig opgraderede jeg mit ADFS miljø til v3.0 altså Windows Server 2012R2 og proxy serveren til denne service er en Web Application Proxy. Web Application Proxy serveren kan publicere https sider og validere dem på forskellige måder. Denne benytter jeg til at publicere vores interne wordpress med SSO og det er så stor en succes, at jeg gerne ville have min Unifi Controller med på samme vogn. Det kræver dog at WAP´en har en kopi af webserverens certifikat med nøgle. Og denne har jeg ikke. Så for at få det til at lykkedes skal jeg have et certifikat fra mit interne CA lagt ind i java-tomcat webservicen som controlleren dybest set er og det er ikke helt så let at få den til at acceptere certifikater fra en windows CA. Men efter lidt kamp og med god hjælp fra Ubiquiti forummet, så lykkedes det og her er opskriften.

 

Installer SSL cert og sørg for at nøglen er eksporterbar

Eksporter certifikatet med nøgle og alle certifikater i kæden

Giv det password “aircontrolenterprise”

På unifi serveren køres 

 

keytool -list -keystore “sti til certifikat” -storetype pkcs12

output ligner dette

Your keystore contains 1 entry 

le-webservercert-og et langt tal, 24-03-2014, PrivateKeyEntry,

Certificate fingerprint (SHA1): XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

Gå ind i biblioteket c:\users\bruger\ubiquiti UniFi\data

omdøb keystore til keystore.orig

 

keytool.exe -importkeystore -srcstoretype pkcs12 -srcalias le-webservercert-og et langt tal -srckeystore “sti til certifikat” -keystore keystore -destalias unifi

Brug password ”aircontrolenterprise” 3 gange

Hvis ikke du kan finde keytool, så er det fordi java bin ikke ligger i din path. Keytool ligger i c:\Program Files\Java\jre7\bin

Og dit keystore ligger i c:\users\bruger\Ubiquiti UniFi\data

Windows version og producttype

Hvis man skal lave et wmi filter der genkender windows versioner skal man kende ovenstående. Der er heldigvis en logik i opbygningen og der er adskillige værktøjer til rådighed til at finde informationen, så det er nemt nok. Men jeg kunne nu godt tænke mig en liste så jeg kan slå dem op når jeg sidder og laver filtre. Så det er baggrunden for denne artikel.

Men først så lad os lige kigge på dem og se om der er en rød tråd i opbygningen.

Versions attributten benyttes til at skelne mellem de forskellige versioner af windows. Man kan godt vise versioner tilbage fra windows 2000 , men disse kan i wmi sammenhænge kun benyttes til at sørge for at versioner efter 2000 ikke får påtrykt en politik der er ment til en 2000. En windows 2000 klient eller server vil ikke læse filteret da wmi ikke findes til windows 2000. De versioner jeg kan forestille mig man arbejder med idag er:

5.1% – windows xp

5.2% – windows xp og windows server 2003

6.0% – windows vista og windows server 2008

6.1% – windows 7 og windows server 2008R2

6.2% – windows 8 og windows server 2012

6.3% – windows 8.1 og windows server 2012R2

 

Og som det kan ses i ovenstående så returnerer version sammen versionsnumre for både klient- og server-OS, så for at skelne skal vi bruge producttype. Producttype skelner nemlig mellem server og computer og endda også hvilken type server. Den kan være 1, 2 eller 3

1 = arbejdsstation

2 = domæne controller

3 = server

Altså kan vi kombinere ovenstående og filtrere en windows 2012R2 Domæne controller ved at skrive Producttype 6.3% Version 2 i et wmi filter vil det se således ud:

select * from Win32_OperatingSystem where Version like “6.3%” and ProductType = “2”

Disse kan også samles så man rammer både servere og domæne controllere således:

select * from Win32_OperatingSystem where Version like “6.3%” and (ProductType=”2″ OR ProductType=”3″)

Og så kan man på kryds og tværs lave filtre der rammer forskellige versioner og typer. Meget smart ;)

 

Philips HUE

Jeg har ikke skrevet meget om gadgets og det er såmænd ikke fordi jeg ikke interesserer mig for emnet, men nærmere fordi jeg ikke har al den tid i verden jeg gerne ville have til at skrive på min blog. Men nu skal det være slut, jeg har så utrolig mange lækre gadgets der skal deles med verden og den seneste i rækken er Phillips HUE.

Phillips HUE består af en kontrolenhed (The HUE Bridge) og en række pærer. Hvor mange pærer kommer vel an på ens temperament og pengepung, men i start pakken ligger der 3 pærer og 1 kontrolenhed. Prisen for denne er ca 1500,- på Apples hjemmeside og jeg har en kraftig mistanke om at Apple har vredet armen rundt på Phillips for ikke at lade andre sælge dem. Man kan så håbe at dette ændrer sig i fremtiden og at prisen vil ændre sig som følge af lidt konkurrence, for det er dyrt.

Men hvordan virker det så??

På pakken står der 3 informationer!

  1. Tilslut pærerne
  2. Tænd på kontakten
  3. Tilslut kontrolenheden

Og det er intet mindre end lige præcis så nemt. Jeg havde installeret app´en på forhånd, men det ville ellers være næste skridt. Når denne startes op, instruerer den en om at man skal trykke på knappen på kontrolenheden. Jeg trykkede på den eneste knap der er på kontrolenheden og voila, så var vi klar. Jeg kunne slukke og tænde og lege med farver som jeg lystede. Sidst jeg oplevede en installation der fremkaldte samme reaktion, var da jeg installerede mit sonos system og der er ikke meget der hører til i den klasse.

Efter lidt roden rundt i systemet fandt jeg ud af at omdøbe de enkelte pærer, så man kan se hvilke pærer man skifter farver på, det vil jeg mene er det første man skal gøre. Derefter oprettede jeg diverse temaer, dette kan gøres ud fra billeder man selv har taget eller man kan vælge “Phillips” og vælge mellem alle farver. Det kræver lidt roden rundt i farver før man finder de rigtige, men med lidt leg så kan man fremkalde stemninger der passer til ethvert tidspunkt. Vi har et tema til brætspil, spise, læse, se film osv osv. Man kan lave stemninger der lader lyset være en bestemt farve i en fastsat tid, for derefter at slukke ned, enten med det samme eller over tid (6 eller 9 minutter). Når man opretter et tema vælger man først et navn, hvilke pærer der skal være med, om det skal være med timer, farve, styrke og så gemmer man.

Udover de åbenlyse funktioner kan man også fjernstyre lyset fra ferien, få lyset til at tænde når man kommer hjem eller slukke når man går og med de forskellige udvidelser der findes så er det kun fantasien der sætter grænser. Og dette er kun begyndelsen, Phillips har også lightstrips der kan klæbes bag/under møbler og lyse op der og jeg tror der kommer mange mange flere sjove ting fra den kant i de kommende år.

Jeg vil ikke komme så langt ind på teknikken men kort kan det nævnes at det kører på z-waves som er en åben standard. Frekvensen der benyttes til at kommunikere på er lavere end almindelig wifi og rækker længere. Pærerne opretter et såkaldt mesh-netværk der betyder at pærerne kommunikerer indbyrdes og man kan derfor sætte pærer op der er uden for kontrolenhedens rækkevidde sålænge der er en forbundet pære i nærheden. En smart løsning som jeg ikke har et stort nok hus til at teste, men det skulle virke! Pærerne er led og bruger fra 2-8W i drift. Når de er slukkede bruger de 0.01-0.02A = 0.4W, dette bruges til logikken i pærerne. Om det så ender op med at være mere eller mindre end en almindelig pære kommer an på om man benytter led-pærer i forvejen eller almindelige sparepærer. Ihvertfald er det ikke de store strømtyve.

Overordnet er vi meget tilfredse og vi er kun lige begyndt at lege ;)

 

Installation af FreeNAS v. 9.1.0

Maskinen er klar og jeg har smidt en 160BG disk i til systemet. Den allokerer hele disken til systemet så jeg tænkte at det ville være en god ide at smide en lille disk i som jeg alligevel ikke vil benytte til storage. Min maskine er dog uden cdrom drev og derfor valgte jeg at installere fra en usb stick jeg har liggende. Det viser sig at jeg skulle kæmpe længe for at nå frem til et helt andet mål end det jeg egentlig ville frem til.

Først og fremmest så vælger jeg selvfølgelig at påbegynde installationen mens jeg alligevel er ved at lave mad. Det er såmænd ikke fordi jeg har en elendig timing, men jeg venter bare ikke, så der er slet ikke tale om timing. Der er lidt udfordringer, for det er en iso fil jeg har hentet og man  kan ikke bare smide de udpakkede filer over på en stick der er præpereret med diskpart og så boote maskinen fra den. Man skal åbenbart udpakke en image fil der ligger i biblioteket og kopiere den over på disken. Filen hedder FreeNAS-x64.img.xz og den indeholder FreeNAS-x64.img som er selve FreeNAS operativ systemet. Denne skal så smides over på disken med et program der hedder physdiskwrite og så er man klar til at boote.

Jeg blev noget overrasket over at se FreeNAS starte op, ikke installationen men selve systemet. Da jeg senere havde tid til at læse de blogs jeg tidligere havde fundet diverse info på, fandt jeg ud af at det også var sådan det skulle være. Min første tanke var at jeg måtte finde et cdrom drev og få installeret på disken, men jeg fandt ud af, på freenas.org, at selve systemet fint kan køre fra en usb stick sålænge den var på 4GB. Min var på 2GB men jeg startede forfra og oprettede en 4GB stick og så var jeg flyvende. Det har ingen effekt på systemets hastighed, da alt bliver lagt i ram og det er altså kun boot-tiden der er påvirket.

Første installation var altså i luften og jeg var klar til at lege lidt. Først oprettede jeg en volume i volume manageren. Jeg brugte (bad judgement call :) ) den 160GB disk der allerede sad i. Jeg var godt klar over at det ikke ville blive permanent, men bare for at prøve ;)

Opskriften er altå således for installationen.

  • Download FreeNAS iso´en fra http://www.freenas.org
  • Download physdiskwrite fra http://m0n0.ch/wall/physdiskwrite.php
  • Pak iso filen ud (evt med 7-zip)
  • Pak FreeNAS-x64.img.xz ud (evt med 7-zip)
  • Klargør din usb stick med diskpart, select disk #, clean
  • Brug physdiskwrite til at kopiere  FreeNAS-x64.img over på stick´en
  • Boot dit nye NAS fra disken

Det er simpelt når man får serveret hele opskriften, det gjorde jeg IKKE :(

 

FreeNAS

Jeg har besluttet mig for at jeg vil prøve at lave mit eget NAS og helst et der giver mig mulighed for at kunne udvide så meget jeg har lyst. Og jeg tror FreeNAS er et godt valg, så jeg tog en maskine jeg havde til overs frem og smed et par diske i og forsøgte at installere FreeNAS. Jeg er helt og aldeles grøn og synes derfor det kunne være interessant at skrive om de udfordringer jeg møder i denne nye verden! Så denne del af min blog kommer til at omhandle mit nye FreeNAS.

Gennemsøgning af tekst-filer

Fik en forespørgsel idag om jeg kendte et værktøj der kunne gennemse en masse tekstfiler for en bestemt streng og det gør jeg da. Det er nemlig lige et job for select-string.

Meget kort kunne det jo gøres vha:

Select-String -Path “sti til tekstfilerne” -Pattern “den tekst der skal findes”

Men output er ikke ligefrem lækkert og noget du kan servere for en chef eksempelvis ;) Så jeg brugte Out-Gridview så de kunne gennemgå om de havde fundet det forventede og derefter smider vi det ud i en komma-separeret fil, således:

Select-String -Path “sti til tekstfilerne” -Pattern “den tekst der skal findes” | Select Filename,Path | Outgrid-view -Passthru | Export-csv “sti til csv filen du vil lave” -NoTypeInformation -Delimiter “;” -Encoding “BigEndianUnicode”

Det var en hurtig og nem operation. ;)

 

LDAP Connection string

Jeg har fået en del spørgsmål på det sidste om ovenstående. Jeg har set en del bruge ldap://domænenavn som en LDAP Connection String, men det er ikke korrekt.. Sådan en består typisk af 3 ting:

  1. En URI LDAP://
  2. Navnet på kataloget (hvis det er Active Directory er det domænets DNS navn)
  3. Stien til hvor man vil søge i kataloget

Hvis vi forestiller os at der skal søges i bruger-folderen skal vi pege på Users folderen. I et Active Directory med DNS navnet firmaet.dk, så ville strengen se således ud:

LDAP://Firmaet.DK/CN=Users,DC=Firmaet,DC=DK

Du kan nemt finde ud af hvor en bruger ligger i Active Directory ved at benytte powershell og hente ham frem med get-aduser og så kigge i attributten DistinguishedName. DistinguishedName returnerer også brugernavn, så det skal du lige huske at fjerne før du copy/paster den.

Hvis du bare skal søge fra roden kan du bruge:

LDAP://Firmaet.DK/DC=Firmaet,DC=DK

 

 

Billeder i Active Directory

Jeg har i et stykke tid benyttet CodeTwo´s program “Active Directory Photos” til at opdatere brugernes billeder i Active Directory, det er nemlig et fantastisk produkt, hvis man bare skal have opdateret en sjælden gang. Find det her. Det er dog rimeligt besværligt at benytte hvis man skal opdatere dagligt eller ugentligt fra en base af billeder. Jeg har derfor lavet nedenstående script der kan gøre det helt automatisk..

Billeder i Active Directory lægges i den attribut der hedder ThumbnailPhoto og for at lægge et billede i den skal vi først konvertere billedet til en struktur som powershell forstår. Og da der er mere end 1 billede lægger jeg dem selvfølgelig i en variabel form.

Billedet hentes ind i en variabel

$Photo = [Byte[]] (Get-Content “sti til billeder” -Encoding Byte)

Og dette lægges ind i attributten ThumbnailPhoto ved at gøre følgende:

Set-ADUser -Identity “Username” -Replace @{thumbnailPhoto=$photo}

Ovenstående er grundfunktionerne og for at gøre det for flere billeder skal vi selvfølgelig bruge lidt mere avancerede funktioner. I følgende eksempel kører jeg en 3-trins raket af et script, først hentes brugernavne i AD og dernæst hentes billeder på en sharepoint side (da det typisk er der man vil have et billede af de ansatte) og til sidst uploader vi billederne til AD. Bemærk at jeg ikke har angivet nogle bruger med rettigheder til at hente brugernavne fra AD, jeg forventer at dette er muligt for alle. Men hvis dit Active Directory har enablet ListObjectModeOnly og ikke tillader dette, skal du selvfølgelig også angive en bruger til at hente brugernavne med.

$Cred = Get-credential  – brugernavn og kode der giver rettigheder til at hente billederne

$Cred2 = Get-Credential - Brugernavn og kode der giver rettigheder til at uploade billederne

$A = (Get-ADUser -filter * | where {$_.samaccountname.length -eq 5}).samaccountname - Henter brugernes samaccountname

foreach ($item in $A)

{Invoke-WebRequest -Uri “hjemmeside url/$item.jpg” -Method “get” -OutFile folder\$item.jpg -Credential $cred} - Henter billederne

foreach ($item in $A)

{$photo = [byte[]](Get-Content folder\$item.jpg -Encoding byte) - Konverterer dem til byte

Set-ADUser $item -Credential $Cred2 -Replace @{thumbnailPhoto=$photo} } - Uploader billederne

Ovenstående vil selvfølgelig fejle hvis ikke der er et billede til brugeren på siden og det kræver at billederne er navngivet brugernavn.jpg og er måske ikke brugbart for alle, men det giver et meget godt indblik i hvad der skal til for at uploade billeder automatisk. Det er også muligt at man kan finde en bruger der har adgang til det hele og så er det selvfølgelig kun 1 $cred der skal bruges.

 

Backup af GPO

At lave en backup af alle gruppe politikker i et domæne, kan man selvfølgelig bruge den indbyggede backup i den grafiske brugerflade (Group Policy Management Console), men det er jo noget sejere at lave sin helt egen backup gennem powershell. :)

Først skal vi finde en lokation hvor vi vil gemme vores backup og dernæst skal vi lave et lille script der foretager backuppen.

Start med at importere group policy modulet

Import-Module GroupPolicy

Dernæst skal vi have lavet et bibliotek der indeholder dagens backup (det kan selvfølgelig også være månedens backup, det er helt op til dig selv.) Bemærk at måned er med stort M, hvis du bruger et lille m er det minut du beder den om at sætte ind, de 4 yyyy gør at året bliver 2013 istedet for yy 13.

$Lib = Get-Date -Format d.M.yyyy

Så skal vi lave et bibliotek der hedder dags dato.

New-Item -Path lokation\$Lib -Itemtype directory

Og så skal vi køre en backup af alle politikkerne.

Backup-GPO -All -Path lokation\$Lib

Det var det hele. man kan så efterfølgende lave et script der trækker et antal dage fra dags dato og sletter de gamle biblioteker.

Det endelige script ser sådan ud:

$Lib = Get-Date -Format d.M.yyyy

$Lib = Get-Date -Format d.M.yyyy

Backup-GPO -All -Path lokation\$Lib

Så skal det bare signeres og scheduleres og så er den ged barberet.. ;)

Restore af objekter i AD

Ved hjælp af værktøjer der bliver leveret med Active Directory er det muligt at restore objekter enkeltvis (såfremt man har en SystemState-backup.) Active Directory´s egen papirkurv er genial, men hvis man nu skal langt tilbage eller ikke har aktiveret papirkurven, så er nedenstående vejen frem. Jeg bruger Fredrik Lindströms værktøj DSCT for at gøre livet lidt nemmere for mig selv, det kan hentes her (download link er midt på siden.)

Først skal vi have en version af ntds.dit filen som indeholder det objekt vi gerne vil restore. Hvis du gerne vil lave en hurtig test, så kan dette gøres ved at køre følgende på en DC:

Ntdsutil “ac i ntds” Sn C Q Q

Ovenstående er den meget kort udgave af Ntdsutil | Active Instance NTDS | Snapshot | Create | Quit | Quit

Nu skal vi have vores snapshot “mounted” så vi kan få fat i databasen. Dette gøres ved at skrive følgende:

Ntdsutil sn “li a” “mo 1″ Q Q

Som er den meget korte udgave af Ntdsutil | Snapshot | List All | Mount 1 | Quit | Quit – jeg forventer at der kun er 1 snapshot, hvis ikke skal du selvfølgelig lige tjekke datoen på dine snapshots og mounte det relevante. Hvis det kun er for denne ene test du prøver det kan du også springe et trin over og køre:

Ntdsutil “ac in ntds” sn cr “li a” “mo 1″ Q Q

Så tager man et snaphot og mounter det i en kommando, husk at unmounte efterfølgende især hvis det er produktions data du sidder og leger med (det er det selvfølgelig IKKE.) Snapshot unmountes ved at køre:

Ntdsutil Sn “Li A” “Un 1″ Q Q

Så nu har vi et snaphot og det ligger klar i en folder på c-drevet der hedder noget lignende $Snap_ÅÅÅÅMMDDTTTT_VolumeC$. Folderstrukturen ligner den der er taget backup af og i mit tilfælde betyder det at databasen ligger under c:\$Snap_ÅÅÅÅMMDDTTTT_VolumeC$\windows\ntds\ntds.dit. Denne kan bruges fra denne lokation eller man kan kopiere den til en anden folder og bruge den derfra. Igen kal man huske på at dette er en backup af en bruger database og disse data kan være sensitive. For at mounte databasen skal vi have fat i Dsamain. I it tilfælde vil kommandoen se således ud:

Dsamain -dbpath c:\$Snap_ÅÅÅÅMMDDTTTT_VolumeC$\windows\ntds\ntds.dit -ldapport 11389 -allownonadminaccess

Nu har vi en kopi af vores Active Directory tilgængelig på port 11389, denne kan man forbinde sig til vha ldp og kigge ned i databasen som den så ud på tidspunktet for snapshottet. Hvis du ønsker at genkabe objekter fra den kan man trække dem ud med LDIFDE og CSVDE, men som sagt så er Fredrik Lindströms værktøj Directory Services Compare Tool så meget nemmere og hvem vil ikke gerne spare tid. ;)

Installer DSCT | Start en MMC | Add Remove Snap-Inn  |  Directory Services Compare Tool | Under Actions i højre side (ikke i menuen) vælges Datasoruce Settings | Øverst skrives sti til Live Active Directory | Nederst Snapshot | OK

 

 

Directory Services Compare Tool - datasources

Nu kan vi så se hvilke forskelle der er på vores snapshot og vores live AD.

Directory Services Compare Tool

Hvis du kigger under deleted kan du se hvilke objekter der er slettet siden og hvis du kigger under added.. Ja det giver mening ikke?

Directory Services Compare Tool - restore

Marker de slettede objekter og vælg reanimate.

Directory Services Compare Tool - reanimate

Tryk på ok tjek dit AD og konstater at dine objekter er tilbage. Husk at sætte protect from deletion og aktiver brugerne igen, men ellers er du kørende.

Hent champagnen og modtag folkets hyldest! ;)

Og kudos til Fredrik Lindström for et mega fedt tool!!