Использование maildrop
Материал из Gentoo Linux Wiki
- Вернуться в раздел руководства
Содержание |
[править] Введение
maildrop выполняет функцию почтового фильтра и почтового агента, который используется Courier Mail сервером. Вам не нужно выкачивать maildrop, если у вас уже установлен Courier. В стандартной поставке maildrop почтовый фильтр может быть использован совместо с другими почтовыми серверами.
maildrop создан для замены локального почтового агента. maildrop читает почтовое сообщение через стандартный ввод и доставляет его в ваш почтовый ящик. maildrop может доставлять почту в mbox или maildirs. "maildir" это формат, используемый серверами Courier и Qmail.
maildrop дополнительно читает инструкции из файла, в котором правила описывают, каким образом фильтровать входящую почту. Эти правила могут перенаправить почту в другой почтовый ящик или куда нибудь еще, в зависимости от указаний. В отличие от procmail, maildrop использует структурированный язык фильтрации.
maildrop написан на C++, и значительно больше, чем procmail, хотя использует ресурсы более эффективно. В отличие от procmail, maildrop не будет читать сообщение размером 10 MB целиком в память. Сообщение будет записано на диск как временный файл и затем применятся правила фильтрации. Если стандартный ввод является файлом, а не конвейером, то во временном файле необходимости нет.
maildrop проверяет правила фильтрации прежде чем доставить сообщение. В отличие от procmail, если правила написаны с ошибками, maildrop отключится без доставки сообщения. Пользователь может исправить ошибку и затем получить сообщение. Таким образом мы не потеряем сообщения.
[править] Установка
Тривиально emerge maildrop
[править] Конфигурация
[править] Для всех
/etc/maildroprc
| Файл: /etc/maildroprc |
# Global maildrop filter file
#DEFAULT="$HOME/.maildir/"
#
# Define variables
#
SHELL="/bin/bash"
DEFAULT = "$HOME/.maildir"
MAILDIR = "$HOME/.maildir"
#
# Logfile destination
# After your satisifed that this is working properly, comment out all
# the lines that start with "log"
#
logfile "$HOME/.getmail/.maildrop.log"
#
# Markers for the log file
#
log "Markers: ---------------------------------------------"
log " (**) from config file, (II) informational, (WW) warning"
log "--------------------------------------------------------"
log ""
######################################################################
#
# Adding missing headers for PGP/MIME
#
BPM="-----BEGIN PGP MESSAGE-----"
EPM="-----END PGP MESSAGE-----"
BPS="-----BEGIN PGP SIGNATURE-----"
EPS="-----END PGP SIGNATURE-----"
if (!/^Content-Type: message/ && !/^Content-Type: multipart/ \
&& !/^Content-Type: application\/pgp/)
{
if (/^$BPM/:b && /^$EPM/:b)
xfilter "reformail -A 'Content-Type: application/pgp; format=text; \
x-action=encrypt'"
if (/^$BPS/:b && /^$EPS/:b)
xfilter "reformail -A 'Content-Type: application/pgp; format=text; \
x-action=sign'"
}
#####################################################################
#
# Correcting wrong signature dashes
# it doesn't work, need to fix
if ( /^--$/:b)
{
xfilter "sed -e 's/^--$/-- /'"
log "(II) Sig Dashes corrected"
}
# Include any rules set up for the user - this gives the
# administrator a way to override the domain's mailfilter file
#
# this is also the "suggested" way to set individual values
# for maildrop such as quota. (why do you need quota on your own PC?)
#
`test -r $HOME/.mailfilter`
if( $RETURNCODE == 0 )
{
log "(==) Including $HOME/.mailfilter"
exception {
include $HOME/.mailfilter
}
}
|
[править] Персонально
- ~/.mailfilter будет вызываться из /etc/maildroprc
touch ~/.mailfilter
- Необходимо выставить правильные права на файл (иначе будет выдавать ошибку)
chmod 600 ~/.mailfilter
- Ну и сами правила фильтрации на разные случаи жизни
| Файл: ~/.mailfilter |
# - maildrop mailinglist. # http://lists.sourceforge.net/lists/listinfo/courier-maildrop # - Please browse the mailinglist archives for more examples. # http://sourceforge.net/mailarchive/forum.php?forum=courier-maildrop # - Save this file as .mailfilter in your home directory and do # chmod 600 .mailfilter # - Do not edit your .mailfilter file with a DOS or WINDOWS # texteditor!! # - Linebreaking doesn't work inside a pattern. So the following # rule cannot work: # #if (/^Subject:.*(exim|sendmail| \ # gdm|xdm|imap|cgi)/) # # and must be in one line: # # if (/^Subject:.*(exim|sendmail|gdm|xdm|imap|cgi)/) # # # - Linebreaking only works for quotet text and between patterns: # # "Imagine this is as a \ # long text string" # # #if (/^To:.*mutt/ \ # || /^[Cc][Cc]:.*mutt/) #
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Spam messages with numbered subjects
#
if (/^Subject:.*[:wbreak:][:digit:][:digit:][:digit:][:digit:][:wbreak:]/ \
&& !/^Precedence: bulk/)
{
exception {
to $DEFAULT/.Trash/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# What we can find in the header
if ( /^X-Advertisement:.*/ \
|| /^X-Mailer:.*(Advanced Mass)/ \
|| /^X-Spam-Status: YES / \
|| /^Message-ID:*<>/ )
{
exception {
to $DEFAULT/.Trash/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Spam addresses From:
if (/^From:.*(galamail\.com|agentoflove|absoluteagency\.com|delphi\.com|238525) /)
{
exception {
to $DEFAULT/.Trash/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Spam addresses To:
if (/^To:.*(spambot|undisclosed recipient)/ )
{
exception {
to $DEFAULT/.Trash/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Long Subject spam words
# IT SHOULD BE JUST ONE LONG LINE (breaks are for wiki purpuses)
if (/^Subject:.*(SPAM|\[Vv\]iagra|offer|free|wanted|penis|chip|inch|please|pill|ydrocodone|remember|
prescription|1-800|inch|remove|XXX|sex|adults|business opportunity|unsuscribe|LANGUAGE CENTER|visit today|
penis|longer|size|GUARANTEE|\[Ll\] \[Aa\] \[Nn\] \[Gg\] \[Uu\] \[Aa\] \[Gg\] \[Ee\] ) / )
{
exception {
to $DEFAULT/.Trash/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Trashing offtopic messages
if (/^Subject:.*(\[ot\]|\<ot\>|\[off\]|\[.*[ ]ot\])|off.*topic/)
{
exception {
to $DEFAULT/.Trash/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Trashing test messages
if (/^Subject:test$/)
{
exception {
to $DEFAULT/.Trash/
}
}
if (/^Subject:.*[ ]test$/)
{
exception {
to $DEFAULT/.Trash/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# .Personal
#
if ( /^From:.*(friend_1|friend_2|friend_3)/ )
{
exception {
to $DEFAULT/.Personal/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# .2root
#
if (/^Subject:.*Cron/ || /^To:.*root/ )
{
exception {
to $DEFAULT/.2root/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# .yourmailbox
#
if (/^To:.*yourmailbox/)
{
exception {
to $DEFAULT/.youmailbox/
}
}
####################################################################
# .mailing lists and forums
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# .gentoo-wiki
if ( /^Reply-To:.*devel@gentoo-wiki\.com/ \
|| /^Reply-To:.*users@gentoo-wiki\.com/ )
{
exception {
to $DEFAULT/.gentoo-wiki/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# .forums.gentoo-org
if (/^From:.*blackhole@forums\.gentoo\.org/ )
{
exception {
to $DEFAULT/.forums-gentoo/
}
}
#''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# .courier-maildrop
if (/^List-Post:.*courier-maildrop*/ )
{
exception {
to $DEFAULT/.list.courier-maildrop/
}
}
|
- Почтовые ящики для каждого правила необходимо создать вручную (иначе будет ругаться)
maildirmake -f Folder.Name $HOME/.maildir
- И подписаться на вновь созданные почтовые ящики
echo INBOX.Folder.Name >> $MAILDIR/courierimapsubscribed
[править] Интеграция с postfix
Надо сообщить postfix, кто у нас работает на локальной доставке, так что vim /etc/posfix/main.cf
| Файл: /etc/posfix/main.cf |
# The mailbox_command parameter specifies the optional external # command to use instead of mailbox delivery. The command is run as # the recipient with proper HOME, SHELL and LOGNAME environment settings. # Exception: delivery for root is done as $default_user. # # Other environment variables of interest: USER (recipient username), # EXTENSION (address extension), DOMAIN (domain part of address), # and LOCAL (the address localpart). # # Unlike other Postfix configuration parameters, the mailbox_command # parameter is not subjected to $parameter substitutions. This is to # make it easier to specify shell syntax (see example below). # # Avoid shell meta characters because they will force Postfix to run # an expensive shell process. Procmail alone is expensive enough. # # IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN # ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER. # #mailbox_command = /some/where/procmail #mailbox_command = /some/where/procmail -a "$EXTENSION" mailbox_command = /usr/bin/maildrop ## Set to 1 because Maildrop only delivers one message at a time. maildrop_destination_recipient_limit = 1 |
vim /etc/postfix/master.cf
Примерно 113 строчка
| Файл: /etc/postfix/master.cf |
maildrop unix - n n - - pipe
# объедините две последующие линии в одну!
flags=DRhu user=vmail:vmail argv=/usr/bin/maildrop -w 90 -d ${user} ${nexthop}
${extension} ${recipient} ${user}${nexthop} #thats should be joined with the above line!
# So what does maildrop do with all of these? The above looks somewhat
# redundant, as ${recipient} is made up of ${user}+${extension}@${nexthop}.
#
# Magic from a recipe :-).
#
#The answer: in the maildropfilter file, $recipient becomes $1, $user
#$2, etc. So for my purposes, $recipient is sufficient. In addition,
#I must put this, or something similar, in the maildropfilter:
# xfilter "reformail -I 'X-Panix-Recipient: $1'"
|
После изменения конфигурации перезапускаем postfix /etc/init.d/postfix restart
[править] Интеграция с Qmail
1)#cd /usr/home/vpopmail/domains/domain_name
2)Создаем файл mailfilter:
VHOME="/usr/home/vpopmail/domains/domain_name/$EXT"
logfile "/tmp/maildrop.log"
if (/^X-Spam-Status: Yes*/)
{
exception {
include $VHOME/Maildir/.mailfilter
}
exception {
#to "$VHOME/Maildir/.Trash/"
to "$VHOME/Maildir/.Spam/"
}
}
else
{
exception {
include $VHOME/Maildir/.mailfilter
}
exception {
to "$VHOME/Maildir/"
log "mail ok"
}
}
3)#chown vpopmail:vchkpw mailfilter
4)находим изверей и создаем им папку Spam
localhost# ls -l total 24 -rw-r--r-- 1 vpopmail vchkpw 34 Aug 27 08:21 .dir-control -rw------- 1 vpopmail vchkpw 83 Aug 31 01:45 .qmail-default -rw------- 1 vpopmail vchkpw 23 Aug 27 08:21 .qmailadmin-limits -rw------- 1 vpopmail vchkpw 0 Aug 30 07:48 .vpasswd.lock drwx------ 3 vpopmail vchkpw 512 Aug 27 07:24 deedee -rw------- 1 vpopmail vchkpw 736 Aug 31 02:52 mailfilter drwx------ 3 vpopmail vchkpw 512 Aug 27 00:13 postmaster drwx------ 3 vpopmail vchkpw 512 Aug 27 07:57 ronaldb drwx------ 3 vpopmail vchkpw 512 Aug 27 00:18 staff drwx------ 3 vpopmail vchkpw 512 Aug 28 07:26 steve -rw------- 1 vpopmail vchkpw 635 Aug 30 07:48 vpasswd -rw------- 1 vpopmail vchkpw 2793 Aug 30 07:48 vpasswd.cdb
- maildirmake -f Spam ronaldb/Maildir/
- chown -R vpopmail:vchkpw ronaldb/Maildir/.Spam/
и т.д. для каждого
5)поворачиваем qmail:
- echo "| /usr/local/bin/maildrop /usr/home/vpopmail/domains/domain_name/mailfilter"> .qmail-default
6)проверяем
- tail -f /tmp/maildrop.log
[править] Проблемы и решения
[править] Invalid home directory permissions - world writable.
При получении сообщения вида:
Delivery error (command maildrop 24688 error (75, /usr/bin/maildrop:
Invalid home directory permissions - world writable.))
msg 1/1 (812 bytes), delivery error (command maildrop 24688 error (75, /usr/bin/maildrop:
Invalid home directory permissions - world writable.))
1 messages retrieved, 0 skipped
- Решение
chmod 600 ~/.mailfilter
[править] For your own good
При получении сообщения:
Delivery error (command maildrop 5485 error (75, /usr/bin/maildrop: Cannot have world/group permissions on the filter file - for your own good.)) msg 1/1 (842 bytes), delivery error (command maildrop 5485 error (75, /usr/bin/maildrop: Cannot have world/group permissions on the filter file - for your own good.))
- Решение:
Избавиться от строки [arguments] в ~/.getmail/youmailbox.rc файле
[править] Unable to create a dot-lock
При получении сообщения:
Delivery error (command maildrop 10143 error (75, /usr/bin/maildrop: Unable to create a dot-lock.)) msg 1/1 (3612 bytes), delivery error (command maildrop 10143 error (75, /usr/bin/maildrop: Unable to create a dot-lock.)) 1 messages retrieved, 0 skipped
- Решение:
В файле ~/.mailfilter правило указывает на доставку сообщения в определенную директорию, которая не существует, в результате чего и выдается такое сообщение. Так что проверьте правила доставки и наличие директории.
[править] Использованные источники
- http://www.courier-mta.org/maildrop/
- http://www.dotfiles.com/files/18/288_mailfilter
- http://www.dotfiles.com/files/18/238_.mailfilter
- http://www.tnpi.biz/internet/mail/toaster/etc/mailfilter-domain
- http://www.xs4all.nl/~jaspersl/quota/
- http://nix.sevsky.net/rtfm/postfix/MAILDROP_README.html
- squirrelmail plugin
- mailing.postfix.users
- en:HOWTO Email Virtual Server Maildrop and Spam Assasin
|
Посоветовать или спросить, |
