Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Poslední nezbytnou podmínkou pro fungování TLS je samozřejmě správné nakonfigurování jednotlivých programů. Vždy je potřeba TLS zapnout (ať už jako explicitní, nebo implicitní), nastavit cesty k souborům a v neposlední řadě také definovat chování technologie.
Definicí chování se rozumí například míra povinnosti používat TLS, zapnutí/vypnutí ověřování klientů, volba šifrovacích algoritmů apod. Toto všechno se bude řídit účelem, za kterým se technologie nastavuje. Například lze povolit pouze silné šifry, čímž se však zabrání některým starším programům komunikovat. Ověřování klientů může mít zase smysl jako náhrada (nebo doplněk) autentizace při odesílání pošty z počítačů kdekoliv na světě.
Konfiguraci TLS je třeba rozdělit na dvě části – jednu pro Postfix v roli serveru (tedy pro komunikaci s klienty, příjem zpráv), druhou v roli klienta (tedy pro předávání zpráv jinam). Konfigurace může vypadat tak, že v jedné roli se TLS používat bude, kdežto v druhé nikoliv. V některých situacích to může mít smysl.
Následující kus souboru main.cf
ukazuje obě části pohromadě. Nastavuje explicitní režim TLS s nepovinným používáním:
smtp_tls_security_level = may smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache smtp_tls_loglevel = 1 smtpd_tls_security_level = may smtpd_tls_cert_file = /etc/ssl/certs/moje.domena.crt smtpd_tls_key_file = /etc/ssl/private/moje.domena.key smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache smtpd_tls_loglevel = 1
Parametr smtp_tls_security_level
říká, jak se bude přistupovat k používání TLS. Výchozí hodnota je none
(vypnuto), may
znamená dobrovolné používání TLS. Lze použít také povinné (encrypt
), kdy je vyloučena nešifrovaná komunikace, případně ještě vyšší verze povinného šifrování, například verify
(kontrola platnosti certifikátu, jeho důvěryhodnosti a názvu). Toto se zde týká klientské části, tedy předávání zpráv na jiný server. Podobný smysl má u serverové části parametr smtpd_tls_security_level
.
smtp_tls_session_cache_database
, resp. smtpd_tls_session_cache_database
, je umístění a způsob uložení cache TLS relací. O ně se stará služba tlsmgr
, která je ukládá nastaveným způsobem. Vhodné je uložení do stromu, vzhledem k poměrně velkému objemu dat. Využití cache není povinné, zvyšuje však výkon. Standardní životnost objektů je 1 hodina (lze změnit pomocí smtp_tls_session_cache_timeout
a smtpd_tls_session_cache_timeout
).
smtp_tls_loglevel
a smtpd_tls_loglevel
určují úroveň záznamu souvisejícího s TLS. Běžně je vhodná úroveň 1, při které se zaznamenávají informace o sestavování relací a o certifikátech. Vyšší úrovně se hodí při ladění, úplné vypnutí (úroveň 0, je výchozí) je obvykle zbytečné.
V serverové části ještě zbývají dva okruhy parametrů. Jednak jsou to cesty k certifikátu a klíči (smtpd_tls_cert_file
a smtpd_tls_key_file
), které se nastaví samozřejmě podle umístění těchto souborů. Poslední je smtpd_tls_received_header
, který při aktivaci způsobí, že se do každé zprávy vloží hlavička s informací o použití TLS, včetně údajů o verzi a použitých algoritmech.
Uvedená konfigurace zajišťuje použití šifrování vždy, když je to možné. Pro příjem zpráv záleží na nastavení klienta, pro předávání jinam zase na možnostech cílového serveru. Toto nastavení nekontroluje totožnost protistran (proto nezaručuje, že se zprávy předávají správnému serveru nebo že se přebírají od správného klienta) ani nevynucuje použití šifrování.
Tyto nedostatky lze odstranit zvýšením úrovně bezpečnosti. Je však třeba si uvědomit, že toto zvýšení je na úkor kompatibility, protože odřízne část komunikujících protistran. Úplně nejjednodušší věc je nastavení přístupu ke kořenovým certifikátům certifikačních autorit. Tyto certifikáty je však potřeba mít nejdřív nainstalované; mohou být v samostatném balíčku, nezávisle na technologii TLS i na programech, které TLS používají.
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Toto se použije, pokud jsou certifikáty v jednom společném souboru. Pokud by se používaly samostatné soubory, definoval by se adresář pomocí smtp_tls_CApath
(toto řešení má různá úskalí, například nutnost umístit certifikáty dovnitř prostředí chroot
, pokud se toto prostředí používá). Nadefinuje-li se takto přístup ke kořenovým certifikátům, lze kontrolovat certifikáty serverů, na něž se konfigurovaný server připojuje. Samotná kontrola ovšem zatím nic neznamená, protože se její výsledky nevyužívají – pouze se zapisují do logu.
Skutečný smysl kontrola získává až s volbou přísnějšího režimu. Nestačí jen vynutit šifrování pomocí encrypt
, nýbrž je potřeba zapnout i ověřování totožnosti:
smtp_tls_security_level = verify
Tím se dosáhne toho, že se při předávání zpráv bude ověřovat platnost certifikátu (časová, nepřítomnost na revokačním seznamu), jeho důvěryhodnost (musí být podepsán certifikační autoritou, jejíž kořenový certifikát je ve výše popsaném úložišti) a také shodu názvu serveru v certifikátu se skutečným názvem. Shoda se ve výchozím stavu testuje podle doménového názvu serveru, chování lze ale změnit pomocí smtp_tls_verify_cert_match
(například nastavením na konkrétní názvy).
Úroveň verify
není stále ještě dostatečně bezpečná. Právě proto, že se může název serveru zjišťovat z DNS nešifrovaným kanálem, hrozí podvržení odpovědi. Proto existuje ještě úroveň secure
, která využívá pouze informací dostupných přímo z konfigurace pro servery, kam se pošta předává (tzv. next hop).
Pro funkci běžného internetového poštovního serveru nejsou vyšší úrovně než may
vhodné (dokonce to RFC 2487 zakazuje), protože odříznou mnoho serverů nepodporujících šifrování nebo nepoužívajících důvěryhodné certifikáty.
Další možností zvýšení bezpečnosti – tentokrát v trochu jiném stylu – je zákaz autentizace bez použití TLS. O co jde? Pokud si vzpomenete na díl věnovaný autentizaci klientů, tak jedním ze zásadních problémů je uložení a přenos hesla. Pokud je heslo uloženo zašifrované, výrazně to omezuje použitelnost různých autentizačních metod – a naopak, pro plnou škálu je potřeba mít heslo uloženo nezašifrované. Pokud se používá TLS, lze posílat heslo klidně v otevřeném tvaru (plain), protože jde po šifrovaném kanálu. Čili může být uloženo nezašifrované bez negativních dopadů na bezpečnost ověřování.
smtpd_tls_auth_only = yes
Takto se zajistí, že ověřování uživatele bude fungovat jen v případě, že se komunikuje přes TLS. Při nešifrované komunikaci nelze uživatele ověřit, navíc server takovou možnost ani nebude nabízet.
Klientské certifikáty nejsou běžnou záležitostí, nicméně v některých případech je lze s výhodou použít. Jde v zásadě o to, že kromě obvyklého prokázání totožnosti ze strany serveru se totéž provádí i ze strany klienta. Může to být výhodné například v případě, že se pro odesílání zpráv využívá SMTP server nedisponující databází uživatelů a současně je potřeba odesílat zprávy z různých internetových adres. Pak je klientský certifikát zajímavou možností, jak snadno zajistit ověřování a současně neotevřít server spammerům.
smtpd_tls_ask_ccert = yes smtpd_tls_req_ccert = yes relay_clientcerts = hash:/etc/postfix/relay_clientcerts smtpd_client_restrictions = permit_mynetworks, permit_tls_clientcerts, reject
Tato konfigurace způsobí, že bude server vyžadovat klientské certifikáty (smtpd_tls_ask_ccert
je samotné zapnutí požadavku, smtpd_tls_req_ccert
vynucení použití certifikátu) a povolí pouze připojení klientů z definované vlastní sítě (obvykle jen místního stroje) anebo klientů s certifikátem uvedeným v seznamu oprávněných certifikátů. Ten je definován přes parametr relay_clientcerts
, v tomto případě se jedná o hešovou mapu obsahující dvojice fingerprintů certifikátů a jejich názvů (název se zde nekontroluje, má pouze procesní význam a může také sloužit pro informativní účely).
Jistě každého napadne, že lze klientské certifikáty kombinovat s ověřováním uživatelů, a to jak ve smyslu splnění obou podmínek (tj. certifikát + jméno a heslo), tak i kterékoli z nich. Použití výše uvedené definice smtpd_client_restrictions
společně s smtpd_recipient_restrictions
obsahujícím ověření uživatele je první varianta; pokud se permit_tls_clientcerts
přesune do smtpd_recipient_restrictions
před nebo za permit_sasl_authenticated
, jde o variantu druhou.
Má-li naopak server klientský certifikát někam posílat (což je ještě méně běžný případ než ten předchozí), je potřeba nadefinovat patřičné parametry smtp_tls_cert_file
a smtp_tls_key_file
, kde budou uvedeny cesty k souborům s certifikátem a klíčem.
Přestože běžně není důvod konfigurovat na poštovním serveru SMTP komunikaci pomocí implicitního TLS (na samostatném portu), protože i velmi staré programy (např. Outlook Express) zvládají TLS explicitní, někdy takový důvod nastat může – typicky u nějakých jednoduchých jednoúčelových „odesílátek“, kde se TLS řeší přes stunnel
.
Řešení implicitního TLS spočívá v úpravě souboru master.cf
, protože je potřeba přidat novou službu:
smtps inet n – n – – smtpd -o smtpd_tls_wrappermode=yes
Tím se spustí nová instance služby smtpd
na portu 465, která poběží ve „wrapperovém“ režimu a bude umožňovat implicitní TLS. V případě potřeby změnit číslo portu se smtps
nahradí potřebným číslem (třeba 10465).
V případě programu Dovecot je konfigurace výrazně jednodušší než u Postfixu. Je jen jedna strana komunikace a také zde není tolik konfiguračních možností. Základní podoba může být například takováto:
ssl = yes ssl_cert_file = /etc/ssl/certs/moje.domena.crt ssl_key_file = /etc/ssl/private/moje.domena.key
První řádek je dokonce jen pro úplnost, protože je to výchozí volba (naopak ssl = no
šifrování explicitně vypne). Další parametry pouze nastavují cestu k certifikátu a klíči. Nic dalšího už není potřeba. Na rozdíl od Postfixu zde lze použít zašifrovaný klíč a heslo poskytnout přes konfigurační parametr:
ssl_key_password = !include_try /etc/dovecot/moje.domena.kpass
Napsat heslo přímo do konfigurace není bezpečné, protože konfigurační soubor bývá přístupný všem uživatelům. Lepší je dát ho do samostatného souboru, ke kterému má přístup jen root – do parametru ho vloží direktiva !include_try
. Další možnost je spouštět Dovecot s parametrem -p
a vložit heslo v příkazové řádce. To je ale dost nepohodlné a hodí se to spíš pro testování než pro běžný provoz.
Implicitní TLS se u Dovecotu nastavuje velmi jednoduše – prostě se rozšíří seznam protokolů:
protocols = imap imaps pop3 pop3s
Toto zapne implicitní TLS pro oba komunikační protokoly. Běží na svých standardních portech (993, resp. 995), to lze případně změnit v sekci protokolu takto:
protocol imap { ssl_listen = *:10993 }
V případě potřeby používat klientské certifikáty se tato funkcionalita zapne a nastaví se také soubor s certifikáty certifikačních autorit (který bude obsahovat certifikáty těch autorit, jimiž podepsané certifikáty budou považovány za platné; součástí souboru může být revokační seznam):
ssl_verify_client_cert = yes ssl_ca_file = /etc/ssl/certs/ca-certificates.crt
Tím se ale jen zapne ověřování, nicméně není vyžadováno. Pro povinné použití se musí ještě přidat další parametr, a to do sekce auth
:
auth default { ssl_require_client_cert = yes }
Záznam událostí okolo TLS má pouze dvě úrovně. Výchozí je stručná, v případě potřeby něco zkoušet a ladit lze použít verbose_ssl = yes
pro zapnutí „ukecaného“ režimu. Další zajímavou věcí v souvislosti s TLS je možnost vypnout posílání hesel v otevřeném tvaru po nešifrovaných kanálech:
disable_plaintext_auth = yes
Možnost využívat taková hesla přes TLS kanál nebo z místní adresy zůstává zachována.
U obou programů lze pro TLS nastavovat ještě další vlastnosti – konkrétně například množinu povolených šifer. To je ale poměrně složitá problematika, která by si zasloužila samostatný článek (obecný, nesouvisející jen s poštou), proto zájemce odkazuji na informační zdroje zaměřené přímo na tuto problematiku.
Dovecot kromě komponent pro přístup k poště a pro autentizaci obsahuje ještě jednu velmi výkonnou součást, která se zatím v akci vůbec neobjevila. Je to tzv. doručovací agent, který vstoupí do hry jako poslední článek v řetězci při doručování pošty. Škála toho, co dokáže, je velmi široká – ale o tom až příště.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Zajímalo by mě, jestli Postfix umí vystupovat jako implicitní TLS klient.Pokud vím, tak neumí.
Vzhledem k tomu, že legislativa donutila úřady pořídit šifrovací zařízení, chtěl bych, aby je naši úředníci mohli použít pro přístup do poštovních schránek přes IMAP.
Díval jsem se do dokumentace Dovecotu, a nikde jsem nenašel, jak spárovat klientský certifikát a přihlašovací jméno uživatele. Vzpomínám si na hádání loginu z položek DN nebo SAN certifikátu, ale to obecně nefunguje.
I z toho, co jste napsal, mi vyšlo, že sice dokážu ověřit, že klient disponuje certifikátem vydaným autorizovaným vydavatelem (v našem státě to znamená, že byl vydán existující a správné osobě), ale už nezjistím, kdo se mi to přihlašuje.
Tudíž potřebuji namapovat otisk certifikátu na konkrétního uživatele.
Protože mám fyzické (nevirtuální) uživatele a používám PAM, napadlo mě použít některý z pokusných modulů, které autentizaci řeší porovnáním certifikátu (respektive ověřením podpisu nesmyslu) s certifikátem uloženým v domovském adresáři uživatele.
Jenže jsem nezjistil, jak a jestli umí Dovecot poskytnout certifikát klienta z TLS relace PAMu. Navíc dotyčné moduly často operují lokálním šifrovacím zařízením, nikoliv s certifikátem ze sítě. (Je celkem možné, že PAM na tohle nemá standardizované rozhraní.)
Zkoušel někdo něco takového?
Jenže stejně nepoužitelné mohou být i ostatní hodnoty. Proto rozumné systémy se orientují podle otisku certifikátu. Navíc, když si certifikáty nevydáváte sám, tak se může stát, že přijde někdo, kdo bude mít zrovna v položce, kterou jsem si vybral kolizní hodnotu.
Ještě mám jeden nápad:
Klient použije certifikát v TLS a do přihlašovacího dialogu vyplní uživatelské jméno.
PAM by vzal název účtu z přihlašovacího jména a nejprve jako heslo by použil certifikát. Vzor certifikátu by byl v domovském adresáři nebo v LDAPu. Teprve v druhém kole by jako heslo použil heslo z přihlašovacího dialogu.
Ale nevím, jak moc to znásilňuje PAM a otravuje uživatele.