Unix -suojaus - Unix security

Unix turvallisuus tarkoittaa keinoja turvata Unix tai Unix- käyttöjärjestelmä . Turvallinen ympäristö saavutetaan paitsi näiden käyttöjärjestelmien suunnittelukonsepteilla myös valppailla käyttäjä- ja hallintokäytännöillä .

Suunnittelukonseptit

Käyttöoikeudet

Näiden järjestelmien keskeinen suojausominaisuus on tiedostojärjestelmän käyttöoikeudet . Kaikilla tyypillisen Unix -tiedostojärjestelmän tiedostoilla on oikeudet, jotka mahdollistavat eri pääsyn tiedostoon.

Tiedoston käyttöoikeudet asetetaan yleensä käyttämällä chmod -komentoa ja ne näkyvät ls -komennon kautta. Esimerkiksi:

-r-xr-xr-x  1 root  wheel  745720 Sep  8  2002 /bin/sh

Unix -käyttöoikeudet sallivat eri käyttäjien pääsyn tiedostoon. Eri käyttäjäryhmillä on eri käyttöoikeudet tiedostoon.

Edistyneempiin Unix -tiedostojärjestelmiin kuuluu Access Control List -konsepti, joka mahdollistaa käyttöoikeuksien myöntämisen useille käyttäjille tai ryhmille. Access Control List voidaan myöntää luvan ylimääräisiä yksittäisille käyttäjille tai ryhmille. Esimerkiksi:

/pvr [u::rwx,g::r-x,o::r-x/u::rwx,u:sue:rwx,g::r-x,m::rwx,o::r-x]

Tässä esimerkissä, joka on peräisin chacl komento Linux käyttöjärjestelmän, käyttäjä haastaa myönnetään kirjoitusoikeudet luvan kutsua / PVR hakemistoon.

Käyttäjäryhmät

Unix -tyyppisissä käyttöjärjestelmissä olevat käyttäjät kuuluvat usein hallittuihin ryhmiin, joilla on erityiset käyttöoikeudet. Tämä mahdollistaa käyttäjien ryhmittelyn järjestelmän käyttöoikeustason mukaan. Monet Unix -toteutukset lisäävät tietoturvaa edellyttämällä, että käyttäjän on oltava pyörän käyttäjäoikeusryhmän jäsen , jotta hän voi käyttää sukomentoa.

Juuripääsy

Useimmilla Unix- ja Unix-tyyppisillä järjestelmillä on tili tai ryhmä, jonka avulla käyttäjä voi hallita järjestelmää täydellisesti, usein tunnettuna root- tilinä. Jos ei -toivottu käyttäjä saa käyttöoikeuden tähän tiliin, tämä rikkoo järjestelmän kokonaan. Pääkäyttäjätili on kuitenkin tarpeen hallinnollisiin tarkoituksiin, ja yllä olevista turvallisuussyistä juuritiliä käytetään harvoin päivittäisiin tarkoituksiin ( sudo -ohjelmaa käytetään yleisemmin), joten juuritilin käyttöä voidaan seurata tarkemmin.

Juuripääsyn "sellaisena kuin sen pitäisi olla" voivat visualisoida ne, jotka tuntevat Superman -tarinat, käyttämällä seuraavaa analogiaa :

Päätilin käyttäminen on pikemminkin kuin Superman; järjestelmänvalvojan tavallinen käyttäjä on enemmän kuin Clark Kent. Clark Kentistä tulee Superman vain niin kauan kuin on tarpeen ihmisten pelastamiseksi. Sitten hän palaa "naamiointiin". Juuripääsyä tulee käyttää samalla tavalla. Clark Kentin naamio ei kuitenkaan rajoita häntä, koska hän voi edelleen käyttää supervoimiaan. Tämä on analogista sudo -ohjelman käyttämisen kanssa.

Käyttäjä- ja hallintatekniikat

Unixilla on monia työkaluja, jotka voivat parantaa turvallisuutta, jos käyttäjät ja järjestelmänvalvojat käyttävät sitä oikein.

Salasanat

