Dovecot met LDAP (jamm) en SSL (imaps)

Ik gebruik al langere tijd FreeBSD voor al mijn thuis servers. Echter zakelijk kom ik FreeBSD niet zo vaak tegen, echter Red Hat Enterprise Linux en aanverwanten wel. Vorig jaar heb ik besloten om mezelf te gaan certificeren voor Red Hat en heb RHCE gehaald. Nu ben ik voorzichtig aan het kijken om misschien zelfs voor RHCA te gaan.

Om nog vaker met RHEL systemen te werken, worden steeds meer van mijn FreeBSD machines vervangen door Centos systemen. Binnenkort zal mijn huidige FreeBSD mailserver daarom ook vervangen worden door een Centos systeem. Ter voorbereiding daarop heb ik alvast uitgezocht hoe ik Dovecot (imaps) laat samenwerken met mijn huidige mailstorage omgeving, waarbij authenticatie gegevens in LDAP staan en ik gebruik heb gemaakt van het Jamm schema.

Voor IMAPS maak ik gebruik van certificaten die gesigned zijn door cacert.org. Deze Certificate Authority werkt met een methode ‘Web of trust’ die soortgelijk is aan de methode waarop bijvoorbeeld PGP/GPG key signing werkt. Uiteraard kun je er ook voor kiezen om je certificaten van een andere partij te betrekken of te werken met ‘self signed’ certificaten.

Voordat we aan de slag kunnen, moeten er eerst wat packages geïnstalleerd worden:

sudo yum -y install dovecot openssl

Voor het verkrijgen van een door CAcert gesigned certificaat, moet je een ‘signing request’ (CSR) aanmaken. Een CSR maak je aan voor een door jezelf gegeneerde RSA private key. Normaal gesproken moet je dus met het openssl commando eerst een RSA KEY aanmaken en dan een CSR. Dit is allemaal best wel lastig, gelukkig is het bij RHEL systemen erg simpel gemaakt:

cd /etc/pki/tls/certs
make dovecot.csr

(Vul bij CommonName de volledige naam (fqdn) in van jouw systeem, dus bijvoorbeeld: imapserver.example.com)

Ga hierna naar https://secure.cacert.org/account.php?id=10 en plak de inhoud van dovecot.csr in het formulier. Laat het certificaat type op Class 3 staan. Na wat klikken komt er uiteindelijk een prachtig gesigned certificaat, plak de inhoudt hiervan in dovecot.crt. Je krijgt ook een email van CAcert met de link naar jouw nieuwe certificaat. Je hebt ook het Class 3 root certificaat nodig van CAcert. download deze van http://www.cacert.org/certs/class3.crt

Vanuit de Dovecot configuratie file gaan we straks verwijzen naar deze 3 bestanden, zet deze op de juiste plaats, met passende permissies:

install -o root -g root -m 644 class3.crt /etc/pki/tls/certs/cacert-class3.crt
install -o root -g root -m 644 dovecot.crt /etc/pki/dovecot/certs/dovecot.crt
install -o root -g root -m 644 dovecot.key /etc/pki/dovecot/private/dovecot.key

Plaats het volgende in /etc/dovecot.conf. Maak eerst een backup!

auth_verbose = yes
protocols = imap imaps
base_dir = /var/run/dovecot/

ssl_cert_file = /etc/pki/dovecot/certs/dovecot.crt
ssl_key_file = /etc/pki/dovecot/private/dovecot.key
ssl_ca_file = /etc/pki/tls/certs/cacert-class3.crt

shutdown_clients = yes
mail_location = maildir:/var/vmail/domains/%d/%n

auth default {
mechanisms = PLAIN LOGIN

userdb static {
args = uid=500 gid=500
}

passdb ldap {
args = /etc/dovecot-ldap.conf
}

userdb ldap {
args = /etc/dovecot-ldap.conf
}

socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
group = vmail
}
}

user = vmail
}

Zorg er voor dat een en ander conform jouw setup is. Denk hierbij vooral aan de user (vmail) en het bijbehorende UID (500) en de locatie van de imap data (mail_location). Bij mij staat de imap dat in /var/vmail/domains/$domein/$user, bijvoorbeeld /var/vmail/domains/example.com/pietjepuk. De loginnaam van deze voorbeeld gebruiker is dan pietjepuk@example.com.

