JAH380 - Linux Server - Verkkopalvelut

Näkymät
Syotec Wiki
Loikkaa: valikkoon, hakuun

Tämän modulin kesto on kaksi työpäivää. Ensimmäisenä lähipäivänä tutustumme Debianilla toteutettuun palvelinkokonaisuuteen. Meillä on käytössä neljä virtuaalisesti toteutettua konetta, jotka ovat ns. perusasennettuja. Neljä Debiania, joista yhdestä tehdään reititin, kahdesta DNS- ja DHCP-palvelimet. Neljäs toimii normaalina työasemana, joilla hallitaan mainittuja kolmea muuta. Ensimmäisenä päivänä käymme läpi myös protokolla-analysaattoreita, jotka ovat verkonrakentajan tärkeimmät työkalut. Tutustumme myös verkon toimintaan ja turvallisuuteen liittyviin asioihin sekä tutustumme muutamaan havainnollistavaan työkaluun.

Modulin teemana on toimivan tietoverkon toteuttaminen Linux-pohjaisilla ratkaisuilla. Tulevassa järjestelmässä on kolme palvelua (DNS, DHCP, NTP), jotka ovat enemmän ja vähemmän pyritty integroimaan yhteen. Järjestelmässä on esimerkiksi dynaaminen DNS eli koneet päivittävät itse nimitietonsa DNS-alueeseen. Toimiva tietoverkko asettaa lisäksi muita vaatimuksia, joista esimerkkeinä mainittakoon käytettävyys ja huolettomuus. Pääsemme toteuttamaan ja ennen kaikkea vertailemaan tekemäämme verkkoa muihin markkinoilla oleviin vaihtoehtoihin.

Sisällysluettelo

Tietoverkkojen palvelut

Toimiva tietoverkko vaatii toimiakseen kaikkien OSI-mallin kerroksien toiminnan. OSI-malli rakentuu talomaisesti, jossa jokaisella osalla ja kerroksella on oma merkityksensä. Ensimmäistä tasoa eli 1. kerrosta edustaa yleisimmin kuparijohdin, kuitu tai ilma, ja sen tehtävänä on mahdollistaa esimerkiksi koneen ja kytkimen välinen yhteys. Ensimmäisen kerroksen päälle tulevan toisen kerroksena vastuulla on samassa aliverkossa olevien koneiden liikennöinti. Kolmas kerros reitittää aliverkkojen välisen liikenteen, ja näin lopputuloksena on toimiva tietoverkko, josta tunnetuin esimerkki on Internet. Käytännössä koko Internet on vain iso läjä aliverkkoja


Internet


Tietoverkossa olevilla koneilta vaaditaan siis vähintään kolmen alimmaisen kerroksen hallinta. Yleisesti kahden alimmaisen kerroksen tehtävän hoitaa koneeseen asennettu verkkokortti. Siihen on rakennettu ensimmäisen kerroksen vaatima rajapinta, josta esimerkkinä ethernet, sekä siihen on määritetty 48 bittinen MAC-osoite. Näistä kerroksista huomattavasti enemmän on muuttunut ensimmäiseen kerrokseen liittyvät rajapinnat ja tekniikat. Tämä muutos on seurausta jatkuvasta tiedonsiirtonopeuksien kasvamisesta. Toisellakin kerroksella muutoksia toki tapahtuu, joista esimerkkinä mainittakoon VLAN, STP ja Jumbo Frames. Toisen kerroksen muutokset ovat hyviä, mutta niistä valitettavasti pieni osa tulee suurien massojen käyttöön.

Fyysinen kerros ja Siirtokerros

Näiden kerroksien tehtävä kuulostaa huomattavasti helpommalta kuin onkaan

Huolehtia yhteen liittettyjen laitteiden välisestä luotettavasta yhteydestä!

Laitteet kytketään tietyllä siirtomedialla yhteen, ja nämä kerrokset huolehtivat laitteiden välisistä yhteyksistä. Esimerkkejä löytyy paljon, sillä esimerkiksi langattomassa WLAN-verkossa nämä kerrokset hoitavat tukiaseman ja päätteen välisen yhteyden. Ei siis sen enempää, vain tukiaseman ja päätteen välisen yhteyden. Jos esimerkiksi tukiaseman ja päätteen välillä tapahtuu bittivirhe, nämä kerrokset huolehtivat paketin uudelleen lähettämisestä. Toinen esimerkkinä on alla olevan kuvan verkko, joka on varmasti parhaiten tunnettu.


Verkon komponentit


Normaalissa, kuvan kaltaisessa verkossa, koneet on kytketty tietyllä ethernet-standardilla kytkimeen. Kytkimet on yhdistetty reitittimiin, ja reitittimet taas toisiinsa tiettyä standardia käyttäen. Reitittimien yhdistämisessä on yleensä enemmän vaihtoehtoja käytössä kuin koneiden ja kytkimien välillä. Tällaisia vaihtoehtoja ovat esimerkiksi ATM, MPLS ja DSL. Suuntaus yhteyksissä on kuitenkin se, että yhä enemmän ja enemmän käytetään ethernet-pohjaisuutta.

Käytännössä nämä kerrokset näkyvät erilaisina laitteina, liittiminä, kaapeleina ja koneeseen liitettävinä lisäkortteina. Laitteiden välisissä kytkennöissä tuttuja asioita ovat ethernetin nopeudet, nopeusneuvottelut ja kytkentävalinnat. Kytkennän jälkeen tulee verkkoliittymien MAC-osoitteet, joita käytetään jokaisessa verkossa lähetettävässä paketissa. Nykyisten verkkojen eräs keskeisimmästä siirtokerroksen protokollista on ARP, joka huolehtii siirto- ja verkkokerroksen linkityksestä. Tämä linkityksen keskeisenä osana ovat IP-osoitteet, jotka kulkevat käsikädessä MAC-osoitteiden kanssa. Tämä näkyy esimerkiksi koneiden ARP-taulussa, josta alla esimerkki

debian-ville:~# arp -a
eetu.syo.fi (213.250.105.4) at 00:0c:76:7d:5e:6e [ether] on eth1
? (213.250.105.126) at 00:12:1e:a4:cb:16 [ether] on eth1 
? (213.250.105.83) at 00:0a:e4:c0:ba:d1 [ether] on eth1
debian-ville:~# 

Siirtokerroksen laitteet käsittelevät MAC-osoitteita eri tavoin. Peruskytkin tallentaa ainoastaan tiedon siitä, että mikä MAC-osoite löytyy mistäkin portista. Kytkimillä, ilman reitittävää ominaisuutta, ei ole ARP-taulua. Jos halutaan saada jollain tapaa yhteys kytkimeen, sen täytyy olla hallittava. Tällainen kytkin luonnollisesti maksaa enemmän kuin pelkkä peruskytkin. Kytkimien hintaa hallittavuuden lisäksi vaikuttavat porttien lukumäärät, valmistaja, tuettavat nopeudet, sisäinen kytkentänopeus, toimintaympäristö ja monet muut asiat sekä ominaisuudet. Perustoiminnallisuus on pysynyt kuitenkin vuosikausia samana.

Verkkokerros

Tämä kerroksen tehtävän voisi kiteyttää seuraavasti

Verkkokerroksen tehtävänä on välittää aliverkosta lähtevä liikenne toiseen aliverkkoon!

Verkkokerros käyttää liikennöintiin IP-osoitteistusta. Jokaisella kerrokseen kuuluvalla laitteella on IP-osoite, joka kuuluu tiettyyn aliverkkoon. Jokaiseen IP-osoitteeseen yhdistyy siis aina aliverkon peite. Tyypillisesti yksi aliverkkoon kuuluvista IP-osoitteista on määritelty yhdyskäytäväksi. Yhdyskäytävä on varsinaisesti ensimmäinen laite, joka toimii verkkokerroksella yhdistäen aliverkot toisiinsa. Jos siis esimerkiksi tietyssä verkossa oleva kone haluaa kommunikoida muissa verkoissa oleviin koneisiin, täytyy sille määritellä vähintään kolme verkkokerrokseen yhdistettävää asiaa. Nämä asiat ovat IP-osoite eli address, aliverkon peite eli netmask ja yhdyskäytävä eli gateway.


Verkkokerros


IP-osoitteistus on ollut muutaman vuoden ajan murroksessa. Tämän hetkiset verkot käyttävät lähes 100-prosenttisesti version 4 osoitteistusta. Tämän version osoitteet ovat muotoa aa.bb.cc.dd. Osoite on 32 bittinen, joka on erotettu neljään 8 bittiseen numeroon eli käytännössä luvut 0-255. Osoitteet jaotellaan tyyppillisesti julkisiin ja yksityisiin eli niin sanottuihin privaatteihin osoitteisiin. Koska privaatteja osoitteita ei koskaan reititetä ISP:n verkkoon, on NAT-toiminnon käyttö on aina pakollista. Tämä on johtanut siihen, että tämän osoitteistuksen yhteydet ovat suurimmaksi osaksi Host-to-Server-tyyppisiä. Tämä taasen on johtanut siihen, että verkon palvelimet ovat valtavan kuormitettuja ja erittäin kriittisessä asemassa olevia. Jos halutaan ohittaa NAT:n käyttö, tarvitsee jokaiselle tilaajalle olla eriteltyn' oma julkinen osoitealue. Osoitealueiden pääorganisointi on hajautettu maanosittain, joista alla olevista linkeistä löytyy muutama. Näiden organisaatioiden alla on yleensä teleoperaattorit, jotka jakavat osoitteita vaihtelevin hinnoin asiakkailleen.

RIPE
ARIN
APNIC

IPv4-verkoissa jokaiseen aliverkkoon yhdistetään aina broadcast-osoite. Tätä osoitetta käytetään kuten tavallista osoitetta, mutta oletuksena kaikki verkossa olevat laitteet kuuntelevat sitä. Osoitetta käytetään moneen tarkoitukseen, joista yksi on osoitteiden jakaminen. Tämä toteutetaan yleisesti DHCP:llä, joka on oma ohjelmansa. Tämä ohjelma voi olla käynnissä reitittimissä, mutta hyvin paljon käytetään vaihtoehtoa, jossa ohjelma pyörii erillisellä tietokoneella. Tällaisesta tietokoneesta käytetään yleensä nimitystä palvelin, jossa DHCP on yksi päällä olevista palvelinohjelmista. DHCP on siis ohjelma, jonka kuka tahansa voi asentaa koneelleen, ja aloittaa osoitteiden jakamisen aliverkkoon.

Verkoissa olevat laitteet tarvitsevat siis osoitteen. Osoite voidaan jakaa edellä mainitulla DHCP:llä tai määritellä kiinteäksi. Kiinteän osoiteen etuna on varmuus eli ei ole sidoksissa osoitteiden jakajiin. Huonona puolena on liikutettavuuden puute eli osoite on käytössä vain yhdessä aliverkossa. Kiinteä osoite asetetaan käyttöjärjestelmissä eri tavoin, sillä esimerkiksi Linuxissa on hakemistossa /etc/networks tiedosto nimeltä interfaces, jossa osoite on määritetty. Suosituksena on, että palvelinkäytössä olevilla koneille määritellään osoite kiinteästi.

DHCP:n hyvä puoli on dynaamisuus eli tarjotaan osoite käyttöön koneelle sen ollessa verkossa. Ongelmana on DHCP:n kriittisyys ja kommunikoinnin tehottomuus. Käytännössä siis DHCP-palvelun kupsahtaessa, koko verkon toiminta on epävakaata. Koneet, jotka ovat saaneet osoitteen toimivat hyvin, mutta uusille koneille ei jaeta osoitteita. Lisäksi DHCP käyttää osoitteiden jakamiseen mainittua broadcast-osoitetta eli käytännössä koko aliverkko osallistuu yhden osoitteen jakamiseen. Toinen huono puoli eli kommunikoinnin tehottomuus korostuu tilanteessa, jossa verkossa on häiriköivä DHCP-palvelin. Häirikköpalvelin jakaa koko aliverkkoon toimimattomia osoitteita, jolloin käyttöjärjestelmän tehtävänä on tutkia osoitteen kelvollisuus.

Osoitteistus on tärkeä osa verkon toimintaa, mutta se ei vielä toimivaan ratkaisuun riitä. Ensimmäinen ongelma on osoitteiden muoto, sillä ihminen muistaa paremmin kirjaimia ja sanoja kuin numeroita. Numero-kirjain-muutos on tehtävä jossain. Yleisesti tämän tehtävän hoitaa aliverkko-, verkko-, organisaatio-, alue- tai maakohtainen DNS-palvelin. Tämä palvelu on erittäin kriittisessä roolissa, sillä palvelun kaatuessa verkon normaalikäyttäjien toiminta keskeytyy välittömästi. DHCP välttämättömien osoitteiden jakajana ja DNS välttämättömien muunnoksien tekijänä, ovat huomionarvoisimpia verkkojen palveluista.

Osoitteella ja DNS-palvelulla päästään kommunikoimaan verkossa järkevällä tavalla. Usein verkko on haluttu rajata koskemaan vain tiettyjä henkilöitä, jolloin pitää olla tapa suorittaa käyttäjäntunnistusta. Tunnistamiseen on hirvittävä määrä erilaisia tapoja, mutta yleisesti jokaisella hekilöllä on tunnus-salasana-pari, joka sijaitsee jossain verkossa. Käyttäjän tullessa autentikointialueen reunalle, häneltä kysytään vastaava tunnus-salasana-pari, jota verrataan verkossa olevaan. Jos pari on sama, annetaan käyttäjälle lupa eli tiketti pääsyoikeusalueeseen. Tikettipalveluita, tikettityyppejä, alueita ja käyttäjiä on valtava määrä erilaisia, joten niihin asioihin keskitytään muissa koulutuksissa.

IPv6

IPv6 on parannettu versio jo kauan käytössä olleeseen 4-versioon. IPv6 tulee muuttamaan niitä asioita, jotka IPv4-verkoissa on koettu ongelmallisiksi. Suurimmat ongelmat IPv4-verkoissahan liittyvät muun muassa julkisten osoitteiden vähyyteen, verkon sisäiseen kommunikointiin ja yhden solmun ongelmaan. Tekniikoissa on paljon samaa, kuten esimerkiksi aliverkottaminen, mutta suurimmaksi osaksi erot ovat suuret. Suurin ero on ajatustasolla, sillä IPv6-verkot on tarkoitettu Host-to-Host-tyyppiseksi eli päinvastoin kuin nykyiset IPv4-verkot. Niinpä esimerkiksi IPv6-verkkojen määritelmän mukaan kaikki verkon laitteet ovat solmuja (node), joista jokainen on joko isäntä eli host tai reititin eli router.

Suurin ja näkyvin ero on osoitteistus. Osoitteen pituus 128 bittiä ja se muodostuu kahdeksasta neljän heksadesimaalin sarjasta. Pituuden lisäksi osoitteet jaotellaan eri alueisiin, jotka ovat Global Unicast, Unique Local Unicast, Link Local Unicast ja Multicast. Global Unicast vastaa normaalia julkista osoitetta, joka on saavutettavissa mistä tahansa verkosta. Unique Local Unicast on paikallisten verkkojen käyttöön tarkoitettu osoitealue, joka periaatteessa vastaa IPV4:n privaatteja osoitealueita. Link Local Unicast on linkkikohtainen osoite, joka on tarkoitettu aliverkon sisäiseen kommunikaatioon. Käytännössä samalla koneella voisi olla yhtä aikaa käytössä seuraavat osoitteet:

