Preskoči na vsebino

Nastavitve piškotkov

Za vsako vrsto izberite, katere piškotke dovolite. Svojo izbiro lahko kadar koli spremenite prek povezave Nastavitve piškotkov na dnu vsake strani. Izjava o zasebnosti

Nujni

Vedno vklopljeno

Potrebni so za prijavo, shranjevanje košarice in pomnjenje Vaših izbir. Vedno so vklopljeni.

Kateri piškotki?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša seja in ohranjanje prijave
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cen z DDV ali brez DDV
  • wok_cookies: Vaša izbira glede piškotkov, 12 mesecev

Meri, kateri oglas vodi do obiska ali naročila, da ne plačujemo za oglase, ki ne prinesejo ničesar.

Kateri piškotki?
  • Google Ads prek Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, oglasi v ChatGPT
  • wok_aff: prek katerega partnerja ste prišli k nam (partnerski program), 60 dni

4,6

Država in jezik

Vsaka država ima svojo spletno stran, s cenami in DDV za to državo.

Prikaži

Caddy, HSTS in security.txt

Modul 7: Domena, spletni strežnik in https · Čas branja: 12 minut

Učni cilj: Po tej lekciji boste znali uporabljati Caddy kot preprost spletni strežnik s samodejnim https, nastaviti HSTS in najpomembnejše varnostne glave (v Caddy in nginx), ne da bi Vaše spletno mesto postalo nedosegljivo, ter objaviti veljavno datoteko security.txt.

Ključni pojmi: Caddy, Caddyfile, samodejni https, reverse_proxy, file_server, header, HSTS (Strict-Transport-Security), max-age, includeSubDomains, preload, X-Content-Type-Options, frame-ancestors, Referrer-Policy, security.txt, Contact, Expires, /.well-known/

Caddy: https brez skrbi

V lekcijah 7.2 in 7.3 ste z nginx in certbot postavili spletno mesto s https. To sta dva programa, nekaj datotek in časovnik. Caddy vse to opravi sam: je spletni strežnik z vgrajenim odjemalcem ACME. Če je ime navedeno v konfiguraciji, kaže na strežnik in sta vrati 80 in 443 dosegljivi, Caddy sam pridobi certifikat, ga pravočasno obnovi in preusmeri http na https.

Caddy je v repozitoriju paketov Debiana in Ubuntuja (nekoliko starejša različica); razvijalci ponujajo tudi lasten repozitorij apt z najnovejšo različico, z lastnim ključem in Signed-By kot v lekciji 4.1. V modulu 9 Caddy teče kot vsebnik za Vaše storitve Docker (lekcija 9.4). Tukaj ga uporabljate kot običajno storitev.

anna@web1:~$ sudo apt install caddy
anna@web1:~$ systemctl status caddy

Na vratih 80 in 443 uporabljajte bodisi nginx bodisi Caddy, ne obeh: na posameznih vratih lahko posluša le en program.

Datoteka Caddyfile

Konfiguracija je v /etc/caddy/Caddyfile. Statično spletno mesto in aplikacija za povratnim posrednikom (reverse proxy):

example.com, www.example.com {
	root * /var/www/example.com
	file_server
	encode zstd gzip
}

app.example.com {
	reverse_proxy 127.0.0.1:3000
}

To je vse. Caddy samodejno posluša na IPv4 in IPv6, zahteva certifikate za vsa tri imena, preusmeri http na https in pri reverse_proxy samodejno posreduje glavi X-Forwarded-For in X-Forwarded-Proto (kar ste v nginx naredili ročno, lekcija 7.2).

Preizkus in ponovno nalaganje potekata kot pri nginx:

anna@web1:~$ caddy validate --config /etc/caddy/Caddyfile
Valid configuration
anna@web1:~$ sudo systemctl reload caddy
anna@web1:~$ sudo journalctl -u caddy -f

V dnevniku (journal) vidite pridobivanje certifikatov. Če gre kaj narobe, je tam naveden razlog: običajno isti kot pri certbot (vrata 80 zaprta, ime kaže drugam, IPv6 ne deluje; lekcija 7.3).

HSTS: naj si brskalnik zapomni, da gre za https

Preusmeritev s http na https ima eno šibko točko: prva zahteva prek http še vedno poteka nešifrirano. Nekdo v istem omrežju jo lahko prestreže in obiskovalca zadrži na http. HSTS (HTTP Strict Transport Security, RFC 6797) to reši. Vaše spletno mesto prek https pošlje to glavo:

