Document toolboxDocument toolbox

White paper

SOFiE umožňuje bezpečně sdílet soubory (seskupené do zásilky) se zákazníky a dodavateli. Pomocí interních a externích detekčních nástrojů dokáže zablokovat nebezpečný nebo nepovolený obsah.

Architektura aplikace

Funkce aplikace zajišťuje několik spolupracujících komponent. Jde jak o komponenty interní (námi napsané) tak o komponenty externí (napsané třetími stranami).

Interními komponentami jsou:

  • webový server umožňující uživatelům nahrávat a stahovat soubory a administrátorům spravovat aplikaci a její nastavení

  • “worker” proces zajišťující spouštění detekčních nástrojů, odesílání e-mailů a dalších úloh na pozadí

  • “scheduler” proces spouštějící pravidelné úlohy (kontrolu časových limitů, platnosti zásilek apod.)

Interní komponenty jsou napsané v jazyce Java.

Externími komponentami jsou:

  • open-source HTTP server nginx fungující jako reverzní proxy pro webový server

  • externí detekční nástroje jako např. ClamAV, Eset, Kaspersky, FortiSandbox a další (nejsou součástí standardní dodávky aplikace)

  • PostgreSQL databáze pro ukládání dat

  • Apache Kafka server sloužící jako message broker (fronta zpráv)

Aplikace je optimalizována pro operační systémy RedHat Enterprise Linux (RHEL)/Rocky Linux/jiný kompatibilní klon verze 7, 8 nebo 9. Výchozí instalace je dostupná jen pro tyto systémy.

Webový server

Ve výchozí instalaci poslouchá na loopback rozhraní na TCP portu 9090, ze sítě je dostupný skrze nginx server. Neposkytuje přímo zabezpečenou HTTPS komunikaci, to je odpovědností nginx serveru.

Front-end webové aplikace je napsán v jazyce TypeScript s využitím knihovny React. Komunikaci s back-endovou částí aplikace probíhá pomocí HTTPS. Autentizace uživatelů je řešena JWT tokenem vytvořeným po přihlášení a uloženým v HTTP cookie.

Bezpečnost aplikace je pravidelně kontrolována podle doporučení projektu OWASP Top Ten (https://owasp.org/www-project-top-ten/).

“Worker” proces

Jde o samostatně běžící proces který neposlouchá na žádném portu. Má na starosti spouštění déletrvajících úloh na pozadí jako je např. spouštění detekčních nástrojů, odesílání e-mailů, pravidelné úlohy údržby apod. Práci kterou má proces vykonávat získává z Apache Kafka serveru do kterého mu úkoly zadávají webový server a “scheduler” proces.

“Scheduler” proces

Jde o samostatně běžící proces který neposlouchá na žádném portu. Proces spouští pravidelné úlohy potřebné pro správnou funkci aplikace (kontrola časových limitů, platnosti zásilek apod.) - úlohy běží v rámci “worker” procesu, “scheduler” mu je předává skrze Apache Kafka server.

Nginx server

Nginx funguje jako reverzní proxy pro webový server. Umožňuje TLS (HTTPS) offloading, ve výchozí instalaci s pomocí certifikační autority Let’s Encrypt.

Ukázka nasazení

Požadavky na firewall

Webový server potřebuje z internetu dostupný:

  • příchozí TCP port 443 pro webové rozhraní uživatelů a administrátorů

  • příchozí TCP port 80 pokud je ve výchozí instalaci použita certifikační autorita Let’s Encrypt

“Worker” proces potřebuje:

  • odchozí TCP port pro SMTP server (podle aktuální konfigurace aplikace)

  • odchozí UDP/TCP porty pro potřeby externích detekčních nástrojů (např. pro aktualizaci virových databází apod.)

  • odchozí TCP port 443 na server https://license.sonpo.io/ pro možnost kontroly platnosti licence

Ukládání a bezpečnost dat

Data jsou ukládána do adresářové cesty podle nastavení aplikace (výchozí adresář je /var/sofie/data). Využití vzdálených úložišť je možné v rámci příslušné konfigurace serveru (připojený iSCSI svazek, NFS svazek apod.).

Přenos dat mezi webovým prohlížečem a serverem je chráněn pomocí HTTPS.

Aplikace nepodporuje end-to-end šifrování a ve striktní podobě, ve které by server nikdy neviděl data, ho ani podporovat nemůže - server potřebuje vidět obsah zásilky, aby ho mohl zkontrolovat pomocí detekčních nástrojů. Podporováno je však šifrování při ukládání dat (“encryption at rest”). Podrobnosti o šifrování jsou k dispozici zde: https://wikisonpo.atlassian.net/wiki/spaces/SP/pages/3192389633.

Škálovatelnost a vysoká dostupnost

Při velmi vysokých požadavcích na výkon je možné horizontálně (navýšením počtu serverů) škálovat webový server, “worker” proces, nginx server a Apache Kafka server. Ostatní komponenty je možné škálovat jen vertikálně (navýšením výkonu serveru).

Vertikální škálování je oproti horizontálnímu jednoduší pro údržbu a je proto doporučeno.

Vysokou dostupnost je nutné řešit individuálně podle podmínek konkrétního nasazení aplikace.