docker-mailserver 이용한 anti-spam mail server 구축에는 docker 기본 사용법을 알고 있다는 것과 Mail Server 구축 관련 경험이 있다는 것을 전제로 합니다. mail server 구축 경험이 없다면 동작 원리 이해가 어려울 수 있습니다.
- 준비
- docker 최신 버전 설치 from Docker
- docker-mail image download
$ docker pull tvial/docker-mailserver:latest $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tvial/docker-mailserver latest a5e3b3adda08 3 days ago 511MB
- docker volume mapping 용 폴더 생성
가상 docker 서버 내부의 메일 폴더와 Host 서버 상의 실제 폴더를 mapping 하기 위한 폴더를 생성한다.$ mkdir docker-mailserver $ cd docker-mailserver $ mkdir maildata mailstate config
- docker-compose.yml 작성
version: '2' services: mail: image: tvial/docker-mailserver:latest hostname: mail domainname: boolsee.pe.kr # 본인 소유 도메인 정보로 수정 container_name: mail ports: - "25:25" - "143:143" - "587:587" - "993:993" volumes: - maildata:/var/mail - mailstate:/var/mail-state - ./config/:/tmp/docker-mailserver/ environment: - ENABLE_SPAMASSASSIN=1 - ENABLE_CLAMAV=1 - ENABLE_FAIL2BAN=0 - ENABLE_POSTGREY=1 - ENABLE_POP3=1 - ONE_DIR=1 - DMS_DEBUG=1 # 시험을 위해 Debug Mode On # - OVERRIDE_HOSTNAME=mail.boolsee.pe.kr cap_add: - SYS_PTRACE volumes: maildata: driver: local mailstate: driver: local
- Mail 을 사용할 사용자 계정 생성
$ touch config/postfix-accounts.cf $ docker run --rm \ > -e MAIL_USER=muser01@boolsee.pe.kr \ > -e MAIL_PASS=abcd1234 \ > -ti tvial/docker-mailserver:latest \ > /bin/sh -c 'echo "$MAIL_USER|$(doveadm pw -s SHA512-CRYPT -u $MAIL_USER -p $MAIL_PASS)"' >> config/postfix-accounts.cf
이렇게 생성한 사용자 계정 파일의 내용은 다음과 같습니다. 비밀번호는 SHA512 방식으로 암호화해서 저장하고 있습니다.
$ more postfix-accounts.cf muser01@boolsee.pe.kr|{SHA512-CRYPT}$6$GrbPTDXI50yN7zFZ$EEtCrwgWbvczTmo4wg6.fKdeJRjR2S/6rC2iu38rtv3m0divBTCpqjFjPfCLPJ1y6BfGvmT62Vt0G6mwO.jSy1
- DKIM Key 생성
$ docker run --rm \ -v "$(pwd)/config":/tmp/docker-mailserver \ -ti tvial/docker-mailserver:latest generate-dkim-config
${INSTALLDIR}/config/opendkim 폴더의 하위 폴더에 DKIM Key 파일이 생성됩니다.
- docker container 를 실행합니다.
$ docker-compose up -d mail $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bf860eadf6c5 tvial/docker-mailserver:latest "/bin/sh -c 'supervi…" 25 minutes ago Up 25 minutes 0.0.0.0:25->25/tcp, 110/tcp, 0.0.0.0:143->143/tcp, 0.0.0.0:587->587/tcp, 465/tcp, 995/tcp, 0.0.0.0:993->993/tcp, 4190/tcp mail