Strict-Transport-Security: max-age=31536000

Brskalnik si nato eno leto (31.536.000 sekund) zapomni, da je to ime dovoljeno le prek https. Če obiskovalec pozneje vtipka http://, brskalnik sam spremeni naslov v https, še preden karkoli steče po omrežju. Glavo HSTS, ki pride prek http, brskalnik prezre; velja le prek https.

Obstaja pa tudi slaba stran. Če si je brskalnik zapomnil HSTS in naleti na napako certifikata (potekel, napačno ime), obiskovalec ne dobi gumba, s katerim bi kljub temu nadaljeval. Vaše spletno mesto je za te obiskovalce nedosegljivo, dokler certifikat ni v redu. Zato:

  1. HSTS vklopite šele, ko https deluje povsod in obnavljanje poteka samodejno (lekcija 7.3).
  2. Začnite s kratkim max-age, na primer en dan (86400), in ga postopoma povečujte do enega leta.
  3. Bodite previdni z includeSubDomains: to velja za vsako poddomeno, tudi za staro poddomeno z napravo ali storitvijo brez veljavnega certifikata.
  4. preload zahteva vpis na seznam, ki je vgrajen v brskalnike (hstspreload.org). Za to med drugim zahtevajo max-age vsaj eno leto, includeSubDomains in https na vseh poddomenah. Izbris s seznama traja mesece. To storite le, če ste prepričani, da bo celotna domena za vedno na https.

Druge varnostne glave

Poleg HSTS obstaja nekaj glav, ki z malo truda veliko pomagajo:

GlavaProti čemuZačetna vrednost
X-Content-Type-Optionsbrskalnik ugiba, kaj je datoteka, zato se lahko naložena "slika" izvede kot skriptanosniff
Content-Security-Policy: frame-ancestors (ali starejši X-Frame-Options)clickjacking: drugo spletno mesto nevidno naloži Vašo stran v okvirframe-ancestors 'self' (ali X-Frame-Options: SAMEORIGIN)
Referrer-Policynaslov Vaše strani (z iskalnimi pojmi ali številkami naročil) uhaja na druga spletna mestastrict-origin-when-cross-origin

Popoln Content-Security-Policy (katere skripte in slogi se smejo naložiti) je treba prilagoditi vsakemu spletnemu mestu posebej in presega ta tečaj; začnite samo z frame-ancestors.

V Caddy jih nastavite z direktivo header v bloku spletnega mesta:

example.com, www.example.com {
	root * /var/www/example.com
	file_server
	header {
		Strict-Transport-Security "max-age=31536000"
		X-Content-Type-Options "nosniff"
		Content-Security-Policy "frame-ancestors 'self'"
		Referrer-Policy "strict-origin-when-cross-origin"
		-Server
	}
}

Caddy HSTS in teh glav ne nastavi sam; zato jih morate res dodati. -Server odstrani glavo Server. V lekciji 9.4 v enako vrsto bloka za nalogo dodate svojo glavo X-Weboke-Cursus.

V nginx iste vrstice dodate v blok server za vrata 443:

add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

always poskrbi, da se pošljejo tudi pri straneh z napako. Pazite na znano past v nginx: če je v bloku location sam en add_header, vrstice add_header iz bloka server za ta location ne veljajo več. Zato vedno preverite rezultat:

anna@laptop:~$ curl -sI https://example.com | grep -iE 'strict|nosniff|frame|referrer'
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
content-security-policy: frame-ancestors 'self'
referrer-policy: strict-origin-when-cross-origin

security.txt: tako Vam lahko nekdo prijavi ranljivost

Recimo, da nekdo na Vašem strežniku najde ranljivost, na primer odprto mapo ali zastarelo storitev. Kako ta oseba ve, koga naj opozori? Za to je namenjen security.txt (RFC 9116): majhna besedilna datoteka na stalnem mestu, https://<jouwdomein>/.well-known/security.txt.

Contact: mailto:security@example.com
Expires: 2027-10-31T23:00:00Z
Preferred-Languages: nl, en
Canonical: https://example.com/.well-known/security.txt

