Linux - 1/2 - Installare Server di posta con Postfix, MailScanner, ClamAV, Spamassassin su Centos

Questa è una procedura che ho testato personalmente su Centos 5.7 e che segno qui come promemoria sperando che sia di utilità a qualcuno. (ultima revisione 18/10/2011)


Questo articolo continua, per quanto riguarda MailScanner, Spamassassin e Clamav in quest'altro post:

http://alessandromazzanti.blogspot.com/2011/03/settaggio-di-mailscanner-su-centos-con.html


Va prima di tutto settato il nome del Server con il comando seguente:

system-config-network-tui

Si suppone che il nome è SERVER01

Va installato postfix:

yum install postfix system-switch-mail

modifichiamo il mail delivery agenti tramite il seguente comando su postfix:

system-switch-mail

Per settare il firewall si lancia il comando per configurarlo in modalità grafica.

system-config-securitylevel-tui



Il seguente comando permette di vedere se la porta smtp è aperta sul firewall

iptables -L | grep smtp 

Deve apparire come di seguito

         ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:smtp


Per far avviare in automatico del servizio postfix nel runlevel attuale:
 

chkconfig postfix on

chkconfig postfix --list

        visualizza lo stato di avvio del servizio postfix

Va modificato il file in /etc/postfix/main.cf

postfix reload - per ricaricare i parametri

postconf -n - Visualizza i parametri che sono stati modificati da quelli standard 

postconf -e "relayhost = mailhub.example.com" 

Il precedente comando serve per settare il parametro precedente in automatico in main.cf aggiungento tale riga in fondo.

Ecco l'esempio di file main.cf, si ipotizza che la mail locale che vogliamo attivare è "Instyle.locale" mentre il nome del server è "SERVER01"

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = server01.instyle.locale
mydomain = instyle.locale
myorigin = $mydomain
inet_interfaces = all
unknown_local_recipient_reject_code = 550
unknown_local_recipient_reject_code
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-3.2.2/samples
mail_spool_directory = /var/mail
#myhostname = relay.instyle.it
#inet_interfaces = all
mydestination = instyle.locale, server01.instyle.locale
relayhost =
mailbox_command =
mailbox_transport =
smtpd_helo_required = no
smtpd_helo_restrictions =
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
smtp_sasl_auth_enable = no
smtpd_sasl_auth_enable = no
smtpd_use_tls = no
smtp_use_tls = no
alias_maps = hash:/etc/aliases
mailbox_size_limit = 0
message_size_limit = 10240000

#Queste righe vengono aggiunte per supportare dovecot
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
#Le righe commentate di seguito si possono eventualmente attivare
#smtpd_tls_auth_only = yes
#virtual_maps = hash:/etc/postfix/virtual
#relocated_maps = hash:/etc/postfix/relocated
#transport_maps = hash:/etc/postfix/transport
#sender_canonical_maps = hash:/etc/postfix/sender_canonical
#masquerade_exceptions = root

#masquerade_classes = envelope_sender, header_sender, header_recipient
#program_directory = /usr/libexec/postfix
#masquerade_domains = instyle.locale
#smtpd_sender_restrictions = hash:/etc/postfix/access
#smtpd_client_restrictions =

#strict_rfc821_envelopes = no
#defer_transports =
#disable_dns_lookups = no

Per la parte POP3 è necessario installare Dovecot: ( si può anche installare Cyrus IMAP server  per la parte IMAP(http://cyrusimap.web.cmu.edu/)

yum install dovecot

Per far avviare in automatico il servizio nel runlevel attuale
 

chkconfig dovecot on

chkconfig dovecot --list

        visualizza lo stato di avvio del servizio postfix

vim /etc/dovecot.conf  

Cercare la sezione auth default, e cambiarla come di seguito

like this:

togliere #


pop3_uidl_format = %08Xu%08Xv
/


auth default {
mechanisms = plain login
passdb pam {
}
userdb passwd {
}
user = root
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}



Riavviare il servizio dovecot
Bisogna modificare anche il file main.cf di postfix come segue:

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Riavviare il servizio postfix

<-------------------------->

useradd info

passwd info

cd /var/mail

chmod 600 info

chown info.dovecot Info

se collegandosi da un client della rete via telnet si ottiene l'errore seguente:

Plaintext authentication disallowed on non-secure connection

potrebbe essere necessario:


chmod 1777 ./mail


postsuper -r ALL

<-------------------------->


vim /etc/dovecot.conf

modificare la stringa:


disable_plaintext_auth = no

Provare ad usare telnet oppure configurare il client di posta



Per testare che funzioni correttamente il pop3

[ralph@instyle.locale ~]$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
user ralph
+OK
pass itsasecret
+OK Logged in.
stat
+OK 26 14419 (25 messaggi presenti)
list 5
+OK 5 554
retr 5
+OK 554 octets
Return-Path:
X-Original-To: ralph@localhost
Delivered-To: ralph@localhost.instyle.locale
Received: by server01.instyle.locale (Postfix, from userid 501)
id C7AD818242; Tue, 24 Mar 2009 01:30:40 +0100 (CETcd )
Date: Tue, 24 Mar 2009 01:30:40 +0100
From: test@instyle.locale
To: ralph@localhost.instyle.locale
Subject: mail Nr. 5
Message-ID: <20090324003040.GA24807@centos.instyle.locale>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.4.2.2i
Lines: 1
Hello
.
quit
+OK Logging out.



Per testare se invece funziona correttamente l'IMAP


[ralph@instyle.locale ~]$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
* OK Dovecot ready.

1 login ralph isasecret

1 OK Logged in.

2 select Inbox

* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 26 EXISTS
* 0 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1237853960] UIDs valid
* OK [UIDNEXT 27] Predicted next UID
2 OK [READ-WRITE] Select completed.

3 FETCH 6 BODY[TEXT]

* 6 FETCH (FLAGS (\Seen) BODY[TEXT] {7}
Hello
)
3 OK Fetch completed.
4 LOGOUT
* BYE Logging out
4 OK Logout completed.

testare la connessione SMTP standard

[ralph@centos ~]$ telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 server01.instyle.locale ESMTP Postfix

EHLO mail.instyle.locale

250-server01.instyle.locale
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN

Questo vuol dire che funziona tutto.

[ralph@centos ~]$ telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 server01.instyle.locale ESMTP Postfix

EHLO mail.instyle.locale

250-server01.instyle.locale
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN

AUTH PLAIN AHRlc3QAMTIzNDU=

235 2.0.0 Authentication successful

quit

221 2.0.0 Bye

Connection closed by foreign host.

la sigla AHRlc3QAMTIzNDU= line?  sono la username e password codificate in Base64 encoded—not encrypted; si può usare perl per codificare. Supponiamo di avere l'utente test e la password 12345:

[ralph@centos ~]$ perl -MMIME::Base64 -e 'print ➥
encode_base64("\000test\00012345");'
AHRlc3QAMTIzNDU=

[ralph@centos ~]$
Il \000 è il byte nullo che deve precedere l'username e la password.

testare che l'SMTP criptato funzioni

Se vogliamo attivare la connessione criptata è necessario aggiungere al file main.cf di postfix:
smtpd_tls_auth_only = yes - E' quello che attiva la connessione criptata

If you connect to your mail server now, you will see the following:
[ralph@centos ~]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 server01.instyle.locale ESMTP Postfix

EHLO mail.example.com

250-server01.instyle.locale
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Non vi è piu' menzione della opzione AUTH. Proviamo dunque a:
[ralph@centos ~]$ openssl s_client -starttls smtp -connect localhost:25
CONNECTED(00000003)
[...]
250 DSN

EHLO mail.instyle.locale

250-server01.instyle.locale
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN

250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Se tutto funziona disattivare l'opzione seguente.
Il Server adesso è in produzione, per la posta locale, nel prossimo articolo vedremo come installare l'antispam, antivirus, webmail e pubblicarlo su internet.

soft_bounce = no
unknown_local_recipient_reject_code = 550

Il file degli alias si trova in /etc/aliases. Una volta fatte le modifiche è sufficiente dare il comando newaliases

La seconda parte del tutorial continua qui