Vahvan salasanan valitseminen ja sen asianmukainen suojaaminen ovat luultavasti tärkeimpiä asioita, joita käyttäjä voi tehdä parantaakseen Unix -suojausta. Unix -järjestelmissä olennaiset käyttäjätiedot tallennetaan tiedoston alle. /etc/passwdTämä tiedosto pitää kirjaa järjestelmään rekisteröityneistä käyttäjistä ja heidän päämäärityksistään. Salasanat tai oikeammin salasanan tiiviste voidaan myös tallentaa samaan paikkaan. Merkinnät /etc/passwdvievät täsmälleen yhden rivin, ja niillä on seuraava muoto:

nickname:password_hash:UserID:GroupID:Complete_Name:home_dir:shell_bin

Esimerkki olisi:

xfze:$$1zuW2nX3sslp3qJm9MYDdglEApAc36r/:1000:100:Daniel Ernesto Ortiz Costa:/home/xfze:/bin/bash

Koska kaikilla käyttäjillä on oltava lukuoikeus /etc/passwdtiedostoon monien yleisten tehtävien suorittamiseksi ( ls -l /homekäytetään /etc/passwdesimerkiksi UID -tunnisteiden yhdistämiseen kirjautumisnimiin), kuka tahansa voisi lukea myös muiden käyttäjien salasanasivut. Tämän ongelman ratkaisemiseksi tiedosto /etc/shadowluotiin salasanan tiivisteiden tallentamiseen, ja vain pääkäyttäjällä oli lukuoikeus. Salasanan varjostamisen yhteydessä toinen kenttä ( salasanan tiiviste ) korvataan x -merkillä, joka käskee järjestelmän noutamaan vastaavan käyttäjän salasanan /etc/shadowtiedoston kautta .

/etc/shadowTiedosto usein vain sisältää arvot kahden ensimmäisen kentän:

xfze:$$1zuW2nX3sslp3qJm9MYDdglEApAc36r/:::::

/etc/shadowTiedoston muut kentät sisältävät:

  1. Minimimäärä päiviä salasanan vaihtamisen välillä
  2. Enimmäismäärä päiviä salasanan vaihtamiseen
  3. Ennen salasanaa annettu varoituspäivien lukumäärä on vaihdettava
  4. Päivien määrä salasanan jälkeen on vaihdettava, kun tili muuttuu käyttökelvottomaksi
  5. Päivä (ilmaistuna 1. tammikuuta 1970 jälkeen kuluneiden päivien lukumääränä ), jolloin tili on vanhentunut

Näitä kenttiä voidaan käyttää Unix -tietoturvan parantamiseen noudattamalla salasanan suojauskäytäntöä.

Käyttäjät ja tilit

Järjestelmänvalvojien tulee poistaa vanhat tilit viipymättä.

  • su , sudo , ssh vain, ei etäkäyttäjätunnuksia

Ohjelmistojen ylläpito

Paikkaus

Käyttöjärjestelmät, kuten kaikki ohjelmistot, voivat sisältää korjattavia vikoja tai niitä voidaan parantaa lisäämällä uusia ominaisuuksia. Käyttöjärjestelmän turvallinen korjaus edellyttää, että ohjelmisto on peräisin luotettavasta lähteestä eikä sitä ole muutettu sen pakkaamisen jälkeen. Yleisiä menetelmiä sen varmistamiseksi, että käyttöjärjestelmän korjauksia ei ole muutettu, ovat salaushajautus , kuten MD5- pohjainen tarkistussumma, tai vain luku -median käyttö.

Turvallisuuden kannalta erityinen pakkausmenetelmä, kuten alun perin Red Hat Linuxilta peräisin oleva RPM Package Manager -muoto, ei ole yhtä tärkeä kuin sellaisten ominaisuuksien käyttö, jotka varmistavat itse korjaustiedoston eheyden.

Lähdejakaumat

Lähdejakeluihin kuuluu mahdollisuus tutkia epäilyttävän sisällön koodia. Haittapuolena, ilman mukana olevaa salaushajautusarvoa, on se, että käyttäjän on voitava suorittaa koodin suojausanalyysi itse.

RPM -paketit

Linux -jakelut, jotka käyttävät RPM Package Manager -muotoa perustoimintojen ja ohjelmistopäivitysten tarjoamiseen, käyttävät MD5: tä ja GPG: tä sisällön eheyden varmistamiseksi. Hajautusarvot pakataan RPM -tiedostoon ja tarkistetaan, kun paketti asennetaan.

