A feladat

A következő a feladat:

  1. Postfix – maildir
  2. Courier IMAP MTA
  3. Virtuális user-ek – LDAP Active Directory
  4. Spamszűrés
  5. Hard és softquota a virtuális fiókokon

Az első négy pont megvalósításával nincs semmi különösebb probléma. Az utolsó pontnál ütköztem akadályokba. A fenti szoftverpáros (postfix, Courier) esetén két megoldást találtam, de egyikkel sem sikerült kielégíteni az igényeket. További követelmény a 3. pontnál, hogy minden felhasználónak két vagy több e-mail címe van, amelyből az AD-s usernév (sAMAccountName) képviseli a tényleges fióknevet és a mail valamint a wWWHomePage (ez utóbbi tudom nem erre való, de a célnak kivállóan megfelel) egy-egy aliast tárol az eredeti címre.

Egy példa

  • sAMAccountName: varkonyib
  • mail: varkonyi.balazs@domainname
  • wWWHomePage: vbali@domainname

Tehát akár varkonyib@domainname, akár varkonyi.balazs@domainname, akár vbali@domainname címre küldik az e-mailt, annak a varkonyib nevű virtuális fiókban kellene landolnia.

Hard és softquota saját értelmezése?

Az én olvasatomban a hard quota – leegyszerűsítve – az a tárhelyméret, ameddig a felhasználó fogadhat leveleket a postafiókjába, szemben a softquotával, melynek túllépését követően a levelek még landolnak a postafiókban, de azt egy figyelmeztetés is követi, tudatva a fiók tulajdonosával, hogy kezd kifutni a helyből.

Lehet, hogy én értelmezem rosszul a hard és softquota fogalmát, minden esetre nekem egy olyan megvalósításra van szükségem, amely a fent leírtakat maradéktalanul kielégíti. Tehát a fiók tulajdonosa nem fogadhat több levelet, ha a postaládájának mérete elér egy maghatározott méretet – ekkor természetesen a feladót vissza kell értesíteni, hogy próbálkozzon később – példának okáért legyen ez 100MB, viszont kapjon értesítést, ha a fiók mondjuk 80%-ban megtelt.

Postfix és a VDA patch

A postfix main.cf állományában sikerült azt beállítanom, hogy a kézbesítés során AD-ból kérdezze le a sAMAccountName, mail és wWWHomePage mezőket ami valahogy így néz ki:

mailbox_server_host = 192.168.1.1
mailbox_server_port = 389
mailbox_search_base = cn=users,dc=intra,dc=linuxforge,dc=hu
mailbox_query_filter = (&(|(sAMAccountName=%s)(mail=%s)(wWWHomePage=%s))(objectClass=user)(userAccountControl=512))
mailbox_result_attribute = sAMAccountName
mailbox_result_format = %s/.maildir/
mailbox_bind = yes
mailbox_bind_dn = cn=updater,cn=users,dc=intra,dc=linuxforge,dc=hu
mailbox_bind_pw = password
mailbox_version = 3
mailbox_debuglevel=0

A mailbox_query_filter a kulcsa az egésznek. A VDA patch készítői softquotát ígérnek a postfix-hez, amely számomra teljesen hardquota-ként működik:

virtual_mailbox_limit = 100000000
virtual_mailbox_limit_maps = static:80000000

Az első sor lenne a hard, a második pedig a VDA által biztosított softquota. Nekem azonban sehogyan sem sikerült a 80 MB-ot túllépnem, a levelet a postfix vissza is passzolta, “user exceed quota limit” üzenettel. Ha csak az első sort hagytam a configban, akkor pedig akármennyi üzenetet küldhettem, sosem vette figyelembe, hogy túlléptem a megengedett értéket. Gondoltam, akkor jöjjön a maildrop, hisz az úgyis tud ilyet.

Maildrop

Tud is, jó is és pont azt csinálja amit szeretnék, CSAK nem működik az aliasok kezelése oly módon, ahogyan azt a posfix-ben sikerült beállítani. Az authldaprc-ben szépen be lehet állítani, hogy melyik mező értékét keressük az AD-ban, de nem találtam rá példát, hogy hogyan lehetne az LDAP_MAIL mezőnek több értéket is megadni. Ha beállítom ezt:

LDAP_MAIL    sAMAccountName

akkor a varkonyib@domainname-re megérkeznek a levelek, de az aliasokat egy helyi aliases.db-ben kellene tárolni, ami nem kényelmes és követelmény, hogy az aliasok is az AD-ban legyenek tárolva. Minden esetre a maildrop nagyon jó ötletet adott.

