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 |
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
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.
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.
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.
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.
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 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.
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.
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!
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.
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-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 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 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.
Kaappauksen aikana liittymään rullaa kaapattua liikennettä. Kaappaus voidaan pysäyttää, ja kaapattu liikenne näkyyy ruudulla.
Liikennettä voidaan tutkia paketti kerrallaan. Oletuksena paketista näkee jo lähes kaiken oleellisen.
Ohjelma tarjoaa valmiita suodattimia, joita voidaan käyttää liikennettä tutkiessa. Vaihtoehtoisesti voidaan määrittää myös omia.
Suodattimet voidaan määritellä jo kaappausvaiheessa. Näin säästetään resursseja, koska liikennettä ei tallenneta mihinkään välimuistiin.
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 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 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 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ä.
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 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.
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.
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.
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.
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
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 rooli verkossa on merkittävä. Tästä syystä se täytyy pystyä vähintään kahdentamaan. Tämä tapahtuu seuraavien ohjeiden mukaisesti.
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
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.
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.
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.
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
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-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.
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.
>
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
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.
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.
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
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!