Nästa Föregående Innehållsförteckning

5. Generell Information om Nätverkskonfiguration

Följande delsektioner innehåller information som man måste förstå för att kunna konfigurera sitt nätverk. Det är fundamentala principer som gäller oavsett karaktären på nätverket som man skall använda.

5.1 Vad behöver man för att börja?

Innan man börjar bygga eller konfigurera sitt nätverk behöver man några saker. De viktigaste är:

Källkoden för kärnan.

Eftersom kärnan som man kör nu inte nödvändigtvis ännu har stöd för de nätverk och nätverkskort som man vill använda så behöver man antagligen källkoden för kärnan så att man kan kompilera om den med lämpliga tillägg.

Man kan alltid hämta den senaste källkoden från: ftp.funet.fi.

Vanligtvis så packas källkoden upp till katalogen /usr/src/linux. För mer information om hur man lägger till patchar och hur man kompilerar kärnan så bör man läsa Kernel-HOWTO. För information om hur man konfigurerar kärnans moduler så bör man läsa Module-HOWTO.

Om inte annat sägs specifikt så rekommenderar jag att man håller dig till standardversionerna av kärnan (de med jämna nummer som andra siffra i versionsnummret). Versioner under utveckling (de med udda andra siffra) kan ha strukturella eller andra ändringar som kan skapa problem med annan mjukvara i sitt system. Om man är osäker på om man klarar av att lösa den typen av problem, så skall man inte använda de versionerna.

Nätverksverktyg (Network Tools).

Nätverksverktygen är de program som man använder för att konfigurera nätverksenheter i Linux. Med dessa verktyg kan man tilldela adresser till enheter och konfigurera routes till exempel.

De flesta moderna Linuxdistributioner är utrustade med nätverksverktyg, så om man har installerat från en distribution och ännu inte installerat nätverksverktygen så bör man göra detta nu.

Om man inte har installerat från en distribution så behöver man källkoden för att kompilera verktygen själv. Detta är inte svårt.

Nätverksverktygen handhas av Bernd Eckenfels och finns på: ftp.inka.de och är speglade på: ftp.uk.linux.org.

Man skall vara noga med att välja en version som passar den kärna som man har tänkt att använda och med att följa instruktionerna i paketet för att installera.

För att installera den senaste versionen då detta skrivs så behöver man göra följande:

#
# cd /usr/src
# tar xvfz net-tools-1.33.tar.gz
# cd net-tools-1.33
# make config
# make
# make install
#

Dessutom, om man tänker konfigurera en brandvägg eller använda IP-maskering, så behöver man ipfwadm kommandot. Den senaste versionen finns på: ftp.xos.nl. Återigen så finns det ett antal versioner tillgängliga. Se till att välja den som passar bäst till din kärna.

För att installera den senaste versionen då detta skrivs så behöver man göra följande:

#
# cd /usr/src
# tar xvfz ipfwadm-2.3.0.tar.gz
# cd ipfwadm-2.3.0
# make
# make install
#

Applikationsprogram för nätverket

Applikationsprogrammen är program såsom telnet och ftp och deras respektive serverprogram. David Holland <dholland@hcs.harvard.edu> handhar en distribution av de vanligaste av dessa. man kan hämta dem från: ftp.uk.linux.org.

För att installera den senaste versionen då detta skrivs så behöver man göra följande:

#
# cd /usr/src
# tar xvfz /pub/net/NetKit-B-0.08.tar.gz
# cd NetKit-B-0.08
# more README
# vi MCONFIG
# make
# make install
#

Adresser.

Internet Protokoll Adresser är uppbyggda av fyra bytes. Konventionen är att skriva adresser i vad som kallas 'punkterad decimal notation'. I denna formen är varje byte konverterad till ett decimalt tal (0-255), utan nollor i början, och skrivs med varje byte separerad med ett '.' tecken. Varje (nätverks-)gränssnitt hos en värddator eller router har en IP-adress. I vissa fall är det tillåtet att ha samma IP-adress på alla gränssnitt på en och samma maskin, men vanligtvis har varje gränssnitt sin egen adress.

Internet Protokoll nätverk är kontinuerliga sekvenser av IP-adresser. Alla adresser inom ett nätverk har ett antal siffror i adressen gemensamma. Den del av adressen som är gemensam för alla adresser inom ett nätverk kallas 'nätverksdelen' ('network portion') av adressen. Antalet bitar som är delade av alla adresser inom ett nätverk kallas 'nätmasken' ('netmask') och det är nätmaskens uppgift att avgöra vilka adresser som hör till nätverket som nätmasken tillhör och vilka som inte gör det. Beakta följande exempel:

-----------------  ---------------
Host Address       192.168.110.23
Network Mask       255.255.255.0
Network Portion    192.168.110.
Host portion                  .23
-----------------  ---------------
Network Address    192.168.110.0
Broadcast Address  192.168.110.255
-----------------  ---------------

Alla adresser som blir 'bitvis andade' med sin nätmask kommer att avslöja adressen till nätverket som den tillhör. Nätverksadressen är därför den lägst numrerade adressen i den rad av adresser som finns i nätverket och har värddatordelen av adressen satt till nollor.

Broadcastadressen är en speciell adress som varje värddator på nätverket lyssnar till utöver sin egen unika adress. Till denna adress sänds datagram om det är tänkt att alla maskiner på nätverket skall ta emot dem. Vissa typer av data såsom route information och varningsmeddelanden sänds till broadcastadressen så att alla maskiner på nätverket kan ta emot dem samtidigt. Det finns två vanligt förekommande standarder för vad broadcastadressen skall vara. Den mest använda är att den högsta möjliga adressen i nätverket används som broadcastadress. I exemplet ovan skulle detta vara 192.168.110.255. Av någon anledning använder vissa sajter nätverksadressen som broadcastadress. I praktiken spelar det ingen större roll vilket man använder men man måste vara säker på att alla maskiner på nätverket använder samma broadcastadress.

Av administrativa skäl någon gång tidigt i utvecklingen av IP-protokollet delades adresserna in i några slumpvisa grupper av nätverk och dessa nätverk grupperades i vad som kallas för klasser. Dessa klasser tillhandahåller ett antal nätverk av standardstorlekar som kan bli allokerade. De allokerade är:

----------------------------------------------------------
| Network | Netmask       | Network Addresses            |
| Class   |               |                              |
----------------------------------------------------------
|    A    | 255.0.0.0     | 0.0.0.0    - 127.255.255.255 |
|    B    | 255.255.0.0   | 128.0.0.0  - 191.255.255.255 |
|    C    | 255.255.255.0 | 192.0.0.0  - 223.255.255.255 |
|Multicast| 240.0.0.0     | 224.0.0.0  - 239.255.255.255 |
----------------------------------------------------------

Vilka adresser som man skall använda beror på vad det är exakt man skall göra. Man kan behöva använda en kombination av följande för att få de adresser man behöver:

Installera en Linuxmaskin på ett existerande IP-nätverk

Om man vill installera en Linuxmaskin på ett existerande IP-nätverk så bör man kontakta den som administrerar nätverket och fråga efter följande:

