Author Archives: Rob

Configuratie van een internetserver


Vanaf deze week is mijn boek uit!
En dan bedoel ik niet een boek dat ik bezit, maar het boek dat ik geschreven heb.
En ik bedoel ook niet uitgelezen, maar uitgegeven.

Configuratie van een internetserver beschrijft de volledige installatie en configuratie van een bedrijfsinternetserver (die uiteraard ook gebruikt mag worden voor een familie of een vriendengroep). Na een paar paragrafen over de selectie van de provider en de server, en een hoofdstuk met wat Unix-basiskennis, wordt de beheerder bij de hand genomen, en in rap tempo naar het ‘echte’ systeembeheer begeleid.

Het uiteindelijke resultaat is een volledig functionele bedrijfsinternetserver die klaar is om in productie genomen te worden. Deze server handelt DNS-, web-, en e-mailverkeer af voor meerdere domeinen, en bedient tientallen of zelfs honderden gebruikers; gebruikers die geen shell-toegang nodig hebben worden opgenomen in een LDAP directoryservice. Gebruikers kunnen bestanden delen en synchroniseren op al hun apparaten, en de e-mailgebruikers beschikken over gedeelde kalenders en adresboeken. De server wordt beveiligd middels een firewall, en de web- en e-mailverbindingen worden versleuteld middels SSL/TLS. Met dit boek in de hand heeft de systeembeheerder bovendien de nodige handvatten om de server te onderhouden, en om verder te groeien.

Dit boek vereist geen diepgaande kennis van Unix; een eerste geslaagde kennismaking zou genoeg moeten zijn. De lezer of lezeres wordt geacht bekend te zijn met het concept opdrachtregel (command line), en met de configuratie middels tekstbestanden. Ook wordt hij of zij geacht basiscommando’s als cd, ls, cat, less, tar en gzip te kennen.
Dit boek is echter niet specifiek gericht op de beginnende beheerder: het probeert deze beginnende beheerder zo snel mogelijk te begeleiden naar ‘echt’ systeembeheer.

Het boek is rijkelijk voorzien van configuratievoorbeelden, en alle onderwerpen worden beschreven en geïllustreerd voor FreeBSD, Debian en CentOS, zodat de systeembeheerder volledig vrij is in de keuze van het besturingssysteem.

→ Meer informatie op www.librobert.net, of bestel het direct in de webshop van mijn uitgever Boom Beroepsonderwijs.

De Franse versie is inmiddels ook zo goed als af, en komt eind september of begin oktober uit.
En ik ben in gesprek met een Amerikaanse uitgever voor de publicatie van de Engelstalige versie.

En voor wie zich afvraagt waarom ik op de kaft Robert heet: Rob is een lastige naam voor Fransen, dus in Frankrijk noem ik me Robert (de naam die overigens ook in mijn paspoort staat). En omdat het boek ook in het Frans uitkomt, en het me een goed idee lijkt om op elke uitgave dezelfde naam te vermelden, is het Robert geworden. In de omgang blijf ik gewoon Rob.

External IP address

I’ve been a freelance web developer for almost 15 years.
One of the most brilliant web pages I ever made, was this one:

<?php
header('Content-Type: text/plain');
echo $_SERVER['REMOTE_ADDR'];
?>

And if you think I’m joking, allow me to give you some background…

The above code returns a page with no other content than the visitor’s IP address. This may seem trivial and rather useless, but consider the following:

You’re developing a website. It’s a website for, obviously, someone who is not a web developer, which means, especially for people of my generation and older, that they know close to nothing about this internet-thing.
At a certain moment, you want to show them what you’ve done so far, but you do not want the rest of the internet to find the website already. But you also know that this person, having other hobbies than learning all the ins and outs of this new technology, will type the URL you send them into the Google search field, thinking that that is the location bar you were talking about. And once Google gets hold of something, you can be sure it will be out there for everybody to find.
So, you need to make sure only your customer can access this new website; this way, you can be sure that even if Google has the address, it won’t be able to index the site. And the most practical way to make sure only the client can access the site, is to limit access to the client’s IP address. But how does one explain to this lay person where to find their external IP address?

And that’s why I came up with the code above. With that in place, I could just ask my client to go to https://www.example.com/ip.php, copy all the text they find there, and mail it to me. Their reply would always be something like “It only says 203.0.113.45. Are you sure?“, to which I always replied “That’s all I need. Thank you!“.
The lesson here: When working with lay people, make sure that there is nothing that they may want to interpret or filter.

And even though I no longer develop websites for clients, I still have a use for this page that was invented about 15 years ago: to find my own IP address (I travel a lot) and, with the small enhancement I made, also to verify my TOR connection.

