Přeskočit obsah

Proxy server

Nejsnazší cesta je stažení předem připravené distribuce nginx ze stránek DataLite, je to nejnovější verze nginx obsahující různé bezpečnostní záplaty s nejnovější verzí knihovny OpenSSL. Tuto distribuci běžně dodáváme našim zákazníkům.

URL odkaz se soubory: https://tsm-proxy-distro.datalite.cloud/

Jsou připraveny dvě verze:

Pro stažení a instalaci balíčku se v terminálu přepněte do složky /opt, zadejte následující příkazy (pozor: příklad je pro verzi CentOS 7.x):

1
2
3
cd /opt
curl -OL https://tsm-proxy-distro.datalite.cloud/proxy-tsm-centos7-opt_tsm.tgz
tar zxf proxy-tsm-centos7-opt_tsm.tgz

Distribuce proxy serveru se rozbalí do složky /opt/tsm/proxy.

Konfigurace sdílených knihoven

Pozor

Jedná o kompilovanou distribuci nginx s pevně nastavenými cestami pro dynamické knihovny. Je potřeba nastavit cestu k těmto knihovnám přes proměnou LD_LIBRARY_PATH. V OS CentOS 7.x nastavení proměnné nefunguje správně a musí se explicitně přidat konfigurace do adresáře /etc/ld.so.conf.d!

V CentOS 7.x je potřeba vytvořit pod root soubor /etc/ld.so.conf.d/tsm-proxy.conf s následujícím obsahem:

1
2
3
4
5
6
7
8
9
/opt/tsm/proxy/luajit/lib
/opt/tsm/proxy/libs/openssl/lib
/opt/tsm/proxy/libs/zlib/lib
/opt/tsm/proxy/libs/libxml2/lib
/opt/tsm/proxy/libs/aio/lib
/opt/tsm/proxy/libs/openldap/lib
/opt/tsm/proxy/libs/jansson/lib
/opt/tsm/proxy/libs/krb5/lib
/opt/tsm/proxy/libs/libjwt/lib

A následně nahrát nastavení knihoven, v terminálu spusťte:

1
ldconfig

Vyzkoušíme, že nastavení funguje, a nginx proxy je správně připravena, v terminálu spustíme:

1
2
cd /opt/tsm/
./proxy/nginx/sbin/nginx -t

Pokud je vše správně nastaveno, na výpisu se objeví:

1
2
nginx: the configuration file /opt/tsm/proxy/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/tsm/proxy/nginx/conf/nginx.conf test is successful

Nastavení SSL certifikátu

Nejvyššího možného zabezpečení aplikace TSM lze dosáhnout zapnutím HTTPS komunikace.

Předpokládá se existence tří souborů ve složce /opt/tsm/ssl:

  • server.crt
  • server.key
  • dhparam.pem (lze vygenerovat pomocí příkazu: openssl dhparam -out /opt/tsm/ssl/dhparam.pem 2048)

Pokud používáte interní certifikační autoritu (Root CA), je potřeba přidat ještě soubor:

  • root-ca.crt

Soubor /opt/tsm/proxy/nginx/conf/ssl.conf

Vytvořte soubor /opt/tsm/proxy/nginx/conf/ssl.conf s následujícím obsahem (zkontrolujte pozorně cesty k souborům!):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
ssl_certificate         /opt/tsm/ssl/server.crt;
ssl_certificate_key     /opt/tsm/ssl/server.key;
ssl_trusted_certificate /opt/tsm/ssl/root-ca.crt;
ssl_dhparam             /opt/tsm/ssl/dhparam.pem;

ssl_session_timeout   4h;
ssl_session_cache     shared:SSL:20m;
ssl_session_tickets   off;
ssl_ecdh_curve        X25519:P-521:P-384;

ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

Upravte soubor /opt/tsm/proxy/nginx/conf/nginx.conf následujícím způsobem:

  • v místě, kde je:
1
2
3
4
        server {
            listen   *:80 default_server;
            ...
        }
  • upravte takto:
1
2
3
        server {
            listen   *:443 ssl http2;
            include  ssl.conf;
  • přidejte novou sekci server s přesměrováním veškeré HTTP komunikace na HTTPS, zvolte buď temporary redirect (jak je v ukázce return 307), případně permanent redirect (return 301):
1
2
3
4
5
        server {
            listen *:80 default_server;
            server_name _;
            return 307 https://$host$request_uri;
        }

Standardní port 80 a 443 pro neprivilegovaného uživatele

Pokud nginx poběží pod non-root uživatelem na portu nižším než 1024, a to je doporučeno, je potřeba nastavit CAP pravidlo binárnímu programu nginx, v terminálu pod root uživatelem spusťte příkaz:

1
setcap 'cap_net_bind_service=+ep' /opt/tsm/proxy/nginx/sbin/nginx