Debian -paketit

Linux -jakelut, jotka käyttävät Debianin .deb -pakettimuotoa perustoimintojen ja ohjelmistopäivitysten tarjoamiseen, käyttävät GPG -allekirjoituksia sisällön eheyden varmistamiseksi. Allekirjoitus lasketaan paketin rakentamisen yhteydessä ja tarkistetaan myöhemmin, kun paketti asennetaan.

Muut myyjät ja jakelut

Toimittajasta tai jakelusta riippumatta kaikissa ohjelmistojakeluissa on oltava mekanismi sen varmistamiseksi, että ohjelmisto on laillinen ja ettei sitä ole muutettu sen alkuperäisen pakkaamisen jälkeen.

Palvelut

Tarpeettomia järjestelmäohjelmistoja ei saa asentaa tai määrittää järjestelmään. Ohjelmistot, joita ei enää tarvita, on poistettava kokonaan, jos mahdollista.

  • Selvitä, mitkä palvelut ovat käynnissä
    • netstat -na
    • lsof
    • nmap
    • sockstat -4 ( FreeBSD )

Komennot inetd ja xinetd toimivat superpalvelimina useille verkkoprotokollille, kuten rlogin , telnet ja ftp .

Turhien palveluiden poistaminen käytöstä

  • käyttämällä Debianin update-rc.d : tä
  • käyttämällä chkconfig on Red Hat Linux
  • käyttämällä /etc/rc.conf ja /usr/local/etc/rc.d FreeBSD: llä (mainitse /etc/rc.local)
  • käyttäen rc-update on Gentoo

Tätä lähestymistapaa kutsutaan yleensä ennakoivaksi turvallisuudeksi . Jotkut käyttöjärjestelmät ovat oletuksena suojattuja . Muun muassa ilmaiset BSD -maut ( FreeBSD , NetBSD ja OpenBSD ) ovat ennakoivasti suojattuja. Esimerkiksi Netstatin tulostus NetBSD 3.0 -työasemalla hahmottaa selvästi tämän tekniikan:

$ netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        State
tcp        0      0  localhost.smtp         *.*                    LISTEN
tcp        0      0  *.ssh                  *.*                    LISTEN
Active Internet6 connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp6       0      0  localhost.smtp         *.*                    LISTEN
tcp6       0      0  *.ssh                  *.*                    LISTEN
Active UNIX domain sockets
Address  Type   Recv-Q Send-Q    Inode     Conn     Refs  Nextref Addr
c0d10d80 dgram       0      0        0 c0cd8680        0 c0cb7000 -> /var/run/log
c0cb7000 dgram       0      0        0 c0cd8680        0        0 -> /var/run/log
c0cd8680 dgram       0      0 cb9639e8        0 c0d10d80        0 /var/run/log

Seuraava esimerkki BSD -järjestelmästä

$ sockstat -4
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root     sendmail   569    4 tcp    localhost.smtp        *.*
root     sshd       593    4 tcp    *.ssh                 *.*

Näyttää, että tällä koneella vain SSH -palvelu kuuntelee tietokoneen julkista verkkoliitäntää . sendmail kuuntelee vain loopback -käyttöliittymää . Palvelun käyttöä voidaan rajoittaa edelleen käyttämällä palomuuria .

Tiedostojärjestelmät

Tiedostojärjestelmän turvallisuus

Tiedostojärjestelmien turvallisuus UNIX- ja Unix-tyyppisissä järjestelmissä perustuu yhdeksään käyttöoikeusbittiin, käyttäjä- ja ryhmätunnusbitteihin sekä tahmeaan bittiin , yhteensä 12 bittiin. Nämä käyttöoikeudet koskevat lähes kaikkia tiedostojärjestelmäobjekteja, kuten tiedostoja, hakemistoja ja laitteita.