So, I thought I’d share.

Read More

Poire Laide-Hélène

Een beetje simpele variatie op de Poire Belle-Hélène.

Ik had peren gekocht, maar ze waren wat droog en hard om lekker te zijn als handpeer (Rocha). Maar weggooien wilde ik ook niet.
En ik wilde iets maken met m’n nieuwe magnetron, dat ook.

Nodig:

  • peer
  • donkere chocola (ik heb chocola gebruikt met 52% cacao)
  • boter
  • honing
  • vanille-ijs

Schil de peer, snijd ‘m in de lengte in acht puntjes, en verwijder het klokhuis.
Zet een minuutje in de magnetron op half vermogen. Dat maakt ‘m wat zachter, en hij gaat lekker ruiken.

Doe een gram of 50 chocola in een bakje, samen met een gram of 40 boter, en een heel klein beetje honing; niet teveel honing, je wilt de bittere smaak van de donkere chocola niet verbergen, maar versterken. Zet dit 30 seconden tot een minuut in de magnetron; ook op half vermogen, en de magnetron direct stoppen als het gaat borrelen. Zeker niet langer dan een minuut; als de chocola dan nog niet helemaal gesmolten is, los je dat op door te roeren.

Drapeer de peerpuntjes gezellig in een ijsschaaltje, doe er 2 bolletjes ijs bij, en giet er wat saus overheen. Als je heel veel behoefte hebt aan suiker, kan er natuurlijk ook nog een beetje slagroom bij.

Eigenlijk is dat genoeg saus voor 2 of 3, of misschien wel 4 ijsjes, dus ik hoop dat je veel trek hebt…
(Maar hij kan natuurlijk ook in de koelkast of de vriezer voor een volgende keer.)

Zie voor een andere chocoladesaus-variant het recept Chocoladesaus uit 2012.

Smakelijk!

Kaassaus

Een paar jaar geleden deed ik al een kaassaus, maar ik ik heb sindsdien een hoop bijgeleerd, en ik vind deze beter. Veel minder kans dat-ie verbrandt, aankoekt of klontert.

Nodig:

  • half blokje groentebouillon
  • kookroom (crème de Normandie)
  • een scheut witte wijn
  • kaas naar keuze
  • nootmuskaat

Snijd of rasp de kaas, indien nodig, zodat het makkelijker smelt.
Los de bouillon op in een klein beetje water.
Giet dan de room en de wijn erbij.
Meng tot slot de kaas erdoor; blijven roeren.
Breng op smaak met een (heel) klein beetje nootmuskaat.

Als de saus te dun is, maak dan een theelepel Maizena aan in een beetje koud water, roer dat door de saus, en laat nog 2 of 3 minuten pruttelen.

Ik vind het altijd wel leuk om verschillende kazen door elkaar te gebruiken. Vanavond (broccoli, gebakken aardappels, gepaneerde kalkoenschnitzel) waren dat Emmental, Coulommiers, Comté en Parmigiano. De truc is een beetje om een goedkope kaas te nemen waarmee je een basissaus maakt, om vervolgens met lekkerdere kaas de smaak bij te werken. De saus van vanavond zou je in Nederland bijvoorbeeld na kunnen maken met huismerk geraspte kaas + camembert + extra belegen Goudse + parmezaan.

Voor kaassaus over vlees wordt vaak een bleu gebruikt, zoals Roquefort.

Smakelijk!

Doen zonder denken

Dit is een parkeerplaats bij een winkel.
De witte streep op de voorgrond is zo’n reliëfstreep voor blinden.
Zoals je ziet, kunnen blinden dankzij deze streep makkelijk de achterkant van hun auto vinden.

Laat dat even rustig op je inwerken…

Romige kalkoensaus

Ik ben me langzaamaan aan het installeren, en dat betekent dat ik ook het echte koken weer een beetje oppak. En dus voor het eerst in tijden weer een echt recept.

Nodig:

  • 2 kalkoenschnitzels
  • 2 uien (of 1 grote)
  • 1½ – 2 paprika’s, verschillende kleuren
  • champignons
  • 1 kippenbouillonblokje
  • 1 pakje kookroom (crème de Normandie)
  • peper
  • boter
  • eventueel maïszetmeel (bijv. Maizena)

Snijd het vlees in reepjes; niet te dun.
Snipper de ui en de paprika.
Snijd de champignons in plakjes of stukjes.

Smelt wat boter in een pan, en bak daarin de reepjes kalkoen kort aan. Schep het vlees met een schuimspaan uit de pan, en zet het opzij.

