Exim nyűg

Sziasztok.
A következő érdekes problémába futottam bele. XP-s kliensek munkacsoportban, thunderbird levelező, exim szerver. Minden a legnagyobb rendben. Múlt héten beléptettem a XP-ket active directory alá. (SBS 2003). A linux nincs AD alatt. Na innentől kezdve a levélküldés kicsit lelassult. Mint kiderítettem az exim minden levélküldés előtt csinál egy blacklist-es szűrést. Persze van beállítva 4 szerver, tehát kell is csinálnia, de nem a kimenő leveleken, hanem a bejövőkön (amely működik is). Tehát a kérdés: mi a bánatért ellenőrzi a kimenő leveleket?
exim.conf:

# MAIN CONFIGURATION SETTINGS #

primary_hostname = akarmi.hu
domainlist local_domains = akarmi.hu
domainlist relay_to_domains =
hostlist relay_from_hosts = 127.0.0.1 : 192.168.1.0/24
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_not_smtp = acl_check_not
av_scanner = clamd:127.0.0.1 3310
spamd_address = 127.0.0.1 783
qualify_domain = akarmi.hu
never_users = root
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 5s
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d

# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #

begin acl
acl_check_rcpt:
accept hosts = :
deny message = Restricted characters in address
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]

deny message = Restricted characters in address
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

accept local_parts = postmaster
domains = +local_domains
require verify = sender

drop log_message = found in $dnslist_domain
dnslists = sbl-xbl.spamhaus.org : dnsbl.njabl.org : list.dsbl.org : cbl.abuseat.org : relays.ordb.org

accept domains = +local_domains
endpass
verify = recipient

accept domains = +relay_to_domains
endpass
verify = recipient

accept hosts = +relay_from_hosts

accept authenticated = *

deny message = relay not permitted

acl_check_data:
deny malware = *
message = This message contains a virus ($malware_name).

warn message = :after_received:X-Virus-Check: \
${run{/usr/sbin/clamd --version}\
{${extract{1}{/}{$value}}/${extract{2}{/}{$value}}}\
{unchecked}} on $primary_hostname; $tod_full

warn spam = nobody:true
message = X-Spam_score: $spam_score\n\

warn spam = nobody:true
message = X-Spam_Status: $spam_report
condition = ${if > {$spam_score_int}{0}{1}{0}}

warn message = X_Spam_Status: Yes
spam = nobody
condition = ${if > {$spam_score_int}{50}{1}{0}}

deny message = This message scored $spam_score spam points.
spam = nobody:true
condition = ${if > {$spam_score_int}{70}{1}{0}}

accept

acl_check_not:
deny condition = ${if !eq {$sender_address}{}{yes}{no}}
message = Message contains malware ($malware_name)
log_message = Malware ($malware_name) for $recipients
malware = *
control = freeze

warn message = :after_received:X-Virus-Check: \
${run{/usr/sbin/clamd --version}\
{${extract{1}{/}{$value}}/${extract{2}{/}{$value}}}\
{unchecked}} on $primary_hostname; $tod_full
accept

# ROUTERS CONFIGURATION #

begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more

system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/aliases}}
file_transport = address_file
pipe_transport = address_pipe

userforward:
driver = redirect
check_local_user
file =${home}/.forward
allow_filter
no_verify
no_expn
check_ancestor
file_transport = address_directory
pipe_transport = address_pipe
reply_transport = address_reply
directory_transport = address_directory

localuser:
driver = accept
check_local_user
transport = local_delivery
cannot_route_message = Unknown user

# TRANSPORTS CONFIGURATION #

begin transports

remote_smtp:
driver = smtp

local_delivery:
driver = appendfile
mode_fail_narrower=false
directory=${home}/Maildir
envelope_to_add=true
return_path_add=true
group = mail
mode = 0660
maildir_format

address_pipe:
driver = pipe
return_output

address_directory:
driver=appendfile
maildir_format

address_reply:
driver = autoreply

Hozzászólások

Talan, ha ezt:

drop log_message = found in $dnslist_domain
dnslists = sbl-xbl.spamhaus.org : dnsbl.njabl.org : list.dsbl.org : cbl.abuseat.org : relays.ordb.org

atirnad pl. igy:


