Autor: Rafał Woźniak, kanar.co

Poniżej opisałem sposób instalacji Exim4 wraz z integracją clamav, spamassasin oraz logowaniem do
serwera SMTP w systemie Debian 9 wykorzystując tylko standardowe paczki dostępne w dystrybucji.

----------------

Standardowo w Debianie jest instalowany nieco okrojony exim4 z paczki exim4-daemon-light.
My natomiast potrzebujemy exima z paczki exim4-daemon-heavy

  apt install exim4-daemon-heavy

i konfiguracje Exim:

  dpkg-reconfigure exim4-config

przy pytaniu "Podzielić konfigurację na małe pliki?" wybieramy "Tak".

Osobiście wszystkie dodatkowe pliki konfiguracyjne lubię trzymać w jednym miejscu,
dlatego dodatkowa konfiguracja u mnie wylądowała w katalogu /etc/exim4/local:

  mkdir /etc/exim4/local

a w nim następujące pliki:

--- /etc/exim4/local/auth-25_exim4-config-plain_saslauthd_server ---
plain_server:
   driver = plaintext
   public_name = PLAIN
   server_condition = "${if crypteq{$3}{${extract{1}{:}{${lookup{$2}lsearch{/etc/shadow}{$value}{*:*}}}}}{1}{0}}"
   server_set_id = $2
   server_prompts = :
   .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
   server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
   .endif

login_server:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  server_condition = "${if crypteq{$2}{${extract{1}{:}{${lookup{$1}lsearch{/etc/shadow}{$value}{*:*}}}}}{1}{0}}"
  server_set_id = $1
  .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
  server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
  .endif
--------------------------------------------------



--- /etc/exim4/local/main-000_ustawienia_lokalne ---
MAIN_TLS_ENABLE=yes
MAIN_TLS_TRY_VERIFY_HOSTS=
AUTH_SERVER_ALLOW_NOTLS_PASSWORDS=yes

av_scanner = clamd:/var/run/clamav/clamd.ctl
daemon_smtp_ports = smtp : 587
--------------------------------------------------


--- /etc/exim4/local/router-650_exim4-config_spamcheck ---
spamcheck_router:
  no_verify
  check_local_user
  # When to scan a message :
  #   -   it isn't already flagged as spam
  #   -   it isn't already scanned
  condition = "${if and { {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}}} {1}{0}}"
  driver = accept
  transport = spamcheck
--------------------------------------------------


--- /etc/exim4/local/transport-30_exim4-config_spamcheck ---
spamcheck:
  debug_print = "T: spamassassin_pipe for $local_part@$domain"
  driver = pipe
  command = /usr/sbin/exim4 -oMr spam-scanned -bS
  use_bsmtp
  transport_filter = /usr/bin/spamc
  home_directory = "/tmp"
  current_directory = "/tmp"
  user = Debian-exim
  group = Debian-exim
  return_fail_output
  message_prefix =
  message_suffix =
--------------------------------------------------


Po nazwach plików  można dojść gdzie powinny się znajdować (jako symlinki).
Wykonujemy:

  ln -s /etc/exim4/local/main-000_ustawienia_lokalne /etc/exim4/conf.d/main/000_ustawienia_lokalne
  ln -s /etc/exim4/local/auth-25_exim4-config-plain_saslauthd_server /etc/exim4/conf.d/auth/25_exim4-config-plain_saslauthd_server
  ln -s /etc/exim4/local/router-650_exim4-config_spamcheck /etc/exim4/conf.d/router/650_exim4-config_spamcheck
  ln -s /etc/exim4/local/transport-30_exim4-config_spamcheck /etc/exim4/conf.d/transport/30_exim4-config_spamcheck

I w ten sposób mamy przygotowane pliki konfiguracyjne dla exima. Jeszcze musimy zainstalować
kilka pakietów:

  apt install spamassassin clamav-daemon spamc openssl

Uaktywniamy daemona od spamu:

  systemctl enable spamassassin.service

Teraz trochę poczarujemy niektórych userów systemowych, aby mieli dostęp do potrzebnych im plików:

  adduser Debian-exim shadow
  adduser clamav Debian-exim

Pierwsze pozwala eximowi czytać hasła, a drugie pozwala antywirusowi dogadać się z MTA.
Pozostało nam jeszcze wygenerowanie certyfikatu dla exima:

  /usr/share/doc/exim4-base/examples/exim-gencert

wygenerowanie nowego pliku konfiguracyjnego dla exima uwzględniającego nasze wstawki:

  update-exim4.conf

oraz zrestartowanie usług:

  systemctl restart exim4
  systemctl restart spamassassin
  systemctl restart clamav-daemon

Możemy potestować wysyłanie poczty jednocześnie obserwując logi exima:

  tail -f /var/log/exim4/mainlog

ps. Można cały spam kasować z poziomu serwera za pomocą regułki w /etc/procmailrc:

* ^X-Spam-Flag: YES
/dev/null