2001:1bc8:0000:0000:0000:0000:0000:0001
fc00:0000:0000:0001:0212:f0ff:feb2:0e40
fe80:0000:0000:0000:0212:f0ff:feb2:0e40

Aliverkottaminen tapahtuu lähes samalla tavalla kuin edellisessäkin versiossa. Suurimman poikkeuksen tekevät aliverkon maskin pituus ja sen yhdistäminen osoitealueeseen. Maskin pituus on välillä 0-128 ja sen merkinnässä käytetään /maski-tapaa. Osoitteiden merkinnässä nollasarjat korvataan yleensä kahdella ::-merkillä. Kokonaisuus näyttää siis tältä:

2001:1bc8:0000:0000:0000:0000:0000:0000/64 => Osoitteet väliltä 2001:1bc8:0000:0000:0000:0000:0000:0000 - 2001:1bc8:0000:0000:ffff:ffff:ffff:ffff
2001:1bc8::/64 => Osoitteet samat kuin yllä eli 2001:1bc8::0 - 2001:1bc8::ffff:ffff:ffff:ffff
fe80:0000:0000:0000:0212:f0ff:feb2:0e40 => fe80::0212:f0ff:feb2:0e40
fc00:0000:0000:0001:0212:f0ff:feb2:0e40/48 => Osoite aliverkosta väliltä fc00::0 - fc00::ffff:ffff:ffff:ffff:ffff

Verkkojen käyttämisessä ja osoitteistuksessa on paljon tuttuja piirteitä paitsi, että käytössä olevien osoitteiden määrä on monikertainen verrattuna edelliseen. Operaattoreiden asiakkailleen jakamat osoitealueet ovat aina vähintään peitteellä 64, jolloin asiakkaalle jää käytettäväksi hurjat 18 446 744 073 709 551 616 osoitetta. Nämä osoitteet ovat jaettavissa koneiden ja muiden laitteiden käyttöön. Huomioitava on myös se, että kaikki osoitteet ovat siis julkisia.

Osoitteiden muodon lisäksi on muuttunut osoitteiden jakotapa. Jakaminen voi tapahtua kolmella tavalla, eli perinteisen DHCP:n ja kiinteäksi asettamisen lisäksi on käytettävissä autokonfiguraatio. Autokonfiguraatiolla laite päättelee itse osoitteensa verkosta saatavilla olevista tiedoista. Tällaisissa tapauksissa osoite on aina sidottu MAC-osoitteeseen, ja tämä sidos tunnetaan nimellä EUI-64. Verkon toiminnallisuus ei ole riippuvainen DHCP-palvelin toiminnasta, vaan laitteilla on aina saatavilla osoite. DHCP voidaan toki ottaa käyttöön, jolloin DNS-palveluun liittyvät asiat voivat helpottua. DHCP:n käyttö ei ole muutenkaan yhtä ongelmallista kuin aikaisemmin, sillä IPv6 ei tunne broadcast:a eikä ARP:a olleenkaan. Nämä ovat korvattu täysin Multicast-liikennöinnillä.

IPv6 käyttää Multicastia valtavaan määrään asioita. Esimerkiksi koneilla ei ole enää ARP-taulua, vaan tämä hoidetaan Neighbor Discovery-protokollalla. Tätä käytetään siis samassa aliverkossa tapahtuvaan liikennöintiin, ja oleellisin muutos on, ettei tähän proseduuriin osallistu koko verkko. Näinhän tapahtuu IPv4-verkoissa broadcast-osoitteen ja ARP:n ansiosta. Multicast tuo verkkoon jouhevuutta ja varmuutta, jolloin verkon robustisuus paranee.

IPv6-version käyttöönotto on vielä alan lehtien ja julkaisujen mukaan lapsenkengissä. Tämä on osakseen totta, jos katsotaan asiaa yleisesti saatavilla olevien liittymien kannalta. Tekniikan käyttöönotossa suurin pullonkaula on tällä hetkellä operaattorit. Sillä suurin osa sovelluksista ja käyttöjärjestelmistä tukee jo kyseistä tekniikka, eli organisaatioiden sisällä on jo lähes täysi valmius käyttöönotolle. Mitä IPv6 verkoissa sitten muuttaa, on ainakin käyttövarmuus, huolettomuus ja tietoturva.

Ylemmät kerrokset

Edellisessä esiteltyjen kerroksien tarkoituksena on yhdistää eri aliverkoissa olevat koneet. Kerrokset siis huolehtivat siitä, että koneen ottaessa yhteyttä tiettyyn osoitteeseen, yhteys ohjautuu perille.

Ylemmät kerrokset ovat asiakas- ja palvelinkohtaisia. Päävastuu laitteistojen ohjelmistoilla!

Ylemmät kerrokset keskittyvät sovelluksiin, joiden toiminta on täysin ohjelmien tekijöiden vastuulla. Yhteistä kaikille sovelluksille on IP-osoite, johon sovellus kytkeytyy avaten samalla portin. Portteja on käytössä kaikkiaan 65536, joista ensimmäiset 1024 ovat niin sanottuja Well Known Ports. Seuraavat portit aina porttiin 49151 asti on myös sovelluskohtaisesti rekisteröity. Porttien käyttöä yrittää organisoida IANA, mutta jokainen voi omaan sovellukseensa valita käytännössä lähes minkä portin tahansa.

Ylemmät kerrokset lyhykäisyydessä

Alla esimerkki ohjelmasta, joka kytkeytyy tiettyy osoitteeseen, avaa portin ja jää odottamaan tulevia yhteydenottoja. Yhteyden tulessa kyseiseen osoitteeseen ja avattuun porttiin, asiakkaan lähete ohjataan muuttujaan. Muuttujan sisältö voidaan ohjata mihin vain, vaikkapa tiedostoon. Ohjelma on toteutettu PHP-kielellä, mutta toimintalogiikka on lähes täysin sama millä ohjelmointikielellä tahansa.

<?
// Asetetaan muuttujat
$osoite = "192.168.1.99";
$portti = 1234;
// Jätetään ohjelma odottamaan yhteyksiä
set_time_limit(0);
// Luodaan soketti
$soketti = socket_create(AF_INET, SOCK_STREAM, 0) or die("Soketin luonti ei onnistunut\n");
// Liitetään soketti, IP-osoite ja portti yhteen
socket_bind($soketti, $osoite, $portti) or die("Soketin liittäminen epäonnistui\n");
// Avataan soketti odottamaan yhteydenottoja, max kolme samanaikaista
socket_listen($soketti, 3) or die("Soketin avaaminen ei onnistunut\n");
// Hyväksytään tulevat yhteydet
$asiakas = socket_accept($soketti) or die("Tulevaa yhteyttä ei hyväksytty\n");
// Luetaan asiakkaan lähete muistiin, 1024 tavua kerrallaan
$lahete = socket_read($asiakas, 1024) or die("Lähetteen luku epäonnistui\n");
// Suljetaan soketti
socket_close($soketti);
?>

Sovellukset siis kommunikoivat keskenään käyttäen edellä mainittuja kerroksia. Yhteenvetona voisi todeta, ettei yksikään sovellus toimi ilman IP-osoitetta, eikä yksikään aliverkko toimi ilman IP-osoitteistusta. Yksinään, ilman verkkoa ja sovelluksia, kone on nykyisin lähes turha kapistus. Kaikki kerrokset, koneet ja sovellukset muodostavat toisiaan täydentävän kokonaisuuden, joka ei toimi ilman kaikkien osapuolien sopuisaa yhteiseloa!


Sisällysluetteloon


Verkon analysointi

Tietoverkko muodostuu siis OSI-mallin mukaisista kerroksista. OSI-malli on tuttu, tavalla taikka toisella, lähes jokaisesta tietoliikenneyhteydestä. Otetaan esimerkkinä analoginen puhelin, jossa alimmaisen kerroksen muodostaa puhelinkaapeli. Siitä ylöspäin on puhelin ja puhelinkeskus, johon otetaan yhteys nostettaessa luuria. Seuraavaksi tulee reititys, jossa puhelinkeskus ottaa yhteyttä soittajan antaman numeron keskukseen. Kyseinen keskus ottaa yhteyttä vastaanottajan puhelimeen, joka alkaa soida. Vastaanottaja nostaa luurin ja keskus avaa yhteyden soittajan ja vastaanottajan välille. Tämän jälkeen, josa laitteet ovat kunnossa, puheyhteys toimii.

Puhelinverkon olennaisia osia ovat siis puhelimet, keskuksien ja puhelimien välinen kaapelointi, keskukset, keskuksien välinen kaapelointi ja luonnollisesti keskustelijat. Jos yksikin edellisistä asioista mättää, yhteys ei toimi. Käyttäjälle tämä näkyy puhelun pätkimisenä, puhelun katkeamisena, yhdistämisongelmana tai totaalisena puhelun yhdistämättömyytenä. Erilaiset ongelmat aiheuttavat mitä ihmeellisimpiä vikoja. Tästä syystä ympäristön kokonaisvaltainen ymmärtäminen helpottaa vikojen selvittämistä ja tehostaa toimintaa.

Koko Internet sekä yleisimmät käytössä olevat tietoverkot perustuvat samaan palvelin-asiakas-arkitehtuuriin, jossa palvelin on tietyssä osoitteessa, ja sillä on tietyissä porteissa tiettyjä palvelinohjelmistoja aktiivisena. Ensimmäisenä toimiva yhteys vaatii jokaisessa linkissä toimivan kaapeloinnin. Kaapeloinnin mittaamiseen on olemassa paljon erilaisia mittalaitteita, joista esimerkkeinä voisi mainita IDEALin- ja Fluken-mittalaitteet. Seuraavaksi yhteys vaatii toimivan loogisen verkon, jolle on olemassa paljon erilaisia analysointijärjestelmiä ja -työkaluja.

Toimivassa loogisessa verkossa on IP-osoitteita ja portteja, joita hallinnoi käyttöjärjestelmä. Siis jokaisessa loogisen verkon toimintaan vaikuttavissa laitteessa on käyttöjärjestelmä. Oli kysymys sitten kytkimestä, reitittimestä, langattomasta tukiasemasta tai palvelimesta, sen sisällä on aina käyttöjärjestelmä. Yleisesti tunnetaan nimi sulautettu järjestelmä, joka yhdistetään monesti kyseisiin laitteisiin. Sulautettu järjestelmä on siis itse laite sekä käyttöjärjestelmä, joka erittäin useasti Linux-pohjainen. Tästä syystä työasemiin ja palvelimiin asennettavat Linuxit tarjoavat valtavan määrän erilaisia työkaluja, joilla päästään analysoimaan loogisen verkon toimintaa.

Paikallinen Linux

Alimmaisena OSI-mallissa on fyysinen kerros, joka yleisesti näkyy verkkokorttina. Paikallisessa Linuxissa pitää ensimmäisenä selvittää, että onko järjestelmä tunnistanut kyseisen kortin. Tämä tapahtuu esimerkiksi alla olevalla komennolla.

main:~# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:03.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 40)
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01)
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)

Edellisestä huomataan, että järjestelmän PCI-väylään 00:03.0 on kytketty kortti, joka tunnetaan Ethernet controller-tyyppiseksi. Järjestelmässä on siis verkkokortti. Seuraavana pitää tarkistaa, että kortille on löytynyt ajuri ja se on ladattu järjestelmään. Linuxissa ajurit ovat lähes aina kernelin moduleja.

main:~# lspci -vv -s 00:03.0
00:03.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 40)
        Subsystem: Advanced Micro Devices [AMD] PCnet - Fast 79C971
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 64 (1500ns min, 63750ns max)
        Interrupt: pin A routed to IRQ 11
        Region 0: I/O ports at c020 [size=32]
        Region 1: Memory at f0000000 (32-bit, non-prefetchable) [size=4K]
        Region 2: Memory at f0080000 (32-bit, non-prefetchable) [size=512K]
        Kernel driver in use: pcnet32
        Kernel modules: pcnet32

Laitteen tunnistamisen jälkeen, siitä luodaan tyypin perusteella kernelin-sisäiseen tiedostojärjestelmään käyttäjälle näkyvä rajapinta. Nämä rajapinnat tunnetaan normaalien verkkokorttien ollessa kyseessä alulla eth

main:~# cd /sys/class/net
main:/sys/class/net# ls
eth0  lo
main:~# cd /sys/class/net/eth0/
main:/sys/class/net/eth0# cat uevent
PHYSDEVPATH=/devices/pci0000:00/0000:00:03.0
PHYSDEVBUS=pci
PHYSDEVDRIVER=pcnet32
INTERFACE=eth0
IFINDEX=2

Vaihtoehtoisesti voidaan käyttää myös alla olevaa komentoa

main:~# udevinfo -a --path=/sys/class/net/eth0
----
 looking at device '/class/net/eth0':
   KERNEL=="eth0"
   SUBSYSTEM=="net"
   DRIVER==""
   ATTR{addr_len}=="6"
   ATTR{dev_id}=="0x0"
   ATTR{iflink}=="2"
   ATTR{ifindex}=="2"
   ATTR{features}=="0x0"
   ATTR{type}=="1"
   ATTR{link_mode}=="0"
   ATTR{address}=="08:00:27:ae:ca:4c"
   ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
   ATTR{carrier}=="1"
   ATTR{dormant}=="0"
   ATTR{operstate}=="unknown"
   ATTR{mtu}=="1500"
   ATTR{flags}=="0x1003"
   ATTR{tx_queue_len}=="1000"

 looking at parent device '/devices/pci0000:00/0000:00:03.0':
   KERNELS=="0000:00:03.0"
   SUBSYSTEMS=="pci"
   DRIVERS=="pcnet32"
----

Järjestelmässä on siis verkkokortti, joka tunnetaan nimellä eth0. Kortin MAC-osoite on 08:00:27:ae:ca:4c. Seuraavaksi on vuorossa linkkiyhteyden muodostaminen. Alla on esitelty kaksi komentoa, joilla voidaan hallita yhteyksien nopeuksia ja muita ominaisuuksia.

main:~# mii-tool -v
eth0: negotiated 100baseTx-FD, link ok
  product info: AdHoc AH101LF rev 11
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

main:~# ethtool eth0
Settings for eth0:
       Supported ports: [ TP MII ]
       Supported link modes:   10baseT/Half 10baseT/Full
                               100baseT/Half 100baseT/Full
       Supports auto-negotiation: Yes
       Advertised link modes:  10baseT/Half 10baseT/Full
                               100baseT/Half 100baseT/Full
       Advertised auto-negotiation: Yes
       Speed: 100Mb/s
       Duplex: Full
       Port: MII
       PHYAD: 0
       Transceiver: internal
       Auto-negotiation: on
       Current message level: 0x00000007 (7)
       Link detected: yes

Nyt on siis kaksi alimmaista OSI-mallin kerrosta kunnossa. Kortti on tunnistettu, sillä on ajuri, kortilla on nimi ja linkkiyhteys kunnolla pystyssä. Seuraavaksi pitää kortille asettaa IP-osoite, jonka jälkeen kortista käytetään nimitystä verkkoliityntä. Osoite voidaan asettaa monella eri komennolla, joista perinteisimmät ovat alla. Osoitteistukseen liittyy läheisesti esimerkiksi Debianissa kansion /etc/network tiedosto interfaces, jossa annetaan järjestelmän käynnistysvaiheessa verkkokortille määriteltävät asetukset.

main:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:ae:ca:4c
          inet addr:192.168.11.15  Bcast:255.255.255.255  Mask:255.255.255.0
          inet6 addr: fc00::10/7 Scope:Global
          inet6 addr: fe80::a00:27ff:feae:ca4c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:41443 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30354 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:55548350 (52.9 MiB)  TX bytes:2922248 (2.7 MiB)
          Interrupt:11 Base address:0xc020

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:92 errors:0 dropped:0 overruns:0 frame:0
          TX packets:92 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:6016 (5.8 KiB)  TX bytes:6016 (5.8 KiB)

main:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
   link/ether 08:00:27:ae:ca:4c brd ff:ff:ff:ff:ff:ff
   inet 192.168.11.15/24 brd 255.255.255.255 scope global eth0
   inet6 fc00::10/7 scope global
      valid_lft forever preferred_lft forever
   inet6 fe80::a00:27ff:feae:ca4c/64 scope link
      valid_lft forever preferred_lft forever

Järjestelmä on verkossa ja sillä on osoite. Jos halutaan kommunikoida muihin aliverkkoihin, tarvitaan yhdyskäytävän osoite. gateway:n hallintaan on myös olemassa kaksi perinteistä komentoa.

main:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.11.0    *               255.255.255.0   U     0      0        0 eth0
default         192.168.11.1    0.0.0.0         UG    0      0        0 eth0

main:~# ip route
192.168.11.0/24 dev eth0  proto kernel  scope link  src 192.168.11.15
default via 192.168.11.1 dev eth0

Nyt kone on liitetty verkkoon. Sillä on kolme alimmaista OSI-mallin kerrosta käyetettävissä, joten sillä voidaan ottaa yhteys muihin aliverkkoihin, ja siihen voidaan ottaa yhteys muista aliverkoista. Jos halutaan kommunikoida DNS-palvelua käyttäen, määritellään siihen liittyvät asiat kansion /etc tiedostoon resolv.conf.

Järjestelmä on valmiina palvelinohjelmien asennukseen. Linuxiin on saatava valtava määrä erilaisia palvelinohjelmia, joiden käyttäytymisessä on paljon samaa. Ensimmäinen yhteinen asia on porttiin lukkiutuminen, eli varataan palvelinohjelman käyttöön tietty portti. Seuraavana tulee kysymys, että mitä portteja on käytössä. Toisekseen, mikä ohjelma porttia käyttää. Tähänkin asiaan löytyy erilaisia komentoja, joista alla on esitetty kaksi.

main:~# netstat -lunetp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address      State       User       Inode       PID/Program name
tcp        0      0 127.0.0.1:837        0.0.0.0:*            LISTEN      0          4756        1933/famd
tcp        0      0 0.0.0.0:52583        0.0.0.0:*            LISTEN      0          3937        1384/rpc.statd
tcp        0      0 0.0.0.0:111          0.0.0.0:*            LISTEN      0          3892        1373/portmap
tcp        0      0 192.168.11.15:53     0.0.0.0:*            LISTEN      107        21530       5516/named
tcp        0      0 127.0.0.1:53         0.0.0.0:*            LISTEN      107        21528       5516/named
tcp        0      0 127.0.0.1:953        0.0.0.0:*            LISTEN      107        21531       5516/named
tcp        0      0 127.0.0.1:25         0.0.0.0:*            LISTEN      0          4681        1903/exim4
tcp6       0      0 :::80                     :::*            LISTEN      0          23823       6152/apache2
tcp6       0      0 :::53                     :::*            LISTEN      107        21523       5516/named
tcp6       0      0 ::1:953                   :::*            LISTEN      107        21532       5516/named
udp        0      0 0.0.0.0:39301        0.0.0.0:*                        0          3934        1384/rpc.statd
udp        0      0 192.168.11.15:53     0.0.0.0:*                        107        21529       5516/named
udp        0      0 127.0.0.1:53         0.0.0.0:*                        107        21527       5516/named
udp        0      0 0.0.0.0:67           0.0.0.0:*                        0          24089       6348/dhcpd3
udp        0      0 0.0.0.0:68           0.0.0.0:*                        0          19885       4891/dhclient3
udp        0      0 0.0.0.0:712          0.0.0.0:*                        0          3926        1384/rpc.statd
udp        0      0 0.0.0.0:111          0.0.0.0:*                        0          3891        1373/portmap
udp6       0      0 :::53                     :::*                        107        21522       5516/named
udp6       0      0 :::38366                  :::*                        104        4466        1635/avahi-daemon:
udp6       0      0 :::5353                   :::*                        104        4465        1635/avahi-daemon:

main:~# ss -tupan
Netid State      Recv-Q Send-Q   Local Address:Port      Peer Address:Port
udp   UNCONN     0      0                    *:39301                *:*      users:(("rpc.statd",1384,7))
udp   UNCONN     0      0        192.168.11.15:53                   *:*      users:(("named",5516,514))
udp   UNCONN     0      0            127.0.0.1:53                   *:*      users:(("named",5516,513))
udp   UNCONN     0      0                    *:67                   *:*      users:(("dhcpd3",6348,5))
udp   UNCONN     0      0                    *:68                   *:*      users:(("dhclient3",4891,5))
udp   UNCONN     0      0                    *:712                  *:*      users:(("rpc.statd",1384,5))
udp   UNCONN     0      0                    *:111                  *:*      users:(("portmap",1373,4))
udp   UNCONN     0      0                   :::53                  :::*      users:(("named",5516,512))
udp   UNCONN     0      0                   :::38366               :::*      users:(("avahi-daemon",1635,15))
udp   UNCONN     0      0                   :::5353                :::*      users:(("avahi-daemon",1635,14))
tcp   LISTEN     0      1            127.0.0.1:837                  *:*      users:(("famd",1933,3))
tcp   LISTEN     0      128                  *:52583                *:*      users:(("rpc.statd",1384,8))
tcp   LISTEN     0      128                  *:111                  *:*      users:(("portmap",1373,5))
tcp   LISTEN     0      128                 :::80                  :::*      users:(("apache2",6152,3),("apache2",6155,3),("apache2",6159,3))
tcp   LISTEN     0      3        192.168.11.15:53                   *:*      users:(("named",5516,22))
tcp   LISTEN     0      3            127.0.0.1:53                   *:*      users:(("named",5516,21))
tcp   LISTEN     0      3                   :::53                  :::*      users:(("named",5516,20))
tcp   LISTEN     0      128                ::1:953                 :::*      users:(("named",5516,24))
tcp   LISTEN     0      128          127.0.0.1:953                  *:*      users:(("named",5516,23))
tcp   LISTEN     0      20           127.0.0.1:25                   *:*      users:(("exim4",1903,3))
tcp   ESTAB      0      0        192.168.11.15:58032    74.125.77.100:80     users:(("firefox-bin",2314,12))

Tarinan yhteenveto on siis se, että Linux-käyttöjärjestelmällä varustettu kone kytketään verkkoon tiettyä rajapintaa käyttäen. Yllä on esitelty tilanne, jossa rajapintana on ollut normaali verkkokortti. Koneella on osoite, johon järjestelmään asennetut palvelinohjelmistot ovat liittyneet tiettyä porttia käyttäen. Ei sen ihmeempää, eikä sen kummempaa.. Lopputulosta voidaan kutsua monellakin nimellä, joista ehkä yksi tunnetuimmista on Internet.

Protokolla-analysaattorit

Protokolla-analysaattorilla päästään tutkimaan sitä, että millaista liikennettä verkossa kulkee. Analysaattorille löytyy käyttötarkoituksia valtava määrä, joista yhtenä esimerkki voisi mainita verkko-ongelmien selvittämisen. Analysaattoreiden käytön monipuolinen hallinta on ehdoton edellytys järjestelmien kanssa pelaaville.

TCPDUMP

TcpDump on avoimeen lähdekoodiin perustuva komentoriviltä käytettävä analysaattori. Avoimuudeen mukanaan tuoma satojen protokollien tuki ja komentorivikäytön keveys ovat tehneet tästä työkalusta kerrassaan loistavan. tcpdumpista on saatavana myös Windows-versio, joka kantaa nimeä WinDump.

tcpdump on täysin komentorivipohjainen. Lyhyesti kerrottu, ohjelma lähtee käyntiin komennolla tcpdump ja loppuu näppäinyhdistelmällä CTRL-C. Ohjelmaan käyttöä helpottamaan löytyy erittäin hyvä sisäänrakennettu manuaali, jota pääsee selaamaan alla olevan esimerkin mukaisesti.

main:~# man tcpdump

NAME
      tcpdump - dump traffic on a network