In mail_location worden enkele Dovecot specifieke variabelen gebruikt. De betekenis er van en andere mogelijkheden, vind je op http://wiki.dovecot.org/Variables

Plaats het volgende in /etc/dovecot-ldap.conf. Als het goed is, bestond dit bestand nog niet. Anders maak je uiteraard eerst een backup.

hosts = $ldapserver
auth_bind = yes
auth_bind_userdn = mail=%u,vd=%d,o=hosting,dc=example,dc=com
ldap_version = 3
base = o=hosting,dc=example,dc=com
dn = cn=phamm,o=hosting,dc=example,dc=com
dnpass = $password
deref = never
scope = subtree
user_attrs = mailbox=mail=maildir:/var/vmail/domains/%$
user_filter = (&(objectClass=VirtualMailAccount)(accountActive=TRUE)(mail=%u))
pass_attrs = mail,userPassword
pass_filter = (&(objectClass=VirtualMailAccount)(accountActive=TRUE)(mail=%u))
default_pass_scheme = MD5
user_attrs = quota=quota=maildir:storage=%$B
user_global_uid = 500
user_global_gid = 500

Ook hier geldt weer, pas alles aan naar jouw eigen situatie.

Alle instellingen zijn nu gedaan. Start Dovecot en testen maar!

chkconfig dovecot on
service dovecot restart

Bij het starten van Dovecot, wordt er gevraagd om de passphrase van je SSL key (dovecot.key). Mocht je dit niet willen, dan dien je de passphrase te verwijderen van je key. Dat doe je als volgt:

openssl rsa -in dovecot.key -out dovecot.key

Bestands encryptie met scrypt

In mei 2009 is de tool scrypt geschreven door Colin Percival, de huidige Security Officer van FreeBSD. Wat scrypt nu precies is en kan, kun je lezen op de webpagina, in het kort komt het neer op de volgende quote:

A simple password-based encryption utility is available as a demonstration of the scrypt key derivation function. On modern hardware and with default parameters, the cost of cracking the password on a file encrypted by scrypt enc is approximately 100 billion times more than the cost of cracking the same password on a file encrypted by openssl enc; this means that a five-character password using scrypt is stronger than a ten-character password using openssl.

Klinkt allemaal goed, maar wat ik wil is gewoon een simpele methode om mijn bestand met wachtwoorden beschermen, zodat bij verlies of diefstal, ik niet een megaprobleem heb. Het merendeel van de wachtwoorden die in dat bestand staan, zijn automatisch gegenereerd en bestaan uit minimaal 10 karakters, dus als ik die kwijt ben, weet ik ze ook echt niet meer 🙂

Op een FreeBSD systeem kun je scrypt installeren vanuit de ports collectie (/usr/ports/security/scrypt), voor andere OS’en dien je de source te downloaden en zelf de compileren.

Het aanmaken van een gecrypt bestand gaat met scrypt erg simpel.

scrypt enc infile outfile

In bovenstaand voorbeeld is infile je bronbestand welke je wilt crypten en outfile het gecrypte bestand. Scrypt zal je bij het uitvoeren twee maal vragen om de passphrase (wachtwoord) waarmee je het bestand wilt beveiligen. Na het aanmaken van outfile, moet je natuurlijk wel je bronbestand verwijderen, maar controleer eerst of je het bestand kunt decrypten.

Decrypten gaat als volgt:

scrypt dec outfile

De output wordt op het scherm getoond (STDOUT), wil je de output naar een bestand hebben, dan zet je uiteraard ‘> newfile‘ achter bovenstaand commando, waarbij newfile de naam is van je gewenste bestandsnaam.

Enjoy!

Renaming a virtual host with virsh :: kvm

Soms is het handig om een virtueel systeem te hernoemen. Als ik bijvoorbeeld een nieuwe versie van een server aan het bouwen ben, noem ik zo’n machine vaak iets als new_$originelenaam. Met onderstaande commando’s kun je de naam van een virtueel systeem KVM hernoemen.

Eerst dienen we de huidige configuratie van het systeem weg te schrijven naar een bestand

sudo virsh dumpxml machinenaam > /tmp/nieuwemachinenaam.xml