Pravila:

  • Contact je obvezen: naslov mailto:, https:// ali tel:, kamor prihajajo prijave. Uporabite naslov, ki ga nekdo res bere.
  • Expires je obvezen in se sme pojaviti le enkrat: datum, po katerem datoteka velja za zastarelo. RFC priporoča datum v roku enega leta. Tako ne ostane datoteka z davno pozabljenim naslovom. V koledar si zapišite, kdaj jo morate podaljšati.
  • Preferred-Languages, Canonical in Policy (povezava do Vaše politike za prijave) so neobvezni.
  • Datoteka mora biti dostavljena prek https kot navadno besedilo (text/plain, UTF-8). Staro mesto /security.txt je dovoljeno kot dodatek, a /.well-known/ ima prednost.

Namestitev pri statičnem spletnem mestu:

anna@web1:~$ sudo mkdir -p /var/www/example.com/.well-known
anna@web1:~$ sudoedit /var/www/example.com/.well-known/security.txt
anna@laptop:~$ curl -sI https://example.com/.well-known/security.txt | grep -i content-type
content-type: text/plain; charset=utf-8

Če v nginx uporabljate varovalko location ~ /\. { deny all; } iz lekcije 7.2, pred njo dodajte izjemo: location ^~ /.well-known/ { }. Za aplikacijo za povratnim posrednikom lahko v Caddy pot /.well-known/security.txt usmerite na datoteko z blokom handle in file_server.

Pogosta napaka: spletno mesto ali aplikacija, ki na vsako neznano pot odgovori z naslovno stranjo in statusom 200. Takrat security.txt "obstaja", vendar je HTML. Zato preverite tudi vsebino.

Na AlmaLinux in Rocky Linux

Caddy tam namestite iz repozitorija razvijalcev ali iz EPEL/COPR. Tako kot pri nginx mora SELinux dovoliti povratni posrednik (setsebool -P httpd_can_network_connect 1). Caddyfile in glave so enaki.

Povzetek

  • Caddy sam poskrbi za certifikate, obnavljanje in preusmeritev na https; reverse_proxy samodejno posreduje prave glave.
  • HSTS poskrbi, da si brskalniki zapomnijo, da je Vaše spletno mesto le na https; max-age povečujte postopoma, bodite previdni z includeSubDomains in zelo previdni s preload.
  • Poleg tega nastavite X-Content-Type-Options: nosniff, frame-ancestors 'self' in Referrer-Policy; v Caddy z header, v nginx z add_header ... always, in preverite z curl -I.
  • security.txt je na /.well-known/security.txt, prek https, kot navadno besedilo, z obveznim Contact in enim Expires v roku enega leta.

Kviz

1. Zakaj HSTS pomaga, čeprav http že preusmerjate na https?



2. HSTS nastavite z max-age=31536000; includeSubDomains. Teden pozneje se izkaže, da camera.example.com nima veljavnega certifikata. Kaj opazijo obiskovalci, ki so Vaše spletno mesto že obiskali?



3. Katera polja so v datoteki security.txt obvezna?



4. V nginx ste varnostne glave dodali v blok server, vendar se za /api/ ne pošljejo. V bloku location /api/ je en lasten add_header. Kaj je narobe?



5. Kaj morate storiti, preden glavi HSTS dodate preload?



Naloga

Naloga Z7.4: HSTS, glave in security.txt. Za svoje spletno mesto nastavite HSTS (vsaj 180 dni, ko https že nekaj časa dobro deluje), X-Content-Type-Options: nosniff in frame-ancestors 'self' (ali X-Frame-Options) ter objavite security.txt s Contact in Expires v roku enega leta. Vnesite svoje ime gostitelja. Program pridobi https://<hostnaam>/ in preveri glave ter pridobi https://<hostnaam>/.well-known/security.txt in preveri polja. Ne shrani ničesar razen rezultata in datuma Expires.

Naloga Z7.4: HSTS, glave in security.txt

Samo za prijavljene udeležence. Pridobimo https://<naam>/ in /.well-known/security.txt (samo GET).




Tega, kar vnesete, in tega, kar najdemo, ne shranjujemo. Vaš brskalnik si zapomni Vaše odgovore in to, ali ste nalogo opravili. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo (skoraj) pravilno opravili; tudi to lahko tam izbrišete.

Za nadaljnje branje

Trenutek…

Nastavite svoje domene

Za vsako domeno uredite imenske strežnike, povezavo z gostovanjem in kdo bo imetnik.

Nalaganje Vaših domen…