SYNOPSIS
      tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
              [ -C file_size ] [ -F file ]
              [ -i interface ] [ -m module ] [ -M secret ]
              [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
              [ -W filecount ]
              [ -E spi@ipaddr algo:secret,...  ]
              [ -y datalinktype ] [ -Z user ]
              [ expression ]

DESCRIPTION
      Tcpdump prints out a description of the contents of packets on a network interface that match the boolean expression.

Otetaan seuraavana muutama esimerkki ohjelman peruskäytöstä. Ensimmäisenä ohjelman käynnistäminen ja lopettaminen.

main:~# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:52:30.280403 IP 62.78.223.152.www > 192.168.11.12.40696: P 2328282607:2328283027(420) ack 3202637125 win 4565...
13:52:30.282258 IP 192.168.11.15.54361 > 192.168.11.1.domain: 59169+ PTR? 12.11.168.192.in-addr.arpa. (44)
13:52:30.286416 IP 192.168.11.1.domain > 192.168.11.15.54361: 59169 NXDomain* 0/0/0 (44)
13:52:30.287077 IP 192.168.11.15.50953 > 192.168.11.1.domain: 20120+ PTR? 152.223.78.62.in-addr.arpa. (44)
13:52:30.307899 IP 62.78.223.152.www > 192.168.11.12.40696: P 420:840(420) ack 1 win 4565 <nop,nop,timestamp 426541589...
13:52:30.319690 IP 192.168.11.12.40696 > 62.78.223.152.www: . ack 840 win 501 <nop,nop,timestamp 5197519 426541562>
13:52:30.323995 IP 192.168.11.1.domain > 192.168.11.15.50953: 20120 NXDomain 0/0/0 (44)
13:52:30.324620 IP 192.168.11.15.34410 > 192.168.11.1.domain: 56239+ PTR? 1.11.168.192.in-addr.arpa. (43)
13:52:30.328573 IP 192.168.11.1.domain > 192.168.11.15.34410: 56239 NXDomain* 0/0/0 (43)
13:52:30.328969 IP 192.168.11.15.46039 > 192.168.11.1.domain: 48452+ PTR? 15.11.168.192.in-addr.arpa. (44)
13:52:30.333055 IP 192.168.11.1.domain > 192.168.11.15.46039: 48452 NXDomain* 0/0/0 (44)
^C
11 packets captured
14 packets received by filter
0 packets dropped by kernel
main:~#

Tulostus näyttää ensimmäisenä ajan, IP-osoitteen ja portin. Lisäksi se kertoo myös muuta tietoa liikenteessä. Käytännössä 96 tavua jokaisesta paketista, joka verkkoliityntään tulee tai lähtee. Seuraavaksi halutaan saadaa näkymä pelkästään numeromuotoo, eli www- ja domain-nimet pois. Oletusasetuksena liikenne kaapataan, ja tulosteessa näytetään IP-osoitteet ja portit kirjainmuodossa. Tämä toiminto hidastaa kaappamista suurilla liikennemäärillä huomattavasti, sillä DNS-kysely tehdään lähes jokaisen paketin yhteydessä.

main:~# tcpdump -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:03:16.506412 IP 62.78.223.152.80 > 192.168.11.12.40696: P 2337742195:2337743635(1440) ack 3202637125 win 4565 ...
14:03:16.506431 IP 192.168.11.12.40696 > 62.78.223.152.80: . ack 1440 win 501 <nop,nop,timestamp 5359066 427187767>
14:03:16.969640 IP 62.78.223.152.80 > 192.168.11.12.40696: P 1440:1441(1) ack 1 win 4565 <nop,nop,timestamp 427188235 5359066>
14:03:16.969657 IP 192.168.11.12.40696 > 62.78.223.152.80: . ack 1441 win 501 <nop,nop,timestamp 5359181 427188235>
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel

Seuraavana halutaan, ettei portin 80 liikennettä tulosteta ollenkaan. Tämä siksi, että kyseisen portin liikennettä tuntuu suurin osa liikentesstä olevan.

main:~# tcpdump -n not port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:05:52.181179 arp who-has 192.168.11.12 (00:30:1b:47:ce:03) tell 192.168.11.1
14:05:52.181195 arp reply 192.168.11.12 is-at 00:30:1b:47:ce:03
14:05:59.148892 IP 192.168.11.15.53201 > 192.168.11.1.53: 24935+ A? www.google.fi. (31)
14:05:59.162172 IP 192.168.11.1.53 > 192.168.11.15.53201: 24935 6/7/7 CNAME[|domain]
14:05:59.162977 IP 192.168.11.15 > 74.125.77.104: ICMP echo request, id 48665, seq 1, length 64
14:05:59.212036 IP 74.125.77.104 > 192.168.11.15: ICMP echo reply, id 48665, seq 1, length 64
14:05:59.212968 IP 192.168.11.15.53488 > 192.168.11.1.53: 36946+ PTR? 104.77.125.74.in-addr.arpa. (44)
14:05:59.233647 IP 192.168.11.1.53 > 192.168.11.15.53488: 36946 1/4/4 (215)
14:06:00.170272 IP 192.168.11.15 > 74.125.77.104: ICMP echo request, id 48665, seq 2, length 64
14:06:00.218436 IP 74.125.77.104 > 192.168.11.15: ICMP echo reply, id 48665, seq 2, length 64
14:06:00.219409 IP 192.168.11.15.41945 > 192.168.11.1.53: 44750+ PTR? 104.77.125.74.in-addr.arpa. (44)
14:06:00.226176 IP 192.168.11.1.53 > 192.168.11.15.41945: 44750 1/0/0 (79)
^C
12 packets captured
12 packets received by filter
0 packets dropped by kernel

Nyt halutaan tulostukseen myös MAC-osoitteet mukaan. Lisäksi halutaan, ettei aikaleimaa laiteta jokaisen kaapatun paketin mukaan. Se tapahtuu seuraavasti

main:~# tcpdump -n not port 80 -e -t
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
08:00:27:ae:ca:4c > 00:0d:0b:87:7c:5c, ethertype IPv4 (0x0800), length 73: 192.168.11.15.47930 > 192.168.11.1.53: 40878+ A? ..
00:0d:0b:87:7c:5c > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.11.15 tell 192.168.11.1
08:00:27:ae:ca:4c > 00:0d:0b:87:7c:5c, ethertype ARP (0x0806), length 42: arp reply 192.168.11.15 is-at 08:00:27:ae:ca:4c
00:0d:0b:87:7c:5c > 08:00:27:ae:ca:4c, ethertype IPv4 (0x0800), length 409: 192.168.11.1.53 > 192.168.11.15.47930: 40878 ..
08:00:27:ae:ca:4c > 00:0d:0b:87:7c:5c, ethertype IPv4 (0x0800), length 98: 192.168.11.15 > 74.125.77.147: ICMP echo request,..
00:0d:0b:87:7c:5c > 08:00:27:ae:ca:4c, ethertype IPv4 (0x0800), length 98: 74.125.77.147 > 192.168.11.15: ICMP echo reply,..
08:00:27:ae:ca:4c > 00:0d:0b:87:7c:5c, ethertype IPv4 (0x0800), length 86: 192.168.11.15.46685 > 192.168.11.1.53: 49493+ ..
00:0d:0b:87:7c:5c > 08:00:27:ae:ca:4c, ethertype IPv4 (0x0800), length 257: 192.168.11.1.53 > 192.168.11.15.46685: 49493 ..
00:0d:0b:87:7c:5c > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.11.15 tell 192.168.11.1
08:00:27:ae:ca:4c > 00:0d:0b:87:7c:5c, ethertype ARP (0x0806), length 42: arp reply 192.168.11.15 is-at 08:00:27:ae:ca:4c
08:00:27:ae:ca:4c > 00:0d:0b:87:7c:5c, ethertype IPv4 (0x0800), length 98: 192.168.11.15 > 74.125.77.147: ICMP echo request,..
00:0d:0b:87:7c:5c > 08:00:27:ae:ca:4c, ethertype IPv4 (0x0800), length 98: 74.125.77.147 > 192.168.11.15: ICMP echo reply, ..
08:00:27:ae:ca:4c > 00:0d:0b:87:7c:5c, ethertype IPv4 (0x0800), length 86: 192.168.11.15.47268 > 192.168.11.1.53: 17500+ ..
00:0d:0b:87:7c:5c > 08:00:27:ae:ca:4c, ethertype IPv4 (0x0800), length 121: 192.168.11.1.53 > 192.168.11.15.47268: 17500 ..
00:0d:0b:87:7c:5c > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 110: fe80::20d:bff:fe87:7c5c > ff02::1: ICMP6, ..
00:0d:0b:87:7c:5c > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 110: fe80::20d:bff:fe87:7c5c > ff02::1: ICMP6, ..
^C
16 packets captured
16 packets received by filter
0 packets dropped by kernel

Seuraavana halutaan katsoa, että millaista liikennettä porttiin 80 oikein kulkee.

main:~# tcpdump -A -n -t -s 1500 port 80
IP 192.168.11.15.60456 > 213.250.107.183.80: P 1:402(401) ack 1 win 92 <nop,nop,timestamp 5312528 0>
E....q@.@.TX......k..(.P...c.~.....\.B.....
.Q......GET /syotec/Pages/syotec.aspx HTTP/1.1
Host: www.syo.fi
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020409 Iceweasel/3.0.6 (Debian-3.0.6-1)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive 


IP 213.250.107.183.80 > 192.168.11.15.60456: . 1:1449(1448) ack 402 win 65134 <nop,nop,timestamp 24862635 5312525>
E...
4@.x..~..k......P.(.~.........n.z.....
.{_..Q.
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 40239
Content-Type: text/html; charset=utf-8
Expires: Tue, 03 Mar 2009 12:24:16 GMT
Last-Modified: Wed, 18 Mar 2009 12:24:16 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 12.0.0.6219
X-AspNet-Version: 2.0.50727
Date: Wed, 18 Mar 2009 12:24:16 GMT


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<html>

Lopuksi huomataan, että liikenteessä on sellaista, joka halutaan laittaa tiedostoon talteen. Tämä onnistuu seuraavalla komennolla

main:~# tcpdump -A -n -t -s 1500 port 80 > html-liikenne.txt
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes
^C
950 packets captured
950 packets received by filter
0 packets dropped by kernel
main:~# cat html-liikenne.txt     
IP 192.168.11.15.34048 > 194.252.88.100.80: S 1818728347:1818728347(0) win 5840 <mss 1460,sackOK,timestamp ...
E..<."@.@.r.......Xd...Plg..........I..........
.Rv.........
IP 194.252.88.100.80 > 192.168.11.15.34048: S 3648910991:3648910991(0) ack 1818728348 win 65535 <mss 1380>
E..,.*........Xd.....P...}..lg..`...W......d..
IP 192.168.11.15.34048 > 194.252.88.100.80: . ack 1 win 5840
E..(.#@.@.r.......Xd...Plg...}..P...X...
IP 192.168.11.15.34048 > 194.252.88.100.80: P 1:451(450) ack 1 win 5840
E....$@.@.p.......Xd...Plg...}..P.......GET /uutiset/kotimaa/2009/03 /etelapohjalaiselta_sikatilalta_loytyi ...
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.10 (like Gecko) (Debian)
Referer: http://www.yle.fi/
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate
Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5
Accept-Language: fi, en
Host: yle.fi
Connection: Keep-Alive

tcpump on aivan valtavan monipuolinen työkalu. Sillä voidaan käytännössä seurata mitä tahansa verkkoliikennettä ja poimia sieltä esiin juuri ne asiat, jota varten liikennettä seurataan. Kerrassaan loistava ohjelma...

Wireshark

Wireshark on graafinen analysaattori, joka käyttää samaa kirjastoa libpcap kuin tcpdump. Ohjelman toimintalogiikka on täysin sama kuin tcpdumpilla, mutta lisämausteena on graafinen käyttöliittymä. Wireshark löytyy Debianin ja Ubuntun pakettivarastoista eli sen voi asentaa esimerkiksi Synapticilla. Windows-versio löytyy ohjelman kotisivuilta ja vastaa lähes täysin Linux-versiota.

Seuraavassa on muutama esimerkkikuva ohjelmasta ja sen käyttämisestä. Ohjelman käynnistyessä pitää ensimmäisenä valita verkkoliityntä, jonka liikennettä halutaan kaapata. Samalla voidaan valita kaappaukseen liittyviä asetuksia.

Verkkoliittymän valinta

Kaappauksen aikana liittymään rullaa kaapattua liikennettä. Kaappaus voidaan pysäyttää, ja kaapattu liikenne näkyyy ruudulla.

Kaapattua liikennettä

Liikennettä voidaan tutkia paketti kerrallaan. Oletuksena paketista näkee jo lähes kaiken oleellisen.

Verkkoliittymän valinta

Ohjelma tarjoaa valmiita suodattimia, joita voidaan käyttää liikennettä tutkiessa. Vaihtoehtoisesti voidaan määrittää myös omia.

Verkkoliittymän valinta

Suodattimet voidaan määritellä jo kaappausvaiheessa. Näin säästetään resursseja, koska liikennettä ei tallenneta mihinkään välimuistiin.

Verkkoliittymän valinta

Tietoturva

Verkon tietoturva on asia, josta puhutaan paljon. Harmittava puoli on se, että usein käy niin, ettei nähdä sitä kuuluisaa metsää puilta. Koska verkkomme on rakennettu kerrosmaisesti, eli OSI-mallin mukaisesti, keskittymällä yhden kerroksen turvaan pyllistetään samalla muille. Jos ihmiset tietäisivät, että millaisessa ympäristössä he lähettävät hyvinkin arkaluonteisia tietoja, romahtaisi liikenteen määrä siihen. Toisaalta, kuinka paljon nykyinen Internet on avartanut ihmisten ajatusmaailmaa eli kumpi on tärkeämpi käytettävyys vai turvallisuus. Tässä vaiheessa ei voi olla mainitsematta GSM-tekniikan hyvyyttä. GSM on edelleen yksi turvallisimmista kommunikointitekniikoista ja suurin syy tähän on mielestäni aivan erilaiset lähtökohdat kuin Internetissä oli. Mutta onhan toki Internetillä hieno ja pitkä historia.

Internetin tietoturvallisuudessa on ongelmia, ja se on fakta. Pitkä historian mukanaan tuoma painolasti on luonnollisesti yksi syy. En kuitenkaan voi olla ottamatta esille sitä asiaa, että kuinka paljon turvallisuuden heikosta tasosta voi syyttää lähes monopoliasemassa olevaa Yhdysvalloissa pääkonttoriaan pitävää ohjelmistovalmistajaa. Mitkä olisivat kyseisen yrityksen motiviitit parantaa turvallisuutta? Turvallisuuden parantamista olisi varmasti ensimmäisenä vaatimassa isäntämaa, vai olisiko? Siis suljetaanko silmät pahalta uskottelemalla, että kaikki on kunnossa? Vai parannetaanko järjestelmää niin, että kaikki on todellakin kunnossa?

Seuraavaksi on esitelty työkaluja, jotka paljastavat verkon ja tekniikan haavoittuvuuksia. Huomioitavaa tässä vaiheessa on se, että näiden työkalujen käyttö luokitellaan rikolliseksi toiminnaksi. Tämä luokittelu astuu voimaan siinä vaiheessa, kun työkalujen käyttö ulottuu oman verkon ulkopuolelle. Työkaluja voidaan, ja pitää, käyttää siis tietyssä määrin omassa sisäverkossa. Työkalut ovat erittäin käteviä ja monessa tapauksessa helpottavat päivittäisiä toimia.

Työkalut käyttävät suurimmaksi osaksi tämän hetkisten verkkojen ongelmallisinta ominaisuutta hyväkseen. Tämä ominaisuus on esitelty esimerkiksi tässä artikkelissa seuraavasti:

Every time someone needs to talk, be it to a router or another host, they have to send an ARP request. Also, there are broadcast packets that aren't necessarily limited to ARP, which everyone hears. When there are only 255 devices on a /24 subnet, the amount of broadcast packets is fairly limited. It is important to keep this number low, because every time a packet destined for a specific host or a broadcast address is seen, the host must handle the packet. A hardware interrupt is created, and the kernel of the operating system must read enough of the packet to determine whether or not it cares about it.

Tämä tarkoittaa lyhykäisyydessään sitä, että aina kun verkkoon lähetetään ARP- eli Broadcast-paketti, se leviää kaikille. Jokainen verkon laite tekee keskeytyksen ja vastaa pakettiin, mikäli se on kohdistettu sille. Verkko on siis hyvin, liian hyvin, haavoittuva. Tämä asia ei koske enää IPv6-tekniikassa, sillä siellä ei tunneta broadcast-asiaa laisinkaan.

NMap

NMAP on työkalu, joka taipuu mitä erilaisimpiin tarkoituksiin. NMAP:lla saadaan selvitettyä aliverkossa olevat laitteet, sekä olennaisia tietoja niistä ja niiden toiminnasta. Komentorivipohjaisella työkalulla selvitetään näppärästi laitteiden MAC- ja IP-osoitteet, sekä portit, joita laitteet kuuntelevat. Alla ohjelman manuaalissa annettu määrittely

NAME
      nmap - Network exploration tool and security / port scanner

SYNOPSIS
      nmap [Scan Type...] [Options] {target specification}

DESCRIPTION
      Nmap (“Network Mapper”) is an open source tool for network exploration
      and security auditing. It was designed to rapidly scan large networks,
      although it works fine against single hosts.  Nmap uses raw IP packets
      in novel ways to determine what hosts are available on the network,
      what services (application name and version) those hosts are offering,
      what operating systems (and OS versions) they are running, what type of
      packet filters/firewalls are in use, and dozens of other
      characteristics. While Nmap is commonly used for security audits, many
      systems and network administrators find it useful for routine tasks
      such as network inventory, managing service upgrade schedules, and
      monitoring host or service uptime.

Seuraavassa on esitetty muutama esimerkki ohjelman käytöstä, joista ensimmäisenä on lähes raskain mahdollinen kysely.

ville@home-desktop:~$ nmap -PR 192.168.100.0/24

Starting Nmap 4.53 ( http://insecure.org ) at 2008-10-30 12:55 EET
Interesting ports on 192.168.100.1:
Not shown: 1713 closed ports
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:19:E0:10:F8:FD (Tp-link Technologies Co.)

Interesting ports on warehouse (192.168.100.5):
Not shown: 1708 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
80/tcp   open  http
139/tcp  open  netbios-ssn
515/tcp  open  printer
548/tcp  open  afpovertcp
8080/tcp open  http-proxy
MAC Address: 00:0D:0B:74:39:1A (Buffalo)
 
Interesting ports on 192.168.100.11:
Not shown: 1706 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
139/tcp  open  netbios-ssn
389/tcp  open  ldap
443/tcp  open  https
445/tcp  open  microsoft-ds
3306/tcp open  mysql
MAC Address: 00:12:F0:B2:0E:40 (Intel Corporate)

Edellinen komento näkyy verkossa käytännössä alla olevalta. Ohjelma käyttää toimintaansa ARP-kyselyjä, jonka se suorittaa jokaiselle määritellylle osoitteelle.

00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.1 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.2 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.3 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.4 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.5 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.6 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.7 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:07:40:b7:cb:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.100.8 (ff:ff:ff:ff:ff:ff) tell 192.168.100.26
00:19:e0:10:f8:fd > 00:07:40:b7:cb:6f, ethertype ARP (0x0806), length 60: arp reply 192.168.100.1 is-at 00:19:e0:10:f8:fd
00:19:e0:12:14:15 > 00:07:40:b7:cb:6f, ethertype ARP (0x0806), length 60: arp reply 192.168.100.7 is-at 00:19:e0:12:14:15

IP- ja MAC-osoitteen selvittämisen jälkeen siirrytään portteihin. Jokainen löydetty, eli aktiivinen, IP-osoite skannataan läpi portti portilta. Jos portista tulee vastaus, on siellä silloin palvelinohjelma käynnissä.

00:07:40:b7:cb:6f > 00:19:e0:12:14:15, ethertype IPv4 (0x0800), length 58: 192.168.100.26.56461 > 192.168.100.7.389: S 504486733:504486733(0)..
00:07:40:b7:cb:6f > 00:12:f0:b2:0e:40, ethertype IPv4 (0x0800), length 58: 192.168.100.26.56461 > 192.168.100.11.389: S 504486733:504486733(0)..
00:12:f0:b2:0e:40 > 00:07:40:b7:cb:6f, ethertype IPv4 (0x0800), length 60: 192.168.100.11.389 > 192.168.100.26.56461: S 1433720340:1433720340(0)..

Seuraavaksi on suoritettu kysely pelkästään yhteen osoitteeseen. Periaatteessa sama kuin edellinen, mutta nyt ei kuormiteta verkkoa läheskään niin paljon.

ville@home-desktop:~$ nmap -v 192.168.100.11

Starting Nmap 4.53 ( http://insecure.org ) at 2008-10-30 13:11 EET
Initiating ARP Ping Scan at 13:11
Scanning 192.168.100.11 [1 port]
Completed ARP Ping Scan at 13:11, 0.02s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 13:11
Completed Parallel DNS resolution of 1 host. at 13:11, 6.52s elapsed
Initiating SYN Stealth Scan at 13:11
Scanning 192.168.100.11 [1714 ports]
Discovered open port 53/tcp on 192.168.100.11
Discovered open port 22/tcp on 192.168.100.11
Discovered open port 80/tcp on 192.168.100.11
Discovered open port 389/tcp on 192.168.100.11
Discovered open port 443/tcp on 192.168.100.11
Discovered open port 3306/tcp on 192.168.100.11
Discovered open port 139/tcp on 192.168.100.11
Discovered open port 445/tcp on 192.168.100.11
Completed SYN Stealth Scan at 13:11, 2.48s elapsed (1714 total ports)
Host 192.168.100.11 appears to be up ... good.
Interesting ports on 192.168.100.11:
Not shown: 1706 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
139/tcp  open  netbios-ssn
389/tcp  open  ldap
443/tcp  open  https
445/tcp  open  microsoft-ds
3306/tcp open  mysql
MAC Address: 00:12:F0:B2:0E:40 (Intel Corporate) 

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 9.446 seconds
           Raw packets sent: 1772 (77.966KB) | Rcvd: 1715 (78.886KB)
ville@home-desktop:~$ 

Viimeinen komento on esimerkki siitä, että ohjelmalla saadaan näppärästi selvitettyä verkon laitteet ja niiden osoitteet.

ville@home-desktop:~$ nmap -sP 192.168.100.*

Starting Nmap 4.53 ( http://insecure.org ) at 2008-10-30 13:15 EET
Host 192.168.100.1 appears to be up.
MAC Address: 00:19:E0:10:F8:FD (Tp-link Technologies Co.)
Host warehouse (192.168.100.5) appears to be up.
MAC Address: 00:0D:0B:74:39:1A (Buffalo)
Host 192.168.100.6 appears to be up.
MAC Address: 00:19:E0:FF:E7:4E (Tp-link Technologies Co.)
Host 192.168.100.7 appears to be up.
MAC Address: 00:19:E0:12:14:15 (Tp-link Technologies Co.)
Host 192.168.100.11 appears to be up.
MAC Address: 00:12:F0:B2:0E:40 (Intel Corporate)
Host 192.168.100.23 appears to be up.
MAC Address: 00:19:E0:FF:E7:4E (Tp-link Technologies Co.)
Host 192.168.100.26 appears to be up.

Ettercap

Ettercap on niin sanottu snifferi, joilla voidaan toteuttaa erilaisia Man In the Middle -hyökkäyksiä. Tämän työkalun tarkoitus on ainoastaan näyttää, kuinka haavoittuvia käytössämme olevat verkot ovat. Hyötykäyttöäkin toki löytyy, mutta päällimmäisenä on tietoturvan heikkouteen liittyvät havainnoinnit. Alla ote ohjelman manuaalista.

NAME
       ettercap  NG-0.7.3  -  A multipurpose sniffer/content filter for man in
       the middle attacks

***** IMPORTANT NOTE ******
       Since ettercap NG (formerly 0.7.0), all the options have been  changed.
       Even  the  target specification has been changed. Please read carefully
       this man page.

SYNOPSIS
       ettercap [OPTIONS] [TARGET1] [TARGET2] 

       TARGET is in the form MAC/IPs/PORTs
       where IPs and PORTs can be ranges (e.g. /192.168.0.1-30,40,50/20,22,25)
DESCRIPTION
       Ettercap  was  born  as  a sniffer for switched LAN (and obviously even
       "hubbed" ones), but during the development process it has  gained  more
       and  more features that have changed it to a powerful and flexible tool
       for man-in-the-middle attacks.  It supports active and passive  dissec‐
       tion  of many protocols (even ciphered ones) and includes many features
       for network and host analysis (such as OS fingerprint).

Työkalu käyttää IPv4-verkon tekniikan heikkouksia hyväksi niin, että lähiverkon liikenne kierrätetään ohjelman kautta. Näin ohjelman käyttäjä eli hyökkääjä saa tietoonsa kaiken lähiverkon käyttäjien ja käyttäjien yhteyskumppaneiden liikenteen. Salaamaton liikenne näkyy siis hyökkääjän ruudulla selväkielisenä. Alla esimerkki ohjelman käytöstä.

ville@ville-laptop:~$ ettercap -T -M arp:remote -i eth1 /192.168.100.1/ /192.168.100.26/

ettercap NG-0.7.3 copyright 2001-2004 ALoR & NaGA

Listening on eth1... (Ethernet)

  eth1 ->       00:12:F0:B2:0E:40    192.168.100.11   255.255.255.224

SSL dissection needs a valid 'redir_command_on' script in the etter.conf file
Privileges dropped to UID 65534 GID 65534...

  28 plugins
  39 protocol dissectors
  53 ports monitored
7587 mac vendor fingerprint
1698 tcp OS fingerprint
2183 known services

Scanning for merged targets (2 hosts)...

* |==================================================>| 100.00 %

2 hosts added to the hosts list...

ARP poisoning victims:
 
GROUP 1 : 192.168.100.1 00:19:E0:10:F8:FD

GROUP 2 : 192.168.100.26 00:19:E0:12:14:15
Starting Unified sniffing...


Text only Interface activated...
Hit 'h' for inline help

Thu Oct 30 12:31:30 2008
UDP  192.168.100.26:46392 --> 192.168.100.1:53 | 
.&...........mail.digiverkot.fi.....

Thu Oct 30 12:31:30 2008
UDP  192.168.100.1:53 --> 192.168.100.26:46392 | 
.&...........mail.digiverkot.fi.............7.............7.....4.............ns1.futuron..............ns2.R.N......!D....4..h......!D....9.

Thu Oct 30 12:31:30 2008
TCP  192.168.100.26:52951 --> 217.149.52.5:110 | S

Thu Oct 30 12:31:30 2008
TCP  217.149.52.5:110 --> 192.168.100.26:52951 | SA

Thu Oct 30 12:31:30 2008
TCP  192.168.100.26:52951 --> 217.149.52.5:110 | A

Thu Oct 30 12:31:30 2008
TCP  217.149.52.5:110 --> 192.168.100.26:52951 | AP
+OK Hello there..

Thu Oct 30 12:31:30 2008
TCP  192.168.100.26:52951 --> 217.149.52.5:110 | A

Thu Oct 30 12:31:30 2008
TCP  192.168.100.26:52951 --> 217.149.52.5:110 | AP
CAPA.

Thu Oct 30 12:31:30 2008
TCP  217.149.52.5:110 --> 192.168.100.26:52951 | A

Thu Oct 30 12:31:30 2008
TCP  217.149.52.5:110 --> 192.168.100.26:52951 | AP

+OK Here's what I can do:.
STLS.
TOP.
USER.
LOGIN-DELAY 10.
PIPELINING.
UIDL.
IMPLEMENTATION Courier Mail Server.
..

Thu Oct 30 12:31:30 2008
TCP  192.168.100.26:52951 --> 217.149.52.5:110 | AP
USER ville.heikkiniemi@digiverkot.fi.

Thu Oct 30 12:31:30 2008
TCP  217.149.52.5:110 --> 192.168.100.26:52951 | AP
+OK Password required..

Thu Oct 30 12:31:30 2008
TCP  192.168.100.26:52951 --> 217.149.52.5:110 | AP
PASS XXXXXXXX.

POP : 217.149.52.5:110 -> USER: ville.heikkiniemi@digiverkot.fi  PASS: XXXXXXXX

Thu Oct 30 12:31:30 2008
TCP  217.149.52.5:110 --> 192.168.100.26:52951 | AP
+OK logged in..

Tässä ollaan siis samassa aliverkossa koneen kanssa, jonka käyttäjä käynnistää sähköpostiohjelman lukeakseen sähköpostin. Käyttäjä saa postit ja on täysin tiedoton siitä, mitä hyökkääjän koneelle tulostui. Hyökkääjä sai tiedot, joilla hän pääsee lukemaan käyttäjän postit.

Miten tämä olisi estetty? Hyökkäys perustuu ARP-protokollaan ja sen haavoittuvuuteen. Ohjelma manipuloi käyttäjän koneen ARP-taulua sellaiseksi, että se lähettää kaikki paketit suoraan hyökkääjän koneelle. Alla esimerkki taulu muuttumisesta.

ville@home-desktop:~$ arp -a
? (192.168.100.1) at 00:19:E0:10:F8:FD [ether] on eth1
ville-laptop.local (192.168.100.11) at 00:12:F0:B2:0E:40 [ether] on eth1
home-server.local (192.168.100.23) at 00:19:E0:FF:E7:4E [ether] on eth1
ville@home-desktop:~$ arp -a
? (192.168.100.1) at 00:12:F0:B2:0E:40 [ether] on eth1
ville-laptop.local (192.168.100.11) at 00:12:F0:B2:0E:40 [ether] on eth1
home-server.local (192.168.100.23) at 00:19:E0:FF:E7:4E [ether] on eth1
ville@home-desktop:~$

Tämä työkalu väärissä käsissä voi aiheuttaa pahimmillaan mittavia tietovuotoja ja muita tuhoja. Tarttis varmaan tehdä jotain!

packEth

packETH on ohjelma, jolla voidaan lähettää verkkoon juuri sellaisia paketteja kuin halutaan. Tällä työkalulla voidaan sekoittaa koko verkon toiminta aivan täysin. Toki työkalulle löytyy hyötykäyttöäkin, varsinkin verkkojen tietoturvan analysoinnissa. Seuraavassa ote ohjelman manuaalista:

INTRUDUCTION:

packETH is a linux GUI tool that is able to send any acket or sequence of packets on the ethernet.
It uses the RAW socket option, so it doesn't care about ip, routing, etc. It is designed to have all
the options available, with all the correct and incorrect values (incorect means, that user can send
wrong parameters like: incorrect checksum, wrong header length, etc.).

Ohjelmalla voidaan lähettää esimerkiksi palvelimelle paketti, joka on väärennetty sellaiseksi, että palvelimelta tuleva vastaus menee ohjelman haluamaan osoitteeseen. Vastaavia skenaarioita on vaikka millä mitalla. Alla kuva ohjelman hallintaliittymästä.

Hallintaliittymä



Sisällysluetteloon


Debian

Edellisillä koulutuspäivillä tutustuimme Debianiin. Allekirjoittaneen tavoitteena oli selventää Linuxin ja erityisesti Debianin vahvuudet. Debianissahan yhdistyy paljon Linuxin hyviä puolia kuten luotettavuus, ohjelmien asennattavuus, hinta ja muokattavuus. Debian tarjoaa valtavan paljon erilaisia ohjelmia, joilla voidaan toteuttaa mitä erilaisimpia palveluita.

Linuxia voidaan käyttää verkoissa moniin eri tarkoituksiin. Siitä voidaan tehdä palomuuri, jonka ominaisuudet ovat huomattavasti paremmat kuin suurimman osan kaupasta löytyvistä ratkaisuista. Siitä voidaan tehdä palvelin, johon voidaan asentaa esimerkiksi NTP-, DHCP- ja DNS-palvelinohjelmat. Linux muokkautuu siis moniin eri tarkoituksiin. Näissä ympäristöissä suosion laskulle ei ole näkyvissä mitään merkkiä. Tälle löytyy yksinkertainen syy, joka on järjestelmän muokattavuus.

Valitettava fakta on se, ettei verkko toimi ilman tiettyjä palveluita. Tällaisista palveluista yksi on esimerkiksi DNS, joka on siis yksinkertainen palvelinohjelma. Jos ohjelma ja sitä pyörittävä käyttöjärjestelmä ovat polvillaan, verkko ei toimi. Täytyy siis pystyä hajauttamaan palvelua useammalla palvelinohjelmalle sekä palvelimelle. Jos palvelimelle asennettavasta käyttöjärjestelmästä täytyy maksaa X euroa, niin hajauttaminen esimerkiksi kahdelle palvelimelle ja käyttöjärjestelmälle maksaa 2 kertaa X euroa. Ilmainen Linux ja sen palvelinohjelmat voidaan hajauttaa pelkillä rautakustannuksilla niin useaan yksikköön kuin halutaan. Asia korostuu erityisesti Virtualisoinnissa, sillä DNS-palvelua pyörittävä Linux vaatii äärimmäisen vähän resursseja. Esimerkiksi Virtuaalikone, jolle on varattu 128 MB keskusmuistia, pystyy palvelemaan erittäin isonkin organisaation nimipalvelua.

Ohjelmien asentaminen

Ohjelmien asentamiseen ja niiden, sekä itse järjestelmän, päivittämiseen käytetään aptitude-ohjelmaa. Jos graafista käyttöliittymää ei ole, joudutaan aptitudea käyttämään komentoriviltä.

http://linux.fi/index.php/Apt-get

Tiedoksi: Jos komentoriviltä näpyttely alkaa kyrsimään, voi graafisen työpöydän asentaa komennolla

apt-get install gnome-desktop-environment      #Gnome-työpöytä
apt-get install kdebase kde-i18n-fi            #KDE-työpöytä

Otetaan pari esimerkkiä. Alla olevalla komennolla haetaan kaikki paketit, joiden otsikossa tai esittelyssä esiintyy sana dhcp.

apt-cache search dhcp

Vinkki! kannattaa yhdistää komentoa alla olevalla tavalla, sillä komento antaa tulostuksen, jossa voit liikkuu välilyönnillä ja enterillä (lopetus q-kirjaimella).

apt-cache search dhcp | more 
apt-cache search dhcp | less

Lisätietoa edellisen komennon antamista paketeista saa komennolla

apt-cache show dhcp3-server

Löydettyäsi sopivan ohjelman asennetaan se helposti antamalla alla olevan komennon, joka asentaa ohjelman ja sen vaatimat kirjastot ja sidokset.

apt-get install dhcp3-server

Ohjelma voidaan poistaa kahdella tavalla, joista jälkimmäinen poistaa ohjelman kokonaan konfiguraatiotiedostoineen.

apt-get remove dhcp3-server
apt-get --purge remove dhcp3-server

Jos haluamaasi ohjelmaa ei löydy pakettivarastosta, voidaan ohjelma asentaa kääntämällä se lähdekoodista (en suosittele.. voi käydä työlääksi) tai hakemalla deb-paketti ohjelman jakelijalta. Otetaan esimerkki ohjelmasta Webmin, jossa deb-paketti ladataan koneelle komennolla

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.470_all.deb

Tämän jälkeen asennetaan seuraavasti

dpkg -i webmin_1.470_all.deb

Komentoriville tulee ilmoitus, jossa kerrotaan puuttuvat paketit. Asennetaan seuraavaksi ne apt-get install -komentoa käyttäen, jonka jälkeen ylläoleva komento annetaan uudestaan.

Järjestelmän käyttö

Yleisin ja tärkein järjestelmän käyttöön ja ylläpitoon liittyvä asia on päivittäminen, joka tapahtuu seuraavilla komennoilla

apt-get update          #synkronoi koneesi pakettivaraston ja yleisen pakettivaraston tiedot
apt-get upgrade         #päivittää järjestelmän ja apt-get install -komennolla asennetut ohjelmat

Kannattaa käyttää harkintaa päivittämisessä, sillä jos kernel on päivitetty, pitäisi järjestelmä käynnistää uudestaan. Kannattaa siis tutkia, mitä päivitystä kerneliin tulisi, eli onko päivittäminen tarpeen. Paras lähde näiden asioiden selvittämiseen löytyy Debianin-sivuilta. Sieltä löytyy päivitysten sisällöt ja ongelmien kriittisyys.

Jos halutaan estää kernelin päivitys, tehdään se paketinhallintatyökaluilla esimerkiksi seuraavasti.

debian-lenny:~# apt-get -s upgrade
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu
Luetaan tilatiedot... Valmis
Nämä paketit päivitetään:
 ghostscript gs-common libglib2.0-0 libgs8 liblcms1 libpng12-0 linux-image-2.6.26-1-486 linux-image-2.6.26-1-686
8 päivitetty, 0 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
----
debian-lenny:~# dpkg --get-selections | grep linux-image
linux-image-2.6-686                             install
linux-image-2.6.26-1-486                        install
linux-image-2.6.26-1-686                        install
debian-lenny:~# echo "linux-image-2.6-686 hold" | dpkg --set-selections
debian-lenny:~# echo "linux-image-2.6.26-1-486 hold" | dpkg --set-selections
debian-lenny:~# echo "linux-image-2.6.26-1-686 hold" | dpkg --set-selections
debian-lenny:~# dpkg --get-selections | grep linux-image
linux-image-2.6-686                             hold
linux-image-2.6.26-1-486                        hold
linux-image-2.6.26-1-686                        hold
debian-lenny:~# apt-get -s upgrade
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu
Luetaan tilatiedot... Valmis
Nämä paketit on jätetty odottamaan:
  linux-image-2.6.26-1-486 linux-image-2.6.26-1-686
Nämä paketit päivitetään:
  ghostscript gs-common libglib2.0-0 libgs8 liblcms1 libpng12-0

Debianiin asennettavat ohjelmat ovat yleensä daemon-tyyppisiä eli taustalla pyöriviä ohjelmia, joiden tärkeimmät asetukset tulevat niin sanotuista konfiguraatiotiedostoista. Otetaan esimerkiksi ssh-ohjelma, joka löytyy käynnissä ollessaan prosesseista nimellä sshd ja oletuksena sen konfiguraatiotiedostot ovat kansiossa /etc/ssh. Jos ohjelman toimintaan halutaan tehdä muutoksia, muokataan ensiksi konfiguraatiotiedostoja, jonka jälkeen ohjelma käynnistetään uudelleen. Käynnistäminen tapahtuu kansiossa /etc/init.d olevilla skripteillä seuraavasti

invoke-rc.d ssh start       #Käynnistetään ohjelma eli prosessi
invoke-rc.d ssh restart     #sammutetaan olemassa oleva prosessi ja käynnistetään uudelleen

Jos on epävarmuutta ohjelman käynnissä olosta, kannattaa tarkistaa onko ohjelman pid-tiedosto olemassa. Pid-tiedosto luodaan ohjelman käynnistymisen yhteydessä, ja se sisältää kyseessä olevan ohjelman prosessinumeron. Otetaan esimerkki ssh-ohjelmasta:

cd /var/run          #Yleensä kaikki pid-tiedostot ovat tässä kansiossa
ls | grep pid        #Huomaamme, että päätteelle tulostuu paljon tiedostoja, joista yksi on sshd.pid
cat sshd.pid         #Eteemme tulostuu kyseinen tiedosto ja sieltä luku. Tässä tapauksessa 5019
ps xa | grep 5019    #Tulostamme prosessilistan hakuehtona luku 5019. Huomaamme, että se johtaa /usr/sbin/sshd-ohjelmaan

Ohjelmat eli prosessit saa keskeytettyä init-skriptien lisäksi kill, xkill tai killall komennolla. Esimerkkejä:

 root@ville-laptop:~# ps xa | grep vlc
 12880 ?        Sl     0:00 vlc
 13021 pts/0    S+     0:00 grep vlc
 root@ville-laptop:~# kill -HUP 12880
 
 root@ville-laptop:~# ps xa | grep ping
 13096 pts/1    S+     0:00 ping www.syotec.fi
 13120 pts/0    R+     0:00 grep ping
 root@ville-laptop:~# killall ping
Xkill => Paina Alt-F2 ja anna komento xkill. Klikkaa sovellusta, jonka haluat tappaa.

Ohjelmien ja järjestelmän toimintaa liittyy läheisesti lokit eli tekstitiedostoja, joihin ohjelmat kirjoittavat tapahtumiaan. Lokit sijaitsevat yleensä hakemistossa /var/log, joista niitä voidaan tarpeen tullen tutkia. Yleensä konfiguraatiotiedostoissa on asetus, jolla voidaan määritellä lokituksen tasoa eli, minkä asteisia tapahtumia tiedostoon kirjoitetaan. Kannattaa muistaa, että jokainen rivi vie tilaa kovalevyltä eli, mitä enemmän tietoa lokiin sitä suurempi tiedosto. Koitetaan esimerkkinä seuraavia komentoja:

less /var/log/daemon.log
tail /var/log/messages
tail -n 20 /var/log/daemon.log
tail -f /var/log/messages

Yleensä linuxit toimivat kuuluisan vessan tavoin. Yleisin ongelmien aiheuttaja on laitevika, joka luonteensa vuoksi on erittäin vaikea ennustaa. Nämä ovat tapauskohtaisia, joihin kannattaa varautua esimerkiksi RAIDilla. Kannattaa kuitenkin muistaa, että tärkein varautuminen on varmuuskopiointi ja yleensä linuxissa riittää, että kopioi pelkät konfiguraatiotiedostot. Poikkeuksena tiedostopalvelimen tiedostot sekä DNS-palvelimen aluetiedostot.

Linux-järjestelmää voidaan hallita monella eri tavalla. Seuraavassa on esitelty kolme.

* Webmin on selaimella toimiva hallintaliittymä. Voidaan hallita käytännössä millä tahansa koneella.

* Etätyöpöytä eli yleiskielessä VNC. Voidaan hallita Windows-koneelta asentamalla siihen VNC-ohjelmalla. Vaatii resursseja ja salauksen.

* SSH-yhteys. Konfiguroidaan tiedostoja ja siirrellään niitä esimerkiksi WinSCP-ohjelmalla. Vähiten resursseja. Sisäänrakennettu salaus.

Hallintatapa kannattaa valita ympäristön mukaan. Jos palvelinta hallintaa ajasta ja paikasta riippumatta, on ehdottomasti paras vaihtoehto SSH-yhteys. Ei rasita tietoliikenneyhteyksiä ja on taatusti turvallinen. Jos ollaan samassa verkossa kuin palvelin, kannattaa valita VNC tai Webmin. Suurin ero edellisten välillä on se, että VNC vaatii graafisen työpöydän toimiakseen. Siis Webmin kuormittaa palvelinta vähemmän.


Sisällysluetteloon


Palomuuri, NAT ja reititin

Ensimmäisenä asennustehtävistä tehdään Linuxista palomuuri, joka yhdistää privaatin verkon julkiseen verkkoon. Käytetään siis NAT-ominaisuutta. Käytössä on siis Virtuaalikone, jossa on kaksi verkkoliittymää. Asennus aloitetaan asettamalla verkkoliittymille IP-osoitteet. Tämä tapahtuu muokkaamalla kansiossa /etc/network olevaa interfaces-tiedostoa. Muokkausta ennen kannattaa "ajaa" verkkoliittymät alas.

first:~# ifdown eth0
first:~# ifdown eth1
first:~# pico /etc/network/interfaces
----
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
auto eth0
iface eth0 inet dhcp
        metric 1
 
auto eth1
iface eth1 inet static
        address 10.0.0.1
        netmask 255.255.255.0
----
first:~# ifup eth0
first:~# ifup eth1
first:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:f1:2e:ce
          inet addr:192.168.11.16  Bcast:255.255.255.255  Mask:255.255.255.0
          inet6 addr: fc00::a00:27ff:fef1:2ece/64 Scope:Global
          inet6 addr: fc00::1:a00:27ff:fef1:2ece/64 Scope:Global
          inet6 addr: fe80::a00:27ff:fef1:2ece/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:998 errors:0 dropped:0 overruns:0 frame:0
          TX packets:765 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:200591 (195.8 KiB)  TX bytes:112114 (109.4 KiB)
          Interrupt:11 Base address:0xc020
 
eth1      Link encap:Ethernet  HWaddr 08:00:27:17:8a:99
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe17:8a99/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:32 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2308 (2.2 KiB)  TX bytes:4815 (4.7 KiB)
          Interrupt:10 Base address:0xc060
 
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)
 
first:~#

Lähes jokaisessa Linuxissa on palomuuri vakiona päällä, mutta säännöstö näyttää oletuksena alla olevalta. Palomuuri ei oletuksena ota mitään kantaa lähtevään tai tulevaan liikenteeseen.

first:~# iptables -L -v
Chain INPUT (policy ACCEPT 15 packets, 2450 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 99 packets, 7072 bytes)
 pkts bytes target     prot opt in     out     source               destination

Seuraavaksi luodaan palomuurille säännöt ja otetaan ne käyttöön.

first:~# pico /etc/network/if-up.d/iptables

#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
 
# poistetaan kaikki voimassa olevat säännöt.
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
 
# Mahdollistetaan reitittäminen.
echo 1 > /proc/sys/net/ipv4/ip_forward
 
# Määritellään verkkoliittymät
WAN=eth0
LAN=eth1
 
# Sallitaan tietyt liikenteet
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $WAN -j ACCEPT
iptables -P INPUT DROP
 
iptables -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $LAN -o $WAN -j ACCEPT
iptables -A FORWARD -i $WAN -o $WAN -j REJECT
iptables -P FORWARD DROP
 
# NAT
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
 
# SSH
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
 
# Porttiohjaus
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 220 -j DNAT --to-destination 10.0.0.10:22
iptables -A FORWARD -p tcp -d 10.0.0.10 --dport 22 -o $LAN -j ACCEPT

first:~# chmod a+x /etc/network/if-up.d/iptables
first:~# /etc/network/if-up.d/iptables
first:~# iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  !eth0  any     anywhere             anywhere            state NEW

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  eth0   eth1    anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  eth1   eth0    anywhere             anywhere
    0     0 REJECT     all  --  eth0   eth0    anywhere             anywhere            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 99 packets, 7072 bytes)
 pkts bytes target     prot opt in     out     source               destination

Nyt kone toimii palomuurina eli suodattaaWAN-verkosta tulevat uudet yhteydet. Lisäksi kaikki LAN-verkosta tulevat yhteydet näkyvät WAN-liittymän IP-osoitteesta tulevana. Käytössä on siis NAT.


Sisällysluetteloon


DHCP-palvelin

Edellisessä tehtävässä määriteltiin aliverkko, jonka esimerkiksi yritys voi ottaa käyttöönsä. Aliverkosta on pääsy muihin verkkoihin, eli siellä on reititin. Aliverkossa oleva koneet eivät näy ulkomaailmaan IP-osoitteillaan vaan käytössä on NAT. Erittäin paljon käytetty kokonaisuus.

DHCP-järjestelmän rakennekuva

Seuraavaksi verkkoon liitettäville koneille pitää määritellä IP-osoitteet. Tässä koulutuksessa kyseiseen tarkoitukseen käytetään ISC:n DHCP-palvelinohjelmaa, joka on yksi yleisimmistä käytössä olevista ohjelmista. Muitakin vaihtoehtoja on, mutta käytämme yleisyyden vuoksi tätä. Ohjelma voi toimia kolmessa eri roolissa eli asiakkaana, välittäjänä ja palvelimena. Asiakas (client) on käytännössä jokaisessa koneessa eli tällä ohjelmalla kone saa osoitteen. Välittäjä (relay) välittää aliverkon DHCP-pyynnön jollekkin keskitylle palvelimelle. Palvelimen (server) tehtävä on jakaa aliverkon koneille osoitteita ja muita koneen toimintaan liittyviä asioita, kuten DNS-palvelimet ja yhdyskäytävän. Alla on käytössä olevan ohjelman manuaalista lainattu määritelmä

NAME
      dhcpd - Dynamic Host Configuration Protocol Server

SYNOPSIS
      dhcpd  [ -p port ] [ -f ] [ -d ] [ -q ] [ -t | -T ] [ -cf config-file ]
      [ -lf lease-file ] [ -pf pid-file ] [ -tf trace-output-file ]  [  -play
      trace-playback-file ] [ if0 [ ...ifN ] ]

DESCRIPTION
      The  Internet  Systems  Consortium  DHCP  Server, dhcpd, implements the
      Dynamic Host Configuration Protocol (DHCP) and the  Internet  Bootstrap
      Protocol (BOOTP).  DHCP allows hosts on a TCP/IP network to request and
      be assigned IP addresses, and also to discover  information  about  the
      network to which they are attached.  BOOTP provides similar functional‐
      ity, with certain restrictions.

DHCP-tarjoaa hurjan määrän niin sanottuja optioita, joilla informoidaan verkkoon tullutta konetta. Optiolla annetaan koneelle erittäin tärkeitä tietoja, joiden avulle liikennöinti muihin verkkoihin onnistuu. Yleisimpiä käytettyjä optioita ovat

option domain-name
option domain-name-servers
option host-name
option routers
option broadcast-address
option ntp-servers

DHCP toimii periaatteessa seuraavasti

  1. Uusi kone tulee verkkoon
  2. Koneesta tulee DHCP-asiakas, kun se lähettää broadcastina porttiin 67 DHCPDISCOVER-sanoman kaikille paikallisen verkon DHCP-palvelimille
  3. Palvelin vastaa DHCPOFFER-sanomana lähetettävällä tarjouksella
  4. Kone valitsee yhden tarjouksista ja lähettää DHCPREQUEST-sanoman kyseiselle palvelimelle
  5. Palvelin vahvistaa sopimuksen DHCPACK-sanomalla
  6. Kone voi irtisanoa sopimuksen DHCPRELEASE-sanomalla

Alla esimerkki edellisestä operaatiosta.

main:~# dhcpdump -i eth0
  TIME: 2009-03-19 12:39:43.004
    IP: 0.0.0.0 (8:0:27:ae:ca:4c) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: ca8b5246
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         3 (DHCPREQUEST)
OPTION:  50 (  4) Request IP address        10.0.0.100
OPTION:  55 (  9) Parameter Request List      1 (Subnet mask)
                                             28 (Broadcast address)
                                              2 (Time offset)
                                              3 (Routers)
                                             15 (Domainname)
                                              6 (DNS server)
                                            119 (Domain Search)
                                             12 (Host name)
                                            121 (Classless Static Route) 

---------------------------------------------------------------------------

  TIME: 2009-03-19 12:39:43.009
    IP: 10.0.0.10 (8:0:27:84:5f:3) > 10.0.0.100 (8:0:27:ae:ca:4c)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: ca8b5246
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.0.0.100
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         5 (DHCPACK)
OPTION:  54 (  4) Server identifier         10.0.0.10
OPTION:  51 (  4) IP address leasetime      600 (10m)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   10.0.0.1
OPTION:  15 ( 17) Domainname                villenverkko.info
OPTION:   6 (  4) DNS server                192.168.11.1
---------------------------------------------------------------------------

^C
main:~#      

Yksinkertaisesti asiakas tekee verkkoon kyselyn käyttäen broacast-osoitetta. Jos verkossa on DHCP-palvelin käytössä, se vastaa kyselyyn. DHCP-palvelimen käyttö pyörii yleensä kahden tiedoston eli /etc/dhcp3-hakemistossa olevan dhcpd.conf-tiedoston ja yleensä kansiossa /var/lib/dhcp3 olevan dhcpd.leases-tiedoston ympärillä. Kaikki ohjelman toimintaan liittyvät asiat ovat dhcpd.conf-tiedostossa. dhcpd.leases-tiedoston tehtävänä on pitää kirjaa annetuista osoitteista. Palvelinohjelmasta löytyy hirvittävä määrä erilaisia toimintavaihtoehtoja. Paras dokumentaatio on ohjeman oma manuaali eli linuxissa käskyt man dhcpd3, man dhcpd.conf ja man dhcpd.leases. Luonnollisesti hyvänä tietolähteenä toimii myös Google.

DHCP-palvelin asennetaan Debianiin seuraavalla komennolla

apt-get install dhcp3-server

Ohjelma asentuu koneelle ja yrittää käynnistyä automaattisesti. Käynnistyminen ei onnistu, ennen kuin kansiossa /etc/dhcp3 tiedostoa dhcpd.conf ja kansiossa /etc/default tiedostoa dhcp3-server on muokattu haluamaksi. Seuraavassa esimerkit molemmista tiedostoista

second:~# cd /etc/dhcp3/
second:/etc/dhcp3# cat dhcpd.conf

#Ei päivitetä nimitietoa DNS-palvelimelle
ddns-update-style none;

#Yleisiä asetuksia
option domain-name "testiverkko.info";
option domain-name-servers 10.0.0.10, 10.0.0.20;

default-lease-time 600;
max-lease-time 7200;

#Hallitseva DHCP-palvelin verkossa
authoritative;

#Testiverkon aliverkko;
subnet 10.0.0.0 netmask 255.255.255.0 {
	range 10.0.0.100 10.0.0.200;
	option routers 10.0.0.1;
}

#testipalvelimen kiinteä osoite
host testipalvelin {
	hardware ethernet 08:00:07:26:c0:a5;
	fixed-address 10.0.0.50;
}

second:~# cd /etc/default/
second:/etc/default# cat dhcp3-server
# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth0"

Ohjelman ylläpito ja hallinta tapahtuu siis käytännössä muokkaamalla tiedostoa dhcpd.conf. Muokkauksen jälkeen palvelin käynnistetään komennolla

invoke-rc.d dhcp3-server restart

Varmuuskopioinnissa riittää kopiot tiedostoista dhcpd.conf ja dhcpd.leases.

DHCP-palvelimen kahdentaminen

DHCP-palvelimen rooli verkossa on merkittävä. Tästä syystä se täytyy pystyä vähintään kahdentamaan. Tämä tapahtuu seuraavien ohjeiden mukaisesti.

Ensisijainen DHCP

Korvataan konfiguraatiotiedosto seuraavalla tekstillä

/etc/dhcp3/dhcpd.conf

#DNS-vyöhykkeen päivitystapa
ddns-update-style none;
 
#Hallitseva eli jatkuvasti aktiivinen 
authoritative;
 
default-lease-time 600;
max-lease-time 7200;
 
#Replikointiasetukset
failover peer "dhcp-failover" {
  	#Palvelimen rooli
 	primary;
 
  	#Palvelimen osoite ja portti
  	address 10.0.0.10;
  	port 647;
 
  	#Toissijaisen palvelimen osoite ja portti
  	peer address 10.0.0.20;
  	peer port 647;
 
  	#Milloin secondary-palvelin todetaan kaatuneeksi
  	max-response-delay 30; 
  	max-unacked-updates 10;
 
  	#Kuorman tasaukseen liittyviä asioita 
  	load balance max seconds 3;
  	mclt 1800;
  	split 128;
}
 
#Jaettava aliverkko
subnet 10.0.0.0 netmask 255.255.255.0 {
  	#DNS-palvelimet
  	option domain-name-servers 10.0.0.10, 10.0.0.20;
 
  	#Domaini
  	option domain-name "testiverkko.info";
 
  	#NTP-palvelimet
 	option ntp-servers 10.0.0.10, 10.0.0.20;
 
  	#Oletusyhdyskäytävä
  	option routers 10.0.0.1;
 
  	#Jaettu ja replikoitu pooli
  	pool {
  	  	failover peer "dhcp-failover";
 
  	  	#Lease-aika
  	  	max-lease-time 1800;
 
  	  	#Jaettava osoitealue
  	  	range 10.0.0.100 10.0.0.130;
		deny dynamic bootp clients;
  	}  
}

Sammutetaan palvelu ja tyhjennetään leases-tiedosto

invoke-rc.d dhcp3-server stop
mv /var/lib/dhcp3/dhcpd.leases /var/lib/dhcp3/dhcpd.leases.old
touch /var/lib/dhcp3/dhcpd.leases
invoke-rc.d dhcp3-server start

Toissijainen DHCP

Korvataan konfiguraatiotiedosto seuraavalla tekstillä

/etc/dhcp3/dhcpd.conf

ddns-update-style none;
 
authoritative;
 
#Huomaa muutokset Master-koneen konffikseen
failover peer "dhcp-failover" {
 	secondary;
  	address 10.0.0.20;
  	port 647;
  	peer address 10.0.0.10;
  	peer port 647;
  	max-response-delay 30;
  	max-unacked-updates 10;
}
 
subnet 10.0.0.0 netmask 255.255.255.0 {
  	#DNS-palvelimet, Huom! Muutos
  	option domain-name-servers 10.0.0.20, 10.0.0.10;
 
  	#Domaini
  	option domain-name "testiverkko.info";
 
  	#NTP-palvelimet
 	option ntp-servers 10.0.0.10, 10.0.0.20;
 
  	#Oletusyhdyskäytävä
  	option routers 10.0.0.1;
 
  	#Jaettu ja replikoitu pooli
  	pool {
  	  	failover peer "dhcp-failover";
  	  	max-lease-time 1800;
  	  	range 10.0.0.100 10.0.0.130;
		deny dynamic bootp clients;
  	}  
}

Sammutetaan palvelu ja tyhjennetään leases-tiedosto

invoke-rc.d dhcp3-server stop
mv /var/lib/dhcp3/dhcpd.leases /var/lib/dhcp3/dhcpd.leases.old
touch /var/lib/dhcp3/dhcpd.leases
invoke-rc.d dhcp3-server start

Näiden toimien jälkeen kannattaa testata järjestelmän toiminta. Tähän vaiheeseen kannattaa yleensä käyttää paljon aikaa. Käytännössä toimivan järjestelmän käyttäytyy seuraavasti:

----
 
#Molemmat palvelinohjelmat käynnissä
 
----
 
main:~# dhcpdump -i eth0
  TIME: 2009-03-19 13:18:23.006
    IP: 0.0.0.0 (8:0:27:ae:ca:4c) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: f44a2d50
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         3 (DHCPREQUEST)
OPTION:  50 (  4) Request IP address        10.0.0.116
OPTION:  55 (  9) Parameter Request List      1 (Subnet mask)
                                             28 (Broadcast address)
                                              2 (Time offset)
                                              3 (Routers)
                                             15 (Domainname)
                                              6 (DNS server)
                                            119 (Domain Search)
                                             12 (Host name)
                                            121 (Classless Static Route)
 
---------------------------------------------------------------------------
 
  TIME: 2009-03-19 13:18:23.010
    IP: 10.0.0.10 (8:0:27:84:5f:3) > 10.0.0.116 (8:0:27:ae:ca:4c)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: f44a2d50
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.0.0.116
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         5 (DHCPACK)
OPTION:  54 (  4) Server identifier         10.0.0.10
OPTION:  51 (  4) IP address leasetime      600 (10m)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   10.0.0.1
OPTION:  15 ( 16) Domainname                testiverkko.info
OPTION:   6 (  4) DNS server                192.168.11.1
---------------------------------------------------------------------------
 
  TIME: 2009-03-19 13:18:23.011
    IP: 10.0.0.20 (8:0:27:f0:e9:33) > 10.0.0.116 (8:0:27:ae:ca:4c)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: f44a2d50
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.0.0.116
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         5 (DHCPACK)
OPTION:  54 (  4) Server identifier         10.0.0.20
OPTION:  51 (  4) IP address leasetime      1800 (30m)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   10.0.0.1
OPTION:  15 ( 16) Domainname                testiverkko.info
OPTION:   6 (  4) DNS server                192.168.11.1
---------------------------------------------------------------------------
 
^C
 
----
 
#Ensijainen tiputettu pois
 
---
 
main:~# dhcpdump -i eth0
  TIME: 2009-03-19 13:21:51.000
    IP: 0.0.0.0 (8:0:27:ae:ca:4c) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 61a51e1c
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         3 (DHCPREQUEST)
OPTION:  50 (  4) Request IP address        10.0.0.116
OPTION:  55 (  9) Parameter Request List      1 (Subnet mask)
                                             28 (Broadcast address)
                                              2 (Time offset)
                                              3 (Routers)
                                             15 (Domainname)
                                              6 (DNS server)
                                            119 (Domain Search)
                                             12 (Host name)
                                            121 (Classless Static Route)
 
---------------------------------------------------------------------------
 
  TIME: 2009-03-19 13:21:51.005
    IP: 10.0.0.20 (8:0:27:f0:e9:33) > 10.0.0.116 (8:0:27:ae:ca:4c)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 61a51e1c
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.0.0.116
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         5 (DHCPACK)
OPTION:  54 (  4) Server identifier         10.0.0.20
OPTION:  51 (  4) IP address leasetime      1800 (30m)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   10.0.0.1
OPTION:  15 ( 16) Domainname                testiverkko.info
OPTION:   6 (  4) DNS server                192.168.11.1
---------------------------------------------------------------------------
 
^C
 
----
 
#Ensijainen käynnissä, toissijainen pois
 
----
 
main:~# dhcpdump -i eth0
  TIME: 2009-03-19 13:22:54.000
    IP: 0.0.0.0 (8:0:27:ae:ca:4c) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 4b4c8f2a
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         3 (DHCPREQUEST)
OPTION:  50 (  4) Request IP address        10.0.0.116
OPTION:  55 (  9) Parameter Request List      1 (Subnet mask)
                                             28 (Broadcast address)
                                              2 (Time offset)
                                              3 (Routers)
                                             15 (Domainname)
                                              6 (DNS server)
                                            119 (Domain Search)
                                             12 (Host name)
                                            121 (Classless Static Route)
 
---------------------------------------------------------------------------
 
  TIME: 2009-03-19 13:22:54.003
    IP: 10.0.0.10 (8:0:27:84:5f:3) > 10.0.0.116 (8:0:27:ae:ca:4c)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 4b4c8f2a
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.0.0.116
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 08:00:27:ae:ca:4c:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         5 (DHCPACK)
OPTION:  54 (  4) Server identifier         10.0.0.10
OPTION:  51 (  4) IP address leasetime      600 (10m)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   10.0.0.1
OPTION:  15 ( 16) Domainname                testiverkko.info
OPTION:   6 (  4) DNS server                192.168.11.1
---------------------------------------------------------------------------
 
^C
main:~#

Lopputuloksena yhden palvelinohjelman poistuminen ei vaikuta asiakkaalle mitenkään.


Sisällysluetteloon


NTP-järjestelmä

NTP on erittäin tärkeä osa tietoverkkoa ja sen palvelimia ja palveluita. Sähköpostin, laitteiden seuraamisen, vikojen selvittämisen, autentikoinnin, DHCP:n, DNS:n ja yleisen tiedostojen käsittelyn kannalta on tärkeää, että kaikissa laitteissa on täsmälleen sama kellonaika. NTP toimii niin, että verkossa on palvelin, joka synkkaa kellon jonkun yleisen palvelimen kanssa. NTP-palvelimet muodostavat puumaisen mallin, jossa jokainen palvelin saavuttaa tietyn tason (Stratum-tasot). Tasoja saa olla maksimissaan 16.

NTP-järjestelmän rakennekuva

Liikenteen osalta synkkaaminen tapahtuu alla olevalla tavalla eli asiakas lähettää NTP kyselyn portista 123 porttiin 123. Jos yhteys ja palvelin on kunnossa, palvelin vastaa kyselyyn. Kyselyn tekijä päättelee vastauksesta kellonajan ja synkkaa tarvittaessa oman kellonsa palvelimen kanssa.

first:~# tcpdump -ni eth0 port 123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:37:18.301653 IP 213.250.106.106.123 > 91.189.94.4.123: NTPv4, Client, length 48
13:37:18.345584 IP 91.189.94.4.123 > 213.250.106.106.123: NTPv4, Server, length 48
13:38:23.301652 IP 213.250.106.106.123 > 91.189.94.4.123: NTPv4, Client, length 48
13:38:23.348079 IP 91.189.94.4.123 > 213.250.106.106.123: NTPv4, Server, length 48
13:39:29.301649 IP 213.250.106.106.123 > 91.189.94.4.123: NTPv4, Client, length 48
13:39:29.345757 IP 91.189.94.4.123 > 213.250.106.106.123: NTPv4, Server, length 48
13:40:35.301653 IP 213.250.106.106.123 > 91.189.94.4.123: NTPv4, Client, length 48
13:40:35.345650 IP 91.189.94.4.123 > 213.250.106.106.123: NTPv4, Server, length 48
13:41:41.301695 IP 213.250.106.106.123 > 91.189.94.4.123: NTPv4, Client, length 48
13:41:41.348032 IP 91.189.94.4.123 > 213.250.106.106.123: NTPv4, Server, length 48
13:42:45.301651 IP 213.250.106.106.123 > 91.189.94.4.123: NTPv4, Client, length 48
13:42:45.345457 IP 91.189.94.4.123 > 213.250.106.106.123: NTPv4, Server, length 48

NTP-järjestelmän vahvuus on yksinkertaisuus. Sekä kysely että vastaus ovat mahdollisimman yksinkertaisia ja keveitä. Kyselyjä voidaan tehdä usealle palvelimelle, jolloin yhden palvelimen katoaminen ei haittaa järjestelmää laisinkaan.

NTP Linuxissa

Lähes jokaisessa Linuxissa on oletuksena komento ntpdate, jolla voidaan synkata koneen aika tiettyyn palvelimeen tietyllä hetkellä. Tämä toiminto voidaan tehdä ajastetusti esimerkiksi tapahtumaan kerran päivässä. Komennon vahvuus on keveys, sillä järjestelmää kuormitetaan vain komennon suorituksen aikana. Jos koneen synkkaaminen tapahtuu kyseisellä komennolla, kone ei pysty tarjoamaan kelloaan muiden käyttöön eli ei toimi NTP-palvelimena. Alla on esimerkki ntpdate-komennon käytöstä. Esimerkistä voidaan huomata, että kellonajan muuttaminen vaatii luonnollisesti pääkäyttäjän oikeudet.

first:~#  ntpdate 10.0.0.1
25 Nov 20:29:06 ntpdate[7813]: adjust time server 10.0.0.1 offset -0.035292 sec
first:~#

Alla on esimerkki skriptistä, joka päivittää kellon ntp.ubuntu.com-palvelimen kanssa 10 minuutin välein.

cd /etc/cron.d
echo "*/10 * * * *	root	/usr/sbin/ntpdate 10.0.0.1 > /dev/null" > ntpdate-local
chmod 755 /etc/cron.d/ntpdate-local

Tässä esimerkissä kello säädetään päivittymään kerran tunnista ntp.ubuntu.com palvelimen aikaan

echo '#!/bin/sh' > /etc/cron.hourly/ntpdate-hourly
echo "set -e" >> /etc/cron.hourly/ntpdate-hourly
echo "/usr/sbin/ntpdate 10.0.0.1 > /dev/null" >> /etc/cron.hourly/ntpdate-hourly
chmod 755 /etc/cron.hourly/ntpdate-hourly

Edellisen lisäksi on mahdollista, että Linux tarjoaa kelloaan myös muiden koneiden käyttöön eli toimii palvelimena. Tähän tarkoitukseen on yleisesti käytössä oleva palvelinohjelma ja se löytyy esimerkiksi valmiina Debianin pakettivarastosta, jolloin asentaminen tapahtuu komennolla

apt-get install ntp

NTP-palvelin on oletuksena jatkuvasti päällä ja pollaa tiedostoon /etc/ntp.conf määriteltyjä palvelimia tietyn ajan välein. Tämä aika vaihtelee ja voi olla minimissään 16 sekunttia ja maksimissaan 36.4 tuntia. Oletuksena minimi (minpoll) on 64 sekunttia ja maksimi (maxpoll) 1024 sekunttia. Yksinkertaisesti verkon NTP-palvelimen ntp.conf tiedostoon määritellään haluttu synkronointipalvelin ja muiden koneiden ntp.conf-tiedostoon määritellään verkon palvelin.

first:~# ntpdc -p
     remote           local      st poll reach  delay   offset    disp
=======================================================================
*europium.canoni 213.250.106.106  2   64  377 0.04378 -0.000668 0.06387
first:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*europium.canoni 193.79.237.14    2 u   12   64  377   43.778   -0.668   0.679
first:~# 

Varmuuden vuoksi kannattaa kello lukita johonkin stratum-tasoon laittamalla alla olevat rivit ntp.conf-tiedostoon. Tämä siksi, että NTP-palvelua asennettaessa stratum-taso on oletuksena liian alhainen. Taso muuttuu hyväksyttäväksi, eli NTP-palvelin hakee paikkansa NTP-puusta, vasta muutaman minuutin kuluttua käynnistyksestä. Sama ilmiö tapahtuu, jos verkkoyhteys palvelimiin on poikki. Alla olevilla on riveillä on varmistettu, että kyseinen palvelin on aina vähintään tasolla kahdeksan.

server 127.127.1.0
fudge 127.127.1.0 stratum 8

Sisällysluetteloon


DNS-palvelin

DNS-palvelu on yksi keskeisimmistä asioista koko Internettiä ajatellen. DNS-palvelun ensisijainen tehtävä on muuttaa nimet verkkojen ymmärtämään muotoon eli IP-osoitteiksi ja toisin päin. DNS-järjestelmän rakenne on puumainen. Latvoissa ovat juuripalvelimet, joita alapuolella olevat "oksat" käyttävät. Asiakkaalle näkyy niin sanottu DNS-ketju, jota pitkin asiakkaan nimi- ja osoitekyselyt etenevät. DNS-ketju on lyhimmillään, kun asiakkaalle näkyvä ensimmäinen DNS-palvelin on juuripalvelimista seuraava. Hyvin monesti näin ei ole, vaan asiakkaan käyttämä palvelin välittää DNS-kyselyn esimerkiksi yrityksen sisällä palvelimelta toiselle. Yllättävää kyllä, DNS-palvelun toimivaksi konfigurointi on osoittaunut erääksi haastavimmista tietojärjestelmiin liittyvistä kokonaisuuksista.


DNS-järjestelmän rakennekuva


DNS-palvelinohjelmia löytyy monenlaisia, joista me käytämme erästä yleisimmistä eli ISC:n Bind-ohjelmaa. BIND-palvelinohjelma käyttää tehtäväänsä niin sanottuja tietokantatiedostoja, joista toisissa on muunnos nimistä osoitteiksi ja toisissa osoitteista nimiksi. Jokaiselle domainille ja alidomainille luodaan vyöhyketiedostot eli zonet. Virallisesti puhutaan Forward- ja Reverse zoneista sekä tietueista tai recoredeista. Alla on ote käyttämämme ohjelman manuaalista

NAME
       named - Internet domain name server

SYNOPSIS
       named [-4] [-6] [-c config-file] [-d debug-level] [-f] [-g] [-m flag] [-n #cpus]
             [-p port] [-s] [-S #max-socks] [-t directory] [-u user] [-v] [-x cache-file]

DESCRIPTION
       named is a Domain Name System (DNS) server, part of the BIND 9 distribution from
       ISC. For more information on the DNS, see RFCs 1033, 1034, and 1035.

       When invoked without arguments, named will read the default configuration file
       /etc/named.conf, read any initial data, and listen for queries.


BIND:n asennus tapahtuu alla olevalla komennolla. Ohjelma käynnistyy automaattisesti, mutta mitään järkevää ei tapahdu ennen kuin /etc/bind-kansion konfiguraatiotiedostoja on muokattu.

apt-get install bind9

Ohjelman hallinta tapahtuu käytännössä muokkaamalla kolmea konfiguraatiotiedostoa sekä zone-tiedostoja. Tärkeimmät konfiguraatiotiedostot on listattu alla.

/etc/bind/named.conf
/etc/bind/named.conf.local
/etc/bind/named.conf.options

named.conf-tiedosto sisältää koneen ja BIND-ohjelman toiminnan kannalta olennaisia asioita. Alla ote tiedostoa koskevasta manuaalista.

NAME
       named.conf - configuration file for named

SYNOPSIS
       named.conf

DESCRIPTION
       named.conf is the configuration file for named. Statements are enclosed in braces
       and terminated with a semi-colon. Clauses in the statements are also semi-colon
       terminated. The usual comment styles are supported:

       C style: /* */

       C++ style: // to end of line

       Unix style: # to end of line

Ohjelman konfiguroinnissa on valtavasti erilaisia vaihtoehtoja. Suosionsa vuoksi ohjelmaan löytyy erittäin paljon ohjeistusta esimerkiksi verkosta. Aiheesta on julkaistu myös lukuisa määrä kirjoja. Yksi parhaimmista tietolähteistä on ohjelman sivuilta löytyvä opas.

DNS-palvelun tärkeyden vuoksi alla olevissa tehtävissä järjestelmä on oletuksena jo kahdennettu. Tähän on myös toinen, joka on esimerkiksi Ficoran fi-domainia koskevat vaatimukset. Vaatimuksena on, että domainista vastaa vähintään kaksi itsenäistä nimipalvelinta. Sivusto tarjoaa hyvän työkalun, jolla vaatimukset saadaan helposti testattua.

Ensisijainen DNS

Tehdään zone-tiedostoille kansio

mkdir /etc/bind/zones
chown bind:bind /etc/bind/zones

Tehdään nimipyyntöjen lokitiedosto

mkdir /var/log/named
touch /var/log/named/bind.log
chown bind:bind /var/log/named/bind.log

Liitetään alla oleva teksti konfiguraatiotiedostoon

second:/etc/bind# mv named.conf.options named.conf.options.bak
second:/etc/bind# pico named.conf.options

#Palvelimen toimintaan vaikuttavia määrityksiä
options {
	directory "/var/cache/bind";
	forwarders { 192.168.11.1; };
	recursion yes; 
	allow-recursion { 127.0.0.1; 10.0.0.0/24; };
	allow-query { 127.0.0.1; 10.0.0.0/24;};
	allow-transfer { 10.0.0.20; };
	auth-nxdomain no;
	listen-on-v6 { any; };
};
 
#Lokitetaan jokainen nimipyyntö
logging {
        channel "querylog" { file "/var/log/named/bind.log" versions 5 size 5m; print-time yes; };
        category queries { querylog; };
};

Alla olevalla sama homma

second:/etc/bind# mv named.conf.local named.conf.local.bak
second:/etc/bind# pico named.conf.local

#Määritetään kuka saa hallita palvelinta. Hallintatyökaluja on esimerkiksi rndc
controls { inet 127.0.0.1 allow { localhost; } keys { "rndc-key"; }; };
 
include "/etc/bind/rndc.key";
 
#testiverkko.info-domainin esittely
zone "testiverkko.info" {
  	#Ensisijainen palvelin
	type master;
 
  	#Vyöhyketiedoston sijainti
	file "/etc/bind/zones/db.testiverkko.info";
};
 
#10.0.0.X-osoitealueen esittely
zone "0.0.10.in-addr.arpa" {
	type master;
	file "/etc/bind/zones/db.10.0.0";
};

Luodaan ensimmäinen zone-tiedosto

second:/etc/bind/zones# pico db.testiverkko.info

$TTL 86400 
$ORIGIN testiverkko.info.
@	SOA	ns1.testiverkko.info. hostmaster.testiverkko.info. (
		200806329 	; serial
		28800      	; refresh (8 hours)
		7200       	; retry (2 hours)
		2419200    	; expire (4 weeks)
		86400 )     	; minimum (1 day)
 
	 	NS	ns1.testiverkko.info.
	 	NS	ns2.testiverkko.info.
 
ns1		A	10.0.0.10
ns2		A	10.0.0.20
router		A	10.0.0.1
ntp		A	10.0.0.1

Testataan tehdyn vyöhykkeen oikeellisuus seuraavalla komennolla

named-checkzone testiverkko.info /etc/bind/zones/db.testiverkko.info

Tehdään reverse-zone

second:/etc/bind/zones# pico db.10.0.0

$TTL 86400
$ORIGIN 0.0.10.in-addr.arpa.
@	SOA	ns1.testiverkko.info. hostmaster.testiverkko.info. (
		200806310  ; serial
		28800      ; refresh (8 hours)
		7200       ; retry (2 hours)
		2419200    ; expire (4 weeks)
		86400 )    ; minimum (1 day)
 
		NS	ns1.testiverkko.info.
		NS	ns2.testiverkko.info.
 
10		PTR	ns1.testiverkko.info.
20		PTR	ns2.testiverkko.info.
1		PTR	router.testiverkko.info.

Testataan tehdyn vyöhykkeen oikeellisuus seuraavalla komennolla

named-checkzone 0.0.10.in-addr.arpa /etc/bind/zones/db.10.0.0

Testataan syntaksin oikeellisuus

named-checkconf -z

Käynnistetään nimipalvelin uudestaan

invoke-rc.d bind9 restart

Analysointiin kannattaa käyttää esimerkiksi dig-komentoa, jolla voi tehdä DNS-palvelimelle monenlaisia kyselyjä.

main:~# dig testiverkko.info ANY

; <<>> DiG 9.5.1-P1 <<>> testiverkko.info ANY
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3340
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;testiverkko.info.              IN      ANY

;; ANSWER SECTION:
testiverkko.info.       86400   IN      SOA     ns1.testiverkko.info. hostmaster.testiverkko.info. 200806329 28800 7200 2419200 86400
testiverkko.info.       86400   IN      NS      ns2.testiverkko.info.
testiverkko.info.       86400   IN      NS      ns1.testiverkko.info.

;; ADDITIONAL SECTION:
ns1.testiverkko.info.   86400   IN      A       10.0.0.10
ns2.testiverkko.info.   86400   IN      A       10.0.0.20

;; Query time: 2 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: Thu Mar 19 17:35:29 2009
;; MSG SIZE  rcvd: 201

Toinen hyvä työkalu on nslookup, josta esimerkki alla

main:~# nslookup
> set q=ANY
> testiverkko.info
Server:         10.0.0.10
Address:        10.0.0.10#53

testiverkko.info
        origin = ns1.testiverkko.info
        mail addr = hostmaster.testiverkko.info
        serial = 200806329
        refresh = 28800
        retry = 7200
        expire = 2419200
        minimum = 86400
testiverkko.info        nameserver = ns1.testiverkko.info.
testiverkko.info        nameserver = ns2.testiverkko.info.
>

Toissijainen DNS

Tehdään nimipyyntöjen lokitiedosto

mkdir /var/log/named
touch /var/log/named/bind.log
chown bind:bind /var/log/named/bind.log

Liitetään alla oleva teksti konfiguraatiotiedostoon

third:/etc/bind# mv named.conf.options named.conf.options.bak
third:/etc/bind# pico named.conf.options

options {
	directory "/var/cache/bind";
	forwarders { 192.168.11.1; };
	recursion yes; 
	allow-recursion { 127.0.0.1; 10.0.0.0/24; };
	allow-query { 127.0.0.1; 10.0.0.0/24;};
	allow-notify { 127.0.0.1; 10.0.0.10; 10.0.0.20;};
	auth-nxdomain no;
	listen-on-v6 { any; };
};
 
logging {
        channel "querylog" { file "/var/log/named/bind.log" versions 5 size 5m; print-time yes; };
        category queries { querylog; };
};

Alla olevalla sama homma

third:/etc/bind# mv named.conf.local named.conf.local.bak
third:/etc/bind# pico named.conf.local

#testiverkko.info-domainin esittely
zone "testiverkko.info" {
	type slave;
	masters { 10.0.0.10; };
	file "db.testiverkko.info";
};
 
#10.0.0.X-osoitealueen esittely
zone "0.0.10.in-addr.arpa" {
	type slave;
	masters { 10.0.0.10; };
	file "db.10.0.0";
};

Testataan syntaksin oikeellisuus

named-checkconf -z

Käynnistetään nimipalvelin uudestaan

invoke-rc.d bind9 restart

Sisällysluetteloon


Dynaaminen DNS

zone-tiedostojen hallinta voi olla laajoissa verkoissa hankalaa. Tähän tarkoitukseen on kehitetty erilaisia palveluita, jotka ylläpitävät ja muuttavat DNS-vyöhykkeitä koneiden osoitteiden ja nimien muuttuessa. Yksi tällainen palvelu Dynaaminen DNS, jossa erilaiset ohjelmarajapinnat suorittavat päivityksen.


Dynaaminen DNS


Tässä tehtävässä päivityksen suorittaa DHCP-palvelinohjelma. Päivitys suoritetaan heti, kun asiakkaalle on jaettu osoite. Päivitys perustuu koneen nimeen ja IP-osoitteeeseen.

Ensisijainen DHCP => Muutos

Muutetaan konfiguraatiotiedostoa seuraavasti

/etc/dhcp3/dhcpd.conf

#DNS-vyöhykkeen päivitystapa
ddns-update-style interim;
 
#Päivitettävän DNS-vyöhykkeen nimi
ddns-domainname "testiverkko.info";
 
#Päivitettävä reverse-vyöhyke
zone 0.0.10.in-addr.arpa. {
  	#Missä palvelimella vyöhyke sijaitsee
	primary 10.0.0.10;
}
 
#Päivitettävä forward-vyöhyke 
zone testiverkko.info. {
	primary 10.0.0.10;
}

Käynnistetään palvelu uudestaan

invoke-rc.d dhcp3-server restart

Ensisijainen DNS => Muutos

Ensisijaiseen DNS-palvelimeen tehdään seuraava muutos

/etc/bind/named.conf.local

#testiverkko.info-domainin esittely
zone "testiverkko.info" {
  	#Ensisijainen palvelin
	type master;
 
  	#Vyöhyketiedoston sijainti
	file "/etc/bind/zones/db.testiverkko.info";
 
  	#Sallitaan päivittäminen
	allow-update { 10.0.0.10; };
};
 
#10.0.0.X-osoitealueen esittely
zone "0.0.10.in-addr.arpa" {
	type master;
	file "/etc/bind/zones/db.10.0.0";
	allow-update { 10.0.0.10; };
};

Muutetaan oikeuden sellaiseksi, että osoitteen päivitys onnistuu

chown bind:bind /etc/bind/zones/*

Käynnistetään nimipalvelin uudestaan

invoke-rc.d bind9 restart
Linuxissa pitää muokata tiedostoa dhclient.conf kansiossa /etc/dhcp3! => send host-name
MAC-osoitteella ei saa olla kiinteää sidosta IP-osoitteeseen! /etc/dhcp3/dhcpd.conf => host!

Sisällysluetteloon


Henkilökohtaiset työkalut