웹사이트 검색

Postal을 사용하여 모든 기능을 갖춘 메일 서버를 만드는 방법


이 페이지에서

  1. 기본 시스템 업데이트
  2. 루비 설치
    1. Ruby Gems 설치

    1. 우편용 데이터베이스 설정

    1. RabbitMQ 설정

    Postal은 이메일을 보내고 받기 위한 무료 오픈 소스 완전한 메일 서버입니다. Ruby와 JavaScript로 작성되었습니다. 자신의 서버에 Postal을 쉽게 설치할 수 있습니다. 또한 스팸 이메일을 줄이는 데 필요한 올바른 DNS 정보를 제공하는 데 도움이 됩니다. 우편은 많은 조직에서 매일 메일을 보내고 받는 데 사용됩니다.

    이 튜토리얼에서는 Postal Mail Server를 Ubuntu 17.04에 설치합니다.

    전제 조건

    • 최소 Ubuntu 17.04 서버. 8GB RAM 권장.
    • 루트 권한. 이 가이드는 루트 사용자로 작성되었으므로 sudo 사용자로 로그인한 경우 sudo -i를 실행하십시오.\n
    • 서버를 가리키는 도메인 이름.

    기본 시스템 업데이트

    패키지를 설치하기 전에 다음 명령을 사용하여 패키지와 리포지토리를 업데이트하는 것이 좋습니다.

    apt update && apt -y upgrade
    shutdown -r now

    시스템이 업데이트되면 계속 진행하여 Ruby를 설치합니다.

    루비 설치

    Postal은 Ruby로 작성되었으므로 시스템에 Ruby 2.3 이상을 설치해야 합니다. 이 튜토리얼에서는 RVM을 사용하여 최신 버전의 Ruby를 설치합니다. 다음 명령을 실행하여 서버에 RVM의 GPG 키를 추가하십시오.

    gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

    이제 다음 명령을 사용하여 RVM을 설치하십시오.

    curl -sSL https://get.rvm.io | bash -s stable

    RVM을 즉시 사용하려면 다음 명령을 실행해야 합니다.

    source /etc/profile.d/rvm.sh

    이제 다음 명령을 사용하여 Ruby 목록을 가져옵니다.

    rvm list known

    다음 출력이 표시됩니다.

    # MRI Rubies
    [ruby-]1.8.6[-p420]
    [ruby-]1.8.7[-head] # security released on head
    [ruby-]1.9.1[-p431]
    [ruby-]1.9.2[-p330]
    [ruby-]1.9.3[-p551]
    [ruby-]2.0.0[-p648]
    [ruby-]2.1[.10]
    [ruby-]2.2[.6]
    [ruby-]2.3[.3]
    [ruby-]2.4[.0]
    ruby-head
    

    이제 다음 명령을 사용하여 목록에 최신 버전의 Ruby를 설치합니다.

    rvm install 2.4

    다음 명령을 사용하여 Ruby 버전을 사용하십시오.

    rvm use 2.4

    다음 명령을 사용하여 Ruby 버전을 확인할 수 있습니다.

    ruby -v

    Ruby가 성공적으로 설치된 경우 다음 출력이 표시되어야 합니다.

    :~# ruby -v
    ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
    

    루비 보석 설치

    서버에서 Postel을 실행하려면 번들러와 procodile을 서버에 설치해야 합니다. 번들러는 Ruby gem 애플리케이션의 종속성 관리자입니다. procodile은 Ruby 애플리케이션용 프로세스 관리 도구입니다. 다음 명령을 사용하여 두 애플리케이션을 모두 설치합니다.

    gem install bundler
    gem install procodile

    MariaDB 데이터베이스 서버 설치

    MariaDB는 MySQL 데이터베이스 서버의 포크입니다. MySQL은 테이블 형식으로 데이터를 저장하는 데 사용되는 관계형 데이터베이스 관리 시스템 소프트웨어입니다. 서버에 MariaDB를 설치하려면 다음을 실행하십시오.

    apt -y install mariadb-client mariadb-server libmysqlclient-dev

    다음 명령을 실행하여 MariaDB를 시작하고 부팅 시 시작되도록 활성화합니다.

    systemctl start mariadb
    systemctl enable mariadb

    이제 다음 명령을 실행하여 MariaDB 설치를 보호하십시오.

    mysql_secure_installation

    위의 명령은 새로운 MariaDB 설치를 보호하기 위해 스크립트를 실행합니다. 스크립트는 기존 루트 사용자 암호를 묻습니다. 방금 MariaDB를 설치했으며 루트 암호가 설정되지 않았습니다. 계속 진행하려면 Enter 키를 누르십시오.

    스크립트는 MariaDB 설치를 위한 루트 암호를 설정할지 묻고 y를 선택하고 설치를 위한 강력한 암호를 설정합니다. 대부분의 질문은 자명하며 모든 질문에 예 또는 y로 대답해야 합니다.

    우편용 데이터베이스 설정

    Postal용 데이터베이스를 생성하려면 먼저 MySQL 명령줄에 로그인해야 합니다. 동일하게 다음 명령을 실행하십시오.

    mysql -u root -p

    위의 명령은 루트 사용자의 MySQL 셸에 로그인하고 루트 사용자의 암호를 묻는 메시지를 표시합니다. 로그인할 비밀번호를 제공하십시오. 이제 다음 쿼리를 실행하여 Postal 설치를 위한 새 데이터베이스를 생성하십시오.

    CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

    위의 쿼리는 우편이라는 이름의 새 데이터베이스를 생성합니다. 쿼리는 항상 세미콜론으로 끝나므로 각 쿼리 끝에 세미콜론을 사용해야 합니다.

    이제 생성한 데이터베이스에 대한 모든 권한을 데이터베이스 사용자에게 제공하십시오. 다음 명령을 실행합니다.

    GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
    

    StrongPassword를 매우 강력하고 안전한 암호로 바꾸십시오.

    데이터베이스는 Postal에서 자동으로 작성되지만 이를 위해서는 Postal 사용자에게 적절한 권한을 제공해야 합니다. 다음 명령을 실행하여 postal-로 시작하는 모든 사용자에게 권한을 부여합니다.

    GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1`  IDENTIFIED BY "StrongPassword";
    

    이제 다음 명령을 실행하여 데이터베이스 권한에 대한 변경 사항을 즉시 적용하십시오.

    FLUSH PRIVILEGES;

    다음 명령을 사용하여 MySQL 프롬프트를 종료합니다.

    EXIT;

    RabbitMQ 설치

    RabbitMQ는 Erlang 언어로 작성되었습니다. 이 튜토리얼에서는 최신 버전의 Erlang을 서버에 설치합니다. 다음 명령을 사용하여 Erlang을 설치합니다.

    apt -y install erlang

    다음을 실행하여 GPG 키를 가져옵니다.

    curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

    이제 다음 명령을 실행하여 RabbitMQ 리포지토리를 추가합니다.

    add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'

    다음 명령을 실행하여 리포지토리 인덱스를 업데이트합니다.

    apt update

    이제 다음 명령을 실행하여 RabbitMQ를 설치할 수 있습니다.

    apt -y install rabbitmq-server

    이제 RabbitMQ가 시스템에 설치되었습니다.

    RabbitMQ 설정

    다음 명령을 실행하여 RabbitMQ 서버 프로세스를 시작할 수 있습니다.

    systemctl start rabbitmq-server

    부팅 시 자동으로 RabbitMQ를 시작하려면 다음 명령을 실행합니다.

    systemctl enable rabbitmq-server

    이제 다음 명령을 실행하여 RabbitMQ 서버에서 Postal용 가상 호스트를 생성합니다.

    rabbitmqctl add_vhost /postal

    이제 다음 명령을 실행하여 Postal용 RabbitMQ 사용자를 추가하십시오.

    rabbitmqctl add_user postal StrongPassword

    StrongPassword 바꾸기는 매우 강력한 암호입니다.

    이제 RabbitMQ 가상 호스트에 대한 적절한 권한을 RabbitMQ 사용자로 설정하십시오.

    rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"

    Git 및 Node.js 설치

    Git은 설치 프로그램 패키지와 몇 가지 종속 항목을 검색하는 데 사용됩니다. 다음 명령을 실행하여 시스템에 Git을 설치합니다.

    apt -y install git

    다음 명령을 사용하여 버전을 확인하여 Git이 성공적으로 설치되었는지 확인할 수 있습니다.

    git --version

    다음 출력을 얻어야 합니다.

    :~# git --version
    git version 2.11.0
    

    Node.js는 JavaScript 라이브러리를 컴파일하는 데 사용됩니다. 다음 명령을 사용하여 소프트웨어를 설치합니다.

    apt -y install nodejs

    다음 명령을 실행하여 Node.js가 성공적으로 설치되었는지 확인할 수 있습니다.

    nodejs -v

    다음 출력을 얻어야 합니다.

    :~# nodejs -v
    v4.7.2
    

    이제 모든 종속성이 준비되었으므로 Postal을 설치할 수 있습니다.

    우편 설치

    Postal은 자체 격리된 사용자로 실행되어야 합니다. 다음 명령을 실행하여 새 사용자를 생성합니다.

    useradd -r -m -d /opt/postal -s /bin/bash postal

    위의 명령은 사용자 이름이 우편인 새 사용자를 생성하고 홈 디렉토리는 /opt/postal로 설정됩니다.

    다음 명령을 실행하여 Ruby가 권한 있는 포트를 수신하도록 허용합니다.

    setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby

    이제 모든 것이 준비되었으므로 최신 Postal 아카이브를 다운로드하고 다음 명령을 사용하여 Postal 사용자로 아카이브를 추출하십시오.

    wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal

    이제 다음 명령을 실행하여 Postal 바이너리 파일에 대한 심볼릭 링크를 만듭니다.

    ln -s /opt/postal/bin/postal /usr/bin/postal

    이제 모든 디렉터리에서 Postal 서버와 상호 작용할 수 있습니다. 다음 명령을 실행하려면 우편 사용자로 쉘에 로그인해야 합니다.

    su - postal

    이제 애플리케이션을 실행하는 데 필요한 모든 Ruby 종속성을 설치해야 합니다.

    postal bundle /opt/postal/vendor/bundle

    종속성이 설치되면 기본 구성 파일을 생성해야 합니다.

    postal initialize-config

    위의 명령은 다양한 키와 인증서를 포함하여 Postal 설치에 필요한 구성을 생성합니다. 이렇게 하면 기본 postal.yml 구성 파일도 생성됩니다. 다음 출력을 얻어야 합니다.

    :~$ postal initialize-config
    Created example config file at /opt/postal/config/postal.yml
    Created new private key for Let's Encrypt
    Created new signing key for DKIM & HTTP requests
    Created new private key for default fast server TLS connections
    Created new self signed certificate for default fast server TLS connections
    

    이제 postal.yml 구성에서 몇 가지 옵션을 구성해야 합니다.

    nano /opt/postal/config/postal.yml

    다음 줄을 찾으십시오.

    web:
      # The host that the management interface will be available on
      host: postal.example.com
    

    호스트 이름을 실제 도메인 이름으로 변경합니다. 또한 다음 줄을 찾으십시오.

    main_db:
      # Specify the connection details for your MySQL database
      host: 127.0.0.1
      username: postal
      password: p0stalpassw0rd
      database: postal
    
    message_db:
      # Specify the connection details for your MySQL server that will be house the
      # message databases for mail servers.
      host: 127.0.0.1
      username: postal
      password: p0stalpassw0rd
      prefix: postal
    

    생성한 데이터베이스에 따라 사용자 이름, 암호 및 데이터베이스 이름을 변경합니다. 또한 다음 줄을 찾으십시오.

    rabbitmq:
      # Specify the connection details for your RabbitMQ server.
      host: 127.0.0.1
      username: postal
      password: StrongPassword
      vhost: /postal
    

    RabbitMQ용으로 생성된 가상 호스트 및 사용자에 따라 위 구성을 변경합니다. 다음으로 DNS 구성을 찾습니다.

    dns:
      # Specifies the DNS record that you have configured. Refer to the documentation at
      # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration for further
      # information about these.
      mx_records:
        - mx.postal.example.com
      smtp_server_hostname: postal.example.com
      spf_include: spf.postal.example.com
      return_path: rp.postal.example.com
      route_domain: routes.postal.example.com
      track_domain: track.postal.example.com
    

    메일 서버와 함께 사용하려는 실제 도메인으로 위의 도메인을 변경하십시오.

    파일을 저장하고 편집기를 종료합니다. 이제 다음을 실행하여 데이터베이스 및 기타 자산을 초기화합니다.

    postal initialize

    다음 명령을 실행하여 Postal Administrator 사용자를 생성합니다.

    postal make-user

    위의 명령은 이메일 주소, 사용자 이름 및 비밀번호를 묻습니다. 위의 명령은 다음 출력을 생성합니다.

    :~$ postal make-user
    Postal User Creator
    Enter the information required to create a new Postal user.
    This tool is usually only used to create your initial admin user.
    
    E-Mail Address      : 
    First Name          : Liptan
    Last Name           : Biswas
    Initial Password:   : **************
    
    User has been created with e-mail address 
    

    이제 Postal의 명령줄 설정이 완료되었습니다. 다음 명령을 사용하여 서버를 시작할 수 있습니다.

    postal start

    서비스가 올바르게 시작되었는지 확인하려면 다음 명령을 실행하십시오.

    postal status

    다음 출력을 얻어야 합니다.

    :~$ postal status
    Procodile Version   1.0.17
    Application Root    /opt/postal
    Supervisor PID      5319
    Started             2017-07-21 07:26:19 +0000
    
    || web
    || Quantity            1
    || Command             bundle exec puma -C config/puma.rb
    || Respawning          5 every 3600 seconds
    || Restart mode        usr1
    || Log path            none specified
    || Address/Port        none
    || => web.1            Running      07:26        pid:5325     respawns:0      port:-        tag:-
    
    || worker
    || Quantity            1
    || Command             bundle exec ruby script/worker.rb
    || Respawning          5 every 3600 seconds
    || Restart mode        start-term
    || Log path            none specified
    || Address/Port        none
    || => worker.1         Running      07:26        pid:5327     respawns:0      port:-        tag:-
    
    || cron
    || Quantity            1
    || Command             bundle exec rake postal:cron
    || Respawning          5 every 3600 seconds
    || Restart mode        term-start
    || Log path            none specified
    || Address/Port        none
    || => cron.1           Running      07:26        pid:5329     respawns:0      port:-        tag:-
    
    || smtp
    || Quantity            1
    || Command             bundle exec rake postal:smtp_server
    || Respawning          5 every 3600 seconds
    || Restart mode        usr1
    || Log path            none specified
    || Address/Port        none
    || => smtp.1           Running      07:26        pid:5332     respawns:0      port:-        tag:-
    
    || requeuer
    || Quantity            1
    || Command             bundle exec rake postal:requeuer
    || Respawning          5 every 3600 seconds
    || Restart mode        term-start
    || Log path            none specified
    || Address/Port        none
    || => requeuer.1       Running      07:26        pid:5334     respawns:0      port:-        tag:-
    

    Postal을 중지하려면 언제든지 다음 명령을 실행할 수 있습니다.

    postal stop

    Nginx를 리버스 프록시로 구성

    보안상의 이유로 Postal 웹 인터페이스 및 API는 Apache 또는 Nginx와 같은 프로덕션 웹 서버 뒤에 있어야 합니다. 이 튜토리얼에서는 Nginx를 리버스 프록시로 설치하고 구성합니다.

    다음 명령을 실행하여 Nginx 웹 서버를 설치합니다.

    apt -y install nginx

    SSL을 사용하여 Nginx에 액세스하는 것이 좋습니다. 자체 서명된 인증서를 사용하거나 Let’s Encrypt 무료 SSL 인증서 또는 상용 인증서를 사용할 수 있습니다. 이 튜토리얼에서는 Let's Encrypt 무료 SSL을 사용합니다.

    다음 명령을 실행하여 certbot이라고도 하는 Let’s Encrypt 클라이언트를 설치합니다.

    apt -y install certbot

    설치가 완료되면 다음 명령을 실행하여 Let’s Encrypt 인증 기관에서 인증서를 가져옵니다. certbot이 인증서를 제공하기 전에 도메인 기관을 확인하므로 도메인 이름이 서버를 가리키고 있는지 확인하십시오. mail.example.com을 실제 도메인 이름으로 바꾸십시오.

    certbot certonly --standalone -d mail.example.com

    인증서가 생성되면 /etc/letsencrypt/live/mail.example.com에 저장됩니다.

    Let’s Encrypt SSL은 90일 후에 만료되므로 인증서 자동 갱신을 설정하는 것이 좋습니다. 다음 명령을 실행하여 crontab 파일을 엽니다.

    crontab -e

    crontab 파일에 다음 줄을 입력합니다.

    30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

    위의 크론 작업은 매주 월요일 오전 1시 30분에 자동으로 실행되며 인증서가 만료될 경우 자동으로 갱신됩니다.

    이제 다음 명령을 실행하여 웹 사이트에 대한 새 서버 블록을 만듭니다.

    nano /etc/nginx/conf.d/mail.example.com.conf

    다음 콘텐츠로 파일을 채웁니다.

    server {
        listen [::]:80;
        listen 0.0.0.0:80;
        server_name mail.example.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen [::]:443 ssl;
        listen 0.0.0.0:443 ssl;
        root /opt/postal/public;
        server_name mail.example.com;
        ssl_certificate      /etc/letsencrypt/live/mail.example.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/mail.example.com/privkey.pem;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
    
        location / {
           client_max_body_size 50M;
           try_files $uri $uri/index.html $uri.html @puma;
        }
    
        location /assets {
           add_header Cache-Control max-age=3600;
        }
    
        location @puma {
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_pass http://127.0.0.1:5000;
        }
    }
    
    

    파일을 저장하고 편집기를 종료합니다. 이제 실행하여 nginx 웹 서버를 다시 시작하십시오.

    systemctl restart nginx

    부팅 시 nginx가 자동으로 시작되도록 하려면 다음 명령을 실행합니다.

    systemctl enable nginx

    이제 선호하는 웹 브라우저를 통해 다음 웹 사이트를 탐색하여 Postal에 액세스할 수 있습니다.

    https://mail.example.com

    우편 구성

    위의 사이트를 탐색하면 다음 인터페이스가 표시됩니다.


    이전에 생성한 사용자의 이메일 주소와 비밀번호를 입력하세요. 로그인하면 새 조직을 만들라는 메시지가 표시됩니다.

    조직의 이름을 제공하십시오. 자동 생성된 짧은 이름을 사용하도록 선택하거나 직접 지정할 수 있습니다. 짧은 이름은 SMTP 서버로 인증하는 동안 사용자 이름으로 사용됩니다. 문자, 숫자 및 하이픈만 포함해야 합니다.


    조직이 생성되면 새 메일 서버를 생성하라는 메시지가 표시됩니다.


    이메일 서버의 이름, 단축 이름 및 모드를 제공하십시오. 라이브 모드에서는 모든 이메일이 정상적으로 라우팅되고 전달되지만 개발 모드에서는 웹 인터페이스에서만 볼 수 있습니다.


    메일 서버를 추가했으면 메일 서버에 새 도메인을 추가해야 합니다. 도메인 탭을 클릭하고 새 도메인 이름을 만듭니다.

    도메인 이름을 추가했으면 도메인에 대한 DNS를 구성해야 합니다. SPF 및 DKIM용으로 두 개의 TXT 레코드를 추가해야 합니다. 또한 반환 경로 및 메일 배달을 위해 CNAME 레코드와 MX 레코드를 추가해야 합니다. DNS를 구성했으면 내 레코드가 올바른지 확인 버튼을 클릭하여 DNS 구성을 확인합니다.

    이제 이메일을 보내고 받기 위한 SMTP 자격 증명을 생성해야 합니다.

    유형을 SMTP 또는 API로 선택합니다. SMTP 자격 증명의 이름을 제공하고 이메일 주소 처리 방법을 선택합니다.

    완료되면 개요 탭으로 돌아올 수 있으며 이메일 주소를 보내거나 받는 데 필요한 정보를 볼 수 있습니다.

    결론

    이 자습서에서는 Ubuntu 17.04에서 Postal을 사용하여 모든 기능을 갖춘 메일 서버를 성공적으로 설정했습니다. 메일 서버를 사용하여 조직의 이메일을 보내고 받을 수 있습니다.