Mine sisu juurde

Küpsiste seaded

Vali iga liigi kohta, milliseid küpsiseid lubad. Oma valikut saad alati muuta iga lehe allosas oleva lingi „Küpsiste seaded“ kaudu. Privaatsuspoliitika

Vajalikud

Alati sees

Vajalikud sisselogimiseks, ostukorvi säilitamiseks ja sinu valikute meelespidamiseks. Need on alati sees.

Millised küpsised?
  • weboke_sessie, weboke_klant, weboke_remember: sinu seanss ja sisselogituks jäämine
  • weboke_basket: sinu ostukorv
  • wkBtwIncl: hindade näitamine koos käibemaksuga või ilma
  • wok_cookies: sinu küpsisevalik, 12 kuud

Mõõdab, milline reklaam viib külastuse või tellimuseni, et me ei maksaks reklaamide eest, mis midagi ei anna.

Millised küpsised?
  • Google Ads Google Tag Manageri kaudu (_gcl_au, _gcl_aw), kuni 90 päeva
  • OpenAI Ads, reklaamid ChatGPT-s
  • wok_aff: millise partneri kaudu meie juurde jõudsid (partnerprogramm), 60 päeva

4,6

Riik ja keel

Igal riigil on oma sait, selle riigi hindade ja käibemaksuga.

Vaata

Pordid ja kuulavad teenused

Moodul 5: Võrgu kaitsmine · Lugemisaeg: 10 minutit

Õpieesmärk: Pärast seda õppetundi näed, millised teenused su serveris kuulavad ja millisel aadressil, oskad selgitada erinevust 0.0.0.0 ja 127.0.0.1 vahel ning kontrollida väljastpoolt, mida kõik internetis su serverist näevad.

Põhimõisted: port, TCP ja UDP, kuulamine, ss -tulpn, 0.0.0.0 ja [::], 127.0.0.1 ja [::1], bind-address, avatud, suletud ja filtreeritud, ründepind, skannerid

Üks IP-aadress ja 65 535 ust

Su serveril on IP-aadress, näiteks 192.0.2.10 ja 2001:db8::10. Sellel aadressil võivad korraga olla kättesaadavad mitu programmi, igaüks oma pordil: number vahemikus 1 kuni 65 535. Programm, mis võtab vastu ühendusi, kuulab mingit porti. Mõned tuntumad:

PortProtokollTeenus
22TCPSSH
80TCPhttp (veebiserver)
443TCP ja UDPhttps (UDP HTTP/3 jaoks)
25TCPe-post meiliserverite vahel (SMTP)
3306TCPMySQL ja MariaDB
5432TCPPostgreSQL
6379TCPRedis

TCP on protokoll ühenduste jaoks, mis peavad kindlalt kohale jõudma (veeb, SSH, andmebaasid). UDP on kiirete üksikute pakettide jaoks (DNS, VPN-id nagu WireGuard, HTTP/3). Teenus kuulab TCP-d, UDP-d või mõlemat.

Iga kuulav port on uks su serverisse. Iga ukse taga on tarkvara, milles võib olla vigu. Kõiki uksi, mis on väljastpoolt kättesaadavad, nimetatakse kokku su ründepinnaks. Mida väiksem, seda parem: veebisaidiga server vajab väljastpoolt ainult porte 22, 80 ja 443.

Vaata, mis kuulab: ss

Käsk ss (socket statistics) näitab, mis su serveris kuulab. Valikutega -t (TCP), -u (UDP), -l (ainult kuulavad), -p (milline programm) ja -n (numbrid, mitte nimed):

anna@web1:~$ sudo ss -tulpn
Netid State  Local Address:Port  Peer Address:Port Process
udp   UNCONN 127.0.0.54:53       0.0.0.0:*         users:(("systemd-resolve",pid=402,fd=16))
tcp   LISTEN 0.0.0.0:22          0.0.0.0:*         users:(("sshd",pid=611,fd=3))
tcp   LISTEN 0.0.0.0:80          0.0.0.0:*         users:(("nginx",pid=902,fd=6))
tcp   LISTEN 0.0.0.0:443         0.0.0.0:*         users:(("nginx",pid=902,fd=7))
tcp   LISTEN 127.0.0.1:3306      0.0.0.0:*         users:(("mariadbd",pid=755,fd=21))
tcp   LISTEN 0.0.0.0:6379        0.0.0.0:*         users:(("redis-server",pid=780,fd=6))
tcp   LISTEN [::]:22             [::]:*            users:(("sshd",pid=611,fd=4))
tcp   LISTEN [::]:80             [::]:*            users:(("nginx",pid=902,fd=8))
tcp   LISTEN [::]:443            [::]:*            users:(("nginx",pid=902,fd=9))

Kõige olulisem veerg on Local Address: aadress, millel programm kuulab.