Bewerk het bestand /tmp/machinenaam.xml, zet tussen de <name> </name> tags de gewenste nieuwe naam

sudo vi /tmp/nieuwemachinenaam.xml

De bestaande configuratie van het systeem dient nu verwijderd te worden.

sudo virsh undefine machinenaam

Nu kan het systeem weer worden aangemaakt met de nieuwe naam.

sudo virsh define /tmp/nieuwemachinenaam.xml

All done, starten maar!!

Rollade met aardappel partjes van de Big Green Egg

Vandaag stond er rollade met aardappel partjes op het menu. Ik had al eens eerder een rollade klaargemaakt op de Weber Q300, wat erg lekker was, maar daarbij kreeg ik de ‘dome’ temperatuur niet lager dan 120 graden. Ik wist de dat de Big Green Egg veel beter was in het reguleren van de temperatuur, dus de rollade stond bovenaan mijn ‘BGE todo’ lijstje 🙂

Rollade

De rollade heb ik om 12:00 uur eerst kort in de braadslee aangebakken voor een kleurtje en daarna ingepakt in (doorzichtig)folie en een keukendoek.

  • 12:30 BGE aangestoken. De temperatuur was liep sneller op dan ik had verwacht, dus toen ik na een 20 minuten ging kijken, was hij al 200 graden, terwijl ik juist onder de 100 graden wilde blijven. Dit heb ik goed kunnen krijgen door alle schuiven dicht te doen en de BGE een paar keer open te zetten. Volgende keer iets beter in de gaten houden dus
  • 13:20 temperatuur net onder de 100 graden. Rollade er op gelegd
  • 13:50 temperatuur 85 graden
  • 14:20 temperatuur 80 graden
  • 14:35 temperatuur 75 graden (luchtschuif onder en daisywheel boven, iets open gezet)
  • 15:00 temperatuur 85 graden
  • 15:30 temperatuur 95 graden
  • 15:30 kerntemperatuur vlees 35 a 40 graden (2 plekken gemeten)
  • 16:00 temperatuur 85 graden
  • 16:30 temperatuur 85 graden
  • 16:30 kerntemperatuur vlees 45 graden

Aangezien we toch wel over een uur wilden eten, besloten om de temperatuur iets op te laten lopen. De volgende keer moet ik dus meer tijd nemen om een rollade te maken op de BGE. Rond 11:00 uur beginnen denk ik.

  • 16:30 luchtschuif onder iets verder open gezet en daisywheel helemaal open.
  • 16:45 temperatuur 110 graden
  • 17:00 temperatuur 110 graden
  • 17:00 kerntemperatuur vlees 47 graden
  • 17:30 temperatuur 150 graden
  • 18:00 temperatuur 150 graden. De rollade had nu een kerntemperatuur van 65 tot 73 graden, afhankelijk van de plek van meten en was dus klaar.


Aardappel partjes

Voor de aardappel partjes heb Sven en ik eerst een mengsel gemaakt van kruiden en olijfolie.

  • 2 eetlepels olijfolie
  • 1 theelepel paprikapoeder
  • 1/2 theelepel zwarte peper
  • 1/2 theelepel basilicum
  • beetje zeezout

De partjes hebben we gemaakt door de aardappels in de lengterichting in vieren te snijden. Hierna de partjes ingesmeerd met de kruiden/olie mix. De partjes hierna ingepakt in aluminiumfolie en er paprikapoeder overheen gestrooid voor het dichtvouwen. Om 15:30 zijn de partjes op de BGE gegaan door ze op bakpapier rond de rollade te leggen. Om 18:00 uur waren deze ook klaar. De smaak was pittig en ze vulden behoorlijk, maar wel erg smakelijk!

Snow Kerstcadeau 2010 :: Big Green Egg

Tijdens het kerstdiner van mijn werkgever Snow in restaurant Het Koetshuis in Bennekom, kregen wij zoals ieder jaar een bijzonder cadeau. Dit jaar is dat een Big Green Egg, van het medium formaat. Voor degene die niet weet wat een BGE is, dat is een BBQ in de vorm van een ei, volledig van keramiek. Door de vorm en het materiaal krijg je een apparaat wat veel dichter bij een oven staat dan een normale BBQ.

