Hosting/2.-Webový-server/2.1.-Apache,-PHP-a-TLS.md

5.9 KiB

Apache HTTP Server

Konfigurace Apache HTTP Serveru se nachází v adresáři /etc/apache2/. Konfigurace virtualhostů jednotlivých subdomén je pak v podadresáři /etc/apache2/sites-available/, resp. /etc/apache2/sites-enabled/. Každý jednotlivý konfigurační soubor se týká pouze jednoho virtualhosta, resp. jedné subdomény. V případě webů běžících přímo na doméně druhého řádu jsou tyto vždy zároveň aliasovány i subdoménou www ve stejném konfiguračním souboru. Všechny virtualhosty mají nastaveno automatické přesměrovávání HTTP na HTTPS, včetně zaslání HTTP Strict Transport Security (HSTS) hlavičky.

Stejné rozdělení domén a subdomén je pak použito i u Let's Encrypt certifikátů o které žádá ACME klient acme.sh, jehož konfigurační adresář je /etc/acme-sh. Klient acme.sh má nastavenou cron úlohu pro automatickou obnovu certifikátů, která je spouštěna každý den ve 22:22.

V hlavním konfiguračním souboru Apache /etc/apache2/apache2.conf je nastavena výjimka pro URL /.well-known/acme-challenge, na které ACME protokol provádí challenge-response autentizaci. Tato lokace je tedy vždy vyjmuta z virtualhostů a aplikací na nich běžících a je spravována přímo globální konfigurací Apache.

Seznam virtualhostů

  • 000-default - Virtualhost pro subdoménu server.spotter.cz a fallback virtualhost pro celý Apache HTTP Server
  • cluster.spotter.tv
  • decidim.spotter.cz - Proxy pro LXC kontejner Decidim
  • dms.spotter.ngo - Proxy pro LXC kontejner SeedDMS
  • git.spotter.cz - Proxy pro LXC kontejner GitLab
  • jobseeker.cz - Virtualhost pro doménu jobseeker.cz a subdoménu www.jobseeker.cz
  • job.spotter.cz
  • loga.spotter.cz
  • old.spotter.tv
  • repo.spotter.cz
  • se.spotter.ngo - Proxy pro LXC kontejner Sahana Eden
  • spotter.cloud - Proxy pro LXC kontejner Odoo
  • spotter.cz - Virtualhost pro doménu spotter.cz a subdoménu www.spotter.cz
  • spotter.name - Virtualhost pro doménu spotter.name a subdoménu www.spotter.name
  • spotter.ngo - Virtualhost pro doménu spotter.ngo a subdoménu www.spotter.ngo
  • spotter.sk - Virtualhost pro doménu spotter.sk a subdoménu www.spotter.sk
  • spotter.tv - Virtualhost pro doménu spotter.tv a subdoménu www.spotter.tv
  • trend.spotter.cz
  • trendspotter.cz - Nevyužita
  • voda.spotter.cz - Proxy pro LXC kontejner Decidim

Pro výpis jednotlivých prezentací a aplikací, viz stránku Weby a domény.

Funkce a zabezpečení Apache

V Apache HTTP Serveru jsou aktivní následující moduly

  • access_compat, alias, auth_basic, authn_core, authn_file, authz_core, authz_host, authz_user, autoindex, brotli, deflate, dir, env, expires, filter, headers, http2, mime, mpm_event, negotiation, proxy, proxy_fcgi, proxy_http, reqtimeout, rewrite, setenvif, socache_shmcb, ssl, status, wsgi

Apache server neposílá hlavičku s informací o verzi. OpenSSL je nastaveno pro podporu moderních a mainstreamově používaných protokolů a šifer následnovně:

  • Verze OpenSSL: 1.1.1
  • Podporované protokoly: TLSv1.2, TLSv1.3
  • Podporované sady šifer: ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
  • Vynucení preferencí šifer serveru: Ano
  • Podpora komprese: Ne
  • OCSP stapling: Ano

Výsledek Qualys SSL testu: SSL_Server_Test__server.spotter.cz__Powered_by_Qualys_SSL_Labs_.pdf

PHP

PHP 7.4 interpret běží v samostatném manažeru procesů PHP-FPM a nesdílí tak paměťový prostor Apache HTTP Serveru, jako by tomu bylo v tradičním nastavení s mod_php7. Apache HTTP Server komunikuje s PHP-FPM přes FastCGI rozhraní zprostředkované pomocí mod_proxy_fcgi a unixových socketů v adresáři /run/php/. Hlavní konfigurační soubor pro PHP-FPM je /etc/php/7.4/fpm/php.ini a jednotlivé fondy procesů jsou definovány konfiguračními soubory v /etc/php/7.4/fpm/pool.d/. V současnosti jsou zde nastaveny tři fondy s 16 dynamicky vytvářenými PHP procesy - vmail pro Roundcube, cloud pro NextCloud a www pro WordPress a ostatní weby.

Funkce a zabezpečení PHP

V PHP-FPM jsou aktivní následující rozšíření

  • bcmath, bz2, calendar, ctype, curl, dba, dom, exif, fileinfo, ftp, gd, geoip, gettext, gnupg, iconv, imagick, imap, intl, json, ldap, mbstring, mysqli, mysqlnd, opcache, pdo, pdo_dblib, do_mysql, pdo_pgsql, pdo_sqlite, pgsql, phar, posix, readline, shmop, simplexml, soap, sockets, sqlite3, sysvmsg, sysvsem, sysvshm, tokenizer, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, zip

PHP neposílá hlavičku s informací o verzi. Funkce spouštění externích procesů jsou zakázány. Odesílání mailů funkcí mail() a jejími deriváty je logováno do souboru /var/log/phpmail.log.

Výčet některých nastavení PHP:

  • max_execution_time = 600
  • max_input_time = 600
  • max_input_vars = 5000
  • memory_limit = 128M
  • post_max_size = 16M
  • upload_max_filesize = 16M
  • max_file_uploads = 100
  • disable_functions = pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wifcontinued, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_get_handler, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, pcntl_async_signals, exec, passthru, popen, proc_open, shell_exec, system