A VDA patch + saját patch

Így jött az elvetemült ötlet, hogy belenyúlok a postfix kódjába, hátha bele tudom patch-elni az elvárt funkcionalitást – és sikerült.

Először ráeresztettem a postfix-re a VDA patch-t, majd belekódoltam a softquota kezelését ami a következő módon történik. A virtual_mailbox_limit_perc paraméter tartalmazza százalékos formában a softquota limitet:

local_transport = virtual
virtual_transport = virtual
virtual_mailbox_base = /home/vmail/
virtual_mailbox_maps = ldap:mailbox
virtual_uid_maps = static:800
virtual_gid_maps = static:800
virtual_maildir_limit_message = "A cimzett postafiokja megtelt. Az uzenet kuldeset ismetelje meg kesobb!"
virtual_mailbox_limit = 100000000
virtual_mailbox_limit_maps = static:100000000
virtual_mailbox_limit_perc = static:80
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes

Ha a user fiókja túllépi a virtual_mailbox_limit_maps-ben meghatározott érték 80%-át, akkor kap egy figyelmeztetést, amelyet a /etc/quotawarn fájlból hoz létre:

X-Comment: Rename/Copy this file to quotawarnmsg, and make appropriate changes
X-Comment: See deliverquota man page for more information
From: Postamester

Reply-To: postmaster@domainname
To: Valued Customer:;
Subject: Postafiók kvóta túllépés
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Az ön postafiókja a levelező kiszolgálón {quota_percent}%-ban megtelt.
További levelek fogadásához kérjük, hogy töröljön néhány levelet
a postafiókból.

A {quota_percent} automatikusan lecserélődik az aktuális, százalékban vett értékre. A maildir-en belül pedig létrejön egy quotawarn nevű állomány. Ez ugyanolyan elven működik mint ahogyan a maildrop is csinálja. Ha a quotawarn állomány utolsó módosításának dátuma nem egyezik meg a mai napéval és a fiók mérete túllépte a softquotában meghatározottat, akkor küldünk értesítést, egyébként nem. Ezáltal nem spammeljük a usereket a figyelmeztető üzenettel, hanem naponta csak egyszer kapnak üzenetet.

Ha a softquota userenként eltér akkor pl egy /etc/postfix/vquota fájlba fel lehet venni az értékeket userenként vagy akár domainenként is:

varkonyib        80
akarki           50
@domainname      90

Majd ezt a postmap-el “lerendereljük”:

postmap vquota

És módosítjuk a main.cf-et:

virtual_mailbox_limit_perc = hash:/etc/postfix/vquota

Konklúzió

Hát ennyi. Nem a legegyszerűbb megoldást választottam, de működik. Felteszem ide az általam módosított VDA patch-t is, és ha másnál is működik és hasznos, akkor lehet, hogy el kellene küldeni a VDA maintainer-einek is. Minden esetre amíg nem kapok visszajelzést addig nem égetem magam vele, hisz lehet, hogy a VDA mindezt tudja, csak én bénáztam vele.

A 2.2.5-ös postfix-hez tartozó VDA patch-ből indultam ki, de a 2.2.7-es postfixet is sikerült megpecselnem vele.

Letöltés

Postfix 2.2.5 VDA Patch + SoftQuota support

Tagged with:
 

2 Responses to Postfix softquota

  1. Vales szerint:

    Üdv!
    Működne ez a konfiguráció Debian Sarge-on, a sima csomagból telepített postfix 2.1.5-9, postfix-ldap csomagokkal? Konkrétan engem csak az Active Directoryhoz kapcsolódás érdekel, ha nincs kvóta, az nem érdekes. Nem szívesen fordigatok forrásból ilyen komply szerverprogramokat, ezért kérdem, hoyg van-e rá esély?

  2. vbali szerint:

    Nem mozgok már otthonosan egy jó ideje a Debian világában, de szerintem az AD-s beállításokat jó eséllyel alkalmazni lehet Sarge esetén is. Bár erről inkább egy Debian-ra szakosodott “kolléga” véleményét/tapasztalatát kellene kikérni :D

MINDEN VÉLEMÉNY SZÁMÍT!

Email cím (nem tesszük közzé) A kötelezően kitöltendő mezőket * karakterrel jelöljük

*

A következő HTML tag-ek és tulajdonságok használata engedélyezett: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">