drop  log_message = found in $dnslist_domain
      hosts       = !+relay_from_hosts
      dnslists    = sbl-xbl.spamhaus.org : dnsbl.njabl.org

Ezentul felhivnam a figyelmed, hogy az ordb.org mar jo fel eve bezart.

Tehát:
linux:~ # exim -bh 209.85.135.109 (smtp.gmail.com)

**** SMTP testing session as if from host 209.85.135.109
**** but without any ident (RFC 1413) callback.
**** This is not for real!

>>> host in hosts_connection_nolog? no (option unset)
>>> host in host_lookup? yes (matched "*")
>>> looking up host name for 209.85.135.109
>>> IP address lookup yielded mu-in-f109.google.com
>>> gethostbyname2 looked up these IP addresses:
>>> name=mu-in-f109.google.com address=209.85.135.109
>>> checking addresses for mu-in-f109.google.com
>>> 209.85.135.109 OK
>>> host in host_reject_connection? no (option unset)
>>> host in sender_unqualified_hosts? no (option unset)
>>> host in recipient_unqualified_hosts? no (option unset)
>>> host in helo_verify_hosts? no (option unset)
>>> host in helo_try_verify_hosts? no (option unset)
>>> host in helo_accept_junk_hosts? no (option unset)
220 akarmi.hu ESMTP Exim 4.67 Wed, 20 Jun 2007 09:55:04 +0200
mail from:<>
250 OK
rcpt to:
>>> using ACL "acl_check_rcpt"
>>> processing "accept"
>>> check hosts = :
>>> host in ":"? no (end of list)
>>> accept: condition test failed
>>> processing "deny"
>>> check domains = +local_domains
>>> akarmi.hu in "akarmi.hu"? yes (matched "akarmi.hu")
>>> akarmi.hu in "+local_domains"? yes (matched "+local_domains")
>>> check local_parts = ^[.] : ^.*[@%!/|]
>>> dj in "^[.] : ^.*[@%!/|]"? no (end of list)
>>> deny: condition test failed
>>> processing "deny"
>>> check domains = !+local_domains
>>> akarmi.hu in "!+local_domains"? no (matched "!+local_domains" - cached)
>>> deny: condition test failed
>>> processing "accept"
>>> check local_parts = postmaster
>>> dj in "postmaster"? no (end of list)
>>> accept: condition test failed
>>> processing "require"
>>> check verify = sender
>>> require: condition test succeeded
>>> processing "drop"
>>> check hosts = !+relay_from_hosts
>>> host in "127.0.0.1 : 192.168.1.0/24"? no (end of list)
>>> host in "!+relay_from_hosts"? yes (end of list)
>>> check dnslists = sbl-xbl.spamhaus.org : dnsbl.njabl.org : list.dsbl.org : cbl.abuseat.org
>>> DNS list check: sbl-xbl.spamhaus.org
>>> new DNS lookup for 109.135.85.209.sbl-xbl.spamhaus.org
>>> DNS lookup for 109.135.85.209.sbl-xbl.spamhaus.org failed
>>> => that means 209.85.135.109 is not listed at sbl-xbl.spamhaus.org
>>> DNS list check: dnsbl.njabl.org
>>> new DNS lookup for 109.135.85.209.dnsbl.njabl.org
>>> DNS lookup for 109.135.85.209.dnsbl.njabl.org failed
>>> => that means 209.85.135.109 is not listed at dnsbl.njabl.org
>>> DNS list check: list.dsbl.org
>>> new DNS lookup for 109.135.85.209.list.dsbl.org
>>> DNS lookup for 109.135.85.209.list.dsbl.org failed
>>> => that means 209.85.135.109 is not listed at list.dsbl.org
>>> DNS list check: cbl.abuseat.org
>>> new DNS lookup for 109.135.85.209.cbl.abuseat.org
>>> DNS lookup for 109.135.85.209.cbl.abuseat.org failed
>>> => that means 209.85.135.109 is not listed at cbl.abuseat.org
>>> drop: condition test failed
>>> processing "accept"
>>> check domains = +local_domains
>>> akarmi.hu in "+local_domains"? yes (matched "+local_domains" - cached)
>>> check verify = recipient
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>> routing dj@akarmi.hu
>>> akarmi.hu in "! +local_domains"? no (matched "! +local_domains" - cached)
>>> calling system_aliases router
>>> system_aliases router declined for dj@akarmi.hu
>>> calling localuser router
>>> routed by localuser router
>>> ----------- end verify ------------
>>> accept: condition test succeeded
250 Accepted
data
354 Enter message, ending with "." on a line by itself
dfg dfg dg df gd gd df
.
>>> host in ignore_fromline_hosts? no (option unset)
>>> using ACL "acl_check_data"
>>> processing "deny"
>>> check malware = *
>>> deny: condition test failed
>>> processing "warn"
>>> warn: condition test succeeded
>>> processing "warn"
>>> check spam = nobody:true
>>> trying server 127.0.0.1, port 783
>>> warn: condition test succeeded
>>> processing "warn"
>>> check spam = nobody:true
>>> check condition = ${if > {$spam_score_int}{0}{1}{0}}
>>> = 1
>>> warn: condition test succeeded
>>> processing "warn"
>>> check spam = nobody
>>> warn: condition test failed
>>> processing "deny"
>>> check spam = nobody:true
>>> check condition = ${if > {$spam_score_int}{70}{1}{0}}
>>> = 0
>>> deny: condition test failed
>>> processing "accept"
>>> accept: condition test succeeded
>>> unspool_mbox(): unlinking '/var/spool/exim/scan/1I0v4j-0002vK-BA/1I0v4j-0002vK-BA.eml'
LOG: 1I0v4j-0002vK-BA <= <> H=mu-in-f109.google.com [209.85.135.109] P=smtp S=908
250 OK id=1I0v4j-0002vK-BA

