La sección directors sirve para que exim acepte los mails. Si un director no puede entregar el mensaje, lo intenta con el siguiente de la lista. De este modo, como con cyrus tenemos usuarios de correo que no lo son del sistema, debemos añadir un nuevo director antes de real_local, que es el director para usuarios locales:

cyrus_user:
  driver = smartuser   #Dudo que este driver sea el correcto, pero con este no rechaza ningún mensaje
  transport = cyrus_delivery

El problema es que al usar smartuser como driver, los mails cuyo destinatario no corresponda con ninguna cuenta del servidor imap serán desechados. Esta chapucilla se arregla poniendo antes del director cyrus_user, el director system_aliases, para que primero compruebe los aliases y si no encuentra ninguno, lo entregue directamente a cyrus (lo correcto sería chequear los mailboxes de cyrus en busca del usuario, y en caso de no existir pasar al siguiente director)

system_aliases:
  driver = aliasfile
  file_transport = address_file
  pipe_transport = address_pipe
  file = /etc/aliases
  search_type = lsearch
  user = nobody
  group = audio

En la sección transports debemos modificar los correspondientes a address_file, local_delivery, y añadimos cyrus_delivery: (De todos modos local_delivery es inútil ya que nunca se llega a usar el director correspondiente)

cyrus_delivery:
  driver = pipe
  command = "/usr/sbin/cyrdeliver ${local_part}"
  return_path_add
  return_output
  prefix = ""
  user = cyrus

local_delivery:

  driver = pipe
  command = "/usr/sbin/cyrdeliver ${local_part}"
  return_path_add
  return_output
  prefix = ""
  user = cyrus

address_file:
  driver = pipe
  command = "/usr/sbin/cyrdeliver ${local_part}"
  return_path_add
  return_output
  prefix = ""
  user = cyrus