AadressTähendus
0.0.0.0Kõik serveri IPv4-aadressid, seega ka avalik aadress: kättesaadav väljastpoolt (kui tulemüür seda ei takista)
[::]Kõik IPv6-aadressid: sama IPv6 jaoks
127.0.0.1 või [::1]Ainult server ise (loopback): väljastpoolt ei ole kunagi kättesaadav
127.0.0.53, 127.0.0.54Samuti loopback; siin kuulab systemd-resolved'i kohalik DNS-abiline
192.0.2.10Ainult see üks aadress

Ülaltoodud näites on MariaDB korras: see kuulab aadressil 127.0.0.1, seega pääsevad sellele ligi ainult serveris endas olevad programmid (su veebisait). Redis aga kuulab aadressil 0.0.0.0:6379. Kui tulemüür pole õigesti seadistatud, pääseb sellele ligi kogu internet. Just sellist viga see õppetund käsitlebki.

Kuula õigel aadressil

Andmebaas, vahemälu või halduspaneel ei tohiks peaaegu kunagi olla väljastpoolt kättesaadav. Esimene ja parim kaitse on see, et teenus kuulab ainult loopbackil. Tulemüür (õppetund 5.2) on teine kiht; see võib kogemata välja lülitatud olla või mitte kehtida (näiteks Dockeri puhul, õppetund 9.3).

Kus seda seadistad, sõltub programmist:

ProgrammSeadistusFail (Debian/Ubuntu)
MariaDB/MySQLbind-address = 127.0.0.1/etc/mysql/mariadb.conf.d/50-server.cnf
PostgreSQLlisten_addresses = 'localhost'/etc/postgresql/<versie>/main/postgresql.conf
Redisbind 127.0.0.1 -::1 ja protected-mode yes/etc/redis/redis.conf

Debiani ja Ubuntu paketid seadistavad need teenused vaikimisi juba localhostile. Tavaliselt läheb asi viltu siis, kui keegi järgib juhendit, mis ütleb: "sea bind-address väärtuseks 0.0.0.0, et väljastpoolt ühendust luua". Kui tahad ise oma sülearvutist andmebaasile ligi pääseda, kasuta SSH-tunnelit (õppetund 2.3): port jääb suletuks ja ligi pääseb ainult see, kes tuleb sisse SSH kaudu.

Pärast muudatust taaskäivita teenus ja kontrolli uuesti käsuga ss -tulpn.

Avatud, suletud ja filtreeritud

Väljastpoolt vaadates võib port olla kolmes olekus:

  • Avatud (open): midagi kuulab ja ühendus õnnestub.
  • Suletud (closed): midagi ei kuula või tulemüür keeldub aktiivselt. Server saadab kohe tagasi "ei" (TCP puhul RST-paketi). Ühendus ebaõnnestub kohe teatega "Connection refused".
  • Filtreeritud (filtered): tulemüür viskab paketi vaikselt minema. Ühendus jääb rippuma, kuni saabub aegumine (time-out).

Andmebaasi jaoks on nii suletud kui ka filtreeritud head: keegi ei pääse ligi. Erinevus ütleb sulle ainult, miks: filtreeritud tähendab peaaegu alati, et seda takistab su tulemüür.

Vaata väljastpoolt

ss näitab, mis serveris kuulab, aga mitte seda, mis on väljastpoolt kättesaadav. Vahepeal on veel tulemüür, teenusepakkuja juures mõnikord ka võrgutulemüür. Ainus tõeline kontroll on seega: vaata väljastpoolt, mõnest teisest arvutist.

Oma arvutist (mitte serverist endast, sest siis käib ühendus loopbacki kaudu) saad ühte porti kontrollida käsuga nc (netcat):

anna@laptop:~$ nc -vz -w 3 192.0.2.10 6379
nc: connect to 192.0.2.10 port 6379 (tcp) failed: Connection refused
anna@laptop:~$ nc -vz -w 3 192.0.2.10 22
Connection to 192.0.2.10 22 port [tcp/ssh] succeeded!

Windowsis teeb PowerShell sama käsuga Test-NetConnection 192.0.2.10 -Port 6379. Pordiskanner, näiteks nmap, saab vaadata korraga rohkem porte; kasuta sellist skannerit ainult oma serveri peal.

Ära unusta IPv6-te. Levinud viga on tulemüür, millel on reeglid ainult IPv4 jaoks, samal ajal kui teenus kuulab ka aadressil [::]. Testi seega ka IPv6-aadressi: nc -6 -vz -w 3 2001:db8::10 6379.

Miks see nii oluline on

Sinu serverit skannitakse alates esimesest minutist. Interneti seadmete ja teenuste otsingumootorid ning kurjategijate robotid proovivad pidevalt kõiki IPv4-aadresse tuntud portidel. Avatud Redis ilma paroolita, Elasticsearchi klaster või MongoDB ilma juurdepääsukontrollita leitakse lühikese ajaga. Avatud andmebaaside ja otsinguklastrite tõttu tekkinud andmelekked jõuavad regulaarselt uudistesse ja peaaegu alati on põhjuseks just see viga: sisekasutuseks mõeldud teenus kuulas kõigil aadressidel.

