Lysators mailserver - en halv UppLYSning

Erik Forsberg

forsberg@lysator.liu.se
http://www.lysator.liu.se/~forsberg

2000-11-07

Lysator Academic Computer Society

Erik Forsberg UppLYSning 001107

Innehåll

• Hård- och mjukvara

• Postfix, konfiguration etc..

• Koppling mot databas

• Spamskydd

• Mailman

• Mailconf

Erik Forsberg UppLYSning 001107

Hårdvara

• SGI Origin 2000 - Tack SGI!

• 2x180 MHz R10k

• 256 Mb minne

• 2x18 Gb SCSI disk

• 100Mbit Ethernet, två switchar från SUNET :-)

• “Superdator”!

Erik Forsberg UppLYSning 001107

Mjukvara

MTA Postfix (snapshot + egen IRIX-patch) IMAP4 UW imapd + egen SQL-patch. POP3 UW pop3d + egen SQL-patch. SQL-server MySQL. HTTP Apache med SSL. Glue Python.

Erik Forsberg UppLYSning 001107

Postfix

http://www.postfix.org

Hette från början VMailer (Vietse Mailer) men fick döpas om till Postfix pga namnrättighetsstrul.

Skriven av Wietse Venema

(http://www.porcupine.org, wietse@porcupine.org),

holländare och datasäkerhetsforskare. Numera vid IBM Thomas J. Watson Research Center, USA. Wietse är även känd för SATAN och TCPWrapper.

Första raden i HISTORY-filen är från 1998-10-05.

Erik Forsberg UppLYSning 001107

Postfix: Mål

• Kompabilitet - Det ska inte vara en pina där bak att ersätta Sendmail med Postfix. Visar sig bland annat i enkel konfiguration.

• Fart - Postfix går FORT! 3 gånger så fort som Qmail?

• Robusthet - Det har tänkts till vad gäller resurser och det ska vara svårt att förlora mail.

• Flexibilitet - Arkitekturen är byggd på många små program som gör EN sak bra i stället för ett stort program som gör många saker. Helt i enlighet med unix-tänkandet.

• Säkerhet - Wietse är expert på datorsäkerhet, och systemet är redan från början genomtänkt vad gäller säkerheten.

Erik Forsberg UppLYSning 001107

Postfix: Konfiguration

Postfix är enkelt att konfigurera. En helt vanlig host som bara ska skicka och ta emot mail behöver bara ändra ett par olika parametrar då de flesta värdena har defaultvärden som är vettiga.

Det finns 190 olika konfigurationsparametrar. Generellt är de på formen parameter = värde vilket är lätt att läsa till skillnad från Sendmails konfiguration.

Det finns alltid med ett exempel på hur man kan använda parametern i form av exempelkonfigurationsfiler.

Postfix har inget eget omskrivningsspråk, utan använder i stället uteslutande tabeller. Dessa kan vara av många slag - reguljära uttryck, MySQL, LDAP, dbm, db, etc…

Erik Forsberg UppLYSning 001107

Postfix: Konfiguration, enkelt exempel

$ postconf -n  % $
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
default_destination_concurrency_limit = 10
delay_warning_time = 4
local_destination_concurrency_limit = 2
mail_owner = postfix
mydestination = $myhostname, $mydomain, sofie.lambo.student.liu.se
mydomain = a88.lambo.student.liu.se
myhostname = a88.lambo.student.liu.se
queue_directory = /var/spool/postfix

(postconf -n listar de parametrar som skiljer sig från default)

Postfix: Lysators konfiguration

alias_database = dbm:/etc/aliases
alias_maps = dbm:/etc/aliases dbm:/var/list/smartlist.aliases
dbm:/etc/postfix/stensson-alias
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include
bounce_size_limit = 51200000
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
default_destination_concurrency_limit = 10
default_privs = nobody
fast_flush_domains = $relay_domains ryd.student.liu.se
lambo.student.liu.se vv.student.liu.se ib.student.liu.se
inet_interfaces = all
local_destination_concurrency_limit = 2
mail_owner = postfix
mail_spool_directory = /export/dsk2/mailspool
maps_rbl_domains = rbl.maps.vix.com,dul.maps.vix.com,relays.mail-abuse.org
masquerade_domains = lists.lysator.liu.se $mydomain
masquerade_exceptions = root
message_size_limit = 51200000
mydestination = $myhostname, localhost.$mydomain, venom, $mydomain,
mail.lysator.liu.se, mailhost.lysator.liu.se
myhostname = mail.lysator.liu.se
myorigin = $mydomain
notify_classes = resource,software,delay,protocol,2bounce
queue_directory = /export/dsk2/mailqueue
recipient_canonical_maps = dbm:/etc/postfix/canonical.recipient
recipient_delimiter = +

Postfix: Lysators konfiguration, forts.

relocated_maps = dbm:/etc/postfix/relocated
sender_canonical_maps = dbm:/etc/postfix/canonical.sender
smtp_bind_address = 130.236.254.3
smtpd_client_restrictions = check_recipient_access
mysql:/etc/postfix/spamfriends.sql, reject_maps_rbl,permit
smtpd_recipient_restrictions = permit_mx_backup,
check_recipient_access dbm:/etc/postfix/recipient_table,permit_mynetworks,
reject_unauth_destination
smtpd_sender_restrictions = check_recipient_access
mysql:/etc/postfix/spamfriends.sql, check_sender_access
dbm:/etc/postfix/sender_domain, reject_unknown_sender_domain, permit
transport_maps = dbm:/etc/postfix/transport
virtual_maps = pcre:/etc/postfix/virtual.pcre

Kommentarer

# Rejektera användare och domäner som finns i disallowed_users, ex.vis
# användare som inte har betalt medlemsavgiften. Här skapas även
# felmeddelandet om rydnethosts. forsberg 20000422 (tentap! :)  )

Postfix: regexp och MySQL-tabeller

Regexp-tabeller

virtual_maps = pcre:/etc/postfix/virtual.pcre
/^(.*)-request@lists.lysator.liu.se$/   $1+mailcmd@virtual-list
/^(.*)-admin@lists.lysator.liu.se$/     $1+mailowner@virtual-list
/^(.*)-owner@lists.lysator.liu.se$/     $1+mailowner@virtual-list
/^(.*)@lists.lysator.liu.se$/           $1+post@virtual-list

MySQL-tabeller

mysql:/etc/postfix/spamfriends.sql
user = <user>
password = <password>
dbname = <dbname>
table = members
select_field = "OK"
where_field = CONCAT(login, "@lysator.liu.se")

SELECT ``OK'' from where CONCAT(login, ``@lysator.liu.se'') = <värde>;

Erik Forsberg UppLYSning 001107

Varför koppla till MySQL?

+ Enkelt att programmera mot. + All data på ett ställe. + Inga fillåsningsproblem. + Konsistent backup. + Snabb uppdatering.

– Performance - Inget problem idag.

Erik Forsberg UppLYSning 001107

Spamskydd

Postfix har bra stöd för att på olika sätt filtrera bort spam (UCE). Från dokumentationen:

• Header filtering

• Client hostname/address restrictions

• Require HELO (EHLO) command

• HELO (EHLO) hostname restrictions

• Require strict RFC 821-style envelope addresses

• Sender address restrictions

• Recipient address restrictions

Lysators server använder tre DNS-baserade tabeller (RBL, DUL och RSS) för filtrering baserat på avsändarip samt kontrollerar om avsändardomänen

existerar i DNS. http://www.mail-abuse.org

Varje enskild medlem kan slå på och av spamfiltreringen via Mailconf. Postfix kontrollerar i MySQL-tabell om en viss medlem vill ha spamskydd eller inte.

Erik Forsberg UppLYSning 001107

Mailman

  http://www.list.org

• Skriven i Python - integrerar bra i resten av systemet.

• Webbaserad administration.

• Integrerad webarkivering.

• Möjlighet till modererade listor - dock bara via webben (än så länge).

• Avlastar mailservern - leverans till Mailman går fort - ett cronjobb körs sedan en gång i minuten för att leverera brev.

Erik Forsberg UppLYSning 001107

Mailconf

Konfigurationssystem för medlemmen med möjlighet att

• Sätta maillösenord

• Stänga av eller på spamfilter

• Skapa mailinglistor i Mailman

Nås med webbrowser på

https://mailconf.lysator.liu.se

Samma kodbas som Lysators medlemsregister Avlastar Lysators rötter.