Nu was ik sinds het begin van het jaar al besmet met het BBQ virus en wist daardoor ook erg goed wat voor een cadeau wij nu kregen. Ik ben er ook super blij mee en het eerste gerecht is inmiddels al gemaakt. Hij staat nu gebroederlijk naast de Weber Q300.

Winterstalling

En voor mij is het weer zover, het motorseizoen is voorbij en sinds woensdag staat de motor in de winterstalling.

Helemaal vlekkeloos ging dat overigens niet. Ik had namelijk al een tijdje niet meer kunnen rijden, waardoor de accu net te leeg was geraakt om de motor te kunnen starten. Het alarm was inmiddels ook al in de slaapstand gesprongen om de accu verder te sparen. Na een aantal uurtjes aan de acculader zat er gelukkig net genoeg spanning in om hem te starten, waarna ik hem naar Motorsport Klazienaveen heb gebracht voor een onderhoudsbeurt (klein) plus winterstalling.

Hij wordt daar meteen schoongemaakt en geconserveerd zodat ik in het voorjaar meteen weer op kan stappen.

Migratie van VMWare naar KVM

Sinds enige tijd ben ik van Debian met VMWare server 1.* overgestapt naar Centos (64 bits) en KVM. De vmdk bestanden heb ik via qemu-img geconverteerd naar het qcow2 formaat van Qemu.

sudo qemu-img convert $machine.vmdk -O qcow2 $machine.qcow2

Het bijbehorende vmx bestand heb ik met het python script vmware2libvirt omgezet naar een Libvirt XML file. vmware2libvirt wordt niet meegeleverd bij Centos, deze wordt geleverd/gemaakt door Ubuntu, maar is gewoon los te downloaden.

vmware2libvirt -f $machine.vmx > $machine.xml

Hierna importeer je deze met

virsh -c qemu:///system define file.xml

Een bezoek aan Bad Bentheim

Vandaag met enkele mensen van CERT (motor forum) naar Bad Bentheim geweest. Eindelijk hebben we weer een lekker stuk kunnen rijden, nu het een beetje is afgekoeld. Het was vandaag een heerlijke 25 graden met een licht briesje, fantastisch weer om motor te rijden.

Vanuit Emmen zijn binnendoor naar Emlichheim gereden en vandaar uit naar Neuenhaus. Op deze weg mag je grotendeels 100 km p/u en er zitten een paar mooie bochten. Op de motorkaart van Waypoint is deze weg dan ook grotendeels als ‘groen’ gemarkeerd. Aangekomen in Neuenhaus, besloten wij om door te rijden naar Bad Bentheim. Bad Bentheim ligt ongeveer 10 kilometer vanaf de Nederlandse grens en staat bekend om zijn burcht en de hoogteverschillen.

Ondanks dat je erg dicht bij Nederland zit, moet je in het stadje met enige regelmaat toch behoorlijk omlaag of omhoog, wat vooral voor motorrijders natuurlijk heerlijk is om te doen. Zoals het bij een CERT rit hoort, hebben wij een ijsje (laat dat ‘je’ maar weg) gegeten, waarna we weer binnendoor richting huis zijn gegaan.

Al met al een heerlijke middag gereden, met leuke mensen en ongeveer 200 kilometer extra op de teller gezet.

Updating FreeBSD systemen

Vandaag was de temperatuur eindelijk zover gedaald, dat ik het laatste systeem welke nog niet op FreeBSD 8.0 draaide, kon updaten. De (virtuele) machine die zorgt draagt voor de interne services (LDAP, DNS, MySQL, Syslog en Subversion) is nu dus ook over. De laatste tijd kreeg ik al dagelijks een melding dat de versie van FreeBSD die er op draaide, niet meer ondersteund werd, en dan wordt het toch wel tijd 🙂

Eerste motor meters van 2010

Hehe…. eindelijk!! Morgen wordt het eindelijk weer eens lekker weer, dus vanavond de motor uit de winterstalling bij moeders gehaald en hem even lekker rustig warm gereden, voordat ik hem weer op zijn plaatsje in de garage heb gezet.

Starten van de motor ging zonder enig probleem. Na het loskoppelen van de druppellader heb ik hem uit de schuur gerold en hij startte direct doen ik de startknop indrukte, alsof hij gisteren nog had gelopen.

Morgen hopelijk een lekker stuk rijden!