Man skall sedan konfigurera sin Linux nätverksenhet med de uppgifterna. man kan inte hitta på dem och förvänta sig att det skall fungera.

Bygga ett helt nytt nätverk som aldrig skall anslutas till Internet

Om man bygger ett privat nätverk som man aldrig tänker ansluta till Internet så kan man välja vilka adresser man vill. Men, för säkerhets och konsistens skull så har vissa IP-adresser blivit reserverade speciellt för detta ändamål. De är specificerade i RFC1597 och är följande:

-----------------------------------------------------------
|         RESERVED PRIVATE NETWORK ALLOCATIONS            |
-----------------------------------------------------------
| Network | Netmask       | Network Addresses             |
| Class   |               |                               |
-----------------------------------------------------------
|    A    | 255.0.0.0     | 10.0.0.0    - 10.255.255.255  |
|    B    | 255.255.0.0   | 172.16.0.0  - 172.31.255.255  |
|    C    | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 |
-----------------------------------------------------------

Man bör först bestämma hur stort nätverket skall vara och sedan välja så många adresser som man behöver.

5.2 Var skall man skriva konfigurationskommandona?

Det finns några olika metoder för Linux systemstartprocedurer. Efter det att kärnan bootar, så exekverar den alltid ett program som heter init. init programmet läser sedan en konfigurationsfil som heter /etc/inittab och inleder uppstartsprocessen. Det finns några olika versioner av init och det är denna variationen som är den största orsaken till skillnad mellan distributioner eller maskiner.

Vanligtvis så innehåller /etc/inittab filen en rad som ser ut någonting som liknar:

si::sysinit:/etc/init.d/boot

Denna raden specificerar namnet på det shell-script som verkligen utför uppstarten. Denna fil skulle kunna jämföras med filen AUTOEXEC.BAT i MS-DOS.

Vanligtvis finns det andra script som anropas av boot-scriptet och ofta så konfigureras nätverket i något av dessa.

Följande tabell kan användas som guide för ett system:

-------------------------------------------------------------------------------
Distrib. |Interface Config/Routing                    |Server Initialisation
-------------------------------------------------------------------------------
Debian   |/etc/init.d/network                         |/etc/init.d/netbase     
         |                                            |/etc/init.d/netstd_init
         |                                            |/etc/init.d/netstd_nfs
         |                                            |/etc/init.d/netstd_misc
-------------------------------------------------------------------------------
Slackware|/etc/rc.d/rc.inet1                          |/etc/rc.d/rc.inet2 
-------------------------------------------------------------------------------
RedHat   |/etc/sysconfig/network-scripts/ifup-<ifname>|/etc/rc.d/init.d/network
-------------------------------------------------------------------------------

De flesta moderna distributioner har ett program med vilket man kan konfigurera många av de vanligaste sorterna av nätverksgränssnitt. Om man har en av dessa så bör man se om det kan göra det man vill innan man ger sig på manuell konfiguration.

-----------------------------------------
Distrib   | Network configuration program
-----------------------------------------
RedHat    | /sbin/netcfg
Slackware | /sbin/netconfig
-----------------------------------------

5.3 Att skapa sina nätverksgränssnitt.

I många Unix operativsystem så framträder nätverksenheterna i /dev katalogen. Så är inte fallet i Linux. I Linux skapas nätverksenheterna dynamiskt i mjukvara och därmed måste inte enhetsfiler finnas.

I de flesta fall skapas nätverksenheterna automatiskt av drivrutinen när den initialiseras och hittar din hårdvara. Till exempel så skapar Ethernetdrivrutinen eth[0..n] gränssnitten sekvensiellt medan den hittar din Ethernethårdvara. Det första Ethernetkortet som hittas blir eth0, det andra eth1 osv.

Men i några fall, tex slip och ppp, så skapas nätverksenheterna genom att något användarprogram körs. Samma sekvensiella numrering gäller, men enheterna skapas inte automatiskt vid systemstarten. Anledningen till detta är att, till skillnad från Ethernetenheterna, så kan antalet aktiva slip eller ppp enheter variera under tiden systemet är igång. De här fallen gås igenom mer noggrannt senare.

5.4 Att konfigurera ett nätverksgränssnitt.

När man har alla program man behöver och sina adress- och nätverksuppgifter så kan man konfigurera sina nätverksgränssnitt. När vi pratar om att konfigurera ett nätverksgränssnitt så pratar vi om processen att tilldela en nätverksenhet lämpliga adresser och att ge lämpliga värden till andra konfigurerbara parametrar hos en nätverksenhet. Det mest använda programmet för detta är kommandot ifconfig (interface configure).

Vanligtvis bör man använda ett kommando som liknar följande:

# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
I detta fallet konfigurerar jag ett Ethernetkort eth0 med IP-adressen 192.168.0.1 och en nätmask 255.255.255.0. Parametern up som följer kommandot talar om för enheten att den skall bli aktiv.

Kärnan förutsätter vissa förvalda värden när man konfigurerar gränssnitt. Till exempel så kan man specificera nätverksadress och broadcastadress för ett gränssnitt. Men om man inte gör det, som i exemplet ovan, så gör kärnan rimliga gissningar baserade på nätmasken, och om man inte specificerat någon nätmask så tittar kärnan på klassen av IP-adress. I exemplet ovan skulle kärnan anta att det är ett klass C nätverk som skall konfigureras och därmed sätta nätverksadressen till 192.168.0.0 och broadcastadressen till 192.168.0.255.

Det finns många andra parametrar till ifconfig. De viktigaste är:

up

aktiverar ett gränssnitt.

down

deaktiverar ett gränssnitt.

[-]arp

slår av eller slår på 'address resolution protocol' för gränssnittet.

[-]allmulti

slår av eller slår på mottagning av alla hårdvaru-multicastpaket. Hårdvaru-multicast låter grupper av maskiner att ta emot paket som är adresserade till speciella destinationer. Detta kan vara viktigt om man använder applikationer såsom videokonferenssystem men används normalt inte.

mtu N

specificerar MTU för enheten.

netmask addr

specificerar nätmasken för nätverket som maskinen tillhör.

irq addr

denna parameter fungerar endast för viss hårdvara och sätter IRQ för enheten.

[-]broadcast [addr]

slår på mottagning av datagram som skickas till broadcastadressen, eller slår av mottagning av dessa datagram.

[-]pointopoint [addr]

sätter adressen på maskinen på andra änden av en punkt till punkt förbindelse som tex slip eller ppp.

hw <type> <addr>

sätter hårdvaruadressen för nätverksenheten. Oftast är detta inte användbart för Ethernet, men är användbart för andra typer av nätverk som tex AX.25.

Man kan använda kommandot ifconfig på alla nätverksgränssnitt. Vissa användarprogram, tex pppd och dip, konfigurerar enheterna automatisk när de skapar dem, så manuell användning av ifconfig är inte nödvändig.

5.5 Att konfigurera din Name Resolver.

Name Resolvern är en del av Linux standardbibliotek. Dess huvudsakliga funktion är att tillhandahålla en tjänst för att översätta människovänliga datornamn som ftp.funet.fi till maskinvänliga IP-adresser som 128.214.248.6.

