środa, 18 stycznia 2012

Postfix Centos


=====================================================================
Przygotowanie
=====================================================================



Jeśli serwer poczty z postfix stoi za firewallem koniecznie należy przekierować port 25 na serwer poczty. Inaczej poczta nie będzie dochodzić. Port TCP 25 musi być otwarty, ponieważ postfix jak i inne serwery pocztowe nasłuchują na tym porcie. 


1. Zakup dowolnej domeny. 
2. Rejestrujemy własną domenę na serwerach DNS, dla przykładu https://freedns.42.pl/
- Zakładamy konto,
- Definiujemy strefę:

W pole nazwa strefy wpisujemy pełną nazwę zakupionej domeny.
Wzorzec wybieramy pusty.
Typ strefy podstawowy.




- Wypełniamy poszczególne rekordy i pola strefy:

@ odnosi się do nazwy strefy (do samego siebie) więc definiujemy rekord MX serwera poczty. Taką samą nazwę potem definiujemy w postfix w pliku /etc/main.cf (hostname).
Serwer poczty również ma nazywać się poczta ustalamy to w pliku /etc/sysconfig/network.
Aby serwer poczty był widoczny (działa ping) należy zdefiniować jeszcze rekord A dla nazwy "poczta".


Najpierw ustalamy rekord A dla naszego IP.
Następnie dla "poczta" ustalamy nr IP.




To wystarczy aby nasz serwer był widoczny. Oczywiście zakładamy poślizg wynikający z odświeżania serwerów DNS.

=====================================================================
ETAP I 
Postfix
=====================================================================
Skonfigurować firewall serwera poczty.
Ustalić nazwę serwera np: "slack", "mario" lub "poczta"
tymczasowo poleceniem hostname nazwa_serwera
lub na stałe zmieniając zapisy w pliku /etc/sysconfig/network
HOSTNAME=nazwa_serwera

Koniecznie odinstalować sandmail'a, który może blokować nasłuch na porcie 25, uniemożliwiając tym samy start postfix'a:
# yum erase sendmail
Instalacja:
# yum install postfix
Utworzyć plik /etc/aliases.db
# postfix stop
# rm -f /etc/aliases.db
# newaliases
# postfix start

Konfiguracja /etc/postfix/main.cf
mydomain = domena.pl
myorigin = $mydomain
myhostname = poczta.domena.pl
mydestination = $myhostname, localhost.$mydomain, $mydomain
mynetworks = 192.168.1.0/24 127.0.0.0/8
inet_interfaces = all
Poniższa konfiguracja spokojnie starczy na wysyłanie i odbieranie:

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
mydomain = domena.plmyorigin = $mydomaininet_interfaces = allmydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.1.0/24, 127.0.0.0/8alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
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-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES 
Oczywiście "domena.pl" zastępujemy swoją własną i zarejestrowaną w serwerach dns domeną.

Uruchomienie/Zatrzymanie/Restart:
postfix start / stop / reload 
lub
service postfix reload
lub
service postfix restart 

Sprawdzenie postfix'a (sesja SMTP):
# telnet localhost 25
Odpowiedź serwera poczty
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 poczta.domena.pl ESMTP Postfix

Wprowadzić polecenia wysłania testowego email'a:
mail from: mail_nadawcy@domena.pl
rcpt to: mail_odbiorcy@o2.pl
data

      Tekst próbny...
.
quit
Sprawdź swoją skrzynkę w necie.


Logi: 
/var/log/maillog
/var/log/messages

=====================================================================
ETAP II 
SASL
=====================================================================


Uwierzytelnianie SMTP poprzez SASL

Simple Mail Transfer Protocol - protokół komunikacyjny, którego demon działa na 25 porcie. Protokół ten nie posiada mechanizmu weryfikacji nadawcy, co ułatwia rozpowszechnianie niepożądanych treści poprzez pocztę elektroniczną (spam). Uwierzytelnianie SMTP pozwala na identyfikację na podstawie loginu oraz hasła. 

Implementacją uwierzytelniania protokołu SMTP na serwerze poczty jest warstwa SASL (Simple Authentication and Security Layer).


Instalacja SASL
# yum install cyrus-sasl
Uruchomienie 
# service saslauthd start
Wpisanie w autostart
# chkconfig saslauthd --level 35 on
lub wpis do pliku /etc/rc.local
# service saslauthd start
Konfiguracja pliku /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
 Konfiguracja pliku /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
=====================================================================
ETAP III 
Dovecot
=====================================================================
Dovecot - serwer pozwalający na udostępnianie protokołu POP3 i IMAP aplikacjom klienckim poczty.

Instalacja
# yum install dovecot
Konfiguracja /etc/dovecot.conf (udostępnienie portów)
protocols = imap imaps pop3 pop3s
Uruchomienie i wpisanie do autostartu
# service dovecot start
# chkconfig dovecot --level 35 on
Przygotowanie transmisji szyfrowanej
Usunięcie starego i utworzenie nowego certyfikatu w systemie.
# rm -f /etc/pki/dovecot/certs/dovecot.pem
# cd /etc/pki/dovecot/certs/
# utworzyc????certyfikat  dovecot.pem

=====================================================================
ETAP IV
MySQL
=====================================================================