**** SMTP testing: that is not a real message id!

quit
221 akarmi.hu closing connection

Úgy néz ki, hogy még mindig csinál egy rbl ellenőrzést, sőt egy spamszűrést is. Javítsatok ki ha nem így van. Gondolom ezt a kettőt kellene valahogy a kimenő leveleken elkerülni. Erre kérnék javaslatot. Bocs, hogy ilyen hosszú post-okat írok.
Úgy néz ki a dj@akarmi.hu-t több helyre beírja a rendszer. Eredetileg az csak a rcpt to mögött van, ahol most nincs.

OK. Ezt értem. De azt nem, miért lassú a levélküldés. Kipróbáltam, hogy telnettel rájelentkeztem. telnet mail.akarmi.hu 25
interneten keresztül 10s, szerverről(amelyiken az exim van) azonnal, a helyi hálózat egy gépéről 25 s!!!!
miért ilyen lassú? Mi a fenét szöszmötöl 25 másodpercig?

Ket dolog lehet: egyik a mar emlitett ident check (113/tcp), a masik valamilyen dns timeout. Tuzfal kornyeken nezz szet, ervenyes-e minden ns bejegyzes stb. De azert is irtam a -bh-val valo tesztelest, mert ott mikor irogatod be a parancsokat, latod hogy az exim mivel tokol (debug), hol var sokat. Nyilvan most hogy copypaste beirtad ide, az egyes commandok kozti wait nem jott at... :)

Kikapcsolt tűzfal mellett is lassú. Az exim -bh parancsot, csak a szerveren tudom kipróbálni, ott pedig nincs probléma. Egy furcsaságot vettem észre. Nem hajlandó a szerver a helyi háló gépeit dns-en keresztül megtalálni, csak ha beírom a hosts-ba. Külső címet gond nélkül felold. Gondolom, mivel most a gépek bekerültek az active directory címkeresési zónájába, ezért nem tudja feloldani a gépneveket. Mivel lehetne rávenni a linux-ot, hogy ezt a címkeresési zónát használja? resolv.conf?
Igaz előtte sima munkacsoport volt és a gépek nem voltak felvéve a hosts-ba, mégsem volt lassú a küldés.

A resolv.conf-ban jól van beállítva a nameserver, amely egyben a domain controller. Mivel sokkal egyszerűbb úgy telepíteni active directory-t, hogy rögtön dns szervert is telepítek hozzá. Mindezt sbs2003 alatt. A nslookup feloldja a gépnevet, viszont a ping már nem. Csak a belső háló gépeivel van baj. Azok közül is csak azokról lassú a levélküldés, amelyeket bejelentkeztettem active directory alá. Munkacsoportos gépekről nincs lassulás.