Vad består ett namn av?

De flesta är antagligen bekanta med hur datornamn uppträder i Internet, men man kanske inte vet hur de är konstruerade, eller rekonstruerade. Internet domännamn är av hierarkisk karaktär, dvs de har trädstruktur. En domän är en familj, eller grupp av namn. En domän kan brytas ned i subdomäner. En toppdomän är en domän som inte är en subdomän. Toppdomänerna är specificerade i RFC-920. Några exempel på de vanligaste topdomänerna är:

COM

Kommersiella Organisationer

EDU

Utbildningsorganisationer

GOV

Regeringsorganisationer

MIL

Militärorganisationer

ORG

Andra Organisationer

NET

Internet-Relaterade Organisationer

Landskod

Detta är koder som består av två bokstäver och som representerar ett visst land.

Alla dessa toppdomäner har subdomäner. Toppdomänerna baserade på landsnamn bryts sedan ned i subdomäner baserade på com, edu, gov, mil och org domäner (detta är ju dock inte fallet i .se-domänen ännu. Översättarens kommentar). Så till exempel blir det com.au och gov.au för kommersiella och regeringsorganisationer i Australien. Av historiska skäl så används de domäner som tillhör de icke landsbaserade toppdomänerna mestadels av organisationer i USA, trots att USA har sin egen landskod .us.

Nästa nedbrytningsnivå representerar oftast namnet på organisationen. Ytterligare subdomäner varierar i karaktär, oftast så baseras nästa nivå på avdelningar inom organisationen, men den kan baseras på vilket kriterium som helst som har någon betydelse för nätverksadministratörerna i organisationen.

Delen längst till vänster av namnet är alltid det unika namnet som värddatorn har och det kallas för hostname, den delen av namnet som finns till höger om hostname kallas för domainname och hela namnet heter Fully Qualified Domain Name.