9 käyttöoikeusbittiä on jaettu kolmeen kolmen bitin ryhmään. Ensimmäinen ryhmä kuvaa tiedoston omistajan oikeuksia, toinen ryhmä kuvaa tiedoston omistajaan tai tiedoston sisältävään hakemistoon liittyvän ryhmän käyttöoikeuksia ja kolmas ryhmä kuvaa käyttöoikeuksia, jotka liittyvät mihin tahansa prosessiin, jolla ei ole samaa käyttäjää ID tiedostona. Kukin kolmen bitin ryhmä sisältää bitin, joka osoittaa, että luku-, kirjoitus- tai suoritusoikeus on myönnetty. Hakemistojen tapauksessa suoritusoikeus tulkitaan oikeudeksi suorittaa tiedostonimen haku hakemistosta.

Määritettyjä käyttäjätunnuksia ja joukkotunnusbittejä, yleisesti lyhennettyjä set-UID ja set-GID , käytetään vastaavasti muuttamaan sen prosessin identiteettiä, joka suorittaa tiedoston, jossa on joko yksi tai molemmat bitit. Tiedosto, jossa on set-UID- käyttöoikeusbitti, saa tiedoston suorittavan prosessin vaihtamaan väliaikaisesti todellisen käyttäjätunnuksen tiedoston omistajaksi. Jos tiedosto, jolla on set-GID- käyttöoikeusbitti, asettaa tiedoston suorittavan prosessin vaihtamaan väliaikaisesti tehokkaan ryhmän tunnuksen tiedostoryhmän tunnukseksi. Prosessi voi sitten vuorotella sen tehokkaan käyttäjä- tai ryhmätunnuksen välillä, jonka se perii tiedostosta, ja todellisen käyttäjä- tai ryhmätunnuksen, jonka se perii, kun käyttäjä kirjautuu järjestelmään. Tämä tarjoaa mekanismin, jolla prosessi voi rajoittaa hallussaan olevat käyttöoikeudet niihin koodialueisiin, jotka edellyttävät näitä käyttöoikeuksia. Tämä on eräänlainen suojaustekniikka, joka tunnetaan nimellä etuoikeuksien erottaminen ja parantaa ohjelman turvallisuutta rajoittamalla prosessien tahattomia tai ei -toivottuja toimintoja.

Hakemisto, jossa on set-GID- käyttöoikeusbitti, aiheuttaa juuri luodun tiedoston alkuperäisen tiedostoryhmän arvon, joka on sama kuin hakemiston tiedostoryhmä. Tämä tarjoaa mekanismin, jonka avulla osajärjestelmä, kuten järjestelmän postiosajärjestelmä, voi luoda tiedostoja, joilla on yhteinen tiedostoryhmän arvo, jotta kyseisen osajärjestelmän set-GID- prosessit voivat sitten lukea tai kirjoittaa tiedoston.

Tahmea bittinen , virallisesti kutsutaan tallentaa teksti- swap vähän, on saanut nimensä sen alkuperäiseen tarkoitukseen. Alun perin tahmea bitti aiheutti prosessin ensimmäisen muistikuvan tallennuksen viereiseksi kuvaksi levyasemalle, jota käytettiin todellisten muistisivujen tallentamiseen silloin, kun niitä ei käytetty. Tämä paransi yleisesti suoritettavien komentojen suorituskykyä asettamalla alkuaseman muistikuvan helposti saataville. Nykyaikaiset UNIX -järjestelmät eivät enää suorita tätä toimintoa, kun bitti on asetettu, mutta nimi on kuitenkin säilynyt. Tiedostojen tapauksessa järjestelmä voi käyttää tahmeaa bittiä ilmaisemaan suoritettavan tiedoston lukitustyylin . Hakemistojen tapauksessa tahmea bitti estää muita prosesseja, lukuun ottamatta sellaisia, joilla on pääkäyttäjän oikeudet tai joilla on todellinen käyttäjätunnus tiedoston omistajalta, poistamasta tiedostoa kyseisestä hakemistosta. Tahmea bitti on yleisimmin käytetty julkisesti hakemistojen, kuten erilaiset väliaikaiset työtilat hakemistoja järjestelmään.

Juurikurpitsa

Root squash on erityinen kartoitus kauko pääkäyttäjän (root) identiteetti, kun käytetään identiteetin todennusta (paikallinen käyttäjä on sama kuin etäkäyttäjän). Juuri squashissa asiakkaan uid 0 (root) on yhdistetty arvoon 65534 (ei kukaan). Se on ensisijaisesti NFS: n ominaisuus, mutta se voi olla saatavana myös muissa järjestelmissä.

