Category Archives: Nerd stuff

Cleaning up the web server logs

I am between 2 books currently, author-wise. So I’m using this time to do the server-housekeeping I’ve been putting of in the past months. Today, I had a look at my web server logs. And I almost regretted it instantly.

The logs were full of requests clearly made by script kiddies. Half of the error-triggering requests were for the file wp-login.php, even for my non-WordPress sites, and what’s worse: even for non-PHP sites. And then there were requests for the usual 1337w0rm, indoxploit, adminer, etcetera. I could have left it, of course, since it doesn’t really hurt to have all these idle requests, but all this noise makes it difficult to distil the log messages that really do need my attention.

In this post, I’ll share what I did to have cleaner Apache log files in the future.
And at the same time, these instructions help protect the web server against known vulnerabilities and exploits.

Read More

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 client 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.
And be sure to take notes, because you will need all this for the post that will follow shortly.

Read More

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

Mail server

UPDATE:
Dutch readers will find a more elaborate setup, including LDAP authentication, in my first book:
Configuratie van een internetserver
The English and French versions of this book are in preparation.


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 will try and 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)

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

Waarom natuurkunde cool is

Ik ben technicien. Dat is Frans voor ‘klusjesman’, of ‘huismeester’. Want ik ben het in Frankrijk. In een hotel. Maar dat doet er voor dit verhaal niet toe.

Ik had vanmiddag een lekkage. Een plas water van 5 meter lang, 2 en een halve meter breed, en een centimeter of 8 diep; dan heb je het toch over een liter of duizend. En geen afvoer. Ja, een verdieping lager, een steil trapje af.
Mijn chef dacht dat ik dat wel even met emmers zou wegwerken. Nou ben ik op zich helemaal niet vies van werken, maar wel net even te bijdehand om 1000 liter water emmertje voor emmertje een steil trapje af te gaan dragen. Neem bovendien van me aan dat er echt geen 10 liter water in een emmer gaat, als je het moet weg scheppen uit een laagje van 8 centimeter.

En dus deed ik het als volgt.
Ik nam een lange waterslang, waarvan ik het ene uiteinde in het water legde; ik legde er een tegel op, om te zorgen dat-ie goed onder water bleef. Het andere uiteinde hield ik op de kraan, en ik liet de kraan lopen; tot er geen belletjes meer uit het onderwater-uiteinde kwamen, en ik dus zeker wist dat er geen lucht meer in de slang zat, maar alleen water. Met mijn duim de slang dicht houdend ging ik vervolgens het steile trapje af, en ik hing de slang in de afvoer. En verder deed de natuur het werk voor me: dankzij de zwaartekracht van de aarde en het vacuüm in de slang, kon ik achteroverleunen terwijl natuurkrachten bijna 1000 liter water voor me weg pompten.
Er bleef een laagje van een paar millimeter over, want als er eenmaal lucht in de slang komt, is het vacuüm verbroken en werkt het niet meer. Maar ik heb er alle vertrouwen in dat dat morgen verdampt is.

Het leven is zó cool, als je een beetje snapt hoe de dingen werken.

iPhone synchroniseren met Linux

Die titel is niet helemaal eerlijk: wat ik hieronder beschrijf, zou onder Windows net zo goed moeten werken. Maar omdat Windows-gebruikers ook via iTunes kunnen synchroniseren, en het dus vooral de Linux-gebruikers zullen zijn die deze info nodig hebben, staat ‘Linux’ in de titel, voor de zoekmachines.

Read More

Banaanappel

Ooit, op 19 november 2011 om precies te zijn, schreef ik een paar zinnen op Wikipedia; aan de pagina Golden Delicious voegde ik toe:

Vroeger werd deze appel banaanappel genoemd, vanwege de vettige gele schil en de zoete smaak. Sommige fruitverkopers gebruiken deze naam nog steeds.

Om de een of andere reden, ik weet eigenlijk niet precies waarom, tikte ik vandaag banaanappel in in een zoekmachine. En wat ik dus wel grappig vind, is dat er verschillende websites zijn die mijn tekst letterlijk of vrijwel letterlijk hebben overgenomen.
Goed, ’t is nog niet die eigen Wikipedia-pagina waar ik zo van droom, maar het is een stapje in de goeie richting.
🙂

Overigens, voor wie dit leest, en die zinnen op zijn/haar website heeft gebruikt: het is wel echt waar. Mijn groente-/fruitboer in Escamp destijds had een bak appels met daarbij een bordje ‘Banaanappels‘, waarop ik zei ‘Voor mij zien ze er gewoon uit als Golden Delicious.‘. En hij heeft me toen uitgelegd hoe het zat. En omdat hij niet op mij overkwam als iemand die heel veel om Wikipedia gaf, heb ik het toen maar op Wikipedia gezet.

Dus eigenlijk zijn het niet eens mijn eigen woorden…

Damn!

Ik ga verder zoeken naar mijn eigen 15 minuten roem…

2 Nieuwe metatags

Ik heb zojuist 2 nieuwe metatags toegevoegd aan WHATWG MetaExtensions registry.
En als je wilt dat je ideeën op een gegeven moment geaccepteerde standaarden worden, zul je er ook over moeten publiceren; dat doe ik dus hierbij.

origin

De eerste nieuwe metatag is origin:

<meta name="origin" content="…">

Met de origin metatag verwijs je naar de oorspronkelijke (online of offline) bron van een document; denk hierbij bijvoorbeeld aan de vertaling van een webpagina, maar ook aan een songtekst die je uittikt, of een (papieren) boek dat je op internet zet.
De documentatie voor de origin metatag vind je op doc.ohreally.nl/metatag-origin.

translator

De tweede nieuwe metatag is translator:

<meta name="translator" content="…">

De translator metatag geeft informatie over de vertaler van een document. Steeds meer informatie op internet is in meerdere talen beschikbaar, en het wordt dus ook steeds belangrijker de vertalers van documenten te bereiken (bijvoorbeeld wanneer er een nieuwe versie van het oorspronkelijke document beschikbaar is).
De documentatie voor de translator metatag vind je op doc.ohreally.nl/metatag-translator.

validatie

Binnen nu en 2 weken zullen de validators van het W3C de nieuwe metatags herkennen.