Med min egen emailvärddator som exempel, så är `Fully Qualified Domain Name' perf.no.itg.telstra.com.au. Detta betyder att hostname är perf och domainname är no.itg.telstra.com.au. Domännamnet är baserat på en toppdomän vilken är baserad på mitt land, Australien och eftersom min epostadress tillhör en komersiell organisation så har vi .com på nästa nivå. Företagets namn är (var) telstra och vår interna namnstruktur är baserad på den organisationella strukturen, i mitt fall så tillhör maskinen Information Technology Group, Network Operations sektionen.

Vilken information behöver man.

Man behöver veta vilken domän datorns namn skall tillhöra. Name Resolvermjukvaran tillhandahåller namnöversättning genom att göra förfrågningar till en Domain Name Server, så man behöver veta IP-adressen till en lokal namnserver som man kan använda.

Det finns tre filer som man behöver editera, jag berättar om dem i tur och ordning.

/etc/resolv.conf

Filen /etc/resolv.conf är huvudfilen för att konfigurera namnöversättaren. Dess format är ganska enkelt. Det är en textfil med ett nyckelord per rad. Det finns tre nyckelord som vanligtvis används, de är:

domain

detta nyckelord specificerar det lokala domännamnet.

search

detta nyckelord specificerar en lista med alternativa domännamn att leta i efter ett datornamn.

nameserver

detta nyckelord, som kan användas flera gånger, specificerar en IP-adress till en namnserver (Domain Name Server) att använda när man översätter namn.

Ett exempel på /etc/resolv.conf kan se ut någonting som följande:
domain maths.wu.edu.au
search maths.wu.edu.au wu.edu.au
nameserver 192.168.10.1
nameserver 192.168.12.1
Detta exempel anger att man lägger till domännamnet maths.wu.edu.au till datornamn som ges utan domännamn, och om datorn inte hittas där så skall man leta även i wu.edu.au domänen. Två namnservrar är specificerade, som båda kan kontaktas av namnöversättaren när ett namn skall översättas.

/etc/host.conf

I filen /etc/host.conf kan man konfigurera hur namnöversättaren beter sig. Formatet för filen är beskrivet i detalj i manualsidan resolv+. I nästan alla fall fungerar följande exempel:

                          
order hosts,bind                                          
multi on  

Denna konfiguration talar om för översättaren att titta i filen /etc/hosts innan den försöker göra en förfrågning till namnservern och att returnera alla giltiga adresser för en dator som den hittar i /etc/hosts och inte bara den första.

/etc/hosts

I filen /etc/hosts kan man lägga namn och IP-adresser för lokala maskiner. Om man placerar ett datornamn med respektive IP-adress i denna fil så behöver man inte göra en förfrågan till namnservern för att få reda på dess IP-adress. Nackdelen med detta är att man måste hålla filen uppdaterad själv ifall IP-adresserna ändras. I ett väl underhållet system så finns endast rader med 'loopback' och lokala datornamn i denna fil.

# /etc/hosts
127.0.0.1      localhost loopback
192.168.0.1    this.host.name

Man kan ange mer än ett datornamn per rad som på den första raden i exemplet, vilket är standardutformningen för loopbackenheten.

5.6 Att konfigurera loopbackenheten.

loopback-enheten är ett särskilt gränssnitt med vilket man kan göra anslutningar till sig själv. Det finns olika anledningar varför man skulle vilja göra detta, till exempel så kanske man vill testa någon nätverksmjukvara utan att störa någon annan på sitt nätverk. Av tradition så har IP-adressen 127.0.0.1 reserverats speciellt för loopback. Så, oavsett vilken maskin man går till, om man öppnar en telnet-anslutning till 127.0.0.1 så blir man alltid ansluten till den lokala datorn.

Att konfigurera loopbackenheten är enkelt och man bör göra följande:

# ifconfig lo 127.0.0.1
# route add -host 127.0.0.1 lo

Vi pratar mer om route kommandot i nästa sektion.

5.7 Routing.

Routing är ett stort ämne. Det skulle vara lätt att skriva stora mängder text om detta. De flesta kommer att ha hyfsat enkla krav på routingen, men vissa har det inte. Jag kommer bara att behandla grunderna om routing. Om man är intresserad av mer detaljerad information så föreslår jag att man letar i referenserna som ges i början av detta dokument.

Låt oss börja med en definition. Vad är IP routing? Här följer den definition som jag använder:

IP routing är processen där en dator med flera nätverksanslutningar avgör vart den skall skicka IP datagram som den har tagit emot.

Det kan vara bra att illustrera detta med ett exempel. Antag en typisk kontorsrouter, den skulle kunna ha en PPP-länk till Internet, ett antal Ethernetsegment som går till arbetsstationerna och en annan PPP-länk till ett annat kontor. När routern tar emot ett datagram på någon av dess nätverksanslutningar, så är routing mekanismen den använder för att avgöra till vilken av nätverksanslutningarna som den skall skicka vidare datagrammet. Enkla datorer behöver också använda routing, alla Internetdatorer har åtminstone två nätverksenheter, en är loopbackenheten som beskrivs ovan och den andra är den som den använder för att 'prata' med resten av nätverket, kanske ett Ethernetkort, kanske ett PPP- eller SLIP-gränssnitt.

Hur fungerar routing? Varje dator har en speciell lista med routingregler som kallas för routingtabellen (routing table). Denna tabell innehåller rader som vanligtvis innehåller åtminstone tre fält, det första är en destinationsadress, det andra är namnet på gränssnittet som datagrammet skall routas till och det tredje är IP-adressen på en annan maskin som skall ta datagrammet på sitt nästa steg genom nätverket. I Linux kan man se denna tabell genom att använda följande kommando:

# cat /proc/net/route
eller genom att använda något av följande kommandon:
# /sbin/route -n
# /bin/netstat -r

Routingprocessen är hyfsat enkel: ett inkommande datagram tas emot, destinationsadressen undersöks och jämförs med varje rad i tabellen. Den rad som bäst matchar adressen väljs och datagrammet skickas vidare till det specificerade gränssnittet. Om gateway-fältet är ifyllt så skickas datagrammet vidare till den maskinen via det specificerade gränssnittet, annars antas det att destinationsadressen finns på nätverket som gränssnittet är kopplat till.

För att manipulera tabellen använder man ett speciellt kommando. Detta kommando tar kommandoradsargument och konverterar dem till systemanrop vilka ber kärnan att lägga till, ta bort eller ändra rader i routingtabellen. Kommandot är route.

Ett enkelt exempel. Antag att man har ett Ethernetnätverk. Man har fått veta att det är ett klass C nätverk med nätverksadressen 192.168.1.0. Man har fått IP-adressen 192.168.1.10 som man kan använda och man har fått veta att 192.168.1.1 är en router som är ansluten till Internet.

Det första steget är att konfigurera gränssnittet som det beskrivits ovan. Man skulle använda ett kommando som:

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
Man behöver nu lägga till en rad i routingtabellen för att tala om för kärnan att datagram till alla adresser som passar 192.168.1.* skall sändas till en Ethernet-enhet. Detta med ett kommando som:
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
Notera -net parametern som används för att tala om för routingprogrammet att denna rad är en nätverksroute. Det andra alternativet är en -host route som är en route som är till en specifik IP-adress.

Med denna route kan man upprätta IP-anslutningar till alla datorer på sitt Ethernet-segment. Men vad händer med alla IP-datorer som inte finns på ens Ethernet-segment?

Det skulle vara ett väldigt svårt jobb att behöva lägga till router till varje tänkbart nätverk, så det finns ett specialtrix som används för att förenkla denna uppgift. Trixet kallas för default route. Default routen passar varje möjlig destination, men dåligt, så om det finns någon annan rad som passar den önskade adressen bättre så kommer den att användas istället för default routen. Tanken med default routen är helt enkelt att man skall kunna säga "och allt annat skall skickas dit". Så i exemplet som vi följt så bör man använda en rad som:

# route add default gw 192.168.1.1 eth0
Parametern gw talar om för route kommandot att nästa parameter är IP-adressen, eller namnet, på en gateway eller router dit alla datagram som passar denna rad skall skickas för vidare routing.

Så exemplets kompletta konfiguration skulle se ut så här:

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add default gw 192.168.1.1 eth0
Om man tittar noga i sina rc-filer för nätverket så kommer man att hitta åtminstone en som liknar detta. Detta är en väldigt vanlig konfiguration.

Låt oss nu titta på en något mer komplicerad routingkonfiguration. Antag att vi konfigurerar routern som vi tittade på tidigare, med en PPP-länk till Internet och några LAN-segment med arbetsstationer på kontoret. Antag att routern har tre Ethernet-segment och en PPP-länk. Vår routingkonfiguration skulle likna följande:

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add -net 192.168.2.0 netmask 255.255.255.0 eth1
# route add -net 192.168.3.0 netmask 255.255.255.0 eth2
# route add default ppp0
Varje arbetsstation skulle använda den enklare formen som beskrevs ovan, endast routern behöver ange alla nätverksrouter separat eftersom hos arbetsstationerna så tar default route mekanismen hand om allihop och låter routern sköta den 'riktiga' routingen. Man kanske undrar varför defaultrouten inte anger en gw. Anledningen är enkel, seriella länkprotokoll såsom PPP och SLIP har alltid endast två maskiner på sitt nätverk, en i varje ända. Att ange maskinen på andra sidan länken som gateway är meningslöst och redundant eftersom det inte finns något annat val, så man behöver inte ange någon gateway för den typen av nätverksanslutningar. Andra nätverkstyper såsom Ethernet, arcnet eller Token Ring kräver att en gateway specificeras eftersom dessa nätverken stödjer att ett stort antal datorer ansluts till dem.

Så vad gör programmet routed?

Routingkonfigurationen som beskrivs ovan passar bäst för enklare nätverksarrangemang där det endast finns en möjlig väg till varje destination. När man har ett mer komplext arrangemang så blir det lite besvärligare. Som tur är behöver de flesta inte bry sig om detta.

Det stora problemet med 'manuell routing' eller 'statisk routing' är att om en maskin eller länk fallerar i nätverket så kan man endast dirigera om sina datagram, om det finns någon annan väg, genom att manuellt ge lämpliga kommandon. Naturligtvis är detta klumpigt, långsamt, opraktiskt och felbenäget. Olika tekniker har utvecklats för att automatiskt ändra routingtabeller om det uppstår nätverksfel där det finns alternativa vägar att leda trafiken, alla dessa tekniker är löst samlade under termen 'dynamiska routing algoritmer'.

Man kanske har hört talas om några av de vanligare dynamiska routingalgorimerna. De allra vanligaste är RIP (Routing Information Protocol) och OSPF (Open Shortest Path First). RIP är väldigt vanlig i små nätverk som till exempel små/mellanstora företagsnätverk. OSPF är modernare och mer kapabel att hantera stora nätverk och bättre anpassad till omgivningar där det finns ett stort antal möjliga vägar genom ett nätverk. Vanliga implementeringar av dessa är: routed (RIP) och gated (RIP, OSPF och andra). Programmet routed finns normalt med i Linuxdistributioner eller finns inkluderat i 'NetKit' paketet ovan.

Ett exempel på var och hur man skulle kunna använda en dynamisk routingalgoritm skulle kunna se ut som följer:

    192.168.1.0 /                         192.168.2.0 /
       255.255.255.0                         255.255.255.0
     -                                     -
     |                                     |
     |   /-----\                 /-----\   |
     |   |     |ppp0   //    ppp0|     |   |
eth0 |---|  A  |------//---------|  B  |---| eth0
     |   |     |     //          |     |   |
     |   \-----/                 \-----/   |
     |      \ ppp1             ppp1 /      |
     -       \                     /       -
              \                   /
               \                 /
                \               /
                 \             /
                  \           /
                   \         /
                    \       /
                     \     /
                  ppp0\   /ppp1
                     /-----\
                     |     |
                     |  C  |
                     |     |
                     \-----/
                        |eth0
                        |
                   |---------|
                   192.168.3.0 /
                      255.255.255.0

Vi har tre routrar A, B och C. Var och en har ett Ethernet-segment med ett klass C IP-nätverk (nätmask 255.255.255.0). Varje router har även en PPP-länk till var och en av de andra routrarna. Nätverket bildar en triangel.

Det bör vara klart att routingtabellen för router A skulle kunna se ut som:

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
Detta skulle fungera utmärkt ända tills länken mellan router A och B fallerar. Om så skulle ske så skulle datorer på A's Ethernet-segment inte kunna nå datorer på B's Ethernet-segment eftersom dess datagram skulle routas till A's ppp0-länk, vilken är trasig. De skulle fortfarande kunna 'prata' med datorer på C's Ethernet-segment och datorer på C's Ethernet-segment skulle kunna kontakta datorer på B's Ethernet-segment eftersom länkarna mellan A och C respektive mellan C och B fortfarande fungerar.

Men vänta lite nu, om A kan prata med C och C fortfarande kan prata med B, varför skulle inte A kunna routa sina datagram till B via C och låta C skicka dem till B? Detta är precis den typen av problem som dynamiska routingalgoritmer som RIP designades för att lösa. Om var och en av routrarna A, B och C körde en routingdaemon så skulle deras routingtabeller automatiskt uppdateras till att spegla det nya tillståndet i nätverket om någon av länkarna skulle fallera. För att konfigurera ett sådant nätverk är enkelt, på varje router behöver man endast göra två saker. I detta fall för router A:

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# /usr/sbin/routed
Routingdaemonen routed hittar automatiskt alla aktiva nätverksportar när den startar och skickar och lyssnar efter meddelanden på var och en av nätverksenheterna så att den kan fastställa och uppdatera routingtabellen på datorn.

Detta har varit en väldigt översiktlig förklaring av dynamisk routing och var man bör använda det. Om man vill ha mer information så sök ibland referenserna i början av dokumentet.

De viktiga punkterna relaterade till dynamisk routing är:

  1. Man behöver bara använda dynamisk routing när ens Linuxburk har möjligheten att välja flera olika routes till en destination.
  2. Den dynamiska routingdaemonen kommer automatiskt att modifiera routingtabellen för att ställa in sig till förändringar i nätverket.
  3. RIP är bra anpassat för små till medelstora nätverk.

5.8 Att konfigurera nätverksservrar och tjänster.

Nätverksservrar och tjänster är de program som låter en avlägsen användare använda sig av ens Linuxburk. Serverprogram lyssnar på nätverksportar. Nätverksportar är hjälpmedel för att adressera en speciell tjänst på en dator och är hur en server vet skillnaden mellan en inkommande telnet-anslutning och en inkommande ftp-anslutning. Den avlägsna användaren upprättar en nätverksanslutning till Linuxburken och serverprogrammet, nätverksdaemonen, lyssnar på den porten och accepterar anslutningen och exekverar. Det finns två sätt på vilka nätverksdaemoner kan fungera. Båda är flitigt använda i praktiken. De två sätten är:

fristående

nätverksdaemonen lyssnar på den angivna porten och när den upptäcker en inkommande anslutning så sköter den om anslutningen själv för att vidare tillhandahålla tjänster.

slav till inetd servern

inetd servern är en särskild nätverksdaemon som är specialiserad på att ta hand om inkommande nätvarksanslutningar. Den har en konfigurationsfil som talar om vilket program som skall köras då en inkommande anslutning tas emot. Varje port kan konfigureras för något av protokollen TCP eller UDP. Portarna är beskrivna i en annan fil som vi skall prata om snart.

Det finns två viktiga filer som behöver konfigureras. De är /etc/services som tilldelar namn till portnummer och /etc/inetd.conf som är konfigurationsfilen till nätverksdaemonen inetd.

/etc/services

Filen /etc/services är en enkel databas som associerar ett människovänligt namn med en maskinvänlig port. Formatet är ganska enkelt. Filen är en textfil där varje rad representerar en rad i databasen. Varje rad består av tre fält som är separerade av valfritt antal vita tecken (tab eller space). Fälten är:

name      port/protocol        aliases     # comment
name

ett namn, bestående av ett ord, som representerar tjänsten som skall beskrivas.

port/protocol

detta fält är indelat i två delfält.

port

ett nummer som anger portnummret som den namngivna tjänsten kommer att vara tillgänglig på. De flesta vanliga tjänster har tilldelats reserverade nummer. Dessa finns beskrivna i RFC-1340.

protocol

detta delfält kan sättas till antingen tcp eller udp.

Det är viktigt att notera att en rad med 18/tcp är väldigt olik en rad med 18/udp och att det inte finns någon teknisk anledning till att samma tjänst finns tillgänglig på båda. Normalt råder sunt förnuft och det är bara om en viss tjänst finns tillgänglig via både tcp och udp som man kommer att se rader med båda.

aliases

andra namn som kan användas för att referera till denna tjänsten.

All text som finns efter ett # tecken på en rad ignoreras och behandlas som en kommentar.

Ett exempel på en /etc/services fil.

Alla moderna Linuxdistributioner kommer med en bra /etc/services fil. Men i fall man råkar bygga ett system från grunden så är här en kopia av /etc/services filen som kommer med Debian distributionen.

# /etc/services:
# $Id: services,v 1.3 1996/05/06 21:42:37 tobias Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1340, ``Assigned Numbers'' (July 1992).  Not all ports
# are included, only the more common ones.

tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
msp             18/udp                          # message send protocol
chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source
ftp-data        20/tcp
ftp             21/tcp
ssh             22/tcp                          # SSH Remote Login Protocol
ssh             22/udp                          # SSH Remote Login Protocol
telnet          23/tcp
# 24 - private
smtp            25/tcp          mail
# 26 - unassigned
time            37/tcp          timserver
time            37/udp          timserver
rlp             39/udp          resource        # resource location
nameserver      42/tcp          name            # IEN 116
whois           43/tcp          nicname
re-mail-ck      50/tcp                          # Remote Mail Checking Protocol
re-mail-ck      50/udp                          # Remote Mail Checking Protocol
domain          53/tcp          nameserver      # name-domain server
domain          53/udp          nameserver
mtp             57/tcp                          # deprecated
bootps          67/tcp                          # BOOTP server
bootps          67/udp
bootpc          68/tcp                          # BOOTP client
bootpc          68/udp
tftp            69/udp
gopher          70/tcp                          # Internet Gopher
gopher          70/udp
rje             77/tcp          netrjs
finger          79/tcp
www             80/tcp          http            # WorldWideWeb HTTP
www             80/udp                          # HyperText Transfer Protocol
link            87/tcp          ttylink
kerberos        88/tcp          kerberos5 krb5  # Kerberos v5
kerberos        88/udp          kerberos5 krb5  # Kerberos v5
supdup          95/tcp
# 100 - reserved
hostnames       101/tcp         hostname        # usually from sri-nic
iso-tsap        102/tcp         tsap            # part of ISODE.
csnet-ns        105/tcp         cso-ns          # also used by CSO name server
csnet-ns        105/udp         cso-ns
rtelnet         107/tcp                         # Remote Telnet
rtelnet         107/udp
pop-2           109/tcp         postoffice      # POP version 2
pop-2           109/udp
pop-3           110/tcp                         # POP version 3
pop-3           110/udp
sunrpc          111/tcp         portmapper      # RPC 4.0 portmapper TCP
sunrpc          111/udp         portmapper      # RPC 4.0 portmapper UDP
auth            113/tcp         authentication tap ident
sftp            115/tcp
uucp-path       117/tcp
nntp            119/tcp         readnews untp   # USENET News Transfer Protocol
ntp             123/tcp
ntp             123/udp                         # Network Time Protocol
netbios-ns      137/tcp                         # NETBIOS Name Service
netbios-ns      137/udp
netbios-dgm     138/tcp                         # NETBIOS Datagram Service
netbios-dgm     138/udp
netbios-ssn     139/tcp                         # NETBIOS session service
netbios-ssn     139/udp
imap2           143/tcp                         # Interim Mail Access Proto v2
imap2           143/udp
snmp            161/udp                         # Simple Net Mgmt Proto
snmp-trap       162/udp         snmptrap        # Traps for SNMP
cmip-man        163/tcp                         # ISO mgmt over IP (CMOT)
cmip-man        163/udp
cmip-agent      164/tcp
cmip-agent      164/udp
xdmcp           177/tcp                         # X Display Mgr. Control Proto
xdmcp           177/udp
nextstep        178/tcp         NeXTStep NextStep       # NeXTStep window
nextstep        178/udp         NeXTStep NextStep       # server
bgp             179/tcp                         # Border Gateway Proto.
bgp             179/udp
prospero        191/tcp                         # Cliff Neuman's Prospero
prospero        191/udp
irc             194/tcp                         # Internet Relay Chat
irc             194/udp
smux            199/tcp                         # SNMP Unix Multiplexer
smux            199/udp
at-rtmp         201/tcp                         # AppleTalk routing
at-rtmp         201/udp
at-nbp          202/tcp                         # AppleTalk name binding
at-nbp          202/udp
at-echo         204/tcp                         # AppleTalk echo
at-echo         204/udp
at-zis          206/tcp                         # AppleTalk zone information
at-zis          206/udp
z3950           210/tcp         wais            # NISO Z39.50 database
z3950           210/udp         wais
ipx             213/tcp                         # IPX
ipx             213/udp
imap3           220/tcp                         # Interactive Mail Access
imap3           220/udp                         # Protocol v3
ulistserv       372/tcp                         # UNIX Listserv
ulistserv       372/udp
#
# UNIX specific services
#
exec            512/tcp
biff            512/udp         comsat
login           513/tcp
who             513/udp         whod
shell           514/tcp         cmd             # no passwords used
syslog          514/udp
printer         515/tcp         spooler         # line printer spooler
talk            517/udp
ntalk           518/udp
route           520/udp         router routed   # RIP
timed           525/udp         timeserver
tempo           526/tcp         newdate
courier         530/tcp         rpc
conference      531/tcp         chat
netnews         532/tcp         readnews
netwall         533/udp                         # -for emergency broadcasts
uucp            540/tcp         uucpd           # uucp daemon
remotefs        556/tcp         rfs_server rfs  # Brunhoff remote filesystem
klogin          543/tcp                         # Kerberized `rlogin' (v5)
kshell          544/tcp         krcmd           # Kerberized `rsh' (v5)
kerberos-adm    749/tcp                         # Kerberos `kadmin' (v5)
#
webster         765/tcp                         # Network dictionary
webster         765/udp
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations.  For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined.  This list specifies the port used by the server process as its
#> contact port.  While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convienence to the
#> community.
#
ingreslock      1524/tcp
ingreslock      1524/udp
prospero-np     1525/tcp                # Prospero non-privileged
prospero-np     1525/udp
rfe             5002/tcp                # Radio Free Ethernet
rfe             5002/udp                # Actually uses UDP only
bbs             7000/tcp                # BBS service
#
#
# Kerberos (Project Athena/MIT) services
# Note that these are for Kerberos v4 and are unofficial.  Sites running
# v4 should uncomment these and comment out the v5 entries above.
#
kerberos4       750/udp         kdc     # Kerberos (server) udp
kerberos4       750/tcp         kdc     # Kerberos (server) tcp
kerberos_master 751/udp                 # Kerberos authentication
kerberos_master 751/tcp                 # Kerberos authentication
passwd_server   752/udp                 # Kerberos passwd server
krb_prop        754/tcp                 # Kerberos slave propagation
krbupdate       760/tcp         kreg    # Kerberos registration
kpasswd         761/tcp         kpwd    # Kerberos "passwd"
kpop            1109/tcp                # Pop with Kerberos
knetd           2053/tcp                # Kerberos de-multiplexor
zephyr-srv      2102/udp                # Zephyr server
zephyr-clt      2103/udp                # Zephyr serv-hm connection
zephyr-hm       2104/udp                # Zephyr hostmanager
eklogin         2105/tcp                # Kerberos encrypted rlogin
#
# Unofficial but necessary (for NetBSD) services
#
supfilesrv      871/tcp                 # SUP server
supfiledbg      1127/tcp                # SUP debugging
#
# Datagram Delivery Protocol services
#
rtmp            1/ddp                   # Routing Table Maintenance Protocol
nbp             2/ddp                   # Name Binding Protocol
echo            4/ddp                   # AppleTalk Echo Protocol
zip             6/ddp                   # Zone Information Protocol
#
# Debian GNU/Linux services
rmtcfg          1236/tcp                # Gracilis Packeten remote config server
xtel            1313/tcp                # french minitel
cfinger         2003/tcp                # GNU Finger
postgres        4321/tcp                # POSTGRES
mandelspawn     9359/udp        mandelbrot      # network mandelbrot

