Skip to content

Postfix ( da POSTFIX dot ORG)

19-Jul-12

Quale nome di dominio usare x le mail in uscita

Il parametro $myorigin specifica il dominio da usare per la mail in uscita dalla vostra attuale macchina . Il default è il parametro $myhostname che è quello usato nella vostra LAN , ma dal momento in cui volete spedire mail al resto del mondo preferirete usare il parametro $mydomain che sara’ sicuramente un nome di dominio universalmente riconosciuto , parola chiave per google:” FQDN, fully qualified domain name” .

Avendo in /etc/postfix/main.cf i parametri:

myhostname = mypc
mydomain = FQDN.IT

il parametro $myorigin non sara’ $myhostname$mydomain ma :
myorigin = $myhostname (default: spedisci con il nome del tuo pc che di solito è "user@mypc")

myorigin = $mydomain (probabilmente preferibile se si vuole spedire mail anche al resto del mondo: "user@FQDN.IT")

Per quali domini ricevere email

Il parametro $mydestination specifica per quali domini la tua macchina riceve mail in locale , che puo essere il tuo network, LAN , invece di rispedirli ad un altra macchina . Il default è di ricevere mail per la macchina in sè , leggi questa pagina sul sito di postfix per quanto riguarda i domini ospitati .

Tu puoi non specificare nessun dominio oppure specificarne diversi nell forma “/file/name” che sarebbe “tipo:tavola” che puo’ essere una tra: hash:, btree:, nis:, ldap:, or mysql:, da dove postfix legge la lista dei domini ospitati .

IMPORTANTE:se la tua macchina è il mail server principale per il tuo dominio dovrai specificare anche il parametro $mydomain in $mydestination . Eccovi un po di esempi:

  • Esempio 1: default setting.

    /etc/postfix/main.cf:
    mydestination = $myhostname localhost.$mydomain localhost

  • Esempio 2: FQDN mail server.

    /etc/postfix/main.cf:
    mydestination = $myhostname localhost.$mydomain localhost $mydomain

  • Esempio 3: host universalmente riconosciuto da un FQDN con multipli DNS di tipo A.

    /etc/postfix/main.cf:
    mydestination = $myhostname localhost.$mydomain localhost
    www.$mydomain ftp.$mydomain

Per quali clients spedire email

Di default postfix spedisce email solo dai clients che fanno parte del tuo network di ip locale, che puo essere per esempio 192.168.1.0/24 e spedirli alle machine alla quale è fisicamente connessa. Altri network possono essere autorizzati se inclusi nel parametro $mynetworks per spedire in qualsiasi destinazione .

Postfix puo essere autorizzato a spedire mail anche per clients che fanno parte di networks non inclusi nel blocco di ip autorizzati leggi i tutorial SASL_README e leggi TLS_README.

IMPORTANTE: se il tuo network è collegato direttamente ad internet i paramentri di default sono troppo “amichevoli”:

Tramite il parametro $mynetworks_style puoi avvalorare quelli che sono parametri di default, alcuni esempi:

  • mynetworks_style = subnet (default: autorizza solo il tuo network locale)
  • mynetworks_style = host (+sicuro: autorizza solo la macchina locale)


ed avrai nel parametro $mynetworks nell ordine di sopra:

  • mynetworks = 127.0.0.0/8 (+sicuro: autorizza solo la macchina locale)
  • mynetworks = 127.0.0.0/8 168.100.189.2/32 (autorizza la macchina locale con il suo ip pubblico statico)

Puoi specificare i network autorizzati nel file main.cf o lasciare , come di default , che postfix se la sbrighi per conto suo . Il risultato dipende dal valore del parametro $mynetwork_stile:

  • se $mynetwork_style ha come valore host postfix spedira’ la mail solo dalla machina locale.
  • se $mynetwork_style ha come valore subnet (default),è quando postfix dovrebbe spedire mail solo per gli smtp clients che fanno parte del subnetwork che fa parte dell’ ip specificato dal comando ifconfig.
  • se $mynetwork_style ha come valore il parametro class postfix spedira’ mail x tutte le classi A/B/C dell’ip della tua macchina . Se questo valore venisse espresso su una macchina con un modem adsl (dial up) postfix finirebbe per spedire emails per tutti gli ip nel network del tuo provider .

Invece specifica manualmente una lista di ip nel parametro $mynetworks in formato CIDR,gruppi di networks (network/mask) , per esempio:

/etc/postfix/main:
mynetworks = 168.100.189.0/28, 192.168.1.0/24, 127.0.0.0/8

A quali destinazioni spedire email

Di default Postfix spedira’ email per chiunque anche al di fuori dei networks autorizzati solo verso destinazioni autorizzate specificate nel parametro $mydestinations.Di default postfix spedira email solo ai networks specificati nel parametro $mydestination.


relay_domains = $mydestination (default)
relay_domains = (safe: mai spedire mail da clients sconosciuti)
relay_domains = $mydomain (spedisce solo mail al mio nome di dominio e ai suoi sottodomini)

Metodo di spedizione: diretto o indiretto

Di default postfix cerca di spedire mail direttamente in interet ma questo non è sempre possibile o voluto per vari motivi: il tuo host è bloccato in uscita da un firewall o puo essere collegato ad un provider che non permette di spedire email direttamente in rete , porta 25 bloccata . Puo essere che hai un nome di dominio dinamico inserito in una blacklist antispam che i destinatari rifiutano.

In ognuno di questi casi hai bisogno di spedire mail in modo indiretto tramite un $relayhost , esempi:


relayhost = (default: direttamente in internet)
relayhost = $mydomain (tramite un remailer locale)
relayhost = [mail.$mydomain] (tramite remailer locale)
relayhost = [mail.isp.tld] (tramite un provider)

Le parantesi [] servono onde evitare che il dns ricerchi il dominio MX (mail exchanger)

Postfix – configurazione base

03-Jul-12

Configurazione base

Quasi tutte le opzioni di configurazione di Postfix si trovano nel file
/etc/postfix/main.cf

Ecco i principali tag a cui conviene prestare attenzione:

  • myhostname: valore indica il nome che assumerà il vostro server mail (es: mail.nomedominio.it);
  • myorigin: valore che indica il dominio usato per la posta inviata dal server: localhost,localhost.localdomain altri_valori indicano i domini che il server dovrà riconoscere come locali e che smisterà internamente;
  • mydomain: valore che indica il dominio a cui appartiene il server;
  • relayhost: valore che indica a quale server inoltrare le mail che non si riconoscono come locali;

  • mailbox_size_limit
    :0 indica la dimensione massima delle caselle mail,
    0 per nessun limite;
  • mynetworks: valore altri_valori indica le reti nelle quali il server deve operare (es. 127.0.0.1/8 192.168.0.1/24);
  • mynetworks_syle:host/subnet/class.


Su questi ultimi due punti è il caso di soffermarsi. Stiamo considerando ora quali IP considerare validi per l'invio della posta.

Postfix non autorizza l'invio della posta da parte di client non autorizzati a farlo e/o di domini sconosciuti, ovvero non è un open-relay. Questo è un gran vantaggio perché impedisce che il vostro server possa essere usato per spam o peggio.

Tramite il tag
mynetworks
abilito gli IP presenti nella lista a spedire mail, con
mynetworks_style
posso specificare uno tra i seguenti tre valori:

host
l'invio sarà consentito solo per la macchina locale;
class
l'invio sarà consentito a tutti i client appartenenti al network di classe A, B o C a cui il server appartiene;
subnet
indica che Postfix autorizza alla trasmissione tutti i client che appartengono alla stessa sottorete locale del mailserver e costituisce il valore di default.

Gestione degli Alias

In teoria ad ogni utente locale del vostro server corrisponde una sola casella mail. Si possono però creare degli alias che corrispondano ad un particolare utente, un secondo indirizzo a cui inviare mail per quel dato user. Di default esiste il file
/etc/aliases
che contiene una lista di alias a sinistra e i rispettivi utenti ai quali appartengono a destra. In
/etc/postfix/main.cf
basta solo aggiungere:

alias_maps = hash:/etc/aliases 