1. Sprawdzenie czy domena serwera jest prawidłowo ustawiona:
# hostname -f
W przypadku braku podania pełnej domeny należy wyedytować plik /etc/hosts:
127.0.0.1  localhost
127.0.0.1 mail.domena.pl mail
Ważne aby w drugim wierszu najpierw znajdowała się nazwa domeny, a później nazwa serwera.

2. Tworzymy bazę danych MySQL do zarządzania użytkownikami i obsługiwanymi domenami.

a) tworzymy bazę danych "mail" i użytkownika "postfix" z prawami do odczytu z linii komend mysql>:
CREATE DATABASE mail;
GRANT SELECT ON mail.* to postfix@localhost IDENTIFIED BY 'haslo';
b) tworzymy tabelę "domeny" zawierającą listę obsługiwanych domen:
CREATE TABLE domeny (id int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY, nazwa varchar (100) NOT NULL) Engine = InnoDB;
c)  tworzymy tabelę "uzytkownicy" zawierającą listę użytkowników wraz z powiązaniem do odpowiedniej domeny w tabeli "domeny":
CREATE TABLE uzytkownicy (id int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY, domena_id int (11) NOT NULL, uzytkownk varchar (100) NOT NULL, haslo varchar (32) NOT NULL, CONSTRAINT UNIQUE_EMAIL UNIQUE (domena_id, uzytkownik), FOREIGN KEY (domena_id) REFERENCES domeny (id) ON DELETE CASCADE) Engine = InnoDB;
d) tworzymy tabelę "aliasy" zawierającą listę adresów do przesłania dalej :
CREATE TABLE aliasy (id int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY, domena_id int (11) NOT NULL, email_adresat varchar (20) NOT NULL, przekieruj_do varchar (100) NOT NULL, FOREIGN KEY (domena_id) REFERENCES domeny (id) ON DELETE CASCADE) Engine =InnoDB;
e) tworzymy widok - e-mail / hasło:
CREATE VIEW uzytkownicy_view AS SELECT CONCAT (uzytkownicy.uzytkownik, '@', domeny.nazwa) AS email, uzytkownicy.haslo FROM uzytkownicy LEFT JOIN domeny ON uzytkownicy.domena_id=domeny.id;
 f) tworzymy widok
CREATE VIEW aliasy_view AS SELECT CONCAT (aliasy.email_adresat, '@', domeny.nazwa) AS email, przekieruj_do FROM aliasy LEFT JOIN domeny ON aliasy.domena_id = domeny.id;

3. Konfigurujemy Postfix.
Serwer pocztowy powinien poprawnie odczytywać informacje z tabel, więc w katalogu /etc/postfix tworzymy pliki:

a) wykonujemy polecenie nano /etc/postfix/virtual_mailbox_domains.cf sprawdza czy domena jest obsługiwana:
#nazwa użytkownika bazy
user = postfix
#hasło do bazy
password = haslo
#host na którym znajduje się baza danych
host = 127.0.0.1
#nazwa bazy danych
dbname = mail
#zapytanie dla serwera poczty
query = SELECT 1 FROM domeny WHERE nazwa = '%s'
b) wykonujemy polecenie nano /etc/postfix/virtual_mailbox_maps.cf - plik sprawdza, czy użytkownik jest zdefiniowany w bazie.
user = postfix
password = haslo
host = 127.0.0.1
dbname = mail
query = SELECT 1 FROM uzytkownicy_view WHERE email='%s'
c)  wykonujemy polecenie nano /etc/postfix/virtual_alias_maps.cf .
user = postfix
password = haslo
host = 127.0.0.1
dbname = mail
query = SELECT przekieruj_do FROM aliasy_view WHERE email='%s' 
d) konfigurujemy /etc/postfix/main.cf.
Informujemy serwer postfix o nowoutworzonych plikach oraz tworzymy id użytkownika i grupy vmail
virtual_mailbox_domains=mysql:/etc/postfix/virtual_mailbox_domains.cf
virtual_mailbox_maps=mysql:/etc/postfix/virtual_mailbox_maps.cf
virtual_alias_maps=mysql:/etc/postfix/virtual_alias_maps.cf
virtual_uid_maps=static: 5000
virtual_gid_maps=static: 5000
4. Dodajemy w systemie grupę i użytkownika vmail:
# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /home/vmail -m
a) zmieniamy prawa dostępowe do utworzonych plików z uwagi na zapisane tam hasła:
# chgrp postfix/etc/postfix/virtual_* (vmail?)
# chmod 650 /etc/postfix/virtual_*
5. Konfiguracja /etc/dovecot/dovecot.conf
a) sprawdzamy czy w pliku jest zapis
protocols = imap imaps pop3 pop3s
b) umożliwienie przesyłania niezaszyfrowanych haseł (z lenistwa):
disable_plaintext_auth = no
c) wskazanie katalogu przechowywania wiadomości użytkowników /home/vmail/_domena/_użytkownik:
mail_location = maildir:/home/vmail/%d/%n 
d) wskazanie dozwolonych mechanizmów uwierzytelniania:
mechanisms = plain login 
e) wskazujemy plik w którym zawarte jest info  w jaki sposób dovecot pobiera hasła użytkowników:
passdb sql { args = /etc/dovecot/dovecot-sql.conf
CDN

Brak komentarzy:

Prześlij komentarz