Strežnik z Linuxom

Objavljeno: 30.3.2005 13:57 | Avtor: Jure Koren | Kategorija: Odprta scena | Revija: November 2004

Ena od težavnih odločitev na poti do zadovoljnega uporabnika strežnika z Linuxom je izbor distribucije. Ker se med uporabniki različnih distribucij pogosto vnemajo vroči besedni spopadi o prednostih te in hibah one distribucije, se takim razpravam poskusite izogniti.

Distribucijo izberite po nekaj preprostih korakih:

  • zagotovite si poznanstvo nekoga, ki pozna "svojo" distribucijo in vam je pripravljen pomagati pri namestitvi in vzdrževanju;
  • ne pozabite preveriti, ali ima distribucija samodejni sistem za posodabljanje programske opreme;
  • pozanimajte se, ali vse programe, ki bi jih utegnili potrebovati, že dobite lepo zavite v pakete, da jih je moč preprosto namestiti in nastaviti.
  • Namestitev

    Distribucija, ki ima vse naštete lastnosti, je najboljša. Če je takih več (danes to navadno drži), poskusite najti tako, ki je čim bolj razširjena, saj to pomeni večjo množico ljudi s potencialno podobnimi težavami in torej več možnosti, da je težavo nekdo odpravil in to tudi dokumentiral.

    Namestitev sodobne distribucije je trivialna in ne zahteva poglobljenega znanja o računalnikih ali Linuxu. Po vrsti se navadno odločimo za jezik, ki nas bo spremljal pri namestitvi, izberemo razporeditev tipk na tipkovnici, določimo razdelke na diskih, na katere se bo namestil sistem, in izberemo pakete, na koncu pa nas čakajo nastavitve omrežja, strojne opreme in zaganjanja sistema. Vrstni red je lahko tudi drugačen.

    Velja upoštevati nekaj splošnih nasvetov:

  • Ne namestite paketov, ki jih ne potrebujete. Poleg osnovne distribucije namestite le storitve, za katere ste prepričani, da jih potrebujete. Tako izboljšamo varnost sistema, ker zmanjšujemo zapletenost namestitve in zmanjšamo nabor orodij, ki so na voljo morebitnemu vsiljivcu.
  • Če namestitev to omogoča, že takoj vključite požarni zid, ki naj preprečuje dostop do česarkoli, potem pa se odločite, kaj mora biti omogočeno. V nasprotnem primeru si tak požarni zid uredite sami.
  • Vsako storitev nastavite ali vsaj preglejte njene nastavitve, preden jo zaženete. Nekatere privzete nastavitve so lahko v pomoč nepridipravom.
  • Tam, kjer je smiselno, onemogočite dostop do storitev brez šifriranih povezav. Če se podatki, ki zagotavljajo identiteto uporabnika storitve, prenašajo po omrežju kot čisto besedilo, jih vsiljivec trivialno prestreže in uporabi v svoje namene.
  • Včasih je bilo določanje velikosti razdelkov na disku posebna znanost. Danes so diski tako poceni in veliki, da je dovolj, če naredite razdelek za izmenjalni pomnilnik (ki naj bo dvakrat večji od pomnilnika v računalniku) in razdelek za korenski (root) datotečni sistem, na katerem bodo vsi podatki.

    Namestite orodja, ki omogočajo spremljanje sprememb na sistemu in posebnosti v dnevniških datotekah. Taki programi navadno enkrat na dan pošljejo elektronsko sporočilo s povzetkom vsega, kar se je v sistemu dogajalo. Programi, ki se jih splača namestiti, so logwatch, ki pregleduje sistemske dnevniške datoteke, tripwire, ki pazi na integriteto sistemskih datotek, in pflogsumm, ki poroča o dogajanju v sistemu elektronske pošte.

    Kateri datotečni sistem

    Vrsta datotečnega sistema je pomembna tako za zmogljivost kot stabilnost sistema. Najbolj preizkušen in stabilen, a hkrati tudi najmanj zmogljiv datotečni sistem za Linux je ext3 (tretja različica razširjenega datotečnega sistema). Drugi priljubljen datotečni sistem, reiser, je predstavnik novega rodu najzmogljivejših datotečnih sistemov, a je manj preizkušen v zahtevnih okoljih. Vsi sodobni datotečni sistemi (tudi ext3 in reiser) omogočajo zapisovanje dnevniške datoteke vseh transakcij, s katero se datotečni sistem ob nepričakovani zaustavitvi sistema (npr. zaradi izpada električne energije) lahko vrne v konsistentno stanje. Avtorji uporabljajo oba datotečna sistema v zelo zahtevnih okoljih že nekaj let in ne poročajo o resnejših težavah.

    Nastavitve omrežja

    Ker se Linux tako dobro znajde v internetnih omrežjih, je že kar običaj, da je strežnik hkrati tudi omrežni prehod, ki sedi med krajevnim omrežjem in internetom ter bdi nad varnostjo omrežja.

    Najpogosteje so strežniki v internet povezani prek kabelskega omrežja ali priključka DSL, sem ter tja pa še vedno najdemo take, ki vzpostavljajo klicno povezavo z vmesniki ISDN ali analognimi modemi. Za povezovanje v krajevna omrežja se danes uporablja skoraj izključno ethernet.

    Požarni zid in preslikavo naslovov iz krajevnega v internetno omrežje bomo postavili predvsem zaradi varnosti in uporabnosti. Tako nam en naslov IP v internetnem omrežju zadostuje za uporabni dostop do interneta iz skoraj poljubno velikega krajevnega omrežja, varnostne odločitve pa izvajamo na enem koncu, kjer se krajevno omrežje dotika interneta. Ker je postavljanje požarnega zidu zahtevna naloga, bomo tudi tu predstavili le temeljne smernice in z zgledi ponazorili, kako se zgradi požarni zid. Delujočo različico požarnega zidu, ki ga avtorji uporabljajo v praksi, pa si lahko ogledate na naslovu http://tnt.aufbix.org/linux/firewall/. Lahko ga tudi prilagodite svojim željam in potrebam.

    Program za upravljanje požarnega zidu na Linux 2.4 in višjih se imenuje iptables (navadno je v imeniku /usr/sbin). Požarni zid se imenuje netfilter. Podrobnosti o njem si lahko preberete na domači strani http://www.netfilter.org/.

    Internet je sestavljen iz velikega števila med seboj povezanih omrežij, ki govorijo skupni jezik, IP (ang. Internet Protocol). Za poglobljeno razumevanje požarnih zidov je nujno potrebno tudi razumevanje delovanja omrežja, a žal to presega okvire tega članka. Za lažjo predstavo smo narisali le nekaj shem, ki ponazarjajo "vodovodno napeljavo" požarnega zidu, vgrajenega v Linux.

    Pot paketa IP v požarni zid (modro) in paketa IP iz njega (zeleno)

    Paket pride v računalnik skozi omrežni vmesnik. Najprej se izvaja preslikava ciljnega naslova, s čimer lahko paket preusmerimo drugam (veriga PREROUTING v tabeli nat). Potem se strežnik odloči, kam je paket namenjen. V tem primeru je cilj paketa sam strežnik, zato se o usodi paketa odloči veriga INPUT v tabeli filter. Tu lahko paket zavrnemo, zavržemo, pustimo skozi, zapišemo njegov prehod v dnevniško datoteko in počnemo druge reči. Če pravila, ki ustrezajo paketu, paket spustijo naprej, ga Linux preda uporabniškemu programu. Uporabniški programi tudi pošiljajo pakete, ki zapuščajo računalnik po drugi poti. Najprej se podajo skozi verigo OUTPUT v tabeli filter, ki je praviloma prazna, saj svojim programom vedno dovolimo dostop do omrežja. Potem se Linux odloči, skozi kateri omrežni vmesnik bo paket zapustil računalnik glede na njegov ciljni naslov, na koncu pa paket potuje še skozi verigo POSTROUTING v tabeli nat, ker lahko izvajamo preslikavo izvirnega naslova paketa, a za sam strežnik to zelo redko počnemo. Končno se paket zavije v okvir fizičnega medija in preda gonilniku za omrežni vmesnik.

    Pot paketa IP skozi požarni zid (rdeče)

    Pri poti paketa skozi požarni zid v krajevno omrežje ali iz krajevnega omrežja v internet paket potuje skozi rdeče začrtano pot. Če se Linux odloči, da je paket namenjen naprej v omrežje namesto v verigo INPUT, prispe v verigo FORWARD, kjer so nanizana pravila, ki odločajo o usodi paketov, ki le prečkajo strežnik. Če veriga paketu dovoli prehod, se paket znajde še v verigi POSTROUTING v tabeli nat, kjer se navadno izvaja preslikava izvirnega naslova iz krajevnega omrežja v internet. Ko je tudi to za njim, se paket pošlje naprej skozi fizični medij.

    Zgledi rabe (POZOR: ta požarni zid še zdaleč ni popoln, za uporabo si iz interneta raje prenesite zgled na http://tnt.aufbix.org/linux/firewall/):

    # dovolimo ves promet iz notranjega omrezja (z omreznega vmesnika eth0) na pozarni zid:

    iptables -A INPUT -i eth0 -j ACCEPT

    # ves promet, ki je namenjen iz krajevnega omrezja, preslikamo na internetni naslov (za ADSL je to vmesnik ppp0):

    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

    # pozarni zid lahko preckajo le paketi tistih povezav, ki izvirajo iz krajevnega omrezja

    iptables -A FORWARD -i eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

    iptables -A FORWARD -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    Problematike določanja prioritet pretoka različnih podatkov skozi omrežje se v tem članku ne bomo lotili, omeniti pa velja wondershaper http://lartc.org/wondershaper/, ki bo omogočil udobnejše delo z internetom za majhna krajevna omrežja z največ nekaj deset delovnimi postajami. Več branja na temo omejevanja prometa ponuja spletna stran http://lartc.org/ o naprednem usmerjanju in omejevanju prometa.

    Zgledi nastavitve omrežja na različnih distribucijah linuxa

    Debian

    Nastavitve za ethernetna omrežje lahko vnesete že ob namestitvi, sicer pa so nastavitvene datoteke v /etc/network oz. datoteki /etc/network/interfaces. ADSL (ppp/pppoe) povezave urejate s programom pppoeconfig; nastavitve se shranijo v /etc/ppp/peers/. Požarni zid se lahko spiše kot skripta, ki jo lahko poganjamo z interfaces ali pa z /etc/network/ifup.d/.

    Fedora core 2

    Za nastavitev omrežja se uporabljajo datoteke v /etc/sysconfig/network-scripts/ifcfg-ethX, za PPP in PPPoE pa so nastavitve v /etc/ppp. Nastavitve požarnega zidu so spravljene v /etc/sysconfig/iptables. Ko požarni zid nastavimo po svojih željah in potrebah, lahko nastavitve shranimo za vselej z ukazom service iptables save, tako da se ob naslednjem zagonu požarni zid samodejno naloži z enakimi pravili.

    SuSE

    Pri privzeti namestitvi vas namestitveni program vpraša po vsem, kar potrebujete. Ročno lahko vmesnike nastavljate z urejevalnikom besedila, v katerem odprete datoteko /etc/sysconfig/network/ifcfg-ethX, kjer je X številka vmesnika. Podatki in nastavitve za povezave PPP in PPPoE so shranjeni v /etc/ppp, požarni zid pa se imenuje SuSE firewall in je privzeto vključen in zadostuje za domačo rabo in manjša krajevna omrežja, saj omogoča tudi nastavitev preslikave naslovov (NAT).

    Omrežne storitve

    Ker požarni zid omejuje komunikacijo po omrežju, moramo paziti, da ne zaustavljamo legitimnega prometa, namenjenega upravljanju omrežja in ugotavljanju napak v omrežju. Tudi paranoično nastavljen požarni zid mora pustiti nekatere vrste prometa, sicer omrežje ne deluje pravilno.

    ICMP

    ICMP (ang. Internet Control Message Protocol) je protokol, ki omogoča omrežju, da deluje. ICMP je precej obširen protokol za signalizacijo ob napakah, zastojih, zavrnitvah ali prekinitvah v omrežju, zato si ga ne bomo podrobneje ogledali. Več o njem si lahko preberete na http://www.faqs.org/rfcs/rfc792.html. Za domačo rabo je pomembno, da omejimo hitrost oddajanja sporočil ICMP, saj tako preprečimo nekatere oblike napadov na naše omrežje, vsekakor pa je pametno, da dovolimo vhodna sporočila vrste echo request, da lahko naš omrežni prehod odgovarja na t. i. "ping", to je preprost preizkus povezljivosti, pri katerem omrežna naprava, ki je prejela ping, nanj odgovori s paketom echo reply oz. "pong". Tako lahko s programom ping preverjate dosegljivost naprave na določenem naslovu IP in lepo je, če to lahko storijo tudi drugi. Ob požarnem zidu na naslovu http://tnt.aufbix.org/linux/firewall/ je oddajanje izhodnih sporočil ICMP razumno omejeno, da prevelik tok vhodnih sporočil ping ne zamaši izhodne povezave (ki ima navadno manjšo zmogljivost pošiljanja kakor prejemanja). Tako je ta temeljna omrežna storitev dostopna za uporabo, ne omogoča pa zlorabe. Ker je protokol ICMP del protokola IP in je izveden že v samem jedru operacijskega sistema, za delovanje ni treba namestiti dodatnih programov.

    Traceroute

    Podobno velja za traceroute, program, ki omogoča sledenje paketu po omrežju. Program izpisuje pot, ki naj bi jo paket ubiral, ko potuje skozi omrežje. Naš požarni zid mora na take pakete odgovoriti, če želimo, da program rabi svojemu namenu, pri tem pa upoštevamo podobne varnostne ukrepe, kot smo jih pri protokolu ICMP. Tudi traceroute deluje na samem protokolu IP in zato ne potrebujemo dodatnih strežniških programov, da bi storitev delovala.

    NTP

    Ena od temeljnih storitev omrežja je tudi NTP (ang. network time protocol), ki omogoča natančno sinhronizacijo sistemske ure z urami drugih naprav v omrežju. Že lep čas vsi najbolj razširjeni operacijski sistemi podpirajo sinhronizacijo ure prek strežnika NTP, zato je primerno, da tako storitev ponudimo tudi v svojem omrežju. Pri tem seveda storitev NTP zapremo v internetno omrežje, ker si drugi uporabniki interneta lahko uro sinhronizirajo pri svojem ponudniku, mi pa s postavitvijo takega strežnika na svojem omrežnem prehodu povečamo natančnost sinhronizacije v krajevnem omrežju in razbremenimo ponudnikov strežnik. Z ustrezno sinhronizirano uro v vseh sistemih v omrežju se lahko zanesemo na datume, zapisane v dnevniške datoteke, in zmanjšamo možnost za napačno delovanje nekaterih programov, občutljivih za časovno sinhronizacijo. Nastavitve za NTP so navadno zapisane v nastavitveni datoteki /etc/ntp.conf, strežnik (in navadno tudi paket, ki ga je treba namestiti) pa se imenuje ntpd ali xntpd. Zgled nastavitvene datoteke za strežnik v Sloveniji lahko prenesete z naslova http://tnt.aufbix.org/linux/ntp.conf.

    SSH

    Za varen dostop do strežnika na daljavo se najpogosteje uporablja SSH (ang. secure shell), naslednik RSH (ang. remote shell), ki vse podatke, ki jih izmenjujemo, močno šifrira. To načeloma pomeni, da lahko od koderkoli po svetu dosežemo svoj strežnik prek SSH dokaj varno, vendar izkušnje kažejo, da je dostop do storitev, kakršna je SSH, najbolje blokirati za vse, ki niso nujno upravičeni do nje. Upravitelji navadno zaprejo SSH za vse, razen za dva ali tri znane naslove (za primer nedosegljivosti) svojih sistemov, s katerih se lahko potem prijavijo v oddaljene strežnike. Druga možnost, ki je bolj zapletena, je vzpostavitev IPsec [povezava na freeswan in ipsec za 2.6], ki jo bomo obravnavali v katerem od naslednjih člankov. Nastavitve storitve SSH so navadno zapisane v /etc/ssh/sshd_config, programa SSH, s katerim se prijavljamo v druge sisteme, pa v /etc/ssh/ssh_config. V večini distribucij Linuxa je paket s strežnikom in odjemalcem SSH že nameščen.

    Nič lažjega?

    Namestitev sistema je večinoma zelo preprosta, a se kljub temu lahko pokažejo težave. Navadno ne deluje kak kos strojne opreme ali pa sistemu ne uspe samodejno zaznati (včasih pa tega sploh ne poskuša), katere od številnih reči, ki jih potrebujemo. V tem primeru se je najbolje obrniti po pomoč na tistega znanca, ki nam je priporočal to ali ono distribucijo. Če ga nimamo, pa so dopisni seznami Lugosa http://www.lugos.si/ primeren prostor za taka vprašanja. Branje dokumentacije, ki je navadno dostopna v številnih jezikih, je dobra, a dolga pot do rešitve. Rešitev iz zagate nam lahko zelo hitro ponudi tudi Google.

    Za vsako namestitvijo se začne vzdrževanje sistema in zagotavljanje varnosti v omrežju. Ta naloga je bistveno težja in se nikoli ne konča, saj je zagotavljanje varnosti postopek, ne le enkratno opravilo. Za zagotavljanje varnosti je tudi nujno potrebno poglobljeno znanje o omrežjih, operacijskih sistemih, uporabniških programih in verjetno kar o vsem, kar spremlja delo, podprto z informacijsko tehnologijo. Privzeto varne nastavitve močno olajšajo prve varne korake v svet računalniških omrežij, a sčasoma bomo spoznali tudi drobovje vsake reči, s katero se ukvarjamo.

    Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!
    Prijava

    ph

    Komentirajo lahko le prijavljeni uporabniki