I'm having an issue with email generated from a website contact form. The email is being sent from the website via php. The issue is that the email address that it is being sent to is a domain/website that is also on cpanel. It is trying to deliver it to a local account, but the email is acutally on a third party system outside of cpanel. Does anyone know anyway for exim to not try and deliver locally?
whether our webhost has their configuration messed up, or if this is not genuinely possible with cpanel + exim + shared hosting.
Our email server is hosted with the web host, and what we want to do is to not allow certain users to be able to receive (And send) outgoing email to non-local domains e.g. they should only be able send and receive within our hosted domain, @mydomain.com .
Now, we've tried doing this using cpanel's user level filters and have setup the following:
Rules: If Field To does not contain @mydomain.com OR If Field From does not contain @mydomain.com
Action:
Fail with message.
We've tested these filters using combinations and they seem to be working as far as we can see on cpanel (it has the filter testing feature)
Now this works for people sending emails into our domain e.g. someone from hotmail tries sending emails to a user, and it bounces back.
But people from inside the domain can send emails to other domains even when they give valid results on the cpanel filter tester.
- foo.com, with a mail account info@foo.com. - bar.com, with domain forwarding to foo.com.
Sending an email message to info@foo.com works.
Sending an email message to info@bar.com doesn't work. When using the ZoneEdit SMTP test utility I get the following error message:
Code: > RCPT TO:<info@bar.com> < 550 5.1.1 User unknown: info@bar.com I checked "/etc/vdomainaliases/bar.com" and "/etc/localdomains", they are configured properly.
I thought I knew enough about my .htaccess stuff to do this, but I can't seem to work it out. What I want to do is if a user visits domain.com/folder, we check to see if the folder exists. If so, show as normal (IE domain.com/support)
If a user visits domain.com/dynamicusername (dynamicusername is not a physical folder), redirect to dynamicusername.domain.com
Received: from ip.isp.com ([123.123.123.123]) by mx.myhost.net with esmtpa (Exim 4.69)
I'm trying to avoid the error
Received-SPF: softfail (google.com: domain of transitioning me@myhost.net does not designate 123.123.123.123 as permitted sender) client-ip=123.123.123.123;
Basically, any email thats sent through myhost.net should look like it was sent directly.
I am having issues in receieving emails. For some reason, the rbl lists I had setup are causing the server to reject emails (retry - timeout). So, I need to take this rbl list completely. How can I do that? exim.conf is locked and using the advanced editor is no fun even though I tried it putting the dnslists without the rbl causing the problem.
I seem to be experiencing some difficulty adding SPF records via "Edit DNS Zone". When adding these records and checking them with several SPF record checkers, it always reports a record such as the following:
“v=spf1
Which turns out to be invalid, and definitely not the record I had specified. The record I specified looks like the following:
"v=spf1 a mx ip4:XXX.XXX.XXX.XXX ~all"
XXX.XXX.XXX.XXX being a valid IP, of course.
Is there known issues when adding these types of records via WHM?
And to make it clear, I have added these records as TXT type, with and without the quotes.
Wondered if anyone out there would like to share their experience, if any, of setting up cpanel to work with domainkeys via exim.
Hopefully anyone reading this thread will know by now what domainkeys are and how it affects the delivering of email to most major email providers inboxes rather than spam/bulk folders.
antispam.yahoo.com/domainkeys
The domainkeys support for exim is now in the 'experimental' phase:
duncanthrax.net/exim-experimental/ (page allegedly updated on 30th Oct, 06)
However cpanel themselves seem to be dragging their feet a little with implementing it:
bugzilla.cpanel.net/show_bug.cgi?id=4099
This is understandable considering support for domainkeys is not yet part of the main exim core code, and thus is likely to change. From what I've been reading elsewhere, re-compiling and upgrading exim is not advisable with cpanel.
My knowledge of exim (and cpanel TBH) is limited however, and I was wondering what might be the implications of *ahem* hacking it a little in order to enable domainkeys.
SPF records alone just don't seem to cut it anymore.
I found a handful of howto's for dspam, but none of them catered for exim with virtual users. After hunting around, I eventually have it working on a cPanel server, with user authentication for mail users.
My setup: dspam version 3.6.8, using mysql driver. exim version 4. mysql 4.1 CentOS (2.6.9-023stab033.9-enterprise) cPanel / WHM - latest RELEASE version.
Download the source, configure and compile:
Code: # cd /usr/local/src # wget http://dspam.nuclearelephant.com/sou...m-3.6.8.tar.gz # tar -zxf dspam-3.6.8.tar.gz # cd dspam-3.6.8 Configure, replacing user/groups with your web-server user (web / apache / nobody), and use your mysql-include / library paths (will need mysql-devel on rh based systems).
Code: # ./configure --prefix=/opt/dspam-3.6.8 --with-local-delivery-agent=/usr/sbin/exim --with-storage-driver=mysql_drv --with-userdir=/var/spool/mail/dspam --with-userdir-owner=nobody --with-userdir-group=nobody --with-dspam-mode=none --with-dspam-owner=nobody --with-dspam-group=nobody --enable-whitelist --enable-spam-delivery --enable-alternative-bayesian --disable-dependency-tracking --enable-virtual-users --with-mysql-includes=/usr/include/mysql --with-mysql-libraries=/usr/lib/mysql/ --with-dspam-home=/opt/dspam-3.6.8/var/dspam # make && make install Set up mysql
Code: # mysqladmin -p create dspamdb # mysql -p >grant all privileges on dspamdb.* to dspamuser@localhost identified by dspampass; >flush privileges; >exit; Create tables:
Code: mysql -p dspamdb < /usr/local/src/dspam-3.6.8/src/tools.mysql_drv/mysql_objects_speed.sql mysql -p dspamdb < /usr/local/src/dspam-3.6.8/src/tools.mysql_drv/virtual_users.sql Link dspam in opt for easy versioning:
Code: ln -s dspam-3.6.8 /opt/dspam Copy the web interface files to a web directory:
This next step is required for pop3 authentication. Install perl module Apache::AuthPOP3 - which does apache pop3 authorisation:
Code: perl -MCPAN -e shell install Apache::AuthPOP3 Next, apache will need mod_perl installed - WHM -> Apache Update will allow you to enable the perl module (I am running it alongside php with no issues).
Then in /usr/local/apache/conf/httpd.conf:
Code: ScriptAlias /dspam/ /opt/dspam/cgi-bin/ Alias /dspam_files/ /opt/dspam/htdocs/ <Directory /opt/dspam/cgi-bin> Options None AllowOverride AuthConfig Order allow,deny Allow from all </Directory> Create .htaccess in /opt/dspam/cgi-bin as follows:
Code: AuthName "Dspam" AuthType Basic PerlAuthenHandler Apache::AuthPOP3 PerlSetVar MailHost localhost Require valid-user #PerlSetVar UserMap pop3user1=>realname1,pop3user2=>realname2 #Require user pop3user1 pop3user2 pop3user3 pop3user4 there are 2 commented parameters you can set when using POP3 auth - sure its pretty self-explanatory.
Set up admin user (the admin_user must be able to authenticate as a pop user):
Code: #echo "admin_user" >> /opt/dspam/cgi-bin/admins Create a queuesize script for web user - so dspam can determine how many messages in the queue.
Code: $CONFIG{'MAIL_QUEUE'} = "/usr/local/bin/eximqsize"; $CONFIG{'WEB_ROOT'} = "/dspam_files"; $CONFIG{'LOCAL_DOMAIN'} = "FQDN"; #your servers fully qualified domain name - e.g. host.yourdomain.com Next, set the default preferences for the system (you need /opt/dspam/bin in your path if you copy and paste this...):
Code: dspam_admin ch pref default trainingMode TEFT dspam_admin ch pref default spamAction quarantine dspam_admin ch pref default spamSubject "[SPAM]" dspam_admin ch pref default enableWhitelist on dspam_admin ch pref default showFactors off Permissions: I would suggest reading the README over dspam to get a full understanding of the permissions required for running of dspam. My permissions were:
Trust: root Trust: mail Trust: nobody / httpd #choose 1 - what ever your webserver runs as - `ps axu | grep httpd` to find out
#Use the same details as you did for the "grant all privileges on...." statement in mysql. MySQLServer /var/lib/mysql/mysql.sock MySQLPort MySQLUser dspamuser MySQLPass dspampass MySQLDb dspamdb MySQLCompress true
MySQLVirtualTable dspam_virtual_uids MySQLVirtualUIDField uid MySQLVirtualUsernameField username Almost there.... Confirm that mysql is configure to listen on a socket in /etc/my.cnf (or whereever your config file is):
Code: # cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock Now the final step - exim configuration. This is the part that took the longest, hopefully it works for you. Just as I read in the howto's I used for this, please please please dont just copy and paste - you stand a good chance of breaking your mail server if you make changes without understanding. Be warned.
My config file is /etc/exim.conf. This should be edited using the WHM -> Exim Configuration Editor -> Advanced.
Code: #Routers - Add these in the box before virtual_user delivery / user delivery router). dspam_router: no_verify #uncomment the next line to disable dspam for virtual users. # check_local_user condition = "${if and { {!def:h_X-Spam-Flag:} {!def:h_X-FILTER-DSPAM:} {!eq {$sender_address_domain}{$domain}} {!eq {$received_protocol}{local}} {!eq {$received_protocol}{spam-scanned}} } }" headers_add = "X-FILTER-DSPAM: by $primary_hostname on $tod_full" driver = accept transport = dspam_spamcheck
## The next 2 routers allow you to forward spam / non-spam to dspam for training (e.g. spam-yourmail@yourdomain.net). # spam-username dspam_addspam_router: driver = accept local_part_prefix = spam- transport = dspam_addspam
##Transports - can be added anywhere: #this adds the spam-scanned protocol header, so when it is passed back to exim after being processed by dspam, it doesnt get stuck in a loop. dspam_spamcheck: driver = pipe command = "/usr/sbin/exim -oMr spam-scanned -bS" transport_filter = "/opt/dspam/bin/dspam --stdout --deliver=innocent,spam --user $local_part@$domain" use_bsmtp = true home_directory = "/tmp" current_directory = "/tmp" user = nobody group = mail log_output = true return_fail_output = true return_path_add = false message_prefix = message_suffix =
If you have set up authentication correctly as well, then you should be able to open [url] and log in - if you add your login details to the "admins" file, you can configure defaults, etc. It also allows ALL users (with 1 user being an email account) to log in, using www.yourclientsdomain.com/dspam/dspam.cgi
This will not work with suexec enabled!! This is because dspam needs specific permissions, and it is expecting user nobody to access it. If suexec is enabled, you will need to use the default host, and NOT virtual hosts (and even this may not work - testing still required).
Watch exim_mainlog after this - you should pick up what transports and routers are being used.
Dspam can really hammer a system - mysql, cpu and memory usage will go up a bit, especially on busy production servers. Monitor your servers performance.
Other settings: add /opt/dspam/man to MANPATH in /etc/man.config or move dspam man directory to an existing man directory.
[ADDED] This dspam.cgi hack will do a lookup in the cpanel config file to find the domain for any username without a domain, and append it on match (or leave just the username part if nothing is found). This requires unsecuring your system a bit - your http user will need to be able to read /etc/trueuserdomains (either chmod 644 or chown nobody):
Code: #add this just after $CURRENT_USER is set. if ($CURRENT_USER !~ /@.+./) { open(TUD, "</etc/trueuserdomains"); while(<TUD>) { my ($domain, $user) = split(/:/,$_); chomp($user); $user =~ s/^s*//g; if ($user eq $CURRENT_USER) { $CURRENT_USER = $CURRENT_USER . "@$domain"; } } close(TUD); }
That should do it
dspam will allow all messages through by default, and will require some training. With this config, users can train using email commands - all they need to do is forward any spam that hits their mailbox to spam-emailaddress@domain.com (their own email address with spam- prepended). Unfortunately this does not allow handling of false positives if you are using a "quarantine" policy instead of subject. the web interface comes in handy for this.
I am busy testing a combination of dspam with assp, which seems to be working well - I especially like the greylisting feature of assp and ProtectionBox... Will add to this howto when testing is finish.
We are having trouble with disk space on some of our shared hosting servers and we are wondering if anyone have a script to clean e-mails from exim not checked in the last 60 days ?
Does anyone know if it is possible to implement DKIM (DomainKeys Identified Mail) on a Linux server that uses cPanel/Exim? I am interested in getting this implemented but not sure how, or if it's even possible yet on my setup.
I have noticed on my two dedicated servers logs that some emails just dissapear after being frozen for days in queue and there is no notice or warning sent to the sender.
Please check your logs and tell me if I am wrong, just check for non-zero on your exim_mainlog
grep non-zero /var/log/exim_mainlog
and then grep your messageId
grep 1K17WW-0002so-Sn /var/log/exim_mainlog 2008-05-24 17:34:23 1K17WW-0002so-Sn == vicoello@xxxxx.com R=lookuphost T=remote_smtp defer (-1): smtp transport process returned non-zero status 0x000e: terminated by signal 14 2008-05-24 17:34:23 1K17WW-0002so-Sn Frozen 2008-05-25 18:02:27 1K17WW-0002so-Sn Message is frozen ... 2008-05-26 22:08:47 1K17WW-0002so-Sn Message is frozen .... 2008-05-27 15:00:31 1K17WW-0002so-Sn Message is frozen ? Dissapeared