1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
|
\chapter{TCP/IP Netwerk Basis}
Linux komt met al het TCP/IP netwerk fraais dat je mag verwachten van een
Unix box met volledige features. Het bevat \program{telnet}, \program{ftp},
\program{mail} en nog vele andere services.
Hier is een beknopte lijst met vitale opdrachten:
\begin{alltt}
\heading{Basisnetwerktoepassingen en -services}
\defcom{telnet}{\remote}{Maak een verbinding met een ander systeem}
\defcom{rlogin}{\remote}{Login op \remote}
\defcom{ftp}{\remote}{\term{File Transfer Protocol} transporteert bestanden
tussen hosts}
\defcom{rcp}{file \remote:file}{Remote kopie \term{bestand} vanaf hier naar \remote}
\defcom{rcp}{Host1:f1 Host2:f2}{Remote kopie \term{f1} van Host1 naar Host2}
\defcom{rsh}{\remote\ opdracht}{Voer \term{opdracht} uit op \remote}
\heading{TCP/IP Diagnostics}
\defcom{ping}{\remote}{Stuur een ``ping'' naar een remote host om de
connectiviteit te controleren}
\defcom{nslookup}{\remote}{Verzoek een DNS-server om omzetting van een
hostnaam}
\defcom{route}{}{Geef de routingtabel weer}
\defcom{ifconfig}{}{Geef lokale TCP/IP network interface configuratie weer}
\defcom{arp}{}{print/manipuleer systeem ARP cache}
\defcom{tcpdump}{-i ethX}{luister naar verkeer op \term{ethX}}
\heading{Netwerktermen}
\defcom{TCP/IP}{}{Transmission Control Protocol / Internet Protocol}
\defcom{ARP}{}{Address Resolution Protocol}
\defcom{route}{}{een netwerkroute naar een andere machine}
\defcom{host}{}{Een machine op het netwerk}
\defcom{client}{}{De host die gegevens of een service wil}
\defcom{server}{}{De host die gegevens of een service levert}
\end{alltt}
\section{Netwerkcommunicatie}
Deze sectie gaat over netwerkcommunicatie vanuit gezichtspunt van een
gebruiker. We zullen het niet veel hebben over hoe je hardware of
serverconfiguraties instelt. Dit is reeds door je beheerder gedaan.
\subsection{Controleren van netwerkstatus}
Soms is het niet duidelijk of je netwerk correct functioneert.
Er zijn een aantal makkelijke opdrachten die je kunt gebruiken om te
controleren of een computer ``actief'' is op het netwerk.
De eerste en belangrijkste opdracht is \program{ping} waarmee een
testbericht naar de computer zal worden gezonden waarvan we
een reactie terugverwachten:
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\localhost{ping groucho}
PING groucho (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=255 time=0.7 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=255 time=0.3 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=255 time=0.3 ms
....
\end{Verbatim}
Dit laat zien dat de host \computer{groucho} ``in de lucht'' is.
Het voorziet ons van wat timing informatie wat de snelheid aangeeft
van de verbinding tussen \lokaal\ en \remote.
Als DNS (zie de volgende sectie) niet werkt, dan kan het zijn dat je
niet via de naam kunt pingen, maar misschien wel door het opgeven van
het nummer. Je kunt ook via het IP-nummer pingen, zoals in:
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\localhost{ping 192.168.1.3}
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=255 time=0.7 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=255 time=0.3 ms
...etc...
\end{Verbatim}
Als je geen enkele reactie of een foutmelding krijgt, dan is er
iets mis met het netwerk en zal je niet in staat zijn met die computer te
communiceren.
\subsection{DNS en Nslookup}
De \term{Domain Name Service} ook bekend als DNS staat je toe als een
gebruikers naam zoals \term{www.yahoo.com} in een nummer om te zetten,
zoals 216.32.74.52, wat nodig is voor je computer om over het netwerk
te communiceren. Netwerken worden bestuurd door gremlins die alleen
gebruik maken van nummers en niet van namen. Dus DNS is erg belangrijk
als je het netwerk gaat gebruiken.
Wie levert de DNS service? Meestal voorziet je ISP in deze service,
vooral als je een modem, kabelmodem, DSL, enz. gebruikt. Als je je bevindt
in een grote bedrijfsinstelling, zal je eigen bedrijfsnetwerk in DNS voorzien.
Het belangrijkste hulpmiddel dat je nodig hebt om de controleren of DNS
functioneert is \program{nslookup}, waarmee namen naar nummers en vice-versa
kunnen worden omgezet:
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\localhost{nslookup www.io.com}
Server: flure.pair.com
Address: 209.68.1.159
Name: www.io.com
Addresses: 199.170.88.21, 199.170.88.41, 199.170.88.39
\end{Verbatim}
\program{Nslookup} vertelt ons dat er 3 namen zijn die overeenkomen met
www.io.com. Grote sites, zoals www.io.com en www.yahoo.com hebben vaak
meer nummers omdat ze verscheidene servers onderhouden om alle verzoeken
naar hun zeer drukke sites af te handelen.
De server flure.pair.com is onze DNS server zoals wordt opgemerkt door
onze lokale DNS setup.
DNS kan ook nummers in namen omzetten:
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\localhost{nslookup 199.170.88.21}
Server: flure.pair.com
Address: 209.68.1.159
Name: www-02.io.com
Address: 199.170.88.21
\end{Verbatim}
Dit was een van de www.io.com sites die werd weergegeven in het eerste
voorbeeld. Als DNS je naam niet kan vinden, is de kans klein dat je
er via het internet een verbinding mee kunt maken:
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\localhost{nslookup belse.com}
Server: flure.pair.com
Address: 209.68.1.159
*** flure.pair.com can't find belse.com: Non-existent host
\end{Verbatim}
Sorry, you are SOL. No can do.. (unless you know the number already)
Maybe try www.belse.com.
Soms kun je via het IP-nummer een verbinding maken zelfs als DNS niet
werkt. Probeer een verbinding te maken met www.io.com met een van de
gevonden nummers. Linux heeft een tekstbrowser genaamd
\program{Lynx} dat op veel manieren van pas komt
\subsection{De ``R'' opdrachten}
De zogenoemde \term{R-opdrachten} zijn \program{rlogin}, \program{rcp},
\program{rsh}, en gelijken. Dit zijn krachtige en gevaarlijke opdrachten,
en ze zouden met een grote zorgvuldigheid gebruikt moeten worden.
Veel systemen die aan het Internet staan blootgesteld deactiveren
deze opdrachten, wat ze ook zouden moeten doen, omdat gegevens op dat
netwerk volledig open staan voor het publiek.
Tegenwoordig zijn er van een aantal van deze opdrachten veilige versies,
waarvan de gegevens zijn versleuteld, of zijn de opdrachten vervangen
door \program{ssh}, de secure shell.
Om zonder wachtwoord remote opdrachten op een remote machine uit te voeren,
stel je (in je homedir) een bestand in met de naam
\file{.rhosts} dat er ongeveer zo uitziet:
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
# .rhosts file for \remote
\local\ \user
\end{Verbatim}
en op de lokale machine een aanvullende setup laat je van daaraf werken.
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
# .rhosts file for \local
\remote\ \user
\end{Verbatim}
Probeer nu van hier naar daar een bestand te kopi\"eren:
\begin{alltt}
rcp bestandsnaam \remote:
rcp bestandsnaam \remote:. # Hetzelfde als hierboven.
\end{alltt}
Kopieer nu een bestand van \remote\ naar \lokaal:
\begin{alltt}
rcp \remote:bestandA . # Kopieer het bestand naar . met dezelfde naam.
rcp \remote:bestandA bestandB # Hernoem het bestand
\end{alltt}
Gebruik nu \program{rlogin} om in te loggen op \remote:
\begin{alltt}
rlogin \remote
Last login: Sat Jan 15 02:53:13 from beppo
You have mail.
\remotehost{ls -agl}
total 3236
drwxr-xr-x 20 \user users 4096 Jan 14 09:45 .
drwxr-xr-x 5 root root 4096 Jan 14 08:42 ..
-rw------- 1 \user users 1748 Jan 14 06:59 .ICEauthority
-rw------- 1 \user users 101 Jan 14 08:35 .Xauthority
-rw-r--r-- 1 \user users 1506 Jan 14 08:18 .Xdefaults
-rw------- 1 \user users 133 Jan 11 15:56 .bash_history
....etc....
\end{alltt}
\newpage
\section{X-Window over het netwerk gebruiken}
Iets wat zo geweldig is aan X, is dat er directe netwerkmogelijkheiden in zijn
gebouwd.
Je kunt elke X-toepassing overal vandaan op je netwerk gebruiken. Het
enige wat je hiervoor hoeft te doen is een paar parameters instellen
die communicatie mogelijk maken.
\subsection{X verbinden met een andere client}
Er zijn twee dingen die je doen moet om X over het netwerk te kunnen
laten werken. Ten eerste moet je het mogelijk maken dat andere machines
een verbinding op kunnen zetten met je werkstation. Een manier om dit
te doen, is gebruik te maken van \program{xhost \remote}, waar
\remote\ de machine is waarmee je wilt communiceren.
Ten tweede moet je met telnet (of ssh) een verbinding maken met een
ander werkstation, en de \term{DISPLAY} omgevingsvariabele naar je
werkstation als volgt instellen:
\begin{alltt}
\localhost{xhost + \remote}
\localhost{telnet \remote}
Red Hat Linux release 6.1
Kernel 2.2.12-20 on an i586
login: \user
Password: ******
Last login: Thu Jan 13 12:13:37 from bistro.rr.com
\remotehost{setenv DISPLAY \local:0}
\localhost{xcalc -title \remote}
Ctrl-C
\remotehost{exit}
\localhost{}
\end{alltt}
Denk eraan dat \remote\ en \local\ moeten worden gewijzigd in de
naam die aan je werkstation is toegekend.
Je zou nu een proces moeten hebben dat door het remote systeem wordt
uitgevoerd! Het zal duidelijk zijn dat dit krachtig is. In het volgende
hoofdstuk zullen we het hebben over andere netwerkfeatures...
Als je een dergelijke regel in je .login of .bashrc plaatst
zal de \term{DISPLAY} variabele automatisch voor je worden ingesteld.
Speel hier even mee:
\begin{alltt}
\tcsh{setenv DISPLAY `who am i \pipe perl -ne '/\bs((.+)\bs)/ ; print \$1'`":0"}
of in bash,
\bash{set DISPLAY= `who am i \pipe perl -ne '/\bs((.+)\bs)/ ; print \$1'`":0"}
\end{alltt}
\newpage
\subsection{Beveiligen van je X-connectie}
Hierboven hadden we het over \program{xhost} en hoe dit andere machines
toestaat een verbinding te maken met de \term{X-Server} op je werkstation.
Er is een onvolkomenheid in de beveiliging waardoor het voor ALLE mensen
mogelijk is een verbinding te maken vanaf de \remote\ naar je werkstation.
Dit beveiligingslek is gebruikt om op vele computers in te breken.
Gelukkig bestaat er een veilig alternatief voor het gebruik van \program{xhost}
genaamd \program{xauth}. De wijze waarop je \program{xauth} gebruikt, bestaat
eruit als eerste \program{xauth list} op de \remote uit te voeren, de
informatie die het produceert met je muis af te vangen
(links klikken en slepen), en het dan te plakken (klikken met de middelste
muisknop) op je werkstation direct na het intikken van \program{xauth add}.
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\remotehost{xauth list}
bistro.marx:0 MIT-MAGIC-COOKIE-1 6c7d8ba30a
\rv{\bf{}bistro/unix:0 MIT-MAGIC-COOKIE-1 7bf452301a230498}
localhost:0 MIT-MAGIC-COOKIE-1 a43f0989db
localhost:10 MIT-MAGIC-COOKIE-1 3c08b9241d
\end{Verbatim}
Op je lokale werkstation:
\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\bash{xauth add bistro/unix:0 {\small{}MIT-MAGIC-COOKIE-1} 7bf452301a230498}
\end{Verbatim}
\newpage
\section{Netwerkbeveiliging voor gebruikers}
Netwerkbeveiliging vanuit het gezichtsveld van een gebruiker is simpel: Gebruik
geen eenvoudig-te-raden wachtwoorden, en laat geen ``R'' opdrachten open
voor een aanval.
Moeilijk te raden wachtwoorden lijken niet op enig woord en
zouden niet alleen uit alfabetische tekens moeten bestaan.
\term{Hallo} is geen goed wachtwoord, maar
\term{h3l9Xz} is dat wel. Hackers gebruiken altijd \program{crack} waarbij
gebruik wordt gemaakt van een woordenlijst om wachtwoorden te raden,
en \term{Hallo} zou in een paar seconden zijn gekraakt.
Zover het de beveiliging betreft, hoef je slechts een paar dingen te
onthouden:
\begin{itemize}
\item Houd altijd je homedirectory (\~{}) beveiligd.
\item Gebruik geen R-opdrachten over een onveilig netwerk, aangezien
hackers vrijwel alles kunnen zien.
Je bent beter af als je het programma \program{ssh} hebt en
veilige versies van R-opdrachten.
\item Programma's als \program{telnet} laten je wachtwoorden over
het Internet zien. Gebruik \program{ssh}.
\item Vertel nooit iemand je wachtwoord, en mocht je dat wel hebben gedaan,
wijzig het dan de volgende dag.
\item \command{chmod 600 .rhosts}
\item Wijzig iedere paar maanden je wachtwoord.
\item Schrijf je wachtwoord nooit op of identificeer het nooit als een
wachtwoord.
\item Kies een moeilijk niet voor te stellen accountnaam.
\item Controleer bestanden regelmatig op de permissies.
Voor de meeste bestanden is 600 of 700 gebruikelijk.
\end{itemize}
|