Death’s End (Remembrance of Earth’s Past #3) door Cixin Liu

deathsendDeel drie van The three body problem, of zoals de serie officieel heet: Remembrance of Earth’s past. Ook dit deel is heel knap vertaald door Ken Liu. De kwaliteit is gelijk aan de andere twee delen: het verhaal berust voor een groot gedeelte op speltheorie en strategie.

De personages zijn ondergeschikt aan het grote geheel maar op deze epische schaal neem ik dat de schrijver niet kwalijk. Sommige andere schrijvers die zo’n episch verhaal produceren, hebben moeite de grote lijnen vast te houden maar Cixin Liu heeft daar geen probleem mee.

Deel drie gaat verder waar deel twee gebleven was en je kan dit deel dus eigenlijk niet apart lezen van de rest. De Trisolaran vloot komt eraan en ze zeggen het beste met ons voor te hebben. We weten dat de Trisolarans niet in staat zijn tot bedrog, maar moeten we ze geloven? In de koude oorlog met de Trisolarans hebben we ons belangrijkste wapen op hun gericht: we bezitten de mogelijkheid om de locatie van hun planeet aan de rest van het universum kenbaar te maken, wat hoogstwaarschijnlijk de directe vernietiging ervan tot gevolg zou hebben. We weten ook dat de Trisolarans die mogelijkheid voor onze locatie hebben.

Strategie en wat de schrijver noemt: kosmologische sociologie. Als je de eerste twee delen hebt gelezen dan moet je deel drie ook lezen.

Waarom Ziggo geen hostname uitdeelde, of: wat je moet doen om een mailserver te kunnen draaien op een Ziggo-consumentenlijn

Voor de mensen die alleen op zoek zijn naar de oplossing: hij staat in de een-na-laatste paragraaf.

Sommige mensen beklimmen ijsbergen zonder hulpmiddelen, anderen basejumpen. Ik niet – ik maak mailservers. Ieder zijn hobby.

Voor een mailserver is niet zo veel nodig: de software is gratis; de hardware heb je meestal al staan (elke oude computer volstaat); en wie heeft er nu geen internetverbinding?

Opa vertelt
Vroeger was het heel gebruikelijk om zelf een mailserver te hebben, maar dan heb ik het over de tijd dat het niet heel erg gebruikelijk was om thuis een vaste internetverbinding te hebben (vast in tegenstelling tot dial-up met een modem). Toen internet via xDSL en kabel in opkomst kwamen, kregen meer mensen een vaste verbinding met een vast IP. Tegelijkertijd groeide daarmee het aantal machines die mailserver waren zonder het te weten: geïnfecteerd met malware. Dit resulteerde in enorme bergen spam. Op mijn zakelijke mailserver was op een bepaald moment 98% van alle inkomende mail spam.

Om te voorkomen dat je als spambot werd gebruikt, kon je antivirus en een firewall installeren maar vaak hadden mensen er zelf te weinig last van om er iets tegen te willen doen. Toen kwam Microsoft per Windows XP SP2 met de firewall die standaard aan stond en dat scheelde al een hoop. Later namen ook providers hun verantwoordelijkheid en sloten standaard poort 25 uitgaand op de apparatuur van hun eindgebruikers. Dit hielp nog beter.

Poort 25
Toen ik overstapte van XS4ALL naar UPC omdat me dat €600 in het jaar scheelde, kwam ik erachter dat UPC poort 25 uitgaand niet open had op mijn kabelmodem. Dat was jammer maar ik had nog zakelijke servers om mee te experimenteren. Na een poosje wilde ik het toch ook weer thuis doen dus vroeg ik UPC of ze mijn poort 25 uitgaand open wilden zetten.

Op mijn vraag via de site kreeg ik als standaard antwoord een reclamelink naar de website van UPC. Dus maar even gebeld.

-“Bedoelt u poortmapping?”
“Nee, ik bedoel uitgaand, niet inkomend.”
-“Oh, wilt u een firewall instellen?”
“Nee, ik wil uitgaand verkeer op mijn kabelmodem toestaan naar poort 25 op andere internetadressen. Dat is nu geblokkeerd.”
-“Wij blokkeren niks.”
“Jawel, dat kan ik zien als ik met telnet naar buiten ga.”
-“Even met mijn collega overleggen.”

-“Telnet ondersteunen wij niet.”
“Het gaat niet om telnet maar om mijn mailserver.”
-“Wilt u uw mail instellen?”
“Nee, een server draaien.”
-“U mag geen server draaien.”

Nou ja, je begrijpt dat het geen productief gesprek was. Na heel veel vijven en zessen trof ik toevallig iemand van de webcare op Twitter die mijn vraag begreep en poort 25 voor me open zette. Mijn mailserver kon in productie!

Overigens is het wel degelijk toegestaan een mailserver te draaien. Wat niet mag, is de infrastructuur overbelasten. Dat dit vaak op hetzelfde neerkomt betekent niet dat dit per definitie zo is.

Geen prutser
Natuurlijk ben ik geen compléte prutser en had ik op mijn firewall ingesteld dat poort 25 uitgaand op mijn LAN geblokkeerd was behalve voor mijn mailserver. Ook heb ik andere machines op mijn netwerk zo ingesteld dat er geen dagelijks werk wordt verricht met accounts met adminrechten en gebruik ik port mirroring op mijn switch zodat ik met Wireshark kan controleren of er geen botnetactiviteit plaatsvindt op mijn netwerk. Ik wil niet op blacklists terechtkomen met mijn IP-adres.

Kortom: ik ga verantwoordelijk met mijn internetverbinding om.

Nieuwe modem, nieuwe problemen
Dit ging een jaar of twee goed en toen ging mijn kabelmodem kapot. De internetverbinding bleef wegvallen. Kan gebeuren, dus Ziggo gebeld, zoals UPC inmiddels heette. Geen probleem, nieuwe kabelmodem gekregen en de oude moest terug.

Eerst maar eens de nieuwe aansluiten met een kruiskabeltje zodat mijn oude niet meteen gedisabled wordt. Hij werkte en had een poortforwardingfunctie dus ik sloot ‘m aan in mijn productienetwerk. Toen had Ziggo een verrassing voor me.

mailwtf

Surprise!

Onder andere poort 25 wordt actief geblokkeerd.

Nou ja, lang verhaal kort: je kan deze kabelmodem in “modemmodus” en in “routermodus” zetten. Default is router (met poortmapping, firewall, wifi, guest wlan, enz.) en “modemmodus” is eigen bridge mode: alles 1-op-1 doorgeven over fysieke ethernetpoort 1. Best.

Inkomende en uitgaande mail werkte weer \o/

Hostname
Maar omdat ik een ander IP-adres had gekregen en de dynamische hostname doorgaans is gebaseerd op het publieke IP-adres (bijvoorbeeld 123-456-12-34.dynamic.upc.nl) moest ik in mijn Postfix-installatie ook even de waarde van myhostname invullen.

Myhostname is de waarde in de Postfix-config waarin je aangeeft wat je hostname is. Deze waarde (je publieke hostname) wordt meegestuurd met de uitgaande mail en ontvangende mailservers kunnen dan die hostname resolven en controleren of het IP-adres dat ze vinden overeenkomt met het IP-adres waar de mail vandaan komt. Komen die adressen overeen dan is er niks aan de hand maar komen ze niet overeen dan is de kans groot dat de afzender vervalst is en wordt de mail als spam gemarkeerd, of in ieder geval wordt de waarschijnlijkheid dat de mail spam is, opgeschroefd. Met andere woorden: klopt je hostname niet dan zal het overgrote deel van de wereld jouw mail als spam behandelen.

Ook geen probleem: even de hostname aanpassen. Die vind je door een nslookup te doen naar je IP-adres:

mailwtf2

De waarde achter ‘name’ is je hostname en die moet in Postfix. Daar kwam de volgende verrassing:

nslookup

In plaats van een hostname te resolven kreeg ik de melding dat deze überhaupt niet gevonden werd. Nu is het gebruikelijk, normaal en voor iedereen nuttig dat een internetprovider hostnames uitdeelt, zeker als de adressen dynamisch zijn; je hebt dan een ankerpunt. Dit is geen nieuwe uitvinding: hostnames zijn al gebruikelijk zo lang als het internet bestaat en in diverse vormen daarvóór al. Ik ken geen providers die geen hostnames uitdelen.

Dat was lastig want wat doe je in zo’n geval? Geen hostname invullen leidt tot foutmeldingen in Postfix en je mail wordt gegarandeerd als spam aangemerkt. Je moet een hostname invullen.

Even de kabelmodem resetten dan maar. In routermodus misschien? Hm, nee. Terug naar modemmodus. En mijn eigen router. Maar helaas zonder resultaat. Dus even naar de helpdesk gebeld, waar ik te woord werd gestaan door iemand die de vraag denk ik niet goed begreep.

-“Wij ondersteunen geen hostnames.”
“Eh… Ik heb er altijd een van jullie gekregen.”
-“Wij ondersteunen dat niet. Hebben we ook nooit gedaan.”
“Toch wil ik er graag eentje hebben. Kan je me vertellen hoe ik eraan kan komen?”
-“Niet via ons. Goeienavond.”
“Ja, wacht nou even. Kan je misschien iemand zoeken die me verder kan helpen?”
-“Nee, meneer. Wij doen dat niet. Zoek het maar op op internet, dat moet ik zelf ook doen.”

En zo ging het gesprek nog even door. De helpdesker begreep de vraag niet en verviel snel tot het riedeltje “dat ondersteunen wij niet”. Toen de helpdesker steeds grover werd en begon te schreeuwen dat ik het zelf maar uit moest zoeken heb ik het opgegeven. Ik doe zelf ook al vijftien jaar helpdesk en weet dat je soms (in jouw ogen) onredelijke vragen krijgt maar schreeuwen tegen je klanten is nooit de oplossing. Ik heb nog nooit zo’n onbeschofte helpdesker meegemaakt als bij Ziggo.

Hoe zou de snelheid bij XS4ALL zijn?

mailwtf3

Crap: 2Mb up max. Dat is niet genoeg voor mijn Nextcloud-service en met inmiddels veertien apparaten in huis die aan de internetlijn lurken is 38Mb down ook niet echt luxe.

Webcare
Misschien kan de Webcare me helpen. Public shaming is het nieuwe vriendelijk verzoeken om te helpen want je helpt klanten niet omdat je goed bent maar omdat je bij anderen de indruk wilt wekken dat je goed bent.

De Webcare was erg vriendelijk en beloofde dat iemand me zou bellen. Degene die belde begreep de vraag niet goed en zou erop terugkomen. Het werd een soort loopje:

10 beloof terug te bellen
20 sleep 2
30 goto 10

Omdat het zo lang duurde en ik niet zo lang zonder mailserver wou zitten (en omdat het heel cool is) had ik in de tussentijd een server gehuurd bij Strato. Met vast IP-adres, met een normale hostname. Alles werkte daarop meteen, maar het ding kost €9 per maand. Geen rib uit m’n lijf maar wel een beetje jammer dat dit gepruts van Ziggo me €108 per jaar bovenop mijn normale abonnementskosten kost.

Dm’s naar de Webcare zonder dat de Webcare zélf eerst iets vroeg, werden standaard genegeerd. Alleen publiekelijk klagen kon een reactie uitlokken. Die was dan persoonlijk en vriendelijk, dat wel, maar ik vind het jammer dat het zo overduidelijk is dat het echt alleen maar om het beperken van imagoschade gaat in plaats van het fatsoenlijk helpen van je klanten.

Consumentenbond
Behalve van Ziggo ben ik ook al sinds jaar en dag lid van de Consumentenbond. Ik had een consumentenkwestie dus heb ik de Consumentenbond gevraagd te bemiddelen of juridisch advies te leveren. Hoewel ook de Cobo de expertise niet paraat om de vraag te begrijpen, gaf deze wel aan mee te willen helpen met bemiddeling en eventueel juridische bijstand.

Na telefonisch overleg met een vriendelijke meneer van de Cobo wist ik waar ik aan toe was. Dat heb ik (natuurlijk publiekelijk want ik wou wel graag een reactie) aan de Ziggo Webcare medegedeeld.

Die avond was er een oplossing.

De oplossing
Een vriendelijke helpdesker belde me en legde me het volgende uit: vanwege het tekort aan IPv4-adressen had Ziggo besloten een range adressen die eigenlijk voor voip bedoeld was, toe te wijzen aan kabelmodems. Voip-client hebben (blijkbaar) geen hostname nodig dus aan deze adressen waren geen hostnames gekoppeld. Mijn kabelmodem werd in een andere pool geplaatst, kreeg uit die range een adres en het probleem was opgelost.

Eind goed, al goed? Nou, nee: hoewel het directe technische probleem opgelost is en de Webcare- en helpdeskmedewerker die me uiteindelijk geholpen hebben dit vriendelijk en zeer professioneel hebben gedaan, zitten we wel met een provider die blijkbaar alleen normale service kan verlenen als je dreigt met juridische stappen. Net als bij antibiotica is dat een onwenselijke situatie: als het te vaak voorkomt dan treedt er resistentie op en is Ziggo straks ook dáármee niet meer tot service te bewegen. Een zeer kwalijke zaak dus. Zodra er een andere provider is die op mijn adres een goeie snelheid kan bieden, ben ik weg bij Ziggo.

Blocking relay hammering on Postfix with Fail2ban

After installing Postfix on a new VPS I noticed that server was under continuous attack by people trying to use it as an open relay. The server obviously was configured not to allow relaying for external parties so they were politely shown the door by Postfix:

Oct 14 10:51:03 h2621265 postfix/smtpd[12328]: NOQUEUE: reject: RCPT from 118-161-242-211.dynamic.hinet.net[118.161.242.211]: 454 4.7.1 <y_hsai@yahoo.com.tw>: Relay access denied; from=<tpejwewllxa@hotmail.com> to=<y_hsai@yahoo.com.tw> proto=SMTP helo=<85.214.98.72>
Oct 14 10:51:04 h2621265 postfix/smtpd[12328]: NOQUEUE: reject: RCPT from 118-161-242-211.dynamic.hinet.net[118.161.242.211]: 454 4.7.1 <yea3388@yahoo.com.tw>: Relay access denied; from=<tpejwewllxa@hotmail.com> to=<yea3388@yahoo.com.tw> proto=SMTP helo=<85.214.98.72>
Oct 14 10:51:04 h2621265 postfix/smtpd[12328]: NOQUEUE: reject: RCPT from 118-161-242-211.dynamic.hinet.net[118.161.242.211]: 454 4.7.1 <svfj@yahoo.com.tw>: Relay access denied; from=<tpejwewllxa@hotmail.com> to=<svfj@yahoo.com.tw> proto=SMTP helo=<85.214.98.72>
Oct 14 10:51:04 h2621265 postfix/smtpd[12328]: NOQUEUE: reject: RCPT from 118-161-242-211.dynamic.hinet.net[118.161.242.211]: 454 4.7.1 <yuki1019@yahoo.com.tw>: Relay access denied; from=<tpejwewllxa@hotmail.com> to=<yuki1019@yahoo.com.tw> proto=SMTP helo=<85.214.98.72>
Oct 14 10:51:04 h2621265 postfix/smtpd[12328]: NOQUEUE: reject: RCPT from 118-161-242-211.dynamic.hinet.net[118.161.242.211]: 454 4.7.1 <yoyoann2003@yahoo.com.tw>: Relay access denied; from=<tpejwewllxa@hotmail.com> to=<yoyoann2003@yahoo.com.tw> proto=SMTP helo=<85.214.98.72>
Oct 14 10:51:05 h2621265 postfix/smtpd[12328]: NOQUEUE: reject: RCPT from 118-161-242-211.dynamic.hinet.net[118.161.242.211]: 454 4.7.1 <voodiee@yahoo.com.tw>: Relay access denied; from=<tpejwewllxa@hotmail.com> to=<voodiee@yahoo.com.tw> proto=SMTP helo=<85.214.98.72>
Oct 14 10:51:05 h2621265 postfix/smtpd[12328]: NOQUEUE: reject: RCPT from 118-161-242-211.dynamic.hinet.net[118.161.242.211]: 454 4.7.1 <xt11010@yahoo.com.tw>: Relay access denied; from=<tpejwewllxa@hotmail.com> to=<xt11010@yahoo.com.tw> proto=SMTP helo=<85.214.98.72>

However since there were a lot of them (sometimes five per second) my logfiles were growing rapidly and Postfix was being kept quite busy. I had installed Fail2ban, which is a program that reads logfiles and takes (mostly iptables) action upon certain repeated entries, for example

I wanted to use Fail2ban to block IPs that kept trying to relay mail from outside.

In /etc/fail2ban/jail.local find the Postfix section:

[postfix]

enabled  = false
port     = smtp,ssmtp,submission
filter   = postfix
logpath  = /var/log/mail.log

Change false to true.

In /etc/fail2ban/filter.d/postfix.conf find

failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 554 5\.7\.1 .*$
            ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 450 4\.7\.1 : Helo command rejected: Host not found; from=<> to=<> proto=ESMTP helo= *$
            ^%(__prefix_line)sNOQUEUE: reject: VRFY from \S+\[<HOST>\]: 550 5\.1\.1 .*$
            ^%(__prefix_line)simproper command pipelining after \S+ from [^[]*\[<HOST>\]:?$

Directly underneath add a new regex, so that it reads:

failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 554 5\.7\.1 .*$
            ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 450 4\.7\.1 : Helo command rejected: Host not found; from=<> to=<> proto=ESMTP helo= *$
            ^%(__prefix_line)sNOQUEUE: reject: VRFY from \S+\[<HOST>\]: 550 5\.1\.1 .*$
            ^%(__prefix_line)simproper command pipelining after \S+ from [^[]*\[<HOST>\]:?$
            ^%(__prefix_line)sNOQUEUE: reject: RCPT from (.*)\[<HOST>\]: 454 4\.7\.1\.*

Now restart Fail2ban:

# service fail2ban restart

Watch the offenders being blocked before they even hit Postfix:

# watch -d -n 10 fail2ban-client status postfix

Looks like this at my server:

Every 10,0s: fail2ban-client status

Status for the jail: postfix
|- filter
|  |- File list:        /var/log/mail.log
|  |- Currently failed: 13
|  `- Total failed:     945
`- action
   |- Currently banned: 10
   |  `- IP list:       118.161.240.209 220.137.6.52 118.160.212.70 111.249.36.242 1.164.192.181 220.137.12.173 118.161.244.142 114.37.190.125 118.161.244.247 114.43.248.21
   `- Total banned:     72

Those addresses get a time out of ten minutes before they are allowed to try again.

Bonus: check out the recidive jail in Fail2ban. If an address is found to get blocked again and again it gets sentenced to longer jail time, like a week or a month.

No more relay hammering storm on my server!

ASSP on Debian 8/Ubuntu 16.04

Introduction

ASSP stands for Anti-Spam SMTP Proxy and that’s exactly what it is. You install it as a proxy between the internet and your mailserver and it filters out spam for you. For more information on ASSP check out my previous article on ASSP, which is much more verbal and also discusses in some detail how to operate your ASSP installation.

This article explains how to set up ASSP on Debian 8 “Jessie”. It will most probably work on any Debian derevative as well, like Ubuntu or Linux Mint.

Update: added notes for installing on Ubuntu 16.04.1.

Ubuntu doesn’t have aptitude installed by default so if you’re running Ubuntu you must either install it (# apt-get install aptitude) or substitute aptitude for apt-get in this article.

Backends
ASSP can use a number of database backends, including:
– flat text files (this is the default)
– BerkeleyDB (easy to set up but not managed)
– MySQL (a bit more complicated to set up but works better in the long run)
– many other databases

We’ll start out with text files and migrate to MySQL once everything is running.

Mailserver
You will need to set up your own mailserver (e.g. Exchange, Domino, Postfix) and have it relay outgoing mail through the ASSP server. We’ll set up ASSP on a separate machine. It’s perfectly possible to run ASSP on your mailserver itself but isolating it on a separate machine makes for easier troubleshooting.

System requirements
During setup ASSP may complain that it needs at least four processors and two DNS servers. It will work with less but the complaints are valid: in order to secure smooth operations you *will* need a decent server. Also the DNS servers need to be servers on your LAN, not on the internet. External DNS servers may return non-standard replies to dnsbl queries and even if they don’t they may start doing so in the future without warning. For this test setup I’m using just one DNS server but in a corporate environment in which you’re depending on DNS for your daily network operations (say Active Directory or any type of LDAP based network) your DNS server(s) must be sufficiently responsive to service both LDAP and ASSP queries.

Why not use Exim4 instead of Postfix? Because I am more familiair with Postfix. Use Exim4 if you like.

Network lay-out
For this article I will be using three machines:
192.168.1.1 – router
192.168.1.2 – ASSP + Postfix
192.168.1.3 – mailserver (Postfix) to which the end-users connect
Domain: testnet.lab
User: vorkbaard – but feel free to add your own

Do keep the IP addresses in mind when copying and pasting example code into your own server.

Versions
– Debian 8.6
– ASSP 2.5.1 16177

Installing the server

When installing Debian you’ll be asked which server roles you would like to install. Ubuntu and other derevatives may differ from Debian itself but in any case you do not need to select anything in particular. SSH will be handy and the so-called standard system utilities.

No particular software collections necessary:
[*] SSH Server
[*] Standard system utilities

Note for Ubuntu 16: you may install the Mailserver role here, which will install Postfix.

Debian Jessie's Task Selector
Debian Jessie’s Task Selector

If you’re using a VM it is advisable to install ntpdate so your mail and logs will use the correct time stamps:

# aptitude install ntpdate ntp
# service ntp stop && ntpdate 2.debian.pool.ntp.org && service ntp start

After exporting or importing the VM do

# ntpdate 2.debian.pool.ntp.org

to sync the time.
(Pick a close ntp server from the list at http://www.pool.ntp.org.)

Postfix

# aptitude install postfix

If asked to replace Exim, choose Yes. Type of server: Internet Site. System mail name: like the explanation on-screen says: if a mail address on the local host is foo@example.org, the value would be example org.

In the file /etc/postfix/master.cf find:

smtp    inet    n   -   -   -   -   smtpd

and change it to:

125     inet    n   -   -   -   -   smtpd

Set message size limit
We need to take a careful look at the maximum allowed e-mail size because if ASSP and Postfix are not using the same size strange errors may occur. I have had mails stuck in the queue indefinitely because Postfix’s maximum size was smaller than ASSP’s.

For this article we’ll be going with a 20MB e-mail limit.

In the file /etc/postfix/main.cf change the following value (or add it if it doesn’t exist):

message_size_limit = 26214400

Secure so only the ASSP server may use Postfix: in /etc/postfix/main.cf change mynetworks to:

mynetworks = 127.0.0.0/8 192.168.1.2/32 [::ffff:127.0.0.0]/104 [::1]/128

Take care to use your own server’s address in the above line where I wrote 192.168.1.2.
At the end of the file add:

smtpd_client_restrictions = permit_mynetworks, reject
smtpd_delay_reject = no
transport_maps = hash:/etc/postfix/transport

This tells Postfix:
– to allow the addresses in the mynetworks value
– to reject immediately if not allowed
– to use a hash of the file /etc/postfix/transport to look for routing instructions.

Look for the value of mydestination and remove your mail domain (note: this is already done in Ubuntu 16):
From

mydestination = example.com, assp.testnet.lab, localhost.testnet.lab, localhost

To:

mydestination = assp.testnet.lab, localhost.testnet.lab, localhost

If you don’t do this Postfix will assume it is the final recipient of incoming mail for your domain, which it isn’t: it must be routed through ASSP and delivered to your ‘real’ mailserver.

Create the file /etc/postfix/transport and add to it:

example.com smtp:192.168.1.3

This tells Postfix that mail to the example.com domain should be routed to 192.168.1.3 using the smtp protocol. Again, use your own domain name and mailserver IP address.

Load the transport file in Postfix and reload Postfix:

# postmap /etc/postfix/transport
# postfix reload

The postmap command creates a hash file for the /etc/postfix/transport. Our file contains only one entry but if there a lot more the hashing would make it easier to read for the computer, thus faster. It’s just the way Postfix does things.

Note that if you change the transport file you need to rehash it by rerunning the above postmap command.

Perl modules from Debian’s repositories

A lot of Perl modules exist in Debian’s repositories. The format is usually: net::dns::perl becomes libnet-dns-perl. To install the lot of them:

# apt-get install libnet-dns-perl libauthen-sasl-perl libmail-spf-perl \
          libregexp-optimizer-perl libfile-readbackwards-perl \
          libnetaddr-ip-perl libnet-cidr-lite-perl libmail-dkim-perl \
          libnet-ldap-perl libunicode-string-perl \
          libemail-mime-perl libtext-unidecode-perl \
          liblingua-stem-snowball-perl libsys-cpu-perl libthreads-perl \
          libschedule-cron-perl libdigest-sha-perl libmime-types-perl \
          libclamav-client-perl libarchive-zip-perl libberkeleydb-perl \
          liblingua-identify-perl libsys-cpuload-perl \
          libthreads-shared-perl libunicode-linebreak-perl

Dependencies

We’ll be installing as many Perl modules as possible from Debian’s repositories. This ensures they will play nice with the rest of the OS and be updated automatically.

Some modules have dependencies that need to be fulfilled first.

Module:				   Dependency (needs):
OCR modules:                       libgd2-xpm-dev
Crypt::OpenSSL::AES:               libssl-dev					
Image::OCR::Tesseract:             tesseract-ocr and imagemagick
PDF::OCR and PDF::OCR2:            xpdf
installing Perl modules from CPAN: make and build-essential
# aptitude install make build-essential libgd2-xpm-dev libssl-dev tesseract-ocr imagemagick xpdf

Perl modules

Some Perl modules are not available as a Debian repository package. We need to install those with CPAN.

First, upgrade CPAN:

# cpan
Would you like to configure as much as possible automatically? [yes]
CPAN> install CPAN
CPAN> reload cpan

Now let’s install the modules.

cpan> install Digest::SHA1 LWP::Simple Net::IP::Match::Regexp Net::SMTP Net::SenderBase Net::Syslog Thread::State File::PathInfo LEOCHARRE::DEBUG LEOCHARRE::CLI Tie::RDBM Sys::CpuAffinity Sys::MemInfo Unicode::GCString Mail::DKIM::Verifier PDF::Burst PDF::GetImages Crypt::OpenSSL::AES Image::OCR::Tesseract PDF::OCR PDF::OCR2 Email::Send

This may take a while. Get coffee.

LWP will ask if you want to run tests. Answer it No. Get more coffee.

SPF
Mail::SPF::Query is used for upgrade compatibility with ASSP V1. V2 only uses Mail::SPF. It is possible to force install Mail::SPF::Query and it will work but unless you’re upgrading from V1 (which we’re not; this is a clean install) it is better to disable useMailSPFQuery, not install Mail::SPF::Query and instead enable useMailSPF and install libmail-spf. Enabling and disabling these options can be done in ASSP’s web interface later on.

If useMailSPFQuery:=0 ASSP may become unstable, at least that’s what happens when I install it. Force install Mail::SPF::Query and leave useMailSPFQuery:=1. I went with

cpan> force install Mail::SPF::Query

If you’re going to use ClamAV for virus scanning, do

cpan> force install File::Scan::ClamAV

(My previous article explains in more detail how to set up ClamAV with ASSP.)

cpan> quit

Installing ASSP

# aptitude install unzip
$ wget -O assp.zip http://sourceforge.net/projects/assp/files/latest/download

Extract to /usr/share/assp/. You could put it anywhere but I’m using this path.

# unzip -d /usr/share assp.zip

Make the Perl scripts executable:

# chmod +x /usr/share/assp/*.pl

Create a dedicated system user for assp:

# useradd assp -r

Set file permissions

# chown -R assp:assp /usr/share/assp

ASSP will change the permissions a bit. That’s ok. It’s started as root and its code changes it to the assp user.

Start ASSP:

# perl /usr/share/assp/assp.pl &

Press Ctrl + C to fork the process to the background to free your console.
Watch for errors and warnings in /usr/share/assp/logs/maillog.txt.
Point your browser to http://192.168.1.2:55555. The default username is root and the password is nospam4me.

Configuring ASSP

The bare minimum to getting ASSP running:

[Network Setup / Incoming MailNetwork Flow]
SMTP Listen Port (listenPort): 25
SMTP Destination (smtpDestination): 125

[Relaying / Outgoing and Local Mailrelaying not allowed]
Relay Host (relayHost): 127.0.0.1:125 (this is Postfix we set up earlier!)
Relay Port (relayPort): 225
Allow Relay Connection from these IP’s (allowRelayCon): 192.168.1.3

[SMTP Session Limits]
Max Size of Local Message (maxSize): 20971520
Max Size of External Message (maxSizeExternal): 20971520

[Recipients/Local Domains/Transparent Recipients and Domains ]
Local Domains (localDomains): example.com

[Delaying/Greylisting]
[ ] Enable Delaying/Greylisting (in any case for now while we’re testing)

[TestModes]
Prepend Spam Subject (spamSubject): [SPAM]
[v] Prepend Spam Tag (spamTag)
[v] All Test Mode ON (allTestMode)

[Logging]
Notification Email To (Notify): helpdesk@example.com

[DNS Setup]
[v] Use Local DNS (UseLocalDNS)
DNS Name Servers (DNSServers): 192.168.1.1
Use at least two dns servers for production environments. Using one dns server will result in an error message ‘incorrect ‘DNSServers’ – possibly unchanged’. It will still work.

[Server Setup]
Run as UID (RunAsUser): assp
Run as GID (RunAsGroup): assp
My Name (myName): mail.example.com
My Helo (myHelo): SENDERHELO – IP – MYNAME – FQDN | MYNAME
Override the Server SMTP Greeting (myGreeting): MYNAME
[v] Set ASSP File Permission on Startup (setFilePermOnStart)
[v] Check ASSP File Permission on Startup (checkFilePermOnStart)

Do not forget to press Apply Changes after making changes. If you need to restart ASSP scroll all the way up and click Shutdown/Restart. Click the Proceed button and be patient. You can follow the shutdown process from your terminal.

If your browser says the page cannot be found ASSP has stopped and you may restart it.

Now is a good time to test connectivity. Tell your mailserver to relay outgoing mail to 192.168.1.2:225 and verify that incoming and outgoing mail is working. In case of problems check /var/log/mail.log and /usr/share/assp/logs/[b]maillog.txt.

Migrating the databases to MySQL

Install mySql:

# aptitude install mysql-server mysql-client

The installer will ask you for a password. Choose a hard password and remember it.

Set up a database and a user for assp:

# mysql -u root -p
mysql> create database assp;
mysql> create user 'assp'@'127.0.0.1' identified by 'pwd';
mysql> GRANT ALL PRIVILEGES ON `assp`.* TO 'assp'@'127.0.0.1';
mysql> quit

Enable [Network Setup / Incoming Mail] > Disable all new SMTP and Proxy Network Connections (DisableSMTPNetworking). So check the checkbox.
[Apply Changes]

Monitor the ASSP database for changes:

# watch mysql -u root -pMySqlPassword -e \'show tables\' assp

If your MySql root password is pwd do

# watch mysql -u root -ppwd -e \'show tables\' assp

Initially this will not show any output because ASSP has not made any tables yet.

Set all needed DB parameters [File Paths and Database]
database hostname or IP (myhost): 127.0.0.1
database driver name (DBdriver): mysql
database name (mydb): assp
database username (myuser): assp
database password (mypassword): pwd (use the assp user’s database’s password here)

[Apply Changes], verify that ASSP is not throwing errors and that the database settings remain set in the web interface.

Set Email Whitelist Database File (whitelistdb) to: DB:
Press [Apply Changes].

Restart ASSP and verify that the watch command now shows the whitelist table (can take a few seconds).

If that works correctly then ASSP is working well with MySQL and you can set the other lists to DB: as well:
Email Redlist Database File (redlistdb)
Personal Blacklist Database File (persblackdb)
Delaying Database (delaydb)
LDAP Database (ldaplistdb)

[Shutdown/Restart]
Start assp

Uncheck the DisableSMTPNetworking checkbox.

Tips and tricks

* Subscribe to the ASSP mailing list.
* Troubleshooting Postfix:
– Postfix logs to /var/log/mail.log
– ASSP logs to /usr/share/assp/logs/maillog.txt and /usr/share/assp/logs/bmaillog.txt (errors). That is, if you installed ASSP in /usr/share/assp.
– # postconf -n shows all non-default settings in Postfix’s configuration
– Do not start the line ‘125 inet n – – – – smtpd’ with one or more spaces.
– Postfix does not care about the order of the directives in main.cf.
* Check my previous article on ASSP for a more elaborate discussion of the software.

The Games, door Ted Kosmatka

Silas is een geneticus die goed wordt betaald om een ‘wezen’ te ontwikkelen voor het onderdeel van de Olympische Spelen waarin genetische knutselwerken tegen elkaar vechten. Er is maar één regel: geen menselijk DNA. Zijn team gebruikt een intelligente supercomputer voor het design van hun gladiator. De opdracht: maak een wezen dat de andere deelnemers overleeft.

Je hebt Oscarwinnende actiefilms en je hebt het genre van Steven Seagal. De eerste categorie is een bijzondere culturele ervaring, de tweede gewoon lekker. Zo ook heb je boeken die Hugo’s en Nebula’s winnen en je hebt het genre van Ted Kosmatka.

thegamesEen goed boek voldoet aan een aantal voorwaarden: levendige karakters; een pakkend verhaal; het maakt een blijvende indruk op je; de spanning is goed verdeeld over het verhaal; mogelijk is er een diepere betekenis. En natuurlijk zijn er meer elementen; het geheel is meer dan de som der delen. Kosmatka mag werken aan zijn karakters en de diepgang van zijn boeken maar ze zijn allerminst vervelend om te lezen.

Dit is het derde boek dat ik van hem lees en de derde page turner. Zijn boeken behandelen vaak technologisch-ethische thema’s (hoe gaan we om met een bepaalde technologie) en omdat hij de cutting edge van technologie volgt, zijn ze zeer relevant.

Technologisch-maatschappelijke thema’s, goed opgebouwde spanning en de rest is eigenlijk meer een middel voor het doel. Geen fantastisch en wereldschokkend werk maar wel bijzonder onderhoudend om te lezen. En wat ik persoonlijk ook altijd aardig vind: het begint met harde scifi en wordt naarmate het verhaal vordert letterlijk steeds fantastischer, iets dat bijvoorbeeld A.C. Clarke ook vaak deed. Je neemt de huidige technologische situatie, trekt die door naar de toekomst waarin deze nog redelijk goed te overzien is en begint dan met speculatie. Geen magie, geen unobtanium maar echt speculatie die ergens op is gebaseerd, alleen worden je uitgangspunten natuurlijk steeds minder zeker.

Er zijn verschillende aanvliegroutes voor zo’n verhaal en ik zie de low-budget films al voor me maar Ted Kosmatka weet het goed te brengen en het verhaal is pakkend, verrassend, spannend en goed doordacht. Ja: plot holes, plot devices, clichés maar fantastische actie met een goed thema.

Advies: gewoon doen!