# Local services

/etc/inetd.conf

Filen /etc/inetd.conf är konfigurationsfilen för serverdaemonen inetd. Dess funktion är att tala om för inetd vad som skall hända när den tar emot en anslutningsförfrågan för en viss tjänst. För varje tjänst för vilken man önskar acceptera anslutningar måste man tala om för inetd vilken nätverksserver den skall starta och hur den skall startas.

Dess format är ganska enkelt. Det är en textfil där varje rad beskriver en tjänst som man vill tillhandahålla. All text efter ett # tecken på en rad ignoreras och ses som en kommentar. Varje rad innehåller sju fält som är separerade av valfritt antal vita tecken (tab eller space). Det generella formatet är som följer:

service  socket_type  proto  flags  user  server_path  server_args
service

är tjänsten som är relevant för denna konfiguration som den benämns i /etc/services.

socket_type

detta fält beskriver vilken typ av socket som denna rad kommer att beteckna som relevant, tillåtna värden är stream, dgram, raw, rdm eller seqpacket. Detta är lite tekniskt till karaktären men som tumregel så använder nästan alla tcp-baserade tjänster stream och alla udp-baserade tjänster dgram. Det är bara väldigt speciella typer av daemoner som använder de andra värdena.

proto

protokollet som skall anses som giltigt för denna rad. Detta skall passa ihop med lämplig rad i /etc/services och är vanligtvis antingen tcp eller udp. Sun RPC (Remote Procedure Call) baserade tjänster använder rpc/tcp eller rcp/udp.

