mailu로 손쉽게 메일서버를 구축해봅시다.

mailu를 사용해 5분만에 운영할 수 있는 메일서버를 구축해봅시다.

작성자

홍세민

홍세민

MarcusHong

메일서버

메일서버를 구축하려면 고려해야 할 사항들이 많다. 웹GUI, anti-virus 시스템, nginx로 도메인 연결, ssl 설정, imap 설정등 추가해야 할 사항들이 한 둘이 아니다.

mailu (https://mailu.io/)

메일서버를 운영하기 위한 docker image들을 한 군데 모아서 솔루션을 제공해주는 mailu 패키지가 있다. 간단히 환경설정만 해준 후 docker-compose로 설치하면 메일서버가 설치된다.

.env

환경설정 파일이다. DOMAIN, HOSTNAMES 정도만 수정하면 된다. 좀 더 디테일한 수정은 주석을 참고. ```

Mailu main configuration file

Most configuration variables can be modified through the Web interface,

these few settings must however be configured before starting the mail

server and require a restart upon change.

Common configuration variables

Set this to the path where Mailu data and configuration is stored

ROOT=/mailu

Mailu version to run (1.0, 1.1, etc. or master)

VERSION=1.5

Set to a randomly generated 16 bytes string

SECRET_KEY=fdmkdfsdf

Address where listening ports should bind

BINDADDRESS4=0.0.0.0 BINDADDRESS6=::1

Main mail domain

DOMAIN=example.com

Hostnames for this server, separated with comas

HOSTNAMES=mail.example.com

Postmaster local part (will append the main mail domain)

POSTMASTER=admin

Choose how secure connections will behave (value: letsencrypt, cert, notls, mail)

TLS_FLAVOR=letsencrypt

Authentication rate limit (per source IP address)

AUTH_RATELIMIT=10/minute;1000/hour

Opt-out of statistics, replace with "True" to opt out

DISABLE_STATISTICS=False

Optional features

Expose the admin interface (value: true, false)

ADMIN=true

Choose which webmail to run if any (values: roundcube, rainloop, none)

WEBMAIL=roundcube

Dav server implementation (value: radicale, none)

WEBDAV=none

Antivirus solution (value: clamav, none)

ANTIVIRUS=clamav

Mail settings

Message size limit in bytes

Default: accept messages up to 50MB

MESSAGESIZELIMIT=50000000

Networks granted relay permissions, make sure that you include your Docker

internal network (default to 172.17.0.0/16)

RELAYNETS=172.20.0.0/16

Will relay all outgoing mails if configured

RELAYHOST=

Fetchmail delay

FETCHMAIL_DELAY=600

Recipient delimiter, character used to delimiter localpart from custom address part

e.g. localpart+custom@domain;tld

RECIPIENT_DELIMITER=+

DMARC rua and ruf email

DMARCRUA=admin DMARCRUF=admin

Weclome email, enable and set a topic and body if you wish to send welcome

emails to all users.

WELCOME=false WELCOMESUBJECT=Welcome to your new email account WELCOMEBODY=Welcome to your new email account, if you can read this, then it is configured properly!

Web settings

Path to the admin interface if enabled

WEB_ADMIN=/admin

Path to the webmail if enabled

WEB_WEBMAIL=/webmail

Website name

SITENAME=example

Linked Website URL

WEBSITE=http://example.com

Advanced settings

Docker-compose project name, this will prepended to containers names.

COMPOSEPROJECTNAME=mailu

Default password scheme used for newly created accounts and changed passwords

(value: SHA512-CRYPT, SHA256-CRYPT, MD5-CRYPT, CRYPT)

PASSWORD_SCHEME=SHA512-CRYPT

### docker-compose.yml
```yaml
version: '2'

services:

  front:
    image: mailu/nginx:latest
    restart: always
    env_file: .env
    ports:
    - "$BIND_ADDRESS4:80:80"
    - "$BIND_ADDRESS4:443:443"
    - "$BIND_ADDRESS4:110:110"
    - "$BIND_ADDRESS4:143:143"
    - "$BIND_ADDRESS4:993:993"
    - "$BIND_ADDRESS4:995:995"
    - "$BIND_ADDRESS4:25:25"
    - "$BIND_ADDRESS4:465:465"
    - "$BIND_ADDRESS4:587:587"
    volumes:
      - "$ROOT/certs:/certs"

  redis:
    image: redis:alpine
    restart: always
    volumes:
      - "$ROOT/redis:/data"

  imap:
    image: mailu/dovecot:latest
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/data:/data"
      - "$ROOT/mail:/mail"
      - "$ROOT/overrides:/overrides"
    depends_on:
      - front

  smtp:
    image: mailu/postfix:latest
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/data:/data"
      - "$ROOT/overrides:/overrides"
    depends_on:
      - front

  antispam:
    image: mailu/rspamd:latest
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/filter:/var/lib/rspamd"
      - "$ROOT/dkim:/dkim"
      - "$ROOT/overrides/rspamd:/etc/rspamd/override.d"
    depends_on:
      - front

  antivirus:
    image: mailu/$ANTIVIRUS:latest
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/filter:/data"

  webdav:
    image: mailu/$WEBDAV:latest
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/dav:/data"

  admin:
    image: mailu/admin:latest
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/data:/data"
      - "$ROOT/dkim:/dkim"
      - /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - redis

  webmail:
    image: mailu/$WEBMAIL:latest
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/webmail:/data"

  fetchmail:
    image: mailu/fetchmail
    restart: always
    env_file: .env
    volumes:
      - "$ROOT/data:/data"

계정추가

컨테이너를 올린 후 docker-compose 명령어로 유저를 추가할 수 있다. 패스워드는 웹GUI에서 수정할 수 있다. bash docker-compose run --rm admin python manage.py user --hash_scheme='SHA512-CRYPT' {user} example.com 'password123'

정리

.env 에서 설정만 추가하고 docker-compose로 설치하면 메일서버가 설치된다. 컨테이너가 많이 설치되므로 RAM은 최소 2GB는 넘어야 한다. 간단한 설치로 수준급의 메일서버를 운영해 보자.

Tags : mailu 

comments powered by Disqus