Ka SSH porti koputatakse terve päev. See on normaalne ning võtmete (õppetund 2.2) ja fail2bani (õppetund 5.3) korral pole see probleem.

Kursuse kontroll

Selle õppetunni ülesandes kontrollib kursuseprogramm väljastpoolt su serveri viit kindlat andmebaasiporti: 3306 (MySQL/MariaDB), 5432 (PostgreSQL), 6379 (Redis), 9200 (Elasticsearch/OpenSearch) ja 27017 (MongoDB). Programm proovib ainult, kas ühendus tekib, ei saada andmeid ega logi kuhugi sisse. Teisi porte see ei skanni. Kontrollid tulevad ülesandes toodud IP-aadressilt, et saaksid need oma logis ära tunda. Ühte aadressi saab kontrollida vaid paar korda tunnis.

AlmaLinuxis ja Rocky Linuxis

ss töötab samamoodi. Teenuste failid asuvad teistes kohtades (näiteks /etc/my.cnf.d/ MariaDB jaoks, /var/lib/pgsql/data/postgresql.conf PostgreSQL-i jaoks). Lisaks võib SELinux takistada teenust, mis tahab kuulata ebatavalisel pordil; seda näed siis logis journalctl (õppetund 6.2), mitte käsu ss väljundis.

Kokkuvõte

  • Iga kuulav port on uks; hoia väljastpoolt avatuna ainult see, mis on tõesti vajalik (tavaliselt 22, 80 ja 443).
  • sudo ss -tulpn näitab, milline programm millisel aadressil ja pordil kuulab.
  • 0.0.0.0 ja [::] tähendavad "kõik aadressid", 127.0.0.1 ja [::1] tähendavad "ainult server ise". Andmebaasid, vahemälud ja otsinguklastrid kuuluvad loopbackile.
  • Andmebaasi jaoks on nii suletud kui ka filtreeritud head; avatud on vale.
  • Kontrolli alati väljastpoolt, nii IPv4 kui ka IPv6 jaoks, sest ss tulemüüri ei näe.

Test

1. Käsu ss -tulpn väljundis on mariadbd juures 127.0.0.1:3306. Mida see tähendab?



2. Redis kuulab aadressil 0.0.0.0:6379. Su tulemüür ei luba porti 6379. Mis on parim lahendus?



3. Testid väljastpoolt porti 5432 ja ühendus jääb 3 sekundiks rippuma ning ebaõnnestub siis. Mis on tõenäoline olek?



4. Miks pead avatud porti kontrollima väljastpoolt, mitte ainult käsuga ss serveris?



5. Su tulemüüril on reeglid IPv4 jaoks, aga su serveril on ka IPv6-aadress. Redis kuulab aadressil [::]:6379. Mis on risk?



Ülesanne

Ülesanne Z5.1: Andmebaasipordid on väljast suletud. Käivita oma serveris sudo ss -tulpn ja selgita välja, millistel aadressidel su teenused kuulavad. Seejärel lase kursuseprogrammil väljastpoolt kontrollida, et su serveri pordid 3306, 5432, 6379, 9200 ja 27017 ei ole kättesaadavad, nii IPv4 kui ka (kui su serveril on AAAA-kirje) IPv6 kaudu. Märgi ka, millised teenused kuulavad sinu juures aadressil 0.0.0.0 või [::]. Programm loob ühenduse ainult nende viie pordiga ega saada midagi.

Ülesanne Z5.1: Andmebaasipordid on väljast suletud

Me ei logi sisse ega proovi ühtegi parooli ega võtit. Kõigepealt näita, et server on sinu: klõpsa „Näita minu koodi“ ja pane oma hostinime veebiserverisse fail /.well-known/weboke-cursus-<code>.txt, milles on ainult see kood. Laadime selle otse igalt IP-aadressilt, mida kontrollime (IPv4 ja IPv6 eraldi); TXT-kirje siin ei loe. Kontroll tuleb serverist heavy.webawere.nl (185.158.167.16 ja 2a07:ae80:100:0:185:158:167:16), mitte meie veebiserverist. Ainult registreerunud kursuslastele; serveri kohta kuni 6 kontrolli tunnis. Loome ainult TCP-ühenduse portidega 3306, 5432, 6379, 9200, 27017 ja 2375 (IPv4 ja IPv6) ega saada midagi.




Seda, mida sisestad, ja mida leiame, me ei salvesta. Su brauser jätab meelde su vastused ja selle, kas sooritasid ülesande. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et sul oli ülesanne (peaaegu) õige; ka selle saad sealt kustutada.

Loe edasi

Hetk…

Seadista oma domeenid

Määra iga domeeni jaoks nimeserverid, seos sinu majutusega ja kes saab omanikuks.

Laadin sinu domeene…