Fruit de ui een paar minuten in het achtergebleven vet, en voeg dan de paprika toe. Laat dit even samen fruiten, en voeg dan de paddenstoelen toe. Brokkel het bouillonblokje erbij, en roer het spul door elkaar. Als er niet genoeg vocht vrijkomt om het bouillonblokje op te lossen, doe er dan een scheutje water bij (maar niet teveel); een scheutje witte wijn zou eventueel een alternatief kunnen zijn.

Schep de kalkoen erdoor, en laat het geheel pruttelen totdat de kalkoen gaar is. Voeg dan de room toe, en peper naar smaak, en geef het nog een paar minuten. Als de saus erg dun is, maak dan een theelepel Maizena aan in een beetje koud water, en laat dat nog een minuut of 2 meepruttelen.

Serveer met gebakken aardappels of pasta. Of rijst of aardappelpuree of waar je trek in hebt; dat moet je ook eigenlijk zelf weten.

Smakelijk!

Version control for configuration files

Yesterday I wrote a post about setting up a Subversion server.
Subversion is a great tool for controlling versions of collections of files that are contained in a single root directory (an entire website, development of a software application, etc.). But it’s not the perfect tool for controlling the versions of single files.
So, after yesterday’s post, I now feel somewhat obliged to also document the system I use for controlling the versions of my configuration files.

Read More

Subversion server

Despite the fact that I have set up quite some Subversion servers in the past 15-20 years, I still need to turn to the documentation for the details each time I do it. So, to save myself some time searching and filtering next time, I decided to document it here this time.

Open door: if you don’t know what a Subversion server is, you don’t need this post.

Read More

Pasta met kip-pesto saus – Vegetarisch

Een golden oldie: bij dit recept zie ik al vele jaren mensen hun lippen af likken en hun vingers opeten. Maar dan nu de vegetarische variant, omdat ik vandaag voor vegetariërs moest koken. Ik denk trouwens dat je ‘m heel makkelijk veganistisch kunt maken door een beetje op te letten welke pesto je koopt — in de potjes pesto die ik vandaag kocht zat schapenmelk — of je pesto zelf te maken.

Pak het originele recept erbij: Pasta met kip-pesto saus.
Vervang de volgende zaken:

  • kipfilet → vegetarische kipfiletreepjes
  • spek → vegetarische spekreepjes
  • kipbouillonblokjes → tuinkruiden-bouillonblokjes

Verder heb ik kookroom gebruikt op basis van soja in plaats van melk.
En ik heb een handje ongezouten, ongeroosterde cashewnoten toegevoegd, in de bouillon, voordat ik de room toevoegde.
De penne was trouwens biologisch en volkoren.

Zelf vind ik zaken als vegetarische kip en vegetarisch spek altijd een beetje flauw, en de vegetariërs aan tafel bleken het zelfs nog nooit geprobeerd te hebben, maar ze hebben me verzekerd dat ze lekker gegeten hebben. En dus verdient ook deze variant een plekje op mijn blog.

Mail server

UPDATE:
My first book describes a more elaborate setup, including LDAP authentication, and a lot more (firewall, DNS, Apache, Nginx, databases, synchronisation of files, calendars and address books, etc.; including many examples for FreeBSD, Debian and CentOS).
en: Practical Internet Server Configuration
fr: Installation et configuration d’un serveur internet
nl: Configuratie van een internetserver


After having depended on my friends for a few years, for web and email hosting, I recently acquired a private server again. In this HOWTO I document the entire mail setup.
At the end of this article, I will have a mail server that does:

  • Postfix MTA (Mail Transfer Agent)
  • Dovecot IMAP (Internet Message Access Protocol)
  • Let’s Encrypt (SSL certificates)
  • Dovecot SASL (Simple Authentication and Security Layer)
  • mail accounts (partly) separated from system accounts
  • Dovecot LDA (Local Delivery Agent)
  • Sieve / ManageSieve
  • Greylisting
  • RBLs (Real-time Blackhole Lists)
  • Bogofilter (spam filter)
  • ClamAV (virus scanner)
  • SPF (Sender Policy Framework)
  • DKIM (DomainKeys Identified Mail)
  • and more…

Just so you know that there’s more to mail than just typing a text and hitting the Send button…

Currently my server only serves 1 user with 3 domains. But with the setup I describe here, it is extremely simple to upgrade that to many users running many domains.

This tutorial is not for the complete layman, but should be comprehensible for those who have played around with Linux and its services and command line a bit. I have tried to make it interesting and useful for both the beginning and the experienced sysadmin.

Corrections, clarifications, supplements and typos are welcomed at tuto.mailserver@ohreally.nl.
Spam is not, as you will understand after reading this article.

Read More