flags

det finns egentligen bara två möjliga värden för detta fält. Detta fält talar om för inetd om serverprogramvaran stänger socketen efter det att den startats och därför om inetd kan starta en annan server på nästa anslutningsförfrågan. Återigen så är detta lite besvärligt att lista ut, men som tumregel så skall alla tcp servrar ha värdet nowait och de flesta udp servrar wait. Observera att det finns undantag för detta, så man bör endast följa exemplet om man inte vet.

user

detta fält talar om vilket användarkonto från /etc/passwd som skall sättas som ägare till nätverksdaemonen när den startas. Detta är ofta användbart för att skydda sig mot säkerhetsrisker. Man kan sätta värdet till nobody så att skadan minimeras ifall nätverksserverns säkerhet fallerar. Men vanligtvis så är detta fält satt till root eftersom många servrar måste ha root-rättigheter för att fungera korrekt.

server_path

detta fält skall innehålla det absoluta filnamnet till serverprogrammet som skall exekveras för denna raden.

server_args

detta fältet utgör resten av raden och är valfri. Det är här som man placerar kommandoradsargument som man vill skicka med till serverdaemonen när den startas.

Ett exempel på en /etc/inetd.conf fil.

Som för filen /etc/services så inkluderar alla moderna distributioner en bra /etc/inetd.conf fil som man kan arbeta med. För att vara komplett så inkluderas /etc/inetd.conf från Debian distributionen.