Root squash on tekniikka, jolla vältetään etuoikeuksien laajentuminen asiakaskoneella suid -suoritettavien tiedostojen Setuid kautta . Ilman root squashia hyökkääjä voi luoda palvelimelle suid -binääritiedostoja, jotka suoritetaan rootina toiselle asiakkaalle, vaikka asiakaskäyttäjällä ei olisi pääkäyttäjän oikeuksia. Siksi se suojaa asiakaskoneita muita haitallisia asiakkaita vastaan. Se ei suojaa asiakkaita haitalliselta palvelimelta (jossa root voi luoda suid -binääritiedostoja) eikä suojaa muiden käyttäjien kuin root -tiedostoja (koska haittaohjelmat voivat esiintyä kenenä tahansa käyttäjänä).

SELinux

SELinux on ydinlaajennusten joukko, joka hallitsee pääsyä tarkemmin ja määrittelee tarkasti, onko ja miten tiedostoja, kansioita, verkkoportteja ja muita resursseja voidaan käyttää rajoitetulla prosessilla. Tätä järjestelmää käytetään enimmäkseen prosessien (tietokanta, palvelin) rajoittamiseen ihmisten käyttäjien sijasta. Se voi myös rajoittaa pääkäyttäjänä suoritettavia prosesseja. Muut jakelut käyttävät vastaavia vaihtoehtoja, kuten AppArmor .

Virukset ja virustentorjuntaohjelmat

Unix-tyyppiset käyttöjärjestelmät ovat immuuneja useimmille Microsoft Windows -viruksille, koska Windows-käyttöjärjestelmään luodut binääritiedostot eivät yleensä toimi muilla alustoilla. Monet Unixin kaltaiset asennukset tarjoavat kuitenkin tiedostojen tallennuspalveluja Microsoft Windows -asiakkaille, esimerkiksi Samba -ohjelmiston avulla , ja niistä voi tahattomasti tulla käyttäjien tallentamien virusten arkisto. On tavallista, että Unix -palvelimet toimivat postinsiirtoagentteina, minkä seurauksena sähköpostin virustarkistus asennetaan usein. ClamAV virustorjuntaohjelma on saatavana lähdekoodina ja sitä voidaan käyttää skannaamaan Unix järjestelmät viruksia, jotka tartuttavat muita käyttöjärjestelmiä.

On viruksia ja matoja, jotka kohdistuvat Unixin kaltaisiin käyttöjärjestelmiin. Itse asiassa ensimmäinen tietokonemato - Morris -mato - kohdistui Unix -järjestelmiin.

Palomuurit

Verkon palomuuri suojaa järjestelmiä ja verkkoja palomuurin vastakkaisella puolella olevilta verkkouhilta. Palomuurit voivat estää pääsyn tiukasti sisäisiin palveluihin, ei -toivottuja käyttäjiä ja joissakin tapauksissa suodattaa verkkoliikenteen sisällön mukaan.

iptables

iptables on nykyinen käyttöliittymä vuorovaikutukseen Linux -ytimen verkkosuodattimen kanssa . Se korvasi ipchainsin . Muut Unixin kaltaiset käyttöjärjestelmät voivat tarjota omia toimintojaan ja muita avoimen lähdekoodin palomuurituotteita. Tarkempia tietoja iptablesista on muualla. Tässä on lyhyt keskustelu, jossa kuvataan, kuinka iptablesia voidaan käyttää Linux -palomuurin määrittämiseen.

netfilter tarjoaa tilatason pakettisuodattimen, joka voidaan konfiguroida verkkoliitännän , protokollan , lähde- ja/tai kohdeosoitteen , lähde- ja/tai kohdeportin ja paketin tilan mukaan. Verkkopaketti kulkee useiden ketjujen välillä sen jälkeen, kun se on vastaanotettu verkkoliitännän kautta, ja sen välillä, kun isäntä hyväksyy sen tai välittää sen toiselle isännälle. Yleiset ketjut ovat INPUT , OUTPUT ja FORWARD . INPUT ketju on käyty läpi kaikki paketit, koska ne on toimitettu verkkoliitännän, riippumatta siitä, onko ne hyväksyvät isännän tai välitetään toiseen koneeseen. OUTPUT ketju on käyty läpi kaikki paketit, koska ne lähetetään verkon kautta. FORWARD ketju ajetaan niille-paketit reititetään isännän yksi verkkoliitäntä toiseen, kuten on tapauksessa usean homed järjestelmä (järjestelmä, jossa enemmän kuin yksi fyysinen verkkoliitäntä).