nem lehet hogy a kliensek blokkoljak az auth portot?
rfc1413_hosts = *
rfc1413_query_timeout = 5s

Megtekintettem a forgalmat ethereallal. Ha pingetek egy ad-s gépet akkor nem dns protokollal próbálkozik az alapértelmezett dns szerveren, hanem mdns protokollal 224.0.0.251 címen. Persze ilyen nincs, ezért nem is tudja feloldani a gépnevet. Ha egy külső címet pingetek, akkor normálisan dns kéréssel pillanatok alatt feloldja a gépnevet. Na ezért lassú az exim is.
Mi ez a mdns és hogy lehet kikerülni?

Hi.
Sajna nem lehet, mert dependel rá a fél rendszer. Most azt csináltam, hogy a nss_mdns.conf-ban a domain local sorban a local-t átírtam loc-ra. Valamint a host.conf végére beírtam azt, hogy mdns off. Nagyságrendekkel gyorsabb lett. De még mindig nem az igazi, mert mégis próbálkozik az mdns, igaz, hogy közben dns-el megjön a cím. Ezért kb. 10 másodpercre csökkent a levélküldés.
Van valakinek más ötlete?

Megoldódott. A host.conf-ban mdns off alkalmazása, valamint a nss_mdns.conf-ban a domain local átírása domain loc-ra. Ez az utóbbi nem biztos, hogy kell. De a legfontosabb kimaradt. Mivel ez egy email és samba szerver nem indítgatom újra mindennap. De a nscd-t kellett újraindítani és voila. A fene essen bele. Most azonnal csatlakozik az email kliens és a telnet is. Azért köszi mindenkinek.

Üdv!

Egy hülye kérdés: egy gépen csak local delivery van, exim4-el. A root@localhost-ra küldött levelek nem mennek el, de mindenki másnak elmennek. Mi okozhatja ezt? Az aliases file-ban meg van adva, hogy a root leveleit ki kapja meg, de nem ér oda, az exim mailq-ban ott vannak beragadva a root@localhost-ra címzett levelek. Newaliases lefuttatva, de továbbra sem mennek el a levelek...

Mi lehet a hiba?

Petya

sziasztok,

openwebmail ujratelepites utan , fetchmail leszedi szepen a leveleket, ahogy user beloginol, viszont exim nem tovabbitja oket a megfelelo usernek, jogokat beallitottam, minden ilyesmi, kuldeni tudnak mailt csak nem kapjak meg oket !

a kovetkezo hibat dobja exim paniclog :

2009-05-20 10:08:07 1M5xqK-0000uU-5U unable to set gid=8 or uid=1009 (euid=100): local delivery to peter
transport=mail_spool
2009-05-20 10:08:07 1M5xqK-0000uU-5U failed to read delivery status for peter@valami.hu from delivery subprocess
2009-05-20 10:08:07 1M5xqK-0000uU-5U appendfile transport process returned non-zero status 0x0100: exit code 1

tudna valaki valami otletet adni, eximhez egyatlalan nem nyultam es megis ...

koszike

En is kerdeznek :) Ha x ideig nem megy el a level (mondjuk ket napig), akkor hogyan tudom "rakenyszeriteni", hogy csinaljon vele valamit? Mondjuk, dobja vissza a feladonak vagy hajitsa ki?

Retry a defaulton van:
begin retry

* * F,2h,15m; G,16h,1h,1.5; F,4d,6h

Ezenkivul meg talaltam a
retry_data_expire = 1w
beallitast, de sztem ez sem a megfelelo....

Jelenleg lefut egy srcipt orankent es a harom napnal regebbi cuccot torli, de jobb lenne, ha ezt exim csinalna...

Koszi a valaszt!

en csak a frozen uzeneteket torlom a queuebol naponta:

for msgid in `exim4 -bpr | grep "frozen" | awk '{ print $3 }'`; do
echo "=== remove: $msgid ==="
exim4 -Mrm $msgid
done

de ugyanebbol a listabol kiveheted azokat is amelyek mar > x ideje vannak a queueban.

a felado automatikusan olyan uzenetet kap naponta hogy: mar 24 oraja nem sikerult kezbesiteni a levelet, de nem kell tenned semmit mert tovabb probalkozom, stb.