# /etc/inetd.conf:  see inetd(8) for further informations.
#
# Internet server configuration database
#
#
# Modified for Debian by Peter Tobias <tobias@et-inf.fho-emden.de>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Internal services
#
#echo           stream  tcp     nowait  root    internal
#echo           dgram   udp     wait    root    internal
discard         stream  tcp     nowait  root    internal
discard         dgram   udp     wait    root    internal
daytime         stream  tcp     nowait  root    internal
daytime         dgram   udp     wait    root    internal
#chargen        stream  tcp     nowait  root    internal
#chargen        dgram   udp     wait    root    internal
time            stream  tcp     nowait  root    internal
time            dgram   udp     wait    root    internal
#
# These are standard services.
#
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.telnetd
ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.ftpd
#fsp    dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.fspd
#
# Shell, login, exec and talk are BSD protocols.
#
shell   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rshd
login   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind
#exec   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rexecd
talk    dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.talkd
ntalk   dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.ntalkd
#
# Mail, news and uucp services.
#
smtp    stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.smtpd  
#nntp   stream  tcp     nowait  news    /usr/sbin/tcpd  /usr/sbin/in.nntpd
#uucp   stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico
#comsat dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.comsat
#
# Pop et al
#
#pop-2  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.pop2d
#pop-3  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.pop3d
#
# `cfinger' is for the GNU finger server available for Debian.  (NOTE: The
# current implementation of the `finger' daemon allows it to be run as `root'.)
#
#cfinger stream tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.cfingerd
#finger stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.fingerd
#netstat        stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/netstat
#systat stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/ps -auwwx
#
# Tftp service is provided primarily for booting.  Most sites
# run this only on machines acting as "boot servers."
#
#tftp   dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd
#tftp   dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /boot
#bootps dgram   udp     wait    root    /usr/sbin/bootpd        bootpd -i -t 120
#
# Kerberos authenticated services (these probably need to be corrected)
#
#klogin         stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind -k
#eklogin        stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind -k -x
#kshell         stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rshd -k
#
# Services run ONLY on the Kerberos server (these probably need to be corrected)
#
#krbupdate      stream tcp      nowait  root    /usr/sbin/tcpd  /usr/sbin/registerd
#kpasswd        stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/kpasswdd
#
# RPC based services
#
#mountd/1       dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.mountd
#rstatd/1-3     dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rstatd
#rusersd/2-3    dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rusersd
#walld/1        dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rwalld
#
# End of inetd.conf.
ident           stream  tcp     nowait  nobody  /usr/sbin/identd        identd -i

5.9 Andra nätverksrelaterade konfigurationsfiler.

Det finns ett antal andra filer som är relaterade till nätverkskonfiguration i Linux som man skulle kunna vara intresserad av. Man behöver kanske aldrig modifiera dessa filer, men det är värt att beskriva dem ändå så att man vet vad de innehåller och vad de används till.

/etc/protocols

Filen /etc/protocols är en databas som mappar protokollens id-nummer mot protokollens namn. Detta används av programmerare för att låta dem ange protokoll med dess namn i program, och även av vissa program, som till exempel tcpdump, för att kunna skriva ut namn istället för nummer. Syntaxen för filen är:

protocolname  number  aliases
I Debian distributionen ser /etc/protocols ut som följande:
# /etc/protocols:
# $Id: protocols,v 1.1 1995/02/24 01:09:41 imurdock Exp $
#
# Internet (IP) protocols
#
#       from: @(#)protocols     5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

ip      0       IP              # internet protocol, pseudo protocol number
icmp    1       ICMP            # internet control message protocol
igmp    2       IGMP            # Internet Group Management
ggp     3       GGP             # gateway-gateway protocol
ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')
st      5       ST              # ST datagram mode
tcp     6       TCP             # transmission control protocol
egp     8       EGP             # exterior gateway protocol
pup     12      PUP             # PARC universal packet protocol
udp     17      UDP             # user datagram protocol
hmp     20      HMP             # host monitoring protocol
xns-idp 22      XNS-IDP         # Xerox NS IDP
rdp     27      RDP             # "reliable datagram" protocol
iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4
xtp     36      XTP             # Xpress Tranfer Protocol
ddp     37      DDP             # Datagram Delivery Protocol
idpr-cmtp       39      IDPR-CMTP       # IDPR Control Message Transport
rspf    73      RSPF            # Radio Shortest Path First.
vmtp    81      VMTP            # Versatile Message Transport
ospf    89      OSPFIGP         # Open Shortest Path First IGP
ipip    94      IPIP            # Yet Another IP encapsulation
encap   98      ENCAP           # Yet Another IP encapsulation

/etc/networks

Filen /etc/networks har en liknande funktion som filen /etc/hosts. Den tillhandahåller en enkel databas av nätverksnamn som mappas mot nätverksadresser. Dess format skiljer sig genom att det får endast finnas två fält per rad och att fälten skrivs som:

networkname networkaddress

Ett exempel kam se ut såhär:

loopnet    127.0.0.0
localnet   192.168.0.0
amprnet    44.0.0.0

När man använder kommandon som route, om en destination är ett nätverk och det nätverket finns i /etc/networks, så kommer route att visa nätverksnamnet istället för dess adress.

5.10 Nätverkssäkerhet och åtkomstkontroll.

Låt mig börja denna sektion med att varna för att säkra en maskin och ett nätverk mot illvilliga attacker är en komplex konst. Jag anser mig inte själv vara en expert på detta område och även om de följande mekanismerna som jag beskriver kommer att hjälpa, så om man är riktigt allvarlig när det gäller säkerhet så rekommenderar jag att man gör egna undersökningar i ämnet. Det finns många bra referenser på Internet relaterade till detta ämne.

En viktig tumregel är: `Kör inte servrar som inte skall användas'. Många distributioner kommer konfigurerade med alla möjliga tjänster som startas automatiskt. För att säkerställa en miniminivå av säkerhet så bör man gå igenom sin /etc/inetd.conf och kommentera bort (sätt ett '#' i början av raden) alla rader som innehåller tjänster vilka man inte tänker använda. Bra kandidater är tjänster såsom: shell, login, exec, uucp, ftp och informativa tjänster som finger, netstat och systat.

Det finns alla möjliga sorters säkerhets- och åtkomstkontrollmekanismer, jag kommer att beskriva de mest elementära av dem.

/etc/ftpusers

Filen /etc/ftpusers är en enkel mekanism med vilken man kan vägra vissa användare att logga in till maskinen via ftp. Filen /etc/ftpusers läses av ftp-daemonen (ftpd) när en inkommande ftp-anslutning tas emot. Filen är en enkel lista av de användare som inte är tillåtna att logga in. Den skulle kunna se ut som:

# /etc/ftpusers - users not allowed to login via ftp
root
uucp
bin
mail

/etc/securetty

I filen /etc/securetty kan man specificera vilka tty enheter som root är tillåten att logga in på. Filen /etc/securetty läses av loginprogrammet (vanligtvis /bin/login). Dess format är en lista av de tty enhetsnamn som är tillåtna, på alla andra är root login otillåten:

# /etc/securetty - tty's on which root is allowed to login
tty1
tty2
tty3
tty4

tcpd åtkomstkontrollmekanism.

Programmet tcpd som man sett listat i /etc/inetd.conf tillhandahåller loggning och åtkomstkontrollmekanismer för tjänster som det är konfigurerat att skydda.

När det aktiveras av programmet inetd så läser det två filer som innehåller åtkomstregler och antingen tillåter det eller nekar åtkomst till servern som det skyddar.

Programmet söker i reglerna tills dess att det hittar det första mönstret som passar. Hittar det inget passande mönster så antas det att åtkomst skall tillåtas till vem som helst. Filerna som söks igenom i sekvens är: /etc/hosts.allow, /etc/hosts.deny. Jag kommer att beskriva dem i ordning. För en komplett beskrivning av detta så bör man titta i lämpliga manualblad (hosts_access(5) är ett bra ställe att börja på).

/etc/hosts.allow

Filen /etc/hosts.allow är en konfigurationsfil för programmet /usr/sbin/tcpd. Filen innehåller regler som beskriver vilka datorer som är tillåtna åtkomst till en tjänst på maskinen.

Filformatet är ganska enkelt:

# /etc/hosts.allow
#
# <service list>: <host list> [: command]

service list

är en kommaseparerad lista av servernamn som denna regeln gäller för. Exempel: ftpd, telnetd och fingerd.

host list

är en kommaseparerad lista av datornamn. Man kan även använda IP-adresser. Man kan dessutom ange datornamn eller adresser med hjälp av 'wildcards' för att täcka grupper av datorer. Exempel: gw.vk2ktj.ampr.org för att täcka en enskild dator, .uts.edu.au för att täcka alla datornamn som slutar med den strängen, 44. för att täcka alla IP-adresser som börjar med de siffrorna. Det finns några särskilda tokens för att förenkla konfigurationen, några av dessa är: ALL täcker alla datorer, LOCAL täcker alla datornamn som inte innehåller en '.' dvs som är i samma domän som din maskin och PARANOID täcker alla datorer vars namn inte stämmer överens med sin adress (name spoofing). Det finns en sista användbar token. EXCEPT tillåter dig att ange en lista med undantag. Detta visas i ett exempel senare.

command

är en valfri parameter. Detta är det absoluta filnamnet för ett kommando som skall exekveras varje gång denna regel används. Det skulle till exempel kunna köra ett program som försöker identifiera vem som är påloggad på den anslutande datorn, eller att generera ett mail eller någon annan varning till en systemadministratör att någon försöker ansluta. Det finns ett antal utökningar som kan inkluderas, till exempel: %h expanderar till namnet på den anslutande datorn eller adress om den inte har något namn, %d daemonnamnet anropas.

Ett exempel:

# /etc/hosts.allow
#
# Allow mail to anyone
in.smtpd: ALL
# All telnet and ftp to only hosts within my domain and my host at home.
telnetd, ftpd: LOCAL, myhost.athome.org.au
# Allow finger to anyone but keep a record of who they are.
fingerd: ALL: (finger @%h | mail -s "finger from %h" root)

/etc/hosts.deny

Filen /etc/hosts.deny är en konfigurationsfil för programmet /usr/sbin/tcpd. Filen innehåller regler som beskriver vilka datorer som är nekade åtkomst till en tjänst på maskinen.

Ett enkelt exempel:

# /etc/hosts.deny
#
# Disallow all hosts with suspect hostnames
ALL: PARANOID
#
# Disallow all hosts.
ALL: ALL

Raden med PARANOID är egentligen redundant eftersom den andra raden fäller allt i vilket fall. Någon av dessa rader skulle vara tänkbara beroende på vilka krav man har.

Att ha ALL: ALL i /etc/hosts.deny och sedan specifikt ange de tjänster och datorer som man vill ha i filen /etc/hosts.allow är den säkraste konfigurationen.

/etc/hosts.equiv

Filen hosts.equiv används för att ge vissa datorer och användare åtkomsträttigheter till konton på maskinen utan att behöva ange ett lösenord. Detta är användbart i en säker omgivning där man kontrollerar alla maskinerna, men det är en säkerhetsrisk i annat fall. Datorn är bara så säker som den minst säkra av de datorer man litar på. För att maximera säkerheten så bör man inte använda denna mekanismen och påverka sina användare att inte använda filen .rhosts heller.

Konfigurera ftp-daemonen ordentligt.

Många sajter är intresserade av att köra en anonym ftp server för att tillåta andra personer att ladda upp och ladda ner filer utan att ha ett särskilt användarid. Om man bestämmer sig för att tillhandahålla denna tjänst så skall man se till att man konfigurerar sin ftp-daemon ordentligt för anonym åtkomst. De flesta manualblad för ftpd(8) beskriver hur man skall göra detta. Man bör alltid försäkra sig om att man följer dessa instruktioner. Ett viktigt tips är att inte använda en kopia av sin /etc/passwd fil i /etc katalogen för det anonyma kontot, se till att man tar bort alla detaljer om konton som man inte måste ha, annars kommer man att vara sårbar mot tekniker för lösenordscracking.

Brandväggar.

Att inte tillåta datagram att ens nå fram till din maskin eller servrar är ett utmärkt sätt att säkra systemet. Detta beskrivs i Firewall-HOWTO.

Andra förslag.

Här är några andra, potentiellt religiösa förslag som man kan tänka på.

sendmail

oavsett dess popularitet så framträder sendmail daemonen med skrämmande jämna mellanrum på säkerhetsmeddelanden. Det är upp till en själv om man väljer att köra den.

NFS och andra Sun RPC tjänster

man bör vara aktsam med dessa. Det finns alla möjliga olika sätt att utnyttja dessa tjänster. Det är svårt att hitta alternativ till en tjänst som NFS, men om man konfigurerar dem så skall man se till att vara försiktig med vem man ger mount-rättigheter till.


Nästa Föregående Innehållsförteckning