Postal è un server di posta completo gratuito e open source per l'invio e la ricezione di e-mail. È scritto in Ruby e JavaScript. Puoi installare facilmente Postal sul tuo server. Ti aiuta anche a fornire le informazioni DNS corrette necessarie per ridurre le e-mail di spam. Il servizio postale viene utilizzato da molte organizzazioni per inviare e ricevere posta su base giornaliera.
In questo tutorial, installeremo Postal Mail Server su Ubuntu 17.04.
Prerequisito
- Server Ubuntu 17.04 minimo. Consigliati 8 GB di RAM.
- Privilegi di root. Questa guida è scritta come utente root, se hai effettuato l'accesso come utente sudo, esegui sudo -i.
- un nome di dominio puntato verso il tuo server.
Aggiorna sistema di base
Prima di installare qualsiasi pacchetto si consiglia di aggiornare i pacchetti e il repository utilizzando il comando seguente.
apt update && apt -y upgrade
shutdown -r now
Una volta aggiornato il tuo sistema, procedi ulteriormente con l'installazione di Ruby.
Installa Ruby
Postal è scritto in Ruby, quindi è necessario installare Ruby 2.3 o versioni successive sul tuo sistema. In questo tutorial, installeremo l'ultima versione di Ruby usando RVM. Esegui il comando seguente per aggiungere la chiave GPG di RVM sul tuo server.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
Ora installa RVM usando il seguente comando.
curl -sSL https://get.rvm.io | bash -s stable
Per utilizzare RVM immediatamente, dovrai eseguire il comando seguente.
source /etc/profile.d/rvm.sh
Ora prendi l'elenco di Ruby usando il seguente comando.
rvm list known
Vedrai il seguente output:
# 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
Ora installa l'ultima versione di Ruby nell'elenco usando il seguente comando.
rvm install 2.4
Usa la versione Ruby usando il seguente comando.
rvm use 2.4
Puoi verificare la versione di Ruby usando il seguente comando.
ruby -v
Dovresti vedere il seguente output se Ruby è stato installato correttamente.
[email protected]:~# ruby -v ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
Installa Ruby Gems
Per eseguire Postel sul tuo server, dovrai installare bundler e procodile sul tuo server. bundler è un gestore delle dipendenze per le applicazioni gem di Ruby. procodile è uno strumento di gestione dei processi per le applicazioni Ruby. Installa entrambe le applicazioni utilizzando i seguenti comandi.
gem install bundler
gem install procodile
Installa il server database MariaDB
MariaDB è un fork del server di database MySQL. MySQL è un software di sistema di gestione di database relazionali utilizzato per archiviare i dati in formato tabellare. Per installare MariaDB sul tuo server, esegui:
apt -y install mariadb-client mariadb-server libmysqlclient-dev
Esegui i seguenti comandi per avviare MariaDB e consentirne l'avvio all'avvio.
systemctl start mariadb
systemctl enable mariadb
Ora esegui i seguenti comandi per proteggere la tua installazione di MariaDB.
mysql_secure_installation
Il comando precedente eseguirà uno script per proteggere la nuova installazione di MariaDB. Lo script chiederà la password dell'utente root esistente, abbiamo appena installato MariaDB, la password di root non è impostata, basta premere invio per procedere oltre.
Lo script ti chiederà se desideri impostare una password di root per l'installazione di MariaDB, scegli y e imposta una password complessa per l'installazione. La maggior parte delle domande è autoesplicativa e dovresti rispondere sì o y a tutte le domande.
Impostazione database per posta
Per creare un database per Postal, dovremo prima accedere alla riga di comando di MySQL. Esegui il seguente comando per lo stesso.
mysql -u root -p
Il comando precedente accederà alla shell MySQL dell'utente root, richiederà la password dell'utente root. Fornisci la password per accedere. Ora esegui la seguente query per creare un nuovo database per la tua installazione di Postal.
CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
La query precedente creerà un nuovo database denominato postale. Assicurati di utilizzare il punto e virgola alla fine di ogni query poiché la query termina sempre con un punto e virgola.
Ora fornisci tutti i privilegi all'utente del tuo database sul database che hai creato. Esegui il comando seguente.
GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Sostituisci StrongPassword con una password molto forte e sicura.
Il database verrà scritto automaticamente da Postal, ma per questo dovremo fornire le autorizzazioni appropriate agli utenti di Postal. Esegui il comando seguente per fornire privilegi a tutti gli utenti che iniziano con postale-.
GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Ora esegui il comando seguente per applicare immediatamente le modifiche ai privilegi del database.
FLUSH PRIVILEGES;
Esci dal prompt di MySQL usando il seguente comando.
EXIT;
Installa RabbitMQ
RabbitMQ è scritto in lingua Erlang, in questo tutorial installeremo l'ultima versione di Erlang nel server. Installa Erlang usando il seguente comando.
apt -y install erlang
Importa la chiave GPG eseguendo:
curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
Ora aggiungi il repository RabbitMQ eseguendo il seguente comando:
add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'
Aggiorna l'indice del repository eseguendo il comando seguente.
apt update
Ora puoi installare RabbitMQ eseguendo il seguente comando.
apt -y install rabbitmq-server
RabbitMQ è ora installato sul tuo sistema.
Imposta RabbitMQ
Puoi avviare il processo del server RabbitMQ eseguendo il comando seguente.
systemctl start rabbitmq-server
Per avviare automaticamente RabbitMQ all'avvio, esegui il comando seguente.
systemctl enable rabbitmq-server
Ora esegui il comando seguente per creare un host virtuale per Postal nel server RabbitMQ.
rabbitmqctl add_vhost /postal
Ora aggiungi un utente RabbitMQ per Postal eseguendo il comando seguente.
rabbitmqctl add_user postal StrongPassword
Sostituisci StrongPassword è una password molto forte.
Ora imposta l'autorizzazione appropriata sull'host virtuale RabbitMQ sull'utente RabbitMQ.
rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"
Installa Git e Node.js
Git verrà utilizzato per recuperare il pacchetto di installazione e alcune dipendenze. Esegui il comando seguente per installare Git sul tuo sistema.
apt -y install git
Puoi verificare se Git è stato installato correttamente controllando la versione usando il comando seguente.
git --version
Dovresti ottenere il seguente output.
[email protected]:~# git --version git version 2.11.0
Node.js verrà utilizzato per compilare la libreria JavaScript. Installa il software utilizzando il comando seguente.
apt -y install nodejs
Puoi verificare se Node.js è stato installato correttamente eseguendo il comando seguente.
nodejs -v
Dovresti ottenere il seguente output.
[email protected]:~# nodejs -v v4.7.2
Ora che abbiamo tutte le dipendenze pronte, puoi installare il Postal.
Installa Postal
Postal dovrebbe essere eseguito come utente isolato. Esegui il comando seguente per creare un nuovo utente.
useradd -r -m -d /opt/postal -s /bin/bash postal
Il comando precedente creerà un nuovo utente con nome utente postale e la directory home sarà impostata su /opt/postal.
Consenti a Ruby di ascoltare le porte privilegiate eseguendo il comando seguente.
setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby
Ora che tutto è pronto, scarica l'ultimo archivio Postale ed estrai l'archivio come Utente Postale utilizzando il seguente comando.
wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal
Ora crea un collegamento simbolico al file binario di Postal eseguendo il comando seguente.
ln -s /opt/postal/bin/postal /usr/bin/postal
Ora puoi interagire con il tuo server postale da qualsiasi directory. Per eseguire i prossimi comandi dovrai accedere alla shell come utente postale.
su - postal
Ora dovrai installare tutte le dipendenze Ruby necessarie per eseguire l'applicazione.
postal bundle /opt/postal/vendor/bundle
Una volta installate le dipendenze, dovrai generare i file di configurazione predefiniti.
postal initialize-config
Il comando precedente genererà la configurazione richiesta per l'installazione di Postal, comprese varie chiavi e certificati. Questo genererà anche il file di configurazione postal.yml predefinito. Dovresti ottenere il seguente output.
[email protected]:~$ 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
Ora dovrai configurare alcune opzioni nella configurazione di postal.yml.
nano /opt/postal/config/postal.yml
Trova la seguente riga:
web: # The host that the management interface will be available on host: postal.example.com
Cambia il nome host con il tuo nome di dominio effettivo. Inoltre, trova le seguenti righe.
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
Modifica il nome utente, la password e il nome del database in base al database che hai creato. Inoltre, trova queste righe:
rabbitmq: # Specify the connection details for your RabbitMQ server. host: 127.0.0.1 username: postal password: StrongPassword vhost: /postal
Modifica la configurazione sopra in base al vhost e all'utente creati per RabbitMQ. Quindi, trova le configurazioni 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
Cambia i domini sopra con i domini effettivi che desideri utilizzare con il server di posta.
Salva il file ed esci dall'editor. Ora, inizializza il database e altre risorse eseguendo:
postal initialize
Crea l'utente amministratore postale eseguendo il comando seguente.
postal make-user
Il comando sopra ti chiederà l'indirizzo email, il nome utente e la password. Il comando precedente genererà il seguente output.
[email protected]:~$ 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 : [email protected] First Name : Liptan Last Name : Biswas Initial Password: : ************** User has been created with e-mail address [email protected]
La configurazione della riga di comando di Postal è ora terminata, puoi avviare il server utilizzando il seguente comando.
postal start
Per verificare se i servizi sono stati avviati correttamente, eseguire il comando seguente.
postal status
Dovresti ottenere il seguente output.
[email protected]:~$ 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:-
Per interrompere Postal, puoi sempre eseguire il seguente comando.
postal stop
Configurazione di Nginx come proxy inverso
Per motivi di sicurezza, l'interfaccia Web e l'API di Postal dovrebbero essere dietro qualsiasi server Web di produzione come Apache o Nginx. In questo tutorial installeremo e configureremo Nginx come proxy inverso.
Installa il server web Nginx eseguendo il comando seguente.
apt -y install nginx
Si consiglia di utilizzare SSL per accedere a Nginx. Puoi utilizzare un certificato autofirmato o un certificato SSL gratuito Let's Encrypt o un certificato commerciale. In questo tutorial, utilizzeremo Let's Encrypt SSL gratuito.
Installa il client Let's Encrypt noto anche come certbot eseguendo il comando seguente.
apt -y install certbot
Al termine dell'installazione, eseguire il comando seguente per ottenere i certificati dall'autorità di certificazione Let's Encrypt. Assicurati che il nome di dominio sia puntato verso il tuo server poiché certbot verificherà l'autorità di dominio prima di fornire i certificati. Sostituisci mail.example.com con il tuo nome di dominio effettivo.
certbot certonly --standalone -d mail.example.com
Una volta generati, i certificati verranno archiviati in /etc/letsencrypt/live/mail.example.com.
Let's Encrypt SSL scade tra 90 giorni, quindi ti consigliamo di impostare un rinnovo automatico per i tuoi certificati. Esegui il comando seguente per aprire il file crontab.
crontab -e
Inserisci la seguente riga nel file crontab.
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
Il processo cron di cui sopra verrà eseguito automaticamente ogni lunedì all'01:30 e se i certificati stanno per scadere, li rinnoverà automaticamente.
Ora crea un nuovo blocco server per il tuo sito web eseguendo il comando seguente.
nano /etc/nginx/conf.d/mail.example.com.conf
Popolare il file con il seguente contenuto.
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; } }
Salva il file ed esci dall'editor. Ora riavvia il server web nginx eseguendo.
systemctl restart nginx
Per consentire a nginx di avviarsi automaticamente all'avvio, esegui il comando seguente.
systemctl enable nginx
Ora puoi accedere a Postal su navigando nel seguente sito web tramite il tuo browser web preferito.
https://mail.example.com
Configurazione postale
Dopo aver navigato nel sito sopra, vedrai la seguente interfaccia.
Inserisci l'indirizzo email e la password dell'utente che hai creato in precedenza. Una volta effettuato l'accesso, ti verrà chiesto di creare una nuova organizzazione.
Fornire il nome dell'organizzazione. Puoi scegliere di utilizzare il nome breve generato automaticamente oppure puoi specificarne uno tu stesso. I nomi brevi vengono utilizzati come nome utente durante l'autenticazione con il server SMTP. Dovrebbe contenere solo lettere, numeri e trattino.
Una volta creata l'organizzazione, ti verrà chiesto di creare un nuovo server di posta.
Fornire il nome, il nome breve e la modalità del server di posta elettronica. In modalità Live, tutte le email vengono instradate e consegnate normalmente, ma in modalità sviluppo sono visibili solo nell'interfaccia web.
Una volta aggiunto il server di posta, dovrai aggiungere un nuovo dominio nel server di posta. Fai clic su Domini scheda e crea un nuovo nome di dominio.
Dopo aver aggiunto il nome di dominio, dovrai configurare il DNS per il dominio. Dovrai aggiungere due record TXT per SPF e DKIM. Dovrai anche aggiungere un record CNAME e un record MX per il percorso di ritorno e la consegna della posta. Dopo aver configurato il DNS, fai clic su Verifica che i miei record siano corretti pulsante per verificare la configurazione DNS.
Ora dovrai creare le credenziali SMTP per l'invio e la ricezione di email.
Scegli il tipo come SMTP o API. Fornisci il nome per le credenziali SMTP, scegli come desideri gestire l'indirizzo email.
Una volta terminato, puoi tornare a Panoramica scheda e vedrai le informazioni necessarie per inviare o ricevere l'indirizzo email.
Conclusione
In questo tutorial, abbiamo configurato con successo un server di posta completo utilizzando Postal su Ubuntu 17.04. Puoi utilizzare il server di posta per inviare e ricevere le email della tua organizzazione.