e per rendere questo file una mappa utilizzabile da Postfix lanciamo il comando:

# postalias /etc/aliases 

Lo stack TCP/IP. Introduzione

01-Jul-12

La suite di protocolli TCP/IP nasce verso la fine degli anni ’60 come progetto di ricerca finanziato dal governo americano fino a trasformarsi in quello che è diventato oggi, ovvero, il protocollo più diffuso al mondo per permettere la comunicazione tra computer. La suite è indipendente dalla piattaforma software utilizzata e, pertanto, funziona su tutti i sistemi operativi che ne implementano lo standard (Unix, Linux, OS X, Windows, Symbian, Android, iOS, etc.).

La suite di di protocolli TCP/IP può essere divisa in quattro parti  chiamati livelli. Essi sono:

livello Applicativo –> Telnet, FTP, POP3, HTTP, etc.
livello Trasporto    –> TCP, UDP
livello network       –> IP, ICMP, IGMP
livello data-link     –> Ethernet, Token Ring, FDDI

Ogni livello si occupa di un aspetto specifico della comunicazione tra due postazioni.

Livello Applicativo

Il livello Applicativo si occupa di definire gli standard dei protocolli di comunicazione delle applicazioni (programmi). Come si evince dal nome, questo livello è gestito dal programma che ha necessità di trasmettere dati. E’ a questo livello che troviamo la definizione dei protocolli FTP, HTTP, etc.. Ai dati da trasmettere, preparati nella maniera opportuna, viene aggiunta un’intestazione che li precede. L’intestazione dipende specificamente dall’applicativo che sta inviando i dati. Come esempio possiamo citare la navigazione sui siti web, essa utilizza il protocollo HTTP e, quindi, le informazioni passate al livello successivo della pila (livello Trasporto) si presenteranno in questo modo:

__________________________
!	HTTP header	! dati	 !

I dati vengono passati al livello Trasporto.

Livello Trasporto

Il livello Trasporto riceve i dati dal livello Applicativo e si occupa di gestire il flusso di dati tra due apparati. Per portare a termine il proprio compito si avvale dei protocolli TCP e UDP. La differenza principale tra i due è l’affidabilità della comunicazione. Il protocollo TCP, quando instaura una connessione tra due host (postazioni), si preoccupa che ogni pacchetto  giunga a destinazione. Il protocollo UDP, invece, invia i pacchetti sulla rete senza preoccuparsi che essi arrivino necessariamente a destinazione, lasciando questo compito, se richiesto, al livello applicativo (in pratica se ne deve occupare il programma che trasmette i dati). Anche il livello Trasporto aggiunge un’intestazione ai dati che gli vengono forniti dal livello Applicativo. Riprendendo il nostro esempio sulla navigazione internet avremo:

____________________________________________
! TCP header	!	HTTP header	!	dati !

oppure

____________________________________________
!	UDP header	!	HTTP header	!	dati !

Una volta transitati per questo livello i dati prendono il nome di “pacchetto TCP” o “pacchetto UDP” è vengono trasmessi al livello Network.

Livello Network

Il livello network riceve i dati dal livello Trasporto e si occupa del “viaggio” dei pacchetti sulla rete. Il routing (instradamento) dei pacchetti attraverso i router avviene a questo livello. Il protocollo utilizzato per svolgere tale compito è Internet Protocol (IP). L’IP è un protocollo non affidabile così come visto per il protocollo UDP del livello Trasporto e, pertanto, non garantisce la consegna dei pacchetti. Esso utilizza il protocollo ICMP per notificare alcuni errori occorsi ai pacchetti durante il tragitto ma dell’eventuale ripetizione del invio dei pacchetti andati persi se ne dovrà occupare un livello superiore (normalmente provvede il protocollo TCP). Così come visto per gli altri livelli anche il livello network aggiunge un’intestazione ai pacchetti. Continuando con l’esempio della navigazione internet avremo:

____________________________________________________
!	IP header	!	TCP header	!	HTTP header  ! dati !

Una volta transitati per questo livello i pacchetti prendono il nome di IP Datagram e vengono trasmessi al livello data-link.

Livello data-link