Jokaisella sisäänrakennetulla ketjulla on oletuskäytäntö , joka määrittelee toimenpiteet, jotka toteutetaan ketjun loppuun saapuvalle paketille. Pakettien läpivienti päättyy, kun sääntö vastaa pakettia ja sillä on ACCEPT , DROP , REJECT tai RETURN -toiminto .

Yksinkertaisin iptables palomuuri koostuu säännöt kullekin haluttu palvelu, jota seuraa sääntö, joka osoittaa, että kaikki paketit, jotka saapuvat tästä säännöstä pudotetaan. Järjestelmässä, joka salli vain esimerkiksi saapuvan sähköpostiliikenteen, olisi sääntö, joka hyväksyi yhteydet SMTP -porttiin ja hylkäsi sitten muut. Tarvitaan sääntö, joka osoittaa, että kaikki muodostetut yhteydet ovat myös sallittuja, jotta lähtevät yhteydet saavat vastauksia muista järjestelmistä.

INPUT -ketju

Seuraavassa esimerkissä esitetään INPUT -ketjun yksinkertainen pakettisuodatin yllä kuvatulle esimerkille:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt   in        out                 source               destination
    0     0 ACCEPT     all—any    any     anywhere             anywhere            state ESTABLISHED
    0     0 ACCEPT     tcp—any    any     anywhere             anywhere            tcp dpt:smtp
    0     0 LOG        all—any    any     anywhere             anywhere            LOG level warning
    0     0 DROP       all—any    any     anywhere             anywhere

Nimenomaisen DROP -toiminnon lisääminen varmistaa, että paketit hylätään, jos INPUT -ketjun oletuskäytäntö muutetaan vahingossa muotoon ACCEPT .

LÄHTÖ -ketju

On vähemmän tarvetta OUTPUT ketju ja oletus politiikka on OUTPUT ketju voidaan turvallisesti asettaa ACCEPT . Joissakin tapauksissa voi olla toivottavaa, että palomuuri rajoittaa tietyt lähtevät yhteydet tiettyyn hyväksyttyyn järjestelmään. Tätä kutsutaan ulosmenosuodatukseksi, ja sitä voidaan käyttää estämään palomuurin sisällä olevien virusten pääsy muihin järjestelmiin. Esimerkiksi verkon käytäntö voi olla rajoittaa lähtevät sähköpostiyhteydet yhdelle valtuutetulle sähköpostipalvelimelle keinona torjua sähköpostin roskapostia . Tämä voidaan saavuttaa seuraavalla esimerkillä:

Chain OUTPUT (policy ACCEPT)
 pkts bytes target     prot opt    in     out                  source              destination
    0     0 DROP       tcp—any    any    !server               anywhere            tcp dpt:smtp

Tässä esimerkissä ei tarvitse sisällyttää muita sääntöjä, koska OUTPUT -ketjun oletuskäytäntö on ACCEPT . Tämä sääntö olettaa, että palomuurina toimiva isäntä ei itse lähetä sähköpostia, kuten sähköpostipalvelimelle. Tämä on hyvä olettamus, koska tyypillisesti palomuurijärjestelmä sisältää minimimäärän järjestelmäkoodia, joka tarvitaan palomuurina toimimiseksi.

Rajoittavampi OUTPUT -ketju sisältäisi sallivat ( ACCEPT ) -merkinnät niille palveluille, joita voidaan käyttää palomuurin ulkopuolella, ja sitten rajoittava ( DROP ) -käytäntö itse ketjua varten.

Yleistä

Suojattu verkkoviestintä:

Pakettien haistelu:

Hyökkäykset:

Pitkälle kehittynyt

Palvelun tiedot

Viitteet

Yleistä

  • Käytännöllinen UNIX ja Internet Security, Simson Garfinkel ja Gene Spafford, O'Reilly & Associates, 2003.

Ulkoiset linkit