Začínáme s RainLoop
Nevýhody RainLoop, které jsem objevil:
- Systémové složky jsou vždy nahoře, ostatní pod čarou. Pokud má systémová složka i podsložku, ta se také zobrazí až dole, je to zvláštní, ale dá se na to zvyknout.
- Plugin pro změnu hesla v SQL existuje, rozchodil jsem ho, ale je problematická kontrola složitosti hesla. Je to hardcoded v RainLoopu a je potřeba to ručně přepsat tak, aby to odpovídalo postfixadminu. Pokud by byl zájem, vykuchám to a zveřejním, ale je potřeba počítat s tím, že při případné aktualizaci se to přepíše.
- Nekonfigurovatený interval zjišťování zpráv, 2 minuty doručená pošta a nějakých 5–7 minut ostatní složky.
- V kontaktech nelze vytvářet skupiny.
Pustíme se tedy do instalace:
# yum install -y unzip # mkdir /var/www/mail.testemail.cz/rainloop # cd /var/www/mail.testemail.cz/rainloop # curl -O https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip # unzip rainloop-community-latest.zip # chown -R apache:apache . # find . -type d -exec chmod 750 {} \; # find . -type f -exec chmod 640 {} \; # cd ~
Tím je RainLoop stažený a má nastavena potřebná oprávnění. V konfiguraci/etc/httpd/conf.d/mail.testemail.cz.conf
změníme:
DocumentRoot /var/www/mail.testemail.cz/rainloop
a obnovíme nastavení
systemctl reload httpd
V dalším kroku by nás opět pozlobil SELinux, nastavíme oprávnění na složku data
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/mail.testemail.cz/rainloop/data(/.*)?" # restorecon -R -v /var/www/mail.testemail.cz/rainloop/data/
Nyní přejdeme v prohlížeči na adresu https://mail.testemail.cz/?admin
a přihlásíme se výchozím jménem admin a heslem 12345. V horní čísti máme odkaz na změnu hesla, tak jej použijeme. Pod odkazem General můžeme nastavit jazyk. Dále uvedu postup pro českou verzi, ale určitě není problém nastavit to stejné i v angličtině.
Nastavení
Přejdeme do nastavení Domény a smažeme pomocí ikonek košů předdefinované záznamy (pokud nechceme nějaký použít). Můžeme Přidat sedoménu a nastavit následujícím způsobem:
Název: testemail.cz IMAP Server: mail.testemail.cz Zabezpečení: STARTTLS Port: 993 SMTP Server: mail.testemail.cz Zabezpečení: STARTTLS Port: 587 Zatrhnout: Použivat authentikaci
Nyní klikneme na SIEVE konfigurace a nastavíme následovně
Zatrhnout: Povolit SIEVE skripty Zatrhnout: Povolit vlastní uživatelské skripty Server: mail.testemail.cz Port: 4190 Zabezpečení: STARTTLS
Pokud nyní vyzkoušíme test, tak zjistíme, že nic nefunguje. Nebudu vás zbytečně trápit a rovnou vám prozradím, že se ozval SELinux, který blokuje připojení Apache na porty poštovních služeb, takže si nastavení upravíme. Nejdříve si v terminálu zapneme výpis auditu
# tail -f /var/log/audit/audit.log
a vyzkoušíme znovu test ve webovém rozhraní – dostaneme několik řádků výpisu, z nichž ty zajímavé vypadají takto:
type=AVC msg=audit(1495350178.443:3579): avc: denied { name_connect } for pid=15074 comm="httpd" dest=143 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:pop_port_t:s0 tclass=tcp_socket
chce to trochu zkušenosti, ale není zase takový problém dohledat, co nás zajímá. Zkusíme si z logu vyfiltrovat vše, co nás zajímá, tedy porty 993, 587 a 4190:
# egrep "comm=\"httpd\" dest=(143|587|4190)" /var/log/audit/audit.log
a pokud vypadá výpis dobře (skládá se pouze z výše uvedených řádků, s různými porty), pošleme výstup do utility audit2allow
# egrep "comm=\"httpd\" dest=(143|587|4190)" /var/log/audit/audit.log | audit2allow -a #============= httpd_t ============== #!!!! This avc can be allowed using one of the these booleans: # httpd_can_network_connect, httpd_can_sendmail, nis_enabled allow httpd_t pop_port_t:tcp_socket name_connect; #!!!! This avc can be allowed using the boolean 'httpd_can_network_connect' allow httpd_t sieve_port_t:tcp_socket name_connect; #!!!! This avc can be allowed using one of the these booleans: # httpd_can_network_connect, httpd_can_sendmail, nis_enabled allow httpd_t smtp_port_t:tcp_socket name_connect;
Utilita nám radí, kterou volbu (boolean) můžeme nastavit, aby komunikace fungovala, ale my si vytvoříme vlastní politiku, už proto, že jedinou možností, jak pomocí booleanu povolit sieve, je povolit ‚ httpd_can_network_connect
‘, což by povolilo připojení apache k čemukoliv.
Vytvoříme si tedy novou politiku s názvem httpd_email
# egrep "comm=\"httpd\" dest=(143|587|4190)" /var/log/audit/audit.log | audit2allow -a -M httpd_email
což nám v aktuálním adresáři vytvoří dva soubory – httpd_email.te
, což je čitelný zápis a httpd_email.pp
, což je zkompilované pravidlo, které hned nainstalujeme:
# semodule -i httpd_email.pp
Po drobné komplikaci vyzkoušíme opět test a tentokrát by již mělo být vše v pořádku a konfiguraci můžeme uložit.
Další funkce
Rainloop nám nabízí také možnost správy kontaktů, která se může hodit, ale k tomu potřebuje databázi, kterou si vytvoříme
# mysql -u root -p SQL> create database rainloop; SQL>grant all privileges on rainloop.* to "rainloop"@"localhost" identified by 'tajne_heslo'; CTRL+D
a v nastavení kontaktů je povolíme a úložiště nastavíme následovně:
Typ: MySQL Dsn: mysql:host=localhost;port=3306;dbname=rainloop Uživatel: rainloop Heslo: tajne_heslo
Ještě jedna poznámka k přílohám přes webmail. Výchozí velikost souborů posílaných přes PHP je 2M, můžeme upravit volbou v souboru /etc/php.ini
, například na
upload_max_filesize = 10M
a poté reloadujeme nastavení apache
# systemctl reload httpd
Na stránce https://mail.testemail.cz/
se můžeme přihlásit na našeho uživatele (login je celá e-mailová adresa, pokud jste si to nenastavili jinak) a otestovat dle libosti.
Ještě upozorním, že výchozí maximální velikost e-mailu je v postfixu nastavena na 10M, tato hodnota lze změnit volbou message_size_limit
.U této volby je potřeba počítat s tím, že přílohy se většinou posílají kódované jako base64, což znamená, že z každého byte je použito pouze 6 bitů, takže výsledná velikost přílohy je v tomto zápisu zhruba o třetinu větší (ještě se přidávají konce řádků).
Co dál?
Tím už máme server opravdu kompletní, ale stále je co zlepšovat. Vzhledem k blížícím se prázdninám a rodinným povinnostem si nejsem zcela jistý, jestli další část stihnu dokončit do týdne, ale určitě budeme pokračovat.
Mám spoustu poznámek a námětů z diskuzí, určitě si popíšeme něco ohledně dalšího zabezpečení, například fail2ban, základní úlohy při správě serveru, hledání potíží, řekneme si něco o metrikách, které je možné (a vhodné) monitorovat a také něco málo o zálohování.