Al livello più basso della pila TCP/IP troviamo il livello data-link che riceve i dati dal livello Network. Questo livello si occupa della comunicazione tra le schede di rete e dell’impiego ottimale delle connessioni fisiche. A questo livello troviamo la definizione dei protocolli Ethernet, Point To Point Protocol (PTPP), etc. Normalmente è implementato come driver del sistema operativo ma ci sono anche dei casi in cui è implementato nel kernel del sistema operativo. Il livello data-link, in alcune versioni, oltre ad aggiungere un’intestazione agli IP Datagram aggiunge anche delle informazioni in coda (trailer). Iltrailer, chiamato Frame Control Sequence, contiene un CRC che serve per verificare l’integrità del frame (questo è il nome che assumono i dati quando transitano per questo livello).  Completando l’esempio della navigazione web e considerando l’utilizzo di una rete Ethernet avremo:

_________________________________________________________________________
!	Ehternet header	 !	IP header	!	TCP header ! HTTP header ! dati ! FCS !

“Incapsulamento”

Lo stack TCP/IP lavora con una tecnica denominata ad “incapsulamento” o “imbustamento”, ovvero come se le informazioni da trasmettere ad ogni livello venissero inserite in una busta sigillata. Pertanto, ogni livello tratta come “dati grezzi” le informazioni ricevuto dal livello superiore non distinguendo tra i dati originari forniti dall’applicativo e gli header (intestazioni) aggiunte dai livelli che essi hanno già attraversato.

Debian GNU/Linux sicurezza di default

30-Jun-12

Cos’è che rende un computer vulnerabile ad un attacco dall’esterno? Risposta: un programma server che è in attesa di connessioni su un indirizzo ip raggiungibile da internet . Un esempio di essi puo essere httpd . Httpd è il demone (la d sta per demone che in linux è sinonimo di applicazione server) delle pagine web e del protocollo http rappresentato in linux da programmi quali apache,nginx,lighttpd,etc.. Esso è raggiungibile sulla porta 80 che per convenzione è la porta del protocollo http ,mentre nella sua versione sicura, criptografata ,https ,la s sta appunto per secure , per convenzione è in ascolto sulla porta 443 . Chi attacca il pc cerchera’ di trovare ed eventualmente sfruttare un bug , una vulnerabilita’ in questo programma cercando attraverso scriptkidies o exploit che ne sfruttano la vulnerabilita’ ad impossessarsi di files sensibili , come ad esempio un .htpasswd e di conseguenza avere accesso al sistema .

Molte persone pensano sia fondamentale ed inevitabile avere un firewall per proteggere il proprio pc da attacchi indesiderati . Il firewall ,nel caso di linux è Netfilter , il comando che lo gestisce è :~# iptables .Con iptables puoi chiudere tutte le 65535 porte disponibili ed avere un pc che blocca ogni collegamento dall’esterno , ma se non hai applicazioni server in attesa di collegamenti da utenti esterni, diventa del tutto inutile il suo utilizzo ,ed inoltre , qualora tu abbia servers in attesa di collegamenti , le porte sui quali questi servers operano dovranno rimanere aperte , pronte ad accettare collegamenti degli utenti . Httpd è il server programmato per servire le pagine web di un sito , sshd sulla porta 22 offre un accesso crittografato alla shell del tuo sistema , molto utile agli amministratori che da locazioni remote vogliono gestire la loro macchina , smtpd invece è il demone per inviare posta ed è in ascolto sulla porta 25 e molti altri ancora . Rimando questa discussione ad un altro articolo che riguardera’ il networking e lo studio dei protocolli di rete .

Questo non per dire che il firewall netfilter è del tutto inutile ma solo per dire che netfilter da solo non è la soluzione a tutti i mali .

Cio che rende un sistema linux sicuro è il lavoro continuo dei suoi programmatori e degli utenti che collaborano al progetto segnalando eventuali bugs o malfunzionamenti . Tenere aggiornato di continuo un sistema linux è fondamentale per questo esistono programmi come l’update-manager di debian che ti avverte della presenza di una nuova versione di un programma dove i precedenti bugs sono stati riparati