Telepítsünk Ubuntu 14.04-en vagy Arch Linux-on egy csak kimenő smtp szolgáltatást nyújtó Postfix-ot, amely sasl segítségével autentikál.
Mivel a csak kimenő smtp létjogosultsága általában a szolgáltatás sebességnövelése, az autentikáció nem relációs adatbázisból történik (pl. mysql), és természetesen nincs vírus-, spam-, és RBL szűrés. Először alapozunk, azután elvégezzük a telepítéseket és beállításokat, majd tesztelünk.
Alapozás
Egy bejövő levelezésre is alkalmas környezet telepítéséről (és ezen belül a postfix-ről) itt irtam, ezért az alapokról már nem írok. A postfix telepítése/beállítása lényegében majdnem ugyanazok, az igazi különbség az, hogy nincs bejövő e-mail kezelés, illetve az autentikáció no-sql-sasl típusú. Ráadásul – hogy ne legyen túl sok réteg – a sasl által kínált sasldb metódust választjuk, ami azt jelenti, hogy nem fordul pl. a PAM-hez, hanem egy általa kezelt adatbázis fájlból veszi az autentikációs adatokat.
De mi is az a SASL?
A SASL egy autentikációs réteg vagy keretrendszer, amelynek segítségével SASL-t implementásló alkalmazások tudnak SASL-t implementáló alkalmazásokkal hitelesíttetni magukat. A SASL jó pár mechanizmust és adattárolási forrást ismer. Ahogy korábban említettem, az adattárolási formák közül a sasldb típusút választjuk, amit hivatalosan talán úgy is hívnak, hogy libsasl authentication database.
A postfix önmagában kétféle SASL implementációt ismer: dovecot és cyrus. A dovecot most nem lényeges, a cyrus pedig a legjobb olyan megoldás, amely a postfix átírása nélkül lehetséges legtöbb/legjobb funkcionalítást adja. Amit még tudnod kell: a cyrus sasl által egy különálló hitelesítési démon fut a háttérben, amit saslauthd-nek hívnak.
Telepítés, beállítások
Először is telepítsük a legfontosabb programokat:
Ubuntu:
#Ubuntu apt-get install postfix postfix-pcre pfqueue libsasl2-modules sasl2-bin libsasl2-2 #Arch Linux pacman -S postfix cyrus-sasl sudo -H -u username yaourt -S pfqueue
A postfix mellett új elemként tűnhet fel:
- pfqueue, amely egy queue nézegető program, hibakereséshez kiváló
- libsasl2, amellyel az smtp autentikációt fogjuk kezelni
- libsasl-modules, amely a sasldb kezelésének ismeretét hordozza magában
- sasl2-bin, amely a parancssoros programokat adja, pl. az adatbázis fájl kezeléséhez
A postfix beállításait két fájlban találjuk: /etc/postfix/main.cf és /etc/postfix/master.cf. A main.cf tartalmazza a postfix beállításait, míg a master.cf a postfix belső folyamatainak beállításait.
Először a main.cf-ben állítsuk be a legfontosabb paramétereket: hálózat, továbbítások, adatforrások (ezeket később vázoljuk), stmp szerver autentikácó, smtp szerver ellenőrzési paraméterek:
# NETWORK myhostname = smtp.szerverem.hu myorigin = /etc/mailname mydestination = smtp.szerverem.hu, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 inet_interfaces = all inet_protocols = ipv4 # MAPS mailbox_size_limit = 0 recipient_delimiter = + relay_recipient_maps = local_transport = error local_recipient_maps = transport_maps = hash:/etc/postfix/transport alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # TUNING default_destination_concurrency_limit=100 default_destination_recipient_limit=100 default_process_limit=300 smtp_mx_session_limit=200 smtpd_client_connection_count_limit=200 smtp_destination_concurrency_limit=100 maximal_backoff_time = 1000s minimal_backoff_time = 300s # SMTP AUTH RULES smtpd_helo_required = yes smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain smtpd_recipient_restrictions = reject_non_fqdn_sender, reject_non_fqdn_recipient, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination #STMPD AUTH SETTINGS smtpd_sasl_type = cyrus smtpd_sasl_path = smtpd smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = szerverem.hu smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes disable_vrfy_command = yes
A permit_mynetworks akár el is hagyható, legalábbis egy hanyagabb hálózatban veszélyes is lehet. Amire figyelned érdemes, az az smtpd_sasl_local_domain paraméter, illetve annak értéke. Később meglátod, hogy miért.
Továbbiakban a postfix folyamatait állítjuk be:
smtp inet n - - - - smtpd 26 inet n - - - - smtpd submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=example.tld -o header_checks= -o body_checks= -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_sasl_tls_security_options=noanonymous smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous -o smtpd_sasl_local_domain=example.tld -o header_checks= -o body_checks=
Figyeld meg, hogy itt is megjelenik az smtpd_sasl_local_domain paraméter.
Most pedig állítsuk be az smtpd hitelesítéshez szükséges sasl paramétereket. Az /etc/postfix mappában hozzunk létre egy könyvtárt: sasl.
mkdir /etc/postfix/sasl
A sasl könyvtár fogja tartalmazni az smtp authentikáció paramétereit. Itt hozzunk létre egy smtpd.conf fájlt:
touch /etc/postfix/sasl/smtpd.conf
Az smtpd.conf fájl tartalma:
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 allow_plaintext: true
Hozzuk létre a sasldb adatbázist, amely egyébként alapértelmezetten az /etc/sasldb fájl. Az adatbázis kezelését parancssoros programokat teszik lehetővé. A legalapvetőbb feladatok:
- új user felvétele
- user módosítása
- user törlése
Állítsuk be a sasl adatbázist:
saslpasswd2 -c -u
szerverem.hu
$user chown postfix:postfix /etc/sasldb2 chmod 660 /etc/sasldb2
Kapcsolók jelentése:
- -c kapcsoló: create,
- -u kapcsolo: realm (domain, tartomány)
A -u kapcsoló a lényeg. Korábban már említettem az smtpd_sasl_local_domain postfix paramétert: annak értéke kerüljön ide. Mindig. Ha az smtpd_sasl_local_domain értéke humbug.hu, akkor az userek kezelésénél a -u humbug.hu kapcsolót kell használnod. Miért fontos? Mert az adatbázis fájlban több alkalmazás adatait tudod tárolni, és az első elválasztó/csoportosító megoldás a realm megadása.
A saslpasswd2 bekéri a jelszót kétszer, és nagyjából ennyi az összes feladatod.
Tulajdonképpen el is készültél, a programok telepítve, beállítva, az első usered rögzítve. Indulás előtt még meg kell tenned azt, hogy:
Ubuntun: az /etc/default/saslauthd fájlban a START=no értékét állítsd yes-re állítani, illetve a MECHANISMS értéke sasldb legyen (enélkül nem fog menni, mert az alapértelemezett a pam).
Arch Linuxon: az /etc/conf.d/saslauthd fájlban a “-a pam” értéket állítsd át:
SASLAUTHD_OPTS="-a sasldb -n 5 -c "
Ezután indítsd el a saslauthd démont:
#Ubuntu service saslauthd start #Arch Linux systemctl enable saslauthd systemctl start saslauthd
És itt jön az igazi cheat: ha master.cf-ben az smtp és/vagy a 26-os port chroot oszlopa “-” vagy “y” értékű, akkor az /etc/sasldb2 fájlt át kell másolnod a /var/spool/postfix/etc mappába, mert a postfix chroot-ban fut, tehát nem lát ki az igazi /etc/sasldb fájlra. Neki ekkor a /var/spool/postfix a root, ezért az itt található etc mappába kell átmásolnod a sasldb fájlt.
A másik megoldás az lehet, ha a chroot oszlop értékét “n”-re állítod, és akkor nem kell ezzel foglalkoznod:
smtp inet n -
n
- - smtpd 26 inet n -
n
- - smtpd
Én ezt választottam.
Ezután elindíthatod a levelezőszervert is:
#Ubuntu service start postfix #Arch Linux systemctl enable postfix systemctl start postfix
Smtp teszt
Smtp kapcsolatot (akár autentikációs, akár küldést) a swaks programmal tudsz a legjobban tesztelni.
Autentikációs teszt:
swaks --server szerverem.hu --port 26 --auth PLAIN --auth-user smtpUsername --auth-password smtpuserPassworrd --quit-after AUTH
Teszt levélküldés:
swaks --server szerverem.hu --port 26 --auth PLAIN --auth-user smtpuserName --auth-password smtpuserPassword --to to@toDomain.hu --from from@fromDomain.hu