User Tools

Site Tools


exim4:install_exim4_complete

This is an old revision of the document!


Exim4 - Install Exim4 Complete

Our mail server supports virtual accounts using the MySQL database (enable set like MySQL, I spoke here ), SMTP-authentication and secure connection TLS / SSL.

To use TLS / SSL create a certificate.

mkdir -p /etc/ssl/certs 
cd /etc/ssl/certs 
openssl req -x509 -newkey rsa:1024 -keyout mail.pem -out mail.pem \ ? -days 9999 -nodes

Less than 9999 days exist before the Unix / Linux 32-bit date wrap-around occurs.

Country Name (2 letter code) [CA]: 
State or Province Name (full name) [Quebec]: 
Locality Name (eg, city) [Montreal]: 
Organization Name (eg, company) [Open Network Architecture]: 
Organizational Unit Name (eg, section) [Internet Department]: 
Common Name (eg, YOUR name) []: 
Email Address []:

Fills as your heart desires (because you're not going to pay for the certificate), except for the string Common Name (eg, YOUR name) []. Here you need to enter the name of our server:

Common Name (eg, YOUR name) []: sharewiz.net

In the directory /etc/ssl/certs appeared certificate file mail.pem, which in the future we will use for the secure connection to our mail server. We carry on this file two more opertsii:

chmod 440 /etc/ssl/certs/mail.pem 
chgrp mail /etc/ssl/certs/mail.pem

The certificate is over, now the loans directly to Exim.

For Exim we need a non-privileged user that belongs to the group mail. Create it.

pw useradd exim -c "Exim" -d /var/spool/mqueue -s /sbin/nologin -g mail 
exit 
cat /etc/passwd | grep exim

The last command we find that your account has exim uid = 1003, and gid = 6. These data we need in the configuration.

Pick the latest version of Exim (as of this writing - 4.50) from site www.exim.org. Do not take the earlier version. This is due to the fact that, since version 4.50, previously separately existing patch exiscan-acl is integrated in the source code.

cd $HOME/install 
links www.exim.org 
tar xzfv exim-4.50.tar.gz 
cd exim-4.50 
cp src/EDITME Local/Makefile

Edit the Local/Makefile

ee Local/Makefile

changing

Local/Makefile
  BIN_DIRECTORY = /usr/exim/bin
  on 
 
  BIN_DIRECTORY = /usr/local/exim/bin
  Here we specify the installation path Exim executable files. 
 
  CONFIGURE_FILE = /usr/exim/configure
  on 
 
  CONFIGURE_FILE = /usr /local/exim/configure
  Here we specify the name and path of the configuration file. 
 
  EXIM_USER =
  on 
 
  EXIM_USER = 1003
  # EXIM_GROUP =
  on 
 
  EXIM_GROUP = 6
  Remember I talked about the uid and gid?  Right now we need them.  Please enter a numeric user and group IDs on whose behalf will run Exim. 
 
  SPOOL_DIRECTORY = /var/spool/exim
  on 
 
  SPOOL_DIRECTORY = /var/spool/mqueue
  Here we specify the name of the spool-directory. 
 
  # SUPPORT_MAILDIR = yes
  on 
 
  SUPPORT_MAILDIR = yes
  Here we include support for Maildir. 
 
  # LOOKUP_MYSQL = yes
  on 
 
  LOOKUP_MYSQL = yes
  Here we include support for MySQL. 

To find the path to library files and MySQL headers, execute:

/usr/local/mysql/bin/mysql_config

Result

Usage: /usr/local/mysql/bin/mysql_config [OPTIONS]
 Options:
 --cflags [-I /usr/local/mysql/include/mysql -fomit-frame-pointer]
 --include [-I /usr/local/mysql/include/mysql]
 --libs [-L /usr/local/mysql/ lib/mysql -lmysqlclient -lz -lcrypt -lm]
 --libs_r [-L /usr/local/mysql/lib/mysql -lmysqlclient_r -lz -lcrypt -lm
   -lpthread]
 --socket [/tmp/mysql.sock]
 --port [3306]
 --version [4.1.10a]
 --libmysqld-libs [-L /usr/local/mysql/lib/mysql -lmysqld -lcrypt -lm -lpthread]

These values ​​are substituted into the lines below …

 # LOOKUP_INCLUDE = -I /usr/local/ldap/include -I /usr/local/mysql/include
 # LOOKUP_LIBS = -L /usr/local/lib -lldap -llber -lmysqlclient -lpq
 
  on 
 
  LOOKUP_INCLUDE = -I /usr/local/mysql/include/mysql 
  LOOKUP_LIBS = -L /usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lm
 
  EXIM_MONITOR = eximon.bin
  on 
 
  # EXIM_MONITOR = eximon.bin
  Here, we turn off support for Exim Monitor. 
 
  For Exim Monitor requires X11, contact is not used. 
 
  # WITH_CONTENT_SCAN = yes
  on 
 
  WITH_CONTENT_SCAN = yes
 
  # WITH_OLD_DEMIME = yes
  on 
 
  WITH_OLD_DEMIME = yes
  Here we include an option that will help Exim work with ClamAV and Spamassassin.  These are the same options that were not available prior to version 4.50.  He saved patch exiscan-acl. 
 
  # AUTH_CRAM_MD5 = yes 
  # AUTH_PLAINTEXT = yes
  on 
 
  AUTH_CRAM_MD5 = yes 
  AUTH_PLAINTEXT = yes
  Here we include of SMTP-authentication support for PLAIN and CRAM-MD5. 
 
  # SUPPORT_TLS = yes
  on 
 
  SUPPORT_TLS = yes
  Here we include TLS / SSL support for secure connection. 
 
  # TLS_LIBS = -lssl -lcrypto
  on 
 
  TLS_LIBS = -lssl -lcrypto
  Here we specify the names of libraries for TLS / SSL. 
 
  # LOG_FILE_PATH = /var/log/exim_%slog
  on 
 
  LOG_FILE_PATH = /var/log/exim/exim_%slog
  Putting log files to a separate directory. 
 
  EXICYCLOG_MAX = 10
  on 
 
  EXICYCLOG_MAX = 20
  Number of saved log files do I increase to 20 in the event debriefing with his superiors: "Where's my letter, which I sent two weeks ago?" 
 
  # EXIM_PERL = perl.o
  on 
 
  EXIM_PERL = perl.o
  Here we include support perl, to ensure the use of Perl-compatible regular expressions, etc ... 
 
  # CHOWN_COMMAND = /usr/bin/chown
  on 
 
  CHOWN_COMMAND = /usr/sbin/chown
  Here we specify the correct path to the chown command. 
 
  # SUPPORT_MOVE_FROZEN_MESSAGES = yes
  on 
 
  SUPPORT_MOVE_FROZEN_MESSAGES = yes
  Here we include support for the automatic movement "frozen" posts of the input directories and directories msglog Finput and Fmsglog main spool. 

Save the changes. It remains to compile and install Exim.

make 
su 
make install

After the installation is complete, you need to create a symbolic link, this will do the following:

ln -fs /usr/local/exim/bin/exim /usr/lib/sendmail 
ln -fs /usr/local/exim/bin/exim /usr/sbin/sendmail 
ln -fs /usr/local/exim/bin/exim /usr/bin/mailq 
ln -fs /usr/local/exim/bin/exim /usr/bin/runq 

After that you want to remove from the object files Exim table name and line number information for this issue:

strip /usr/local/exim/bin/exim* 
exit

Before configuring Exim, you need to create a database, the user and the appropriate table for this issue:

/usr/local/mysql/bin/mysql -u myadmin -p 

Result

Welcome to the MySQL monitor.  Commands end with;  or \ g.
Your MySQL connection id is 3760 to server version: 4.1.10a-log

Type 'help;'  or '\ h' for help.  Type '\ c' to clear the buffer.

mysql>

Create the database.

mysql> CREATE DATABASE exim;
mysql> GRANT ALL PRIVILEGES ON exim.* TO sqlmail@localhost
    -> IDENTIFIED BY 'my_password' WITH GRANT OPTION;
mysql> quit

When the database and user created, you need to create the table structure, and enter data about users. You can do this in the MySQL console, but we will create exim.sql file, which will then create us everything we need.

ee exim.sql
exim.sql
# Create the aliases table.
CREATE TABLE aliases (
  local_part varchar(64) NOT NULL default '',
  domain varchar(128) NOT NULL default 'sharewiz.net',
  recipients text,
  PRIMARY KEY  (local_part,domain)
);
 
# Populate the aliases table.
INSERT INTO aliases VALUES ('postmaster', 'sharewiz.net', 'admin');
INSERT INTO aliases VALUES ('mailer-daemon', 'sharewiz.net', 'postmaster');
INSERT INTO aliases VALUES ('root', 'sharewiz.net', 'postmaster');
INSERT INTO aliases VALUES ('bin', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('daemon', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('sync', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('mail', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('pop', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('uucp', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('ftp', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('nobody', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('www', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('named', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('postgres', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('mysql', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('squid', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('operator', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('abuse', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('hostmaster', 'sharewiz.net', 'root');
INSERT INTO aliases VALUES ('webmaster', 'sharewiz.net', 'root');
 
# Create the domains table.
CREATE TABLE domains (
  domain varchar(128) NOT NULL default '',
  type enum('LOCAL','RELAY','VIRTUAL') default 'LOCAL',
  PRIMARY KEY  (domain)
);
 
# Populate the domains table.
INSERT INTO domains VALUES ('sharewiz.net', 'LOCAL');
 
# Create the userforward table.
CREATE TABLE userforward (
  local_part varchar(64) NOT NULL default '',
  domain varchar(128) NOT NULL default '',
  recipients text,
  PRIMARY KEY  (local_part,domain)
);
 
# Create the users table.
CREATE TABLE users (
  login varchar(64) NOT NULL default '',
  name varchar(128) NOT NULL default '',
  password varchar(64) NOT NULL default '',
  decrypt varchar(64) NOT NULL default '',
  uid int(10) unsigned default '1003',
  gid int(10) unsigned default '6',
  domain varchar(128) NOT NULL default 'sharewiz.net',
  quota tinyint(4) default '0',
  status enum('0','1') default '1',
  PRIMARY KEY  (login,domain)
);

Create the tables, data, and the first user.

/usr/local/mysql/bin/mysql -u sqlmail -p exim
mysql> \. exim.sql
mysql> INSERT INTO users (login,name,password,decrypt) 
    -> VALUES ('admin','John',encrypt('my_password'),'my_password');
mysql> quit

It's time now to configure Exim. Go to the directory where configuration file and do the following:

cd /usr/local/exim
su
mv configure configure.default

Edit the configuration file.

ee configure

and populate as:

configure
######################################################################
#                  Runtime configuration file for Exim               #
######################################################################
#######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################
 
primary_hostname = sharewiz.net
domainlist local_domains = ${lookup mysql{SELECT domain FROM domains \
                        WHERE domain='${domain}' AND \
                        (type='LOCAL' OR type='VIRTUAL')}}
domainlist relay_to_domains = ${lookup mysql{SELECT domain FROM domains \
                        WHERE domain='${domain}' AND type='RELAY'}}
hostlist   relay_from_hosts = 127.0.0.1
auth_advertise_hosts = *
daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
tls_advertise_hosts = *
tls_certificate = /etc/ssl/certs/mail.pem
tls_privatekey = /etc/ssl/certs/mail.pem
log_selector = \
        +all_parents \
        +lost_incoming_connection \
        +received_sender \
        +received_recipients \
        +smtp_confirmation \
        +smtp_syntax_error \
        +smtp_protocol_error \
        -queue_run
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_mime = acl_check_mime
qualify_domain = sharewiz.net
allow_domain_literals = false
never_users = root
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 30m
timeout_frozen_after = 3d
freeze_tell = postmaster
message_size_limit = 10M
smtp_accept_max = 100
smtp_accept_max_per_connection = 5
smtp_accept_max_per_host = 2
split_spool_directory = true
remote_max_parallel = 15
smtp_banner = "Welcome on our mail server!\n\
    This system does not accept Unsolicited \
    Commercial Email\nand will blacklist \
    offenders via our spam processor.\nHave a \
    nice day!\n\n${primary_hostname} ESMTP"
 
hide mysql_servers = localhost/exim/sqlmail/my_password
 
######################################################################
#                       ACL CONFIGURATION                            #
#         Specifies access control lists for incoming SMTP mail      #
######################################################################
begin acl
 
acl_check_rcpt:
 
  accept  hosts = :
 
  deny    domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]
 
  deny    domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
 
  accept  local_parts   = postmaster
          domains       = +local_domains
 
  require verify        = sender
 
  deny    message       = HELO/EHLO required by SMTP RFC
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
 
  deny    message       = Go Away! You are spammer.
          condition     = ${if match{$sender_host_name} \
                          {bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \
                          {yes}{no}}
 
  deny    message       = rejected because \
  $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
          log_message   = found in $dnslist_domain
          dnslists      = relays.ordb.org
  deny    message       = message from \
  $sender_host_address rejected - see http://njabl.org/
          log_message   = found in $dnslist_domain
          dnslists      = dnsbl.njabl.org
  deny    message       = rejected because \
  $sender_host_address for bad WHOIS info, see http://www.rfc-ignorant.org/
          log_message   = found in $dnslist_domain
          dnslists      = ipwhois.rfc-ignorant.org
  deny    message       = rejected because $sender_host_address \
  is in a black list at $dnslist_domain\n$dnslist_text
          log_message   = found in $dnslist_domain
          dnslists      = dialups.mail-abuse.org
  deny    message       = rejected because $sender_host_address \
  is in a black list at $dnslist_domain\n$dnslist_text
          log_message   = found in $dnslist_domain
          dnslists      = list.dsbl.org
  deny    message       = Spam blocked see: \
  http://www.spamcop.net/w3m?action=checkblock&ip=$sender_host_address
          log_message   = found in $dnslist_domain
          dnslists      = bl.spamcop.net
  deny    message       = rejected, $sender_host_address \
  Open Proxy, see: $dnslist_domain\n$dnslist_text
          log_message   = found in $dnslist_domain
          dnslists      = dnsbl.void.ru
 
  accept  domains       = +local_domains
          endpass
          message       = unknown user
          verify        = recipient
 
  accept  domains       = +relay_to_domains
          endpass
          message       = unrouteable address
          verify        = recipient
 
  accept  hosts         = +relay_from_hosts
  accept  authenticated = *
  deny    message       = relay not permitted
 
acl_check_mime:
 
  warn decode = default
 
  deny message = Blacklisted file extension detected ($mime_filename)
       condition = ${if match \
                    {${lc:$mime_filename}} \
                    {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com|\.vbs|\.cpl)$\N} \
                    {1}{0}}
 
  deny message = Sorry, noone speaks chinese here
       condition = ${if eq{$mime_charset}{gb2312}{1}{0}}
 
accept
 
######################################################################
#                      ROUTERS CONFIGURATION                         #
#               Specifies how addresses are handled                  #
######################################################################
#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #
# An address is passed to each router in turn until it is accepted.  #
######################################################################
 
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 mysql{SELECT recipients FROM aliases \
         WHERE local_part='${local_part}' AND domain='${domain}'}}
 
userforward:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup mysql{SELECT recipients FROM userforward \
         WHERE local_part='${local_part}' AND domain='${domain}'}}
 
virtual_localuser:
  driver = accept
  domains = ${lookup mysql{SELECT domain from domains WHERE domain='${domain}'}}
  local_parts = ${lookup mysql{SELECT login from users \
                WHERE login='${local_part}' AND domain='${domain}'}}
  transport = local_delivery
 
######################################################################
#                      TRANSPORTS CONFIGURATION                      #
######################################################################
#                       ORDER DOES NOT MATTER                        #
#     Only one appropriate transport is called for each delivery.    #
######################################################################
 
begin transports
 
remote_smtp:
  driver = smtp
 
local_delivery:
  driver = appendfile
  check_string = ""
  create_directory
  delivery_date_add
  directory = /var/mail/$domain/$local_part
  directory_mode = 770
  envelope_to_add
  group = mail
  maildir_format
  maildir_tag = ,S=$message_size
  message_prefix = ""
  message_suffix = ""
  mode = 0660
  quota = ${lookup mysql{SELECT quota FROM users \
          WHERE login='${local_part}' AND domain='${domain}'}{${value}M}}
  quota_size_regex = S=(\d+)$
  quota_warn_threshold = 75%
  return_path_add
 
 address_pipe:
  driver = pipe
  return_output
 
address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add
 
address_reply:
  driver = autoreply
 
######################################################################
#                      RETRY CONFIGURATION                           #
######################################################################
 
begin retry
 
*                      quota
*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h
 
 
######################################################################
#                      REWRITE CONFIGURATION                         #
######################################################################
 
begin rewrite
 
######################################################################
#                   AUTHENTICATION CONFIGURATION                     #
######################################################################
 
begin authenticators
 
auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT login FROM users \
                        WHERE login = '${quote_mysql:${local_part:$2}}' \
                        AND domain = '${quote_mysql:${domain:$2}}' \
                        AND decrypt = '${quote_mysql:$3}' \
                        AND status = '1'}{yes}{no}}
  server_prompts = :
server_set_id = $2
 
auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT login FROM users \
                        WHERE login = '${quote_mysql:${local_part:$1}}' \
                        AND domain = '${quote_mysql:${domain:$1}}' \
                        AND decrypt = '${quote_mysql:$2}' \
                        AND status = '1'}{yes}{no}}
  server_prompts = Username:: : Password::
server_set_id = $1
 
auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT decrypt FROM users \
                        WHERE login = '${quote_mysql:${local_part:$1}}' \
                        AND domain = '${quote_mysql:${domain:$1}}' \
                        AND status = '1'}{$value}fail}
server_set_id = $1
 
# End of Exim configuration file

Create a directory for the log files and deal with the rights to it in the directory where we will develop a post office, and the spool-directory.

mkdir /var/log/exim
chown -R exim:mail /var/log/exim /var/mail /var/spool/mqueue

Create a script that will run our mail server at system startup.

ee /usr/local/etc/rc.d/exim.sh

as

exim.sh
#!/bin/sh
### file exim.sh ###
case "$1" in
  start)
    echo "Starting Exim..."
    /usr/local/exim/bin/exim -bd -q15m
    ;;
  stop)
    echo "Stopping Exim..."
    kill -TERM `cat /var/spool/mqueue/exim-daemon.pid`
    ;;
  restart)
      $0 stop
	  sleep 2
      $0 start
      ;;
  reload)
    echo "Exim reloading..."
    kill -HUP `cat /var/spool/mqueue/exim-daemon.pid`
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|reload}"
    exit 1
    ;;
esac

and make it executable

chmod +x /usr/local/etc/rc.d/exim.sh

Validate the syntax of the configuration file /usr/local/exim/configure.

/usr/local/exim/bin/exim -bV

Result

Exim version 4.50 #1 built 02-Apr-2005 19:12:40
Copyright (c) University of Cambridge 2004
Probably Berkeley DB version 1.8x (native mode)
Support for: Perl OpenSSL Content_Scanning Old_Demime
Lookups: lsearch wildlsearch nwildlsearch iplsearch dbm dbmnz mysql
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir autoreply pipe smtp
Fixed never_users: 0
Configuration file is /usr/local/exim/configure

If no errors are found, go on … Now we need to check whether you will be recognition of messages for local users, for this issue:

/usr/local/exim/bin/exim -bt postmaster

Result

admin@sharewiz.net
    <-- postmaster@sharewiz.net
  router = virtual_localuser, transport = local_delivery

If no errors are found, go on … Now we need to check whether you will be recognition of messages to external users, for this issue:

/usr/local/exim/bin/exim -bt someuser@msn.com

Result

someuser@msn.com
  router = dnslookup, transport = remote_smtp
  host mx1.hotmail.com [65.54.166.99]  MX=5
  host mx1.hotmail.com [65.54.252.99]  MX=5
  host mx1.hotmail.com [64.4.50.99]    MX=5
  host mx1.hotmail.com [64.4.50.50]    MX=5
  host mx4.hotmail.com [65.54.190.230] MX=5
  host mx4.hotmail.com [65.54.190.179] MX=5
  host mx4.hotmail.com [65.54.167.230] MX=5
  host mx4.hotmail.com [65.54.253.230] MX=5
  host mx3.hotmail.com [65.54.253.99]  MX=5
  host mx3.hotmail.com [65.54.167.5]   MX=5
  host mx3.hotmail.com [64.4.50.239]   MX=5
  host mx3.hotmail.com [64.4.50.179]   MX=5
  host mx2.hotmail.com [65.54.190.50]  MX=5
  host mx2.hotmail.com [65.54.190.7]   MX=5
  host mx2.hotmail.com [65.54.252.230] MX=5
  host mx2.hotmail.com [65.54.166.230] MX=5

If no errors are found, go on … Now we need to check whether you will be the delivery of messages to local users, for this issue:

/usr/local/exim/bin/exim -v postmaster@sharewiz.net
From: admin@sharewiz.net
To: postmaster@sharewiz.net
Subject: Testing Exim
 
This is a test message.
^D

Result

LOG: MAIN
  <= root@sharewiz.net U=root P=local S=325
# delivering 1DOs2P-000HAY-0E
LOG: MAIN
  => admin  R=virtual_localuser T=local_delivery
LOG: MAIN
  Completed

Press <CTRL-C>

If no errors are found, go on … Now we need to check whether you will be delivering messages to external users, for this issue:

exim -v someuser@msn.com 
From: admin@sharewiz.net
To: someuser@msn.com
Subject: Testing Exim
 
This is a test message.
^D

Result

LOG: MAIN
  <= root@sharewiz.net U=root P=local S=303
# LOG: MAIN
  => someuser  R=dnslookup T=remote_smtp
LOG: MAIN
  Completed

Press <CTRL-C>

At this stage, we are convinced that Exim is correctly configured and working, now it is necessary to check the SMTP authentication, but before us be editing. SMTP authentication is necessary when sending us soobschny with virtual host (if you have any) or when the user is outside the office, send mail through your account. I do not use authentication for intranet. Therefore, change in the file /usr/local/exim/configure line

hostlist   relay_from_hosts = 127.0.0.1
на
 
hostlist   relay_from_hosts = 127.0.0.1 : 192.168.10.0/24

Run Exim, by typing:

/usr/local/etc/rc.d/exim.sh start

To verify authentication, we need the converter, install it from ports:

cd /usr/ports/converters/mmencode
# make install
# exit

Form a line PLAIN authentication (Netscape), for this issue:

Encode the login.

printf 'admin@sharewiz.net\0admin@sharewiz.net\0my_password' | mmencode

Shows

YWRtaW5AbXlkb21haW4ucnUAYWRtaW5AbXlkb21haW4ucnUAbXlfcGFzc3dvcmQ=

Now

telnet localhost 25

Result

Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.net.
Escape character is '^]'.
220-Welcome on our mail server!
220-This system does not accept Unsolicited Commercial Email
220-and will blacklist offenders via our spam processor.
220-Have a nice day!
220-
220 sharewiz.net ESMTP

Then ehlo.

ehlo localhost

Result

250-sharewiz.net Hello localhost.net [127.0.0.1]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250 HELP

Then

auth plain

Result

334

Then

YWRtaW5AbXlkb21haW4ucnUAYWRtaW5AbXlkb21haW4ucnUAbXlfcGFzc3dvcmQ=

Result

235 Authentication succeeded 

Then

quit

Result

221 sharewiz.net closing connection
Connection closed by foreign host.

The example shows that everything went well, if you have a different result, then again carefully read and look for the error … So, go ahead, forming a string LOGIN authentication (Outlook), for this issue:

Base64 encode the login.

echo -n admin@sharewiz.net | mimencode -b

Result

YWRtaW5AbXlkb21haW4ucnU=

Base64 encode the password.

echo -n my_passowrd | mimencode -b

Result

bXlfcGFzc293cmQ=

Then

telnet localhost 25

Result

Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.net.
Escape character is '^]'.
220-Welcome on our mail server!
220-This system does not accept Unsolicited Commercial Email
220-and will blacklist offenders via our spam processor.
220-Have a nice day!
220-
220 sharewiz.net ESMTP

Then

ehlo localhost

Result

250-sharewiz.net Hello localhost.net [127.0.0.1]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250 HELP

Then enter:

auth login

You will be asked for the username. This will show:

334 VXNlcm5hbWU6

VXNlcm5hbWU6 is Base64 encoding to Username:.

Enter the Base64 encoded username which was established earlier.

YWRtaW5AbXlkb21haW4ucnU=

You will be asked for the password. This will show:

334 UGFzc3dvcmQ6

UGFzc3dvcmQ6 is Base64 encoding to Password:.

Enter the Base64 encoded password which was established earlier.

bXlfcGFzc293cmQ=

Result

235 Authentication succeeded 

Now quit.

quit

Displays:

221 mydomain.ru closing connection
Connection closed by foreign host.

The example shows that everything went well, if you have a different result, then again carefully read and look for the error …

Go ahead, check the CRAM-MD5 authentication.

Next I'll provide the full text set out in the article the Ginger, because described process of the lengths and laborious. But you can pass it if desired. I did a simple way. Launched, In the box in the properties section of transport in the settings to send mail ticked SMTP Authentication (RFC-2554) and sent a letter. Check you can send, and then logs in Exim.

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 smtp.sharewiz.net ESMTP Exim 4.20 Fri, 05 Sep 2003 14:09:15 +0400
ehlo localhost
250-smtp.sharewiz.net Hello localhost.localdomain [127.0.0.1]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250 HELP
auth cram-md5
334 PDI2NDAyLjEwNTY2MTE1NTVAc210cC5leGFtcGxlLnJ1Pg==
Z2luZ2VyQGV4YW1wbGUucnUgYjllN2Q1OTUxMGMxNjE0YzIwYjU4N2JkNmFkODk2MDI=
235 Authentication succeeded
quit
221 smtp.sharewiz.net closing connection
Connection closed by foreign host.

The example shows that everything went well, if you have a different result, then again carefully read and look for the error …

So, I will describe their actions … After the team auth cram-md5 was done, there was a kind of line:

334 PDI2NDAyLjEwNTY2MTE1NTVAc210cC5leGFtcGxlLnJ1Pg==

After that we have to do the following:

perl -MMIME::Base64 -e 'print MIME::Base64::decode_base64(shift), "\n"' \
PDI2NDAyLjEwNTY2MTE1NTVAc210cC5leGFtcGxlLnJ1Pg==

Result

<26402.1056611555@smtp.example.ru>

Then run:

perl -MMIME::Base64 -MDigest::HMAC_MD5 -e \
'print MIME::Base64::encode_base64($ARGV[0] . " " . \
Digest::HMAC_MD5::hmac_md5_hex($ARGV[2], $ARGV[1]))' \
'ginger@example.ru' 'my-secret-pass' '<26402.1056611555@smtp.sharewiz.net>'

Result

Z2luZ2VyQGV4YW1wbGUucnUgYjllN2Q1OTUxMGMxNjE0YzIwYjU4N2JkNmFkODk2MDI=

The result is a string of interest to us.

Verify a secure connection TLS / SSL

openssl
OpenSSL> s_client -host localhost -port 465

Result

CONNECTED(00000003)
depth=0 /C=RU/ST=RU/L=Stavropol/O=Example/CN=sharewiz.net/emailAddress=postmaster
@sharewiz.net
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=RU/ST=RU/L=Stavropol/O=Example/CN=sharewiz.net/emailAddress=postmaster
@sharewiz.net
verify return:1
---
Certificate chain
 0 s:/C=RU/ST=RU/L=Stavropol/O=Example/CN=sharewiz.net/emailAddress=postmaster@sharewiz.net
   i:/C=RU/ST=RU/L=Stavropol/O=Example/CN=sharewiz.net/emailAddress=postmaster@sharewiz.net
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEADCCA2mgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBtzELMAkGA1UEBhMCUlUx
MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl
bDE3MDUGA1UEChQuRWRpdG9yaWFsIG9mIE5ld3NwYXBlciAiU3RhdnJvcG9sc2th
eWEgUHJhdmRhIjEVMBMGA1UEAxMMc3RhcHJhdmRhLnJ1MSYwJAYJKoZIhvcNAQkB
Fhdwb3N0bWFzdGVyQHN0YXByYXZkYS5ydTAeFw0wNTA0MjIxNTQ5MzhaFw0zMjA5
MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl
cnJpdG9yeTESMBAGA1UEBxMJU3RhdnJvcG9sMTcwNQYDVQQKFC5FZGl0b3JpYWwg
b2YgTmV3c3BhcGVyICJTdGF2cm9wb2xza2F5YSBQcmF2ZGEiMRUwEwYDVQQDEwxz
MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl
LnJ1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNFT87/U4Y/isxCQR2aD0n
LgJ9DvOwWBFs72R1ciYvOUOQVWGAhMCeGjVkiPtysjFtRRdgKjGvKrKmx9C3pH3w
ZN5fXFcZBqUtiLzQ0VKcdw3utAvRM4gzICSlktpjPtxfoYYSC4CUHA1/0+WDC7HO
HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5
ub9oTTvksXmf9F7gMIHkBgNVHSMEgdwwgdmAFIVHLfnzpOO5ub9oTTvksXmf9F7g
oYG9pIG6MIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRlcnJp
dG9yeTESMBAGA1UEBxMJU3RhdnJvcG9sMTcwNQYDVQQKFC5FZGl0b3JpYWwgb2Yg
HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5
MDYxNTQ5MzhaMIG3MQswCQYDVQQGEwJSVTEcMBoGA1UECBMTU3RhdnJvcG9sIFRl
ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAA4EghSwza0gbNcik
HVyM7oBL+pRZyQT0A/8k7QIDAQABo4IBGDCCARQwHQYDVR0OBBYEFIVHLfnzpOO5
eWEyOMmOGQbx/++XLU35CFrdiqEwdZTVfZscoefyhp9shsG1Dw8zbVK+im7wmmA1
zokwLdwUQZGVBRTefUivYOSOJ9c=
-----END CERTIFICATE-----
subject=/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster
@sharewiz.net
issuer=/C=RU/ST=RU/L=Stavropol/O=Example/CN=mydomain.ru/emailAddress=postmaster@
sharewiz.net
---
No client certificate CA names sent
---
SSL handshake has read 1190 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: FF415922B742484BA13B84FAD575C528B3549B742484BA13AB1393C4AB3D8010

    Session-ID-ctx:
    Master-Key: 8A39B36BFDB180ED55F829DBC420D675F0ECAF1B07FBBED3A1632A3AA8ECCE96
4CAACF8CDAE5F829DBC420D3F5AE9BA8
    Key-Arg   : None
    Start Time: 1114190806
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
220-Welcome on our mail server!
220-This system does not accept Unsolicited Commercial Email
220-and will blacklist offenders via our spam processor.
220-Have a nice day!
220-
220 sharewiz.net ESMTP

Further checks can be made on the above analogy, but the point? And so we see that all OK!

quit
OpenSSL> quit

The final step, we will configure log rotation, so that they have not grown up to infinity.

su
crontab -e -u exim

Here you can expect trouble, if you have not yet met with the editor vi . I'll help a little bit, but in the future - teach materiel.

Press i and type the following line:

@daily /usr/local/exim/bin/exicyclog

After entering the line does not click ENTER, and ESC. Now, press a sequence of : wq . Thus, you save the changes and get out of the editor. Now our logs will be updated every day at midnight.

That's all.This installation and configuration of Exim can be considered fully complete.

Now our server can send and receive mail. But this post to deliver to the end user? This story goes on.

References

exim4/install_exim4_complete.1478617177.txt.gz · Last modified: 2020/07/15 09:30 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki