[[oktatas:linux:E-mail szerver|< E-mail szerver]]
====== Postfix ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2011, 2013, 2014, 2016, 2017, 2018, 2020
* Licenc: GNU Free Documentation License 1.3
* Web: https://szit.hu
===== Bevezetés =====
A **Postfix** egy népszerű nyílt forráskódú levelezőszerver program. **Wietse Zweitze Venema** kezdte el fejleszteni, 1997-ben. Az első
kiadás 1998-ban jelent meg.
===== Telepítés =====
apt install postfix
Ha valakinek a legújabb kell forrásból, akkor letöltheti a weboldaláról a forráskódot:
* http://www.postfix.org/download.html
===== Ismerkedés a postfixel =====
==== Fut-e? ====
Telepítés után ellenőrizzük, hogy fut-e a postfix. Ehhez használjuk a ps ax parancsot:
ps ax
A kimenet ehhez hasonló lehet:
PID TTY STAT TIME COMMAND
...
28400 ? Ss 0:00 /usr/lib/postfix/master
28406 ? S 0:00 pickup -l -t fifo -u -c
28407 ? S 0:00 qmgr -l -t fifo -u
...
A kimenetben egyetlen postfix könyvtárból futó master nevű folyamat van, de a pickup és a qmgr is hozzátartozik.
A master, a pcikup és a qmgr folyamatok kapcsolatát jól szemléltei a ps parancs, ha használjuk az "f" parancsot is:
ps axf
Ekkor a kimenetben megjelennek a szülő-gyermek kapcsolatok:
PID TTY STAT TIME COMMAND
...
4441 ? Ss 0:00 /usr/lib/postfix/master
4447 ? S 0:00 \_ pickup -l -t fifo -u -c
4448 ? S 0:00 \_ qmgr -l -t fifo -u
Láthatjuk, hogy a master a fő folyamat, amely két gyermekfolyamatot futtat,
a pickup és a gmgr.
A ps parancs mellett rendelkezésünkre áll a pstree nevű parancs, ami a folyamatokat
fastruktúrában ábrázolja.
Használjuk például így:
pstree -u `cat /var/spool/postfix/pid/master.pid`
A lehetséges kimenet:
master─┬─pickup(postfix)
└─qmgr(postfix)
==== Levél érkezése ====
Egy levél érkezésekor a master folyamat újabb gyermekeket indít. Ezek rendre:
* smtpd
* proxymap
* tlsmgr
* anvil
Kapcsolódjunk a levelezőszerverünkhöz a teszteléshez:
telnet localhost 25
Egy másik terminálon nézzük meg a futó folyamatokat.
A "mail from:" parancs után újabb folyamat indul:
* trivial-rewrite
Az "rcpt to:" parancs után elindul a cleanup folyamat.
* cleanup
Ha címzett a helyi gépen van, a local nevű gyermekfolyamat
indul el:
* local
==== Tesztelés ====
Természetesen a telnet parancs is megfelel a teszteléshez, ahogyan már használtuk:
telnet localhost 25
Van persze erre a célra fejlesztett eszköz is, a swaks. Telepítés:
apt install swaks
Használat:
swaks -s localhost
To: kati@iskolazo.zold.and
===== Újrakonfigurálás =====
A postfix levelezőszerver telepítés után is újrakonfigurálható a dpkg-reconfigure parancsra,
így nem kell belenyúlni a konfigurációs állományokba:
dpkg-renconfigure postfix
===== A postfix moduljai =====
* pickup
* megnézi megfelel-e az érkező levél
* cleanup
* átírja a levelet ha kell, majd kézbesítésre átadja
* qmgr
* várakozási sorokat (queue) kezeli
* anvil
* számolja a kliensek kéréseit és kéréseik gyorsaságát
* védelmi célokat szolgál
* proxymap
* szintén védelmi célokat szolgál
* a kereső táblák ezen a folyamaton keresztül kérdezhetők le, csak olvasható módban
* tlsmgr
* A TLS munkamenetek kezelése
* trivial-rewrite
* cím átírása és feloldása
* local
* A helyi leveleket kezeli
* smtp
* levelek kézbesítése az más gépeknek
===== A postfix működése =====
{{:oktatas:linux:e-mail_szerver:postfixs.png}}
- A levelek alapvetően két módon érkezhetnek. Keletkezhetnek helyben, és jöhetnek a más gépekről .
- Helyben keletkezett levél sendmail parancs segítségével készül
- A sendmail az alapértelmezett bemenetről várja levelet.
- A helyben keletkezett levelek a maildrop queue-ba kerülnek, ha levelezőszerver nem megy.
- Ha levelezőszerver fut, akkor pickup folyamat kapja meg a levelet.
- A pickup megnézi, hogy formailag megfelel-e a levél, majd átadja a cleanup folyamatnak
- A cleanup folyamt teszi a levelet az incoming queueba
- Ha hiányzik a From, To, Id vagy Date mező, akkor beleírja
- A cleanup folyamat megnézi a canonical és virtual táblák alapján szükséges-e átírni a levelet.
- Szabványos formára hozza a címeket: felhsználó@teljes-tartomány-név
- Ha szükséges az átírás átadja a trivial-rewrite folyamatnak, amely visszaadja a cleanup számára
- A dupla fogadó címeket törli
- Az Internetről érkező leveleket az smtpd folyamat fogadja.
- Van egy QMQP protokoll, amelyet a QMAIL mellé fejlesztettek, a postfix ezen is képes fogadni
- QMPQ (Quick Message Queuing Protocol, 26/TCP)
- A postfix az érkező leveleket a qmqpd folyamaton keresztül fogadja
- QMPQ protokollon minden levél továbbítódik, de csak hitelesítés után (pl. klászterekhez)
- Az smtpd folyamat ellenőrzi (ha be van állítva), hogy nem szerepel-e RBL listán a feladó
- Ez után megnézi az access tábla alapján, hogy a levél fogadható-e
- A következő lépésként az smtpd folyamat is a cleanup folyamatnak adja át a levelet
- A cleanup folyamat eltárolja a levelet a incoming queueban.
- Értesíti a qmgr folyamatot erről
- A qmgr folyamat átteszi levelet az active queueba.
- megnézi mit kell vele tenni
- megpróbálja kézbesíteni
- ha átmenetileg nem lehet kézbesíteni, akkor a deferred queueba teszi
- a qmgr időnként megnézi a deferred queue tartalmát, tudja-e kézbesíteni
- ha gyanús a levél címzett, feladó stb. alapján (férgek), akkor hold queueba kerül
- ha egy levél olvashatatlan, akkor a corrupt queueba
- A relocated tábla tartalmazza a visszautasítandó levelek sorsát
- Ilyen üzenetek generálása: User has moved to
===== Alapbeállítás =====
A postfix alapértelmezett beállításai máris használhatók.
Ha szeretnénk változtatni a beállításokon szerkesszük a
/etc/postfix/main.cf állományt.
A main.cf változónév = érték párokból áll, köztük egyenlőségjellel:
változónév = érték
Ha egyszer beállítottunk egy változót, annak értékére később is
hivatkozhatunk:
másikváltozónév = $eredetinév
A mintában szereplő $eredetinév változó viszont lehet a rávaló
hivatkozás után is.
# a @ mögé mit írjunk, ha nem töltötte ki a kliens.
# Csak helyben feladott leveleknél működik, ahol semmi nincs a @ mögött!
# Esetleg szokás még: $mydomain változót megadni
myorigin = /etc/mailname
# Logó
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
# Jelzés, hogy levél érkezett
biff = no
# Ha domain nincs teljesen kitöltve, akkor egy pont (.) után utánafűzi a mydomain értékét:
append_dot_mydomain = no
# Időegységek: s (seconds), m (minutes), h (hours), d (days), w (weeks). Alapértelmezett: h (hours).
# 0 korlátlan
# A küldő kapjon üzenetet, hogy a levél még mindig a queue-ban várakozik ennyi idő után.
delay_warning_time = 4h
# Hol van leírva, hogy mit fordítottak bele a postfix-be:
readme_directory = no
# Hostnév:
myhostname = iskolazo.zold.and
# De ez nem kötelező, az előzőből (myhostname) kiderül.
mydomain = zold.and
# Hol vannak az aliasok:
# A hagyományos alias hol van:
alias_maps = hash:/etc/aliases
# Egyéb adatbázfájl hol van:
alias_database = hash:/etc/aliases
# Itt fel kell sorolni a hagyományost is, de ide fűzhetek másokat.
# Így összefűzhetők:
#alias_database = hash:/etc/aliases hash:/etc/mailman/aliases
# Az utóbbit persze az postmap paranccsal kell generálni.
# Milyen domainekre érkező leveleket fogadjunk el
# Esetleg belehet helyettesíteni: $myhostname,$mydomain
mydestination = iskolazo, localhost, localhost.localdomain, iskolazo.zold.and, zold.and
# Ha tovább kell küldeni a levelet (nem neki szól), akkor ide küldje és ne máshova
relayhost =
# Honnan küldhetnek levelet, milyen klienseknek továbbítok
# Ide jöhet például szóköz után: 192.168.5.0/24
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# Levél szoltírozó
mailbox_command = procmail -a "$EXTENSION"
# Postafiók mérete:
mailbox_size_limit = 0
# Szeparátor a név és kiterjesztés között (nem találkozunk vele általában)
recipient_delimiter = +
# Melyik hálókártyán szolgálok ki:
inet_interfaces = all
Ha egy érték később kap csak értéket, nem gond, akkor is tudok rá hivatkozni.
A változók után lehet vessző vagy space is.
Szintaktikai elemzés
invoke-rc.d postfix check
vagy csak:
postfix check
Beállítások után töltsük újra a beállításokat:
invoke-rc.d postfix reload
===== Beállítások =====
==== A kimenő levelekhez használt domain név ====
Alapértelmezetten ez a helyi gép neve, amit a $myhostname esetén beállítottunk.
Példa a beállításra:
/etc/postfix/main.cf:
myorigin = $myhostname (alapértelmezett: A levél így lesz elküldve: "user@$myhostname")
myorigin = $mydomain (A levél így domaine így változik: "user@$mydomain")
==== Mely domainekről szeretnék levelet fogadni ====
A mydestination paraméter meghatározza mely domainekről fogadunk leveleket, amit továbbküldünk más gépekre.
Alapértelmezetten ez a saját gépünk.
Vagy nem adsz meg semmit vagy több domain nevet is megadhatsz. Lehetnek /file/name" minták vagy
"típus:táblák (mint a btree:, nis:, vagy mysql:), szóközökkel és/vagy vesszővel tagolva.
Példa 1: alapértelmezett:
/etc/postfix/main.cf:
mydestination = $myhostname localhost.$mydomain localhost
Példa 2: több domain
/etc/postfix/main.cf:
mydestination = $myhostname localhost.$mydomain localhost $mydomain
Példa 3: host több DNS rekorddal
/etc/postfix/main.cf:
mydestination = $myhostname localhost.$mydomain localhost
www.$mydomain ftp.$mydomain
==== Mely klienseknek továbbítjuk a leveleit ====
Alapértelmezetten a Postfix továbbít minden levelet amely a saját hálózatában van. Az saját hálózatot definiálhatjuk a
mynetworks paraméterrel. Alapértelmezetten minden géptől elfogad levelet amely azonos alhálózatban van.
Példuául:
/etc/postfix/main.cf:
mynetworks_style = subnet (alapértelmezett: authorize subnetworks)
mynetworks_style = host (safe: authorize local machine only)
mynetworks = 127.0.0.0/8 (safe: authorize local machine only)
mynetworks = 127.0.0.0/8 168.100.189.2/32 (authorize local machine)
Megadhatsz egy korlátozott hálózatot a main.cf, de a Postfix működik alapértelmezett beállításokkal is.
* "mynetworks_style = host" amikor a Postfix csak a helyi gépről továbbít leveleket.
* "mynetworks_style = subnet" (alapértelmezett) amikor a Postfix leveleket továbbít olyan SMTP kliensektől amelyek ugyanabban az alhálózatban vannak mint helyigép. Linuxon ez csak azt a hálózati interfészt jelenti, amelyet az ifconfig parancs megad.
* "mynetworks_style = class" a Postfix elfogad olyan SMTP kliensektől leveleket, amelyek azonos IP osztályban A/B/C színtű hálózatban vannak.
Példa:
/etc/postfix/main.cf:
mynetworks = 168.100.189.0/28, 127.0.0.0/8
==== Honnan küldhetnek levelet ====
Szerveren átmenő levelek:
mynetworks = 127.0.0.0/8 192.168.1.0/2
Rajtunk keresztül innen engedélyezett levélküldés
==== Álnevek ====
Álnevekkel megadhatok másodlagos nevek, amelyekre szintén szeretnénk levelet elfogadni.
Ezt akkor szoktuk használni, ha nem szeretnénk a másodlagos névre újabb nevet felvenni,
vagyis szeretnénk már egy meglévő e-mail címre irányítani. Erre az alias_maps
változó ad lehetőséget:
alias_maps = hash:/etc/aliase
postmaster: jozsi
root: jozsi
Ha új értéket írunk az /etc/aliases fájlba, akkor futtatnunk kell követkekző parancsot:
newaliases
Ez létrehozza a aliases.db nevű állományt.
A fenti beállítások után a postmaster és a root felhasználóknak címzett
levek is elfogadottak és a jozsi felhasználó kapja meg.
Szintén álnevek megadására való az alias_database:
alias_database = hash:/etc/aliases
Az alias_database annyival több, hogy megadhatunk más adatbázisokat is.
Ilyen lehet NIS adatbázis:
alias_maps = hash:/etc/aliases, nis:mail.aliases
==== Értesítés új levélről ====
Ha a felhasználó belép login promptnál értesítést kap ha új levele érkezett.
Ez csak konzolos felületen működik.
A linuxos biff csomag biff parancsa ugyanezt a feladatot látja el.
==== MAIL FROM kiegészítés ====
Ha a levelező (MUA) nem ír pont domaint a "mail from:" sorba és a mydomain
változónak adtunk értéket, akkor a postfix hozzáfűzi a "mail from:"
sor végéhez. Alapértelmezetten ki van kapcsolva:
append_dot_mydomain = no
Ha ezt mégis szeretnénk állítsuk be yes értéket, de ez az alapértelmezett is.
==== Procmail ====
mailbox_command = procmail -a "$EXTENSION"
A beállítás hatására az érkező leveleket a procmail is feldolgozza.
Vagyis a postfix átadja számukra az üzenetet kézbesítés előtt.
Alapértelmezetten nincs procmail beállítva, de minden felhasználó írhat magának
.procmailrc fájlt.
A procmailhez több beállításért nézd meg a következő oldalon lévő rövid szösszenetet [[oktatas:linux:e-mail_szerver:Procmail]]
A fenti értékadás hatására a postfix átadja az EXTENSION változó tartalmát a procmail számára:
$EXTENSION
Az EXTENSION változó után újabb változókat is megadhatunk.
==== A mailbox mérete ====
mailbox_size_limit = 0
Alapértelmezett: 51 200 00
A Debianban ez 0 értékre van állítva, vagyis korlátlan. Ne hagyjuk ezen a beállításon, ha
mások számára is szolgáltatunk levelezést! A felhasználók manapság nagyon könnyen
meg tudják tölteni. Az értéket byteban kell megadni.
==== Címzett elválasztó ====
Ha az e-mail címben a felhasználónév és az esetleges kiterjesztések közötti szeparátor.
recipient_delimiter = +
Például spamszűrésnél használjuk:
bela+ham@foo.hu
bela+spam@foo.hu
==== Hálózati eszközök ====
inet_interfaces = all
Melyik eszközön fogadjunk leveleket
Esetleg:
inet_interfaces = 192.168.1.2, 127.0.0.1
==== Hibák ====
Milyen hibákról menjen megjegyzés.
A notify-classes beállítással állíthatom be.
Példák:
notify-classes software,bounce
notify_classes = bounce, delay, policy, protocol, resource, software
notify_classes = 2bounce, resource, software
Lehetséges hibafajták:
* bounce
* 2bounce
* delay
* policy
* protocol
* resource
* software
Részletek: http://www.postfix.org/postconf.5.html#notify_classes
===== Queue kezelés =====
==== Parancsok ====
mailq - a queue tartalma
sendmail -q
postsuper -d queue-id
==== Queue-k ====
* fő
* incoming -- bejövő levelek tárolója (a pickup démon által átadott levelek kerülnek ide)
* active -- az éppen kézbesítés alatt lévő levelek helye (ideiglenes, mivel éppen feldolgozzuk)
* maildorp -- helyi levél
* deferred -- elsőre nem kézbesíthető levelek
* segéd queue
* defer, hold -- rendszergazda által eltett levelek
* corrupt -- olvashatatlan, hibás levelek
===== Maildir =====
...
home_mailbox = Maildir/
Indítsuk újra a szervert:
systemctl restart postfix
Ha szeretnénk procmail, akkor a következőt írjuk mailbox_command = után:
mailbox_command = procmail -a "$EXTENSION" DEFAULT=$HOME/Maildir/
===== Virtuális domain =====
Az ügyfelek tartománynevének nem állítunk be egy külön szervert.
A saját gépünkön virtuális tartománynévként fog szerepelni.
{{:oktatas:linux:e-mail_szerver:virtualis_tartomanyok.png|}}
==== Beállítások ====
=== Postfix ===
virtual_mailbox_domains = kek.and piros.and sarga.and feher.and
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 100
groupadd vmail -g 5000
useradd vmail -g vmail -u 5000 -d /home/vmail -m
info@zold.and zold.and/info/
info@piros.and piros.and/info
postmap /etc/postfix/vmailbox
Ekkor létrejön egy vmailbox.db fájl.
==== Analizis ====
| virtual_mailbox_domains | Milyen virtuális domaineknek szeretnénk szolgáltatni |
| virtual_mailbox_base | Hova érkeznek a virtuális domainek levelei |
| virtual_mailbox_maps | Hol tároljuk a virtuális domainekhez tartozó postafiókokat |
| virtual_uid_maps | Milyen felhasználó nevében éri el a postfix a mailboxokat \\ Léteznie kell ennek a felhasználónak |
| virtual_gid_maps | Milyen csoprot nevében éri el a postfix a mailboxokat \\ Léteznie kell ennek a csoportnak |
| virtual_minimum_uid | Minimális uid, legyen kisebb mint virtual_uid_maps |
A virtuális domainek között nem szerepelhet $myhostname változó értéke.
A virtual_mailbox_base után megadott könyvtár után nem kell "/" jelet tenni.
A /home/vmail könyvtárban a domainek könyvtárai és azokon belül a postafiókok
könyvtárai automatikusan létrejönnek, amikor az adott mailboxba érkezik egy levél.
==== További beállítások ====
=== Virtuális térképek ===
Bizonyos címekre érkező levelek milyen másik címre érkezzenek.
virtual_alias_maps = hash:/etc/postfix/virtual
postmaster@piros.lan postmaster
A jobboldalon persze lehet egész e-mail cím is.
Az adatbázis-állományba átvezetjük:
postmap /etc/postfix/virtual
Majd jöhet az újraindítás:
systemctl restart postfix
=== Limit ===
virtual_mailbox_limit (alapértelmezett: 51200000)
A mailbox vagy a maildir fájl maximális mérete byteban, vagy 0 és akkor végtelen.
message_size_limit (alapértelmezett: 10240000)
message_size_limit = 104857600
Az üzenet maximális mérete.
A üzenetek méret limitje legyen kisebb mint a mailbox limitje!
===== Maildir MySQL-ben =====
==== Postfix tudjon MySQL-t használni ====
Telepítsük a postfix-mysql csomagot:
apt install postfix-mysql
==== Mailboxok útvonala ====
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mailboxes.cf
user = mail_admin
password = titok
dbname = mail
query = SELECT CONCAT( SUBSTRING_INDEX(email,'@',-1),'/', SUBSTRING_INDEX(email,'@',1),'/') FROM user WHERE email = '%s'
hosts = 127.0.0.1
==== Domainek helye ====
virtual_mailbox_maps = mysql:/etc/postfix/virtual/domains.cf
user = mail_admin
password = titok
dbname = mail
query = SELECT domain FROM domains WHERE domain = '%s'
hosts = 127.0.0.1
==== Emailek helye ====
virtual_mailbox_maps = mysql:/etc/postfix/virtual/emails.cf
user = mail_admin
password = titok
dbname = mail
query = SELECT email FROM user WHERE email = '%s'
hosts = 127.0.0.1
==== Jelszavas fájlok ====
chmod o= /etc/postfix/virtual/*.cf
chgrp postfix /etc/postfix/virtual/*.cf
Mivel jelszavakat tartalmaznak virtual könyvtárban lévő fájlok, ezért másoktól minden jogot elveszünk.
==== MySQL telepítés ====
apt install mysql-server-5.1
mysql -u root -p
CREATE DATABASE mail;
use mail;
Domain tábla létrehozása:
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain)
);
Users tábla létrehozása:
CREATE TABLE user (
email varchar(80) NOT NULL,
password(50) NOT NULL,
PRIMARY KEY (email)
);
Domain felvétele:
INSERT INTO domains VALUES ( 'lila.hu');
Felhasználó felvétele:
INSERT INTO user VALUES ('jozsi@lila.hu', ENCRYPT('titok'));
mail_admin felhasználó a MySQLben:
GRANT ALL PRIVILEGES ON mail.*
TO 'mail_admin'@'localhost'
IDENTIFIED BY 'titok';
FLUSH PRIVILEGES;
===== Korlátozások =====
==== Helló ellenőrzés ====
A **HELO** vagy az **EHLO** parancs után megadott érték figyelése.
smtpd_helo_restrictions =
reject_unknown_helo_hostname
reject_invalid_helo_hostname
reject_non_fqdn_helo_hostname
| reject_unknown_helo_hostname | Ha nincs az EHLO vagy HELO üzenet után írt domainnek nincs A vagy MX rekordja |
| reject_invalid_helo_hostname | A domainmegadás szintaxisa nem jó. Például !!$ karakter van benne |
| reject_non_fqdn_helo_hostname | A domain nem FQDN |
Persze az egész nem ér semmit ha nem mondom meg, hogy megkövetelem a EHLO vagy HELO parancsot:
smtpd_helo_required = yes
==== Fogadó ellenőrzés ====
smtpd_recipient_restrictions =
reject_invalid_hostname
reject_unauth_destination
reject_unknown_recipient_domain
reject_rbl_client sbl.spamhaus.org
permit
| reject_invalid_hostname | Szintaktikailag nem helyes |
| reject_unauth_destination | Ismeretlen címzetteket eldobjuk, nem vagyunk "OpenRelay" |
| reject_unknown_recipient_domain | Nincs A vagy MX rekord |
| reject_rbl_client sbl.spamhaus.org | RBL listán van |
==== Szerverként (levélküldéskor) a küldő korlátozásai ====
smtpd_sender_restrictions = reject_unverified_sender,
reject_non_fqdn_sender,
reject_unknown_sender_domain
| reject_unverified_sender | A feladó (MAIL FROM) címének ellenőrzése. A felhasználót is ellenőrzi (ha nincs visszadobja). |
| reject_non_fqdn_sender | A feladó (MAIL FROM) címében a kukac után nem FQDN van akkor visszadobja. |
| reject_unknown_sender_domain | Ha a feladó (MAIL FROM) címében a domain nem oldható fel, akkor visszadobjuk. |
| permit_mynetworks | Saját hálózatról mehet, ezt meg szoktuk adni |
smtpd_sender_restrictions =
permit_mynetworks
reject_unverified_sender,
reject_non_fqdn_sender,
reject_unknown_sender_domain
Mit dobna el írja a naplóban, ha elé írom:
smtpd_sender_restrictions =
warn_if_reject reject_unverified_sender
warn_if_reject reject_non_fqdn_sender
warn_if_reject reject_unknown_sender_domain
A naplóban (/var/log/syslog /var/log/mail.log) ilyen sorokat kell keresni:
NOQUEUE: reject_warning:
A leveleket tehát így nem dobja el, de jelzi a naplóban, hogy megtenné.
==== Kliens ellenőrzése ====
Ha az IP cím nem oldható fel domain névvé, akkor nem fogadjuk el a levelet.
/etc/postfix/main.cf
smtpd_client_restrictions = reject_unknown_client
Egyébként:
Elfogadjuk az SMTP kapcsolatokat:
smtpd_client_restrictions =
permit_mynetworks,
check_client_access hash:/etc/postfix/client_restrictions,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client cn.countries.nerd.dk,
reject_rbl_client sa.countries.nerd.dk,
reject_rbl_client kr.countries.nerd.dk,
reject_rbl_client pl.countries.nerd.dk
zold.and OK
kek.and REJECT Nem jöhet be
===== SMTP SSL =====
==== SSL tanúsítvány létrehozása ====
mkdir /etc/postfix/ssl
cd /etc/postfix/ssl
openssl req -new -nodes -keyout smtp.theos.in.key -out smtp.zold.and.csr
Generating a 1024 bit RSA private key
...........++++++
........................++++++
writing new private key to 'smtp.zold.and.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:HU
State or Province Name (full name) [Some-State]:Magyarorszag
Locality Name (eg, city) []:Budapest
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Pörgő Bt.
Organizational Unit Name (eg, section) []:Informatika
Common Name (eg, YOUR name) []:smtp.zold.and
Email Address []:ssladmin@staff.zold.and
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:titok
An optional company name []:Pörgő Bt.
Legenárltuk a CSR tanusítványt.
==== SSL beállítása ====
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtp.zold.and.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtp.zold.and.crt
smtpd_tls_CAfile = /etc/postfix/ssl/caroot.crt
smtpd_tls_loglevel = 1
Esetleg még:
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
==== SASL ====
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options=noanonymous
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination, permit_mynetworks check_relay_domains
smtpd_delay_reject = yes
broken_sasl_auth_clients = yes
| smtpd_delay_reject | Várunk az RCPT TO parancsig az $smtpd_client_restrictions, $smtpd_helo_restrictions és $smtpd_sender_restrictions kiértékelésével. |
| broken_sasl_auth_clients | Yes-re állítva a Postfix elfogad nem szabványos (megtört) sasl azonosítást is. Pl. MS termékek. (RFC 4954). |
==== Teszt ====
telnet smpt.zold.and 25
Figyeljük a sorok között a STARTTLS szót:
Trying 1.2.3.4...
Connected to smtp.zold.and.
Escape character is '^]'.
220 smtp.zold.and ESMTP Postfix (Debian/GNU)
ehlo vagyok.and
250-smtp.zold.and
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
tail /var/log/mail.log
Esetleg:
* http://www.logix.cz/michal/devel/smtp-cli/
===== Egyéb SMTP kommunikáció =====
| VRFY joska | Ellenőrzi a joska felhasználó van-e |
| RSET | Megszakítja a kommunikációt |
| NOOP | Üres utasítás. Arra használjuk, él-e a szerver |
| HELO | Köszönés |
| EHLO | Köszönés |
| QUIT | Kilép |
===== Kvóta használata =====
Kvóta alapból van a postfixben, de az nem használható virtuális domainekre.
A következő összeállítás bemutatja, hogyan használjuk virtuális domainekre.
A postfix újrafordításához szükséges:
apt-get install build-essential debhelper libdb-dev \
libldap2-dev libpcre3-dev libmysqlclient15-dev libssl-dev \
libsasl2-dev libpq-dev libcdb-dev dpatch hardening-wrapper
Derítsük ki a postfix verziószámát:
postconf -d | grep mail_version
A http://vda.sourceforge.net oldalon nézzük meg hol lehet elérni az aktuális postfix verzióhoz patch-et.
A patch alkalmazása a postfix forráson:
cd /usr/src
apt-get source postfix
wget http://vda.sourceforge.net/VDA/postfix-vda-2.7.1.patch
cd postfix-2.7.1
patch -p1 < ../postfix-vda-2.7.1.patch
Új postfix telepítő csomag elkészítése:
dpkg-buildpackage
cd ..
dpkg -i postfix_2.7.1-1+squeeze1_i386.deb
dpkg -i postfix-mysql_2.7.1-1+squeeze1_i386.deb
===== Egyéb beállítások =====
==== Ha nincs DNS ====
disable_dns_lookups = yes
ignore_mx_lookup_error = yes
relayhost = 192.168.5.3
smtp_host_lookup = dns,nativ
===== Utószó =====
A felhasználókat és a tartományneveket tartsuk MySQL, PostgreSQL vagy LDAP adatbázisban, úgy elegánsabb.
A leírás néhol csak példákat tartalmaz, kifejtés nélkül. Idővel bővítem, ha időm engedi.
===== Függelék =====
==== Virtualdomainek fájlban ====
# ...
virtual_mailbox_domains = hash:/etc/postfix/vmaildomain
# ...
piros.and OK
sarga.and OK
==== DNS lookup ne legyen ====
Így nem szükséges DNS szerver, max. host fájl.
# ...
disable_dns_lookups = yes
==== Postfix filter ====
A Postfix nevű levél továbbító programhoz szeretnénk saját szűrőt írni shell programban.
Először létre kell hoznunk egy filter nevű felhasználót és egy csoportot is.
# groupadd filter
# mkdir /var/spool/filter
# useradd -d /var/spool/filter -g filter filter
# chown filter.filter /var/spool/filter
Filter létrehozása:
cat > /var/spool/filter/filter.sh
#!/bin/sh
# A levelet a MAILTEXT változóba tesszük
MAILTEXT=`cat`
# A fejléc részben elhelyezünk egy újabb sort:
MAILTEXT=`echo "$MAILTEXT" | formail -i "X-Custom-Header: Szurt level"`
# Ha készen van elküldjük
echo "$MAILTEXT" | /usr/sbin/sendmail -G -i "$@"
exit $?
Ez a szűrő beilleszt a fejrészbe egy sort ami X-Custom-Header: Szurt level szavakat fűzi egy levél fejrészéhez. A levélben bármilyen változtatást tehetünk ami a levé tartalmát nem változtatja.
A scriptet a filter felhasználónak és a filter csoportnak adjuk át:
# chown filter.filter /var/spool/filter/filter.sh
# chmod u+w /var/spool/filter/filter.sh
Ez után be kell állítani a postfixet, hogy használja a filterünket. Ehhez szükség van két új sorra/beállításra és egy már létező beállítás megváltoztatására:
Postfix master.cf végére:
filter unix - n n - 10 pipe
flags=Rq user=filter argv=/usr/local/filter/filter.sh -f ${sender} -- ${recipient}
Postfix master.cf-ben javítani smtp részt:
smtp inet n - n - - smtpd
-o content_filter=user_filter:dummy
A végén a postfixet újratöltjük:
# /etc/init.d/postfix reload
==== Postfix SMPT azonosítás ====
Az alábbiakban beállításra kerül SASL azonosítás és TLS-en keresztüli azonosítás is.
Szerkesszük a Postfix main.cf állományát:
cd /etc/postfix
vi main.cf
Vegyük fel az azonosításhoz szükséges adatokat:
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
local_recipient_maps =
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
Állítsuk be a 465 portot postfix számára:
vi master.cf
A következő sorokat adjuk a master.cf fájlhoz:
smtps inet n - n - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_sender=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o broken_sasl_auth_clients=yes
vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login
Készítsük el az SSL tanúsítványokat:
mkdir /etc/postfix/ssl
cd ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Készítsünk egy tanúsítványt, amit az Internet Exploler (az Outlook számára) / Thunderbird.
openssl pkcs12 -export -in smtpd.crt -inkey smtpd.key -out OutlookSMTP.p12
A postfix konfiguráció újratöltése:
/etc/init.d/postfix reload
Hogy kapcsolódni tudjanak gépünkhöz iptables szabály a levelezőszerver scriptjében:
$IPTABLES -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --destination-port 465 -j ACCEPT
Ha tűzfal mögött van, akkor a tűzfalscriptbe (Feltételezzük, hogy a szerver IP címe 192.168.1.4):
$IPTABLES -A FORWARD -i $EXTIF -p tcp --dport 465 -d 192.168.1.4 -o $INTIF -j ACCEPT
$IPTABLES -A FORWARD -o $EXTIF -p tcp --sport 465 -s 192.168.1.4 -i $INTIF -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p tcp -d $EXTIP2 --dport 465 -j DNAT --to 192.168.1.4:465
Ellenőrzés
netstat -ntpl | grep master
tcp 0 0 127.0.0.1:10025 0.0.0.0:* LISTEN 8366/master
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 8366/master
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 8366/master
telnet localhost 465
[root@ls1 postfix]# telnet localhost 465
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 yourserver ESMTP Postfix
ehlo me
250-yourserver
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
^]
telnet> quit
Connection closed.
[root@ls1 postfix]#
Teszteléshez készítsünk egy felhasználónév, jelszó párost kódolva Base64 Mime kódolással, a következő scripttel:
encode_sasl_plain.pl
#!/usr/bin/perl
use strict;
use MIME::Base64;
if ( $#ARGV !=1) {
die "Usage: encode_sasl_plain.pl \n";
}
print encode_base64("$ARGV[0]?$ARGV[0]?$ARGV[1]");
exit 0;
encode_sasl_plain.pl
Az eredmény valami ilyesmi:
dmFsYWtpP3ZhbGFraT90aXRvaw==
telnet localhost 465
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 yourserver ESMTP Postfix
ehlo me
250-yourserver
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dmFsYWtpP3ZhbGFraT90aXRvaw==
235 2.0.0 Authentication successful
Ha az azonosítás sikertelen akkor lehet, le kell cserélni a MATCH értéket a /etc/...
Újraindítás
/etc/init.d/saslauthd restart
telnet yourserver 465
user@gep:~$ telnet yourserver 465
Trying your-ip...
Connected to yourserver.
Escape character is '^]'.
220 yourserver ESMTP Postfix
ehlo me
250-yourserver
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dmFsYWtpP3ZhbGFraT90aXRvaw==
235 2.0.0 Authentication successful
Az ellenőrzés másként
$ perl -MMIME::Base64 -e 'print encode_base64("\000valaki\@valahol.net\000titkos.jelszo")'
dmFsYWtpP3ZhbGFraT90aXRvaw==
$ telnet youserver 25
$ telnet 1.2.3.4 25
220 a.mx.valahol.net NO UCE ESMTP
ehlo testing
250-a.mx.valahol.net NO UCE
250-STARTTLS
250-PIPELINING
250 8BITMIME
quit
$ openssl s_client -starttls smtp -crlf -connect youserver:25
SSL szerver
$ openssl s_client -crlf -connect 1.2.3.4:465
AUTH PLAIN dmFsYWtpP3ZhbGFraT90aXRvaw==
235 ok, go ahead (#2.0.0)
Sikertelen azonosítás esetén
AUTH PLAIN dmFsYWtpP3ZhbGFraT90aXRvaw==
535 authorization failed (#5.7.0)
Levél küldése:
mail from:
250 ok
rcpt to:
250 ok
data
354 go ahead
From: Joe
To: Nobody
Subject: test01
Helló, itt a tesz!
.
250 ok 1113954693 qp 29052
quit
221 a.mx.valahol.net NO UCE
==== Postfix HELO üzenete ====
=== Probléma ===
Egy szerver invalid HELO name üzenettel eldobja postfixünk leveleit
=== Lehetséges okok ===
Ha a szerverünk nem megfelelően szolgáltatja a HELO üzenetet, akkor lehetséges, hogy spam státuszt kaptunk egy SBL-XBL vagy CBL listán.
Általános okok, ami miatt nem felel meg a HELO üzenetünk:
* A szerverünk a localhost üzenetet küldi.
* A szerverünk az IP címünket küldi.
* A szerverünk olyan génevet küld ami nem oldható fel.
=== Ellenőrzés ===
Ha meg akarod nézni a szervered milyen HELO üzenet küld írj egy e-mailt a következő címre:
helocheck@cbl.abuseat.org
Másik lehetőség a telnet parancs használata:
telnet sajatserver 25
Lehetséges válasz:
$ telnet holvan.hu 25
Trying 88.151.97.148...
Connected to holvan.hu (88.151.97.148).
Escape character is '^]'.
220 gepnev.holvan.hu ESMTP Postfix (Debian/GNU)
Az utolsó sorban látszik, hogy a szerverünk a gepnev.holvan.hu HELO üzenetet küldi. A "quit" paranccsal kiléphetünk.
=== Javítás ===
Hogyan javíthatjuk a problémát? Első körben ellenőrizzük, amit be akarunk állítani legyen feloldható a DNS szerverben. Aztán a postfixben:
myhostname = gepnev.holvan.hu
Másik lehetőség a postfixben:
smtp_helo_name = gepnev.holvan.hu
A gép neve helyett lehet mail-t is írni, ha ez elérhető:
smtp_helo_name = mail.holvan.hu
==== Segédprogramok ====
levelek a várakozási sorban:
mailq
vagy
sendmail -bp
vagy
postqueue -p
A várakozósorban lévő leveleket megpróbáljuk elküldeni:
sendmail -q
vagy
postqueue -f
Levelek törlése a várakozási sorból:
postsuper -d qued_ID
Az ID kisbetű-nagybetű érzékeny.
Nincs a hálózatban MX rekord beállítva a küldeni kívánt dominenen:
disable_dns_lookups=yes
ignore_mx_lookup_error=yes
relayhost=192.168.5.3
smtp_host_lookup=dns,native
==== Maildir ====
maxiumum 5 000 000 bájtos, maximum 1000 levelet tartalmazó üres maildir:
$ maildirmake -q 5000000S,1000C ./Maildir
==== Konfig dpkg rendszerből ====
dpkg-reconfigure --priority=low postfix
==== SASL ellenőrzés ====
mcedit /etc/default/saslauthd
START=yes
apt-get install sasl2-bin
testsaslauthd -u test -p test -f /var/spool/postfix/var/run/saslauthd/mux
==== Hibakövetés ====
Bőbeszédű üzemmód:
/etc/postfix/master.cf:
smtp inet n - n - - smtpd -v
Kézi nyomkövetés:
# strace -p process-id
Atomatikus nyomkövetés:
/etc/postfix/master.cf:
smtp inet n - n - - smtpd -D
Fejezethez tartozó külső hivatkozás:
* http://www.postfix.org/DEBUG_README.html
==== Postfix beérkező levelekről másolat ====
=== Küldő alapján ===
Beállítjuk a postfixben, hogy kezelje az ilyen eseteket:
echo "recipient_bcc_maps = hash:/etc/postfix/recipient_bcc" >> /etc/postfix/main.cf
Létrehozom az adatbázis szöveges megfelelőjét:
echo "joska@server.hu tibi@server.hu" > /etc/postfix/recipient_bcc
Létrehozom magát az adatbázist:
postmap /etc/postfix/recipient_bcc
Újraindítom a szervert:
/etc/init.d/postfix restart
=== Feladó alapján ===
Beállítjuk a postfixben, hogy kezelje az ilyen eseteket:
echo "sender_bcc_maps = hash:/etc/postfix/sender_bcc" >> /etc/postfix/main.cf
Létrehozom az adatbázis szöveges megfelelőjét:
echo "joska@server.hu tibi@server.hu" > /etc/postfix/sender_bcc
Létrehozom magát az adatbázist:
postmap /etc/postfix/sender_bcc
Újraindítom a szervert:
/etc/init.d/postfix restart
=== Regex használata ===
sender_bcc_maps = regexp:/etc/postfix/sender_bcc
!/^joe@valahol\.hu$/ joe@valahol.hu
=== Irodalom ===
* http://www.postfix.org/postconf.5.html
==== Postfix képességek ====
* PIPELINING - Válasz nélkül jöhet a következő üzenet
* SIZE 10240000 - Max. ekkora üzenet kézbeítek
* VRFY - A küldeni szándékozó ellenőrizheti, hogy létezik-e egy felhasználó
* ETRN - A kiszolgálón tárolt leveleket lekérjük
* STARTTLS - TLS kapcsolat indítása
* ENHANCEDSTATUSCODES - Státuszkódok (http://tools.ietf.org/html/rfc3463)
* Siker (2.x.x kezdetű kód a DSN-ben)
* Átmeneti hiba (4.x.x kezdetű kód a DSN-ben)
* Állandó hiba (5.x.x kezdetű kód a DSN-ben)
* 8BITMIME - 8 bites kódolatlan szöveg átvitele lehetséges
* DSN - Van levélkézbesítési státusz üzenet (Delivery Status Notification)
==== Hasznos ====
=== smtpd_delay_reject ===
smtpd_delay_reject (alapértelmezett: yes)
A korlátozásokat csak a RCPT TO: után értékeli ki. Addig elfogad minden üzenetet
=== smtpd_client_restrictions ===
smtpd_client_restrictions = permit_mynetworks reject_unauth_pipelining
=== Érdemes ===
smtpd_client_restrictions =
permit_mynetworks
sleep 1
reject_unauth_pipelining
smtpd_delay_reject = no
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks
reject_non_fqdn_helo_hostname,
reject_invalid_helo_hostname,
permit
smtpd_sender_restrictions =
permit_mynetworks
reject_non_fqdn_sender
reject_unknown_sender_domain
permit
smtpd_recipient_restrictions =
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
check_sender_access hash:/etc/postfix/sender_access,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
check_policy_service unix:postgrey/socket,
permit
# Black/Whitelist a küldök egyeztetésére 'MAIL FROM' mező tekintetében.
barat@zold.and OK
szemet@spam.and REJECT
marketing@ REJECT
fonok@ OK
uzlet.marketing.and REJECT
piros.and OK
postmap /etc/postfix/sender_access
==== dpkg-reconfigure postfix ====
A következő kérdésekre kell válaszolnunk:
No configuration
Internet Site
Internet with smarthost
Satellite system
Local only
...
System mail name:
iskolazo
...
Root and postmaster mail recipient:
joska___________________________________________________________
iskolazo, localhost, zold.and
...
Force synchronous updates on mail queue?
Local networks:
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::]/128
Use procmail for local delivery?
...
Mailbox size limit (bytes):
0_________________________________________
Local address extension character:
+_________________________________________
...
all : use both IPv4 and IPv6 addresses;
ipv6: listen only on IPv6 addresses;
ipv4: lsiten only on IPv4 addresses;
Internet protocols to use:
all
ipv6
ipv4
==== Ellenőrzés ====
SMTP ellenőrzés:
telnet zold.and 465
SMTPS ellenőrzés:
stunnel -c -r zold.and:465
SMTP kommunikáció azonosítással:
telnet zold.and 25
Trying 192.168.5.1...
Connected to zold.and (192.168.5.1).
Escape character is '^]'.
220-iskolazo.zold.and ESMTP Postfix (Debian GNU/Linux)
220-We do not authorize the use of this system to transport unsolicited,
220 and/or bulk e-mail.
EHLO piros.and
250-iskolazo.zold.and Hello [192.168.5.1]
250-SIZE 10240000
250-PIPELINING
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP
AUTH LOGIN
334 VXasllasuslN
dkanANKksMaasAdK
334 GLlaiAsiLdSs
aillsLslWksWxL==
235 Authentication succeeded
A felhasználónevet és jelszót base64 kódolással kell megadni.
===== Irodalom =====
==== Linkek ====
* http://www.howtoforge.com/postfix-smtp-authentication-on-the-secure-port-only (azonosítás)
* http://qmail.jms1.net/test-auth.shtml (azonosítás)
* http://rackerhacker.com/2006/12/26/fixing-invalid-helos/ (Helló üzenet)
* http://www.postfix.org/VIRTUAL_README.html
* http://www.postfix.org/OVERVIEW.html
* http://www.postfixvirtual.net
* http://www.cyberciti.biz/tips/postfix-smtp-ssl-certificate-csr-installation-guide.html
* http://www.cyberciti.biz/faq/unix-dovecot-ssl-tls-server-configuration/
* http://www.howtoforge.com/virtual_postfix_mysql_quota_courier_p2
* http://wiki.hup.hu/index.php/Postfix_es_virtualis_domainek
* https://help.ubuntu.com/community/PostfixVirtualMailBoxClamSmtpHowto
* http://sugo.ubuntu.hu/10.10/html/serverguide/hu/dovecot-server.html
* http://www.tuxwiki.hu/doku.php?id=suse:postfix
* http://parszab.hu/sysadmin/levkorny/levkorny2.html
* http://calum.org/posts/postfix-antispam
* http://vda.sourceforge.net (Az oldal alján a virtuális limithez még több változó)
* http://www.xnote.com/howto/postfix_mysql_courier.html
* http://hogyan.org/postfix-courier-virtualis-felhasznalokkal
* http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-debian-lenny
* http://www.postfix.org/mysql_table.5.html
* http://www.postfix.org/MYSQL_README.html
* http://www.postfix-tutorial.com
* http://www.postfix.org/ETRN_README.html
* http://wiki.centos.org/HowTos/postfix_restrictions (Postfix korlátozások)
Spamszűrés:
* http://wiki.hup.hu/index.php/Clapf
* http://clapf.acts.hu
* http://parszab.hu/sysadmin/levkorny/levkorny5.html
Komplett levelezőszerver beállítás:
* http://howtoforge.org/virtual-users-domains-postfix-courier-mysql-squirrelmail-debian-lenny
* https://www.szszi.hu/wiki/Levelez%C5%91_szolg%C3%A1ltat%C3%A1s_Linux_alatt
Hasznos ide vonatkozó fórumtéma:
* http://hup.hu/node/40046
Fizetős, magyar spamszűrő helye:
* http://mx.spamtelenul.hu
Protokollok:
* http://en.wikipedia.org/wiki/On-Demand_Mail_Relay
* http://hu.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
* http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
* http://en.wikipedia.org/wiki/8BITMIME
* http://hu.wikipedia.org/wiki/MIME
* http://en.wikipedia.org/wiki/MIME
* http://en.wikipedia.org/wiki/ESMTP
* http://en.wikipedia.org/wiki/Local_Mail_Transfer_Protocol
===== Forrás =====
A Postfix működéséről a kép az alábi oldalon található kép alapján készült:
* http://www.porcupine.org/postfix/doc/big-picture.html