/[glms]/glms/server.tex
ViewVC logotype

Diff of /glms/server.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.21 by GuruGeert, Mon Mar 17 21:37:00 2003 UTC revision 1.22 by GuruGeert, Tue Mar 18 16:07:29 2003 UTC
# Line 1833  ipchains -P forward ACCEPT Line 1833  ipchains -P forward ACCEPT
1833  \end{verbatim}  \end{verbatim}
1834  doen, waardoor elke vorm van firewalling en masquerading uitgeschakeld wordt.  doen, waardoor elke vorm van firewalling en masquerading uitgeschakeld wordt.
1835    
1836    Een voorbeeld: we blokkeren alle WWW-trafiek van ons lokaal netwerkje dat op 10.1.1.x
1837    zit naar buiten:
1838    \begin{verbatim}
1839    ipchains -A input -j REJECT -p tcp -s 10.1.1.0/24 -d 0.0.0.0/0 80
1840    \end{verbatim}
1841    We weigeren hier binnenkomende (\texttt{input}) pakketten die komen van
1842    \texttt{10.1.1.0/24} en die als doel gelijk welk adres hebben (\texttt{0.0.0.0/0}) maar
1843    gericht zijn naar poort \texttt{80}, hetgeen de poort is die voor WWW-trafiek gebruikt wordt.
1844    We hadden ook een poortnummer kunnen opgeven bij het bronadres (we schreven enkel
1845    \texttt{10.1.1.0/24}, zonder poortnummer erachter); in dit geval zou dat niet zo verstandig
1846    zijn omdat poortnummers van de webbrowser geen vast nummer gebruiken.
1847    
1848    Met \commando{ipchains -L} krijgen we een lijst van alle instellingen die we gemaakt hebben.
1849    \begin{verbatim}
1850    Chain input (policy ACCEPT):
1851    target     prot opt     source                destination           ports
1852    REJECT     tcp  ------  10.1.1.0/24          anywhere              www ->   any
1853    Chain forward (policy DENY):
1854    target     prot opt     source                destination           ports
1855    MASQ       all  ------  10.1.1.0/24          anywhere              n/a
1856    Chain output (policy ACCEPT):
1857    \end{verbatim}
1858    We zien dat we binnenkomende pakketten filteren op WWW-pakketten, die we weigeren
1859    (\texttt{REJECT}), we doen aan \texttt{MASQ}erading, en bij het verlaten van
1860    de computer (\texttt{output}) filteren we niets speciaals.
1861    
1862  \subsection{Masquerading gateway onder Linux 2.4.x}  \subsection{Masquerading gateway onder Linux 2.4.x}
1863  Voor wie de 2.4 kernel zou ge\"\i nstalleerd hebben, is alles hetzelfde maar net iets anders:  Voor wie de 2.4 kernel zou ge\"\i nstalleerd hebben, is alles hetzelfde maar net iets anders:
1864  het \commando{ipchains} is hier vervangen door \commando{iptables}.  het \commando{ipchains} is hier vervangen door \commando{iptables}.
# Line 2559  kan enkel maar de module \textit{Users a Line 2585  kan enkel maar de module \textit{Users a
2585  \end{figure}  \end{figure}
2586    
2587  \chapter{Elementair systeembeheer}  \chapter{Elementair systeembeheer}
2588    Als superuser hebben we de volledige macht over het systeem:
2589    de superuser kan elk bestand lezen en schrijven, wat een gewone gebruiker ook mag
2590    proberen. Het spreekt vanzelf dat we als systeembeheerder zo weinig mogelijk
2591    onze toevlucht nemen tot dergelijke maatregelen: iemands anders mail meelezen
2592    is technisch perfect mogelijk maar is gewoon \textit{not done}.
2593    Dit in het achterhoofd houdend, volgen hier enkele handige commando's om
2594    ons systeem onder controle te houden.
2595  Uiteraard kunnen we binnen het bestek van deze cursus onmogelijk een complete  Uiteraard kunnen we binnen het bestek van deze cursus onmogelijk een complete
2596  cursus systeembeheer aanbieden. Wat volgt dient dan ook eerder als het tipje  cursus systeembeheer aanbieden. Wat volgt dient dan ook eerder als het tipje
2597  van de sluier te worden beschouwd.  van de sluier te worden beschouwd.
# Line 2616  dit geeft aan dat al die programma's gew Line 2649  dit geeft aan dat al die programma's gew
2649  bepaalde gebeurtenis (een gebruiker die op een toets drukt, een bepaalde tijd die verstreken is)  bepaalde gebeurtenis (een gebruiker die op een toets drukt, een bepaalde tijd die verstreken is)
2650  en het besturingssysteem regelt alles zo dat zulke programma's geen rekentijd verbruiken.  en het besturingssysteem regelt alles zo dat zulke programma's geen rekentijd verbruiken.
2651    
2652    Er werden drie load averages getoond, die de gemiddelde belasting aangeven
2653    gedurende de laatste 1, 5 en 15 minuten.
2654    
2655  Als de load average hoog is, dan willen we natuurlijk wel weten welke programma's er  Als de load average hoog is, dan willen we natuurlijk wel weten welke programma's er
2656  aan het draaien zijn. Met \commando{top} krijgen we een interactief overzicht van  aan het draaien zijn. Met \commando{top} krijgen we een interactief overzicht van
2657  alle draaiende programma's (figuur \label{topfiguur}).  alle draaiende programma's (figuur~\ref{topfiguur}).
2658  De programma's die het meeste rekentijd aan het verbruiken zijn staan bovenaan.  De programma's die het meeste rekentijd aan het verbruiken zijn staan bovenaan.
2659  \begin{figure}[!h]  \begin{figure}[!h]
2660  \begin{center}  \begin{center}
2661  \includegraphics[width=0.8\textwidth]{server/topfiguur.png}  \includegraphics[width=0.8\textwidth]{server/top.png}
2662  \caption{\commando{top} in actie}  \caption{\commando{top} in actie}
2663  \label{topfiguur}  \label{topfiguur}
2664  \end{center}  \end{center}
# Line 2709  handig van \commando{find} gebruik te ma Line 2745  handig van \commando{find} gebruik te ma
2745  verwijdert alle bestanden in de \commando{/tmp} directory die ouder zijn dan 7 dagen.  verwijdert alle bestanden in de \commando{/tmp} directory die ouder zijn dan 7 dagen.
2746  Handig om in een cron job te stoppen dus!  Handig om in een cron job te stoppen dus!
2747    
2748    Willen we weten wie voor het ogenblik een bepaald bestand gebruikt, dan kunnen
2749    we \commando{lsof} gebruiken. Dit geeft een lange lijst;
2750    \commando{grep} is hier ook handig om de grote hoeveelheid uitvoer wat in
2751    te snoeien, zoals in \commando{lsof $|$ grep /etc/dhcpd.conf}.
2752    
2753  Met \commando{vmstat} krijgen we informatie over schijven en processor te zien:  Met \commando{vmstat} krijgen we informatie over schijven en processor te zien:
2754  \begin{verbatim}  {\small\begin{verbatim}
2755     procs                      memory    swap          io     system         cpu     procs                      memory    swap          io     system         cpu
2756   r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id   r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
2757   0  0  0   3004    564    408   6140   0   0     0     0  102     3   0   0 100   0  0  0   3004    564    408   6140   0   0     0     0  102     3   0   0 100
2758  \end{verbatim}  \end{verbatim}
2759    }
2760  We zien dat er geen enkel proces draait (\texttt{r}unning); ze slapen dus allemaal  We zien dat er geen enkel proces draait (\texttt{r}unning); ze slapen dus allemaal
2761  (ze wachten tot er op een toets gedrukt wordt of iets dergelijks).  (ze wachten tot er op een toets gedrukt wordt of iets dergelijks).
2762    
# Line 2746  we door het algemene logbestand (met `q' Line 2788  we door het algemene logbestand (met `q'
2788  iets interessanter is \file{/var/log/syslog} waar vaak wat meer in  iets interessanter is \file{/var/log/syslog} waar vaak wat meer in
2789  staat (de DHCP daemon bijvoorbeeld schrijft er telkens een regel bij als hij aan  staat (de DHCP daemon bijvoorbeeld schrijft er telkens een regel bij als hij aan
2790  een computer netwerkinstellingen heeft uitgedeeld).  een computer netwerkinstellingen heeft uitgedeeld).
2791    Interessante toetsen binnen \commando{less}:
2792    \begin{itemize}
2793    \item \textit{cursor omhoog/omlaag} om regel per regel te bewegen
2794    \item \textit{PgUp/PgDn} om scherm per scherm te bewegen; ook met \textit{spatie} kan je een scherm omlaag
2795    \item \textit{/} en \textit{?} om voorwaarts en achterwaarts te zoeken
2796    \item $<$ en $>$ om naar het begin of einde van het bestand te gaan.
2797    \end{itemize}
2798    
2799  Met \commando{tail /var/log/messages} krijg je enkel de tien laatste (en dus recentste)  Met \commando{tail /var/log/messages} krijg je enkel de tien laatste (en dus recentste)
2800  regels te zien.  regels te zien.
2801  Soms is het handig een logbestand constant in de gaten te houden; dat kan  Soms is het handig een logbestand constant in de gaten te houden; dat kan
# Line 2753  je met \commando{tail -f /var/log/messag Line 2803  je met \commando{tail -f /var/log/messag
2803  laatste regels te zien, en telkens als er iets wordt bijgeschreven in het  laatste regels te zien, en telkens als er iets wordt bijgeschreven in het
2804  bestand in kwestie, zal dat ook op het scherm verschijnen.  bestand in kwestie, zal dat ook op het scherm verschijnen.
2805    
2806    Een ander interessant commando is \commando{grep}: het zoekt naar een reeks letters
2807    binnen een of meerdere bestanden. Zo geeft \commando{grep cups /var/log/messages}
2808    als resultaat iets in de trant van
2809    {\small\begin{verbatim}
2810    Mar  9 23:20:23 schroot cups-lpd[5820]: Connection from unknown (10.1.1.101)
2811    Mar  9 23:20:23 schroot cups-lpd[5820]: Receive print job for laserjet
2812    Mar  9 23:20:30 schroot cups-lpd[5820]: Print file - job ID = 5
2813    Mar  9 23:20:30 schroot cups-lpd[5820]: Closing connection
2814    Mar  9 23:21:41 schroot cups-lpd[5828]: Connection from unknown (10.1.1.101)
2815    Mar  9 23:21:41 schroot cups-lpd[5828]: Send queue state (short) for laserjet
2816    Mar  9 23:21:43 schroot cups-lpd[5828]: Closing connection
2817    \end{verbatim}
2818    }
2819    Met andere woorden: alle regels van het bestand \file{/var/log/messages} waar het woord
2820    \commando{cups} in voorkomt, worden getoond. Je kan ook \commando{grep -i cups /var/log/messages}
2821    doen, waardoor \commando{grep} hoofd- en kleine letters gelijkwaardig behandelt
2822    (zodat ook lijnen waar ``CUPS'' of ``Cups'' in voorkomt getoond worden).
2823    Je kan zoals gezegd ook meerdere bestanden doorzoeken: \commando{grep -i cups /var/log/*}
2824    doorzoekt alle bestanden binnen \file{/var/log} (maar niet binnen subdirectories).
2825    Met \commando{grep -i cups /var/log/* 2$>$/dev/null} tenslotte
2826    leid je vervelende ``grep: /var/log/news: Is a directory'' foutboodschappen af naar
2827    \file{/dev/null}.
2828    
2829    \section{Netwerk in de gaten houden}
2830    Met \commando{netstat} krijg je een overzicht van alle openstaande verbindingen.
2831    Het interessantste is meestal het onderdeel ``Active Internet connections'';
2832    ``Active UNIX domain sockets'' is wat cryptischer. Een typisch resultaat
2833    zou er zo uit kunnen zien:
2834    {\small\begin{verbatim}
2835    Active Internet connections (w/o servers)
2836    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
2837    tcp        0      0 157.193.53.222:1028     157.193.41.38:www       TIME_WAIT
2838    tcp        0      0 157.193.53.222:ssh      ergens.be:43981         ESTABLISHED
2839    tcp        0      0 157.193.53.222:ssh      ergens.be:43614         ESTABLISHED
2840    tcp        0      0 157.193.53.222:ssh      ergens.be:58616         ESTABLISHED
2841    tcp        0      0 157.193.53.222:ssh      ergensanders.be:58537   ESTABLISHED
2842    \end{verbatim}
2843    }
2844    Er komt meestal nog veel meer uitvoer achter; met \commando{netstat $|$ less}
2845    kan je het resultaat met \commando{less} bekijken. We zien dat er vier
2846    SSH-verbindingen openstaan van onze computer (157.193.53.222) naar
2847    ``ergens.be'' en ``ergensanders.be''. Verder zien we dat er iemand onlangs
2848    een WWW-connectie heeft gelegd met ``157.193.41.38'' (er staat TIME\_WAIT,
2849    hetgeen betekent dat de verbinding onlangs be\"eindigd geweest is).
2850    
2851    Met \commando{host 157.193.41.38} kunnen we de naam van ``157.193.41.38'' achterhalen:
2852    \begin{verbatim}
2853    Name: zeus.rug.ac.be
2854    Address: 157.193.41.38
2855    \end{verbatim}
2856    
2857    Eens de verbinding gesloten is, kunnen we er natuurlijk niet al te veel aan doen.
2858    Een verbinding waar ``ESTABLISHED'' bij staat, kunnen we nader onderzoeken.
2859    We kunnen bijvoorbeeld uitzoeken welk programma die verbinding heeft geopend;
2860    als voorbeeld zoeken we uit wie de verbinding naar ``ergensanders.be:58537'' opende.
2861    Met \commando{lsof -i} krijgen we een lijst van alle openstaande netwerkverbindingen,
2862    samen met het programma dat die verbinding opende. De lijst kan lang zijn
2863    en zelf zoeken is lastig, dus typen we \commando{lsof -i $|$ grep 58537} en bekomen:
2864    {\small\begin{verbatim}
2865    sshd      1950 root    4u  IPv4   6517       TCP 157.193.53.222:ssh->ergensanders.be:58537 (ESTABLISHED)
2866    \end{verbatim}
2867    }
2868    We zien dat process met PID 1950 deze verbinding opende. Een fragment uit
2869    \commando{pstree -p} levert
2870    \begin{verbatim}
2871            |-smbd(284)
2872            |-sshd(290)-+-sshd(1950)---bash(1952)
2873            |           |-sshd(1984)---bash(1986)
2874    \end{verbatim}
2875    We zien dat process 1950 als kind het \commando{bash} proces met PID 1952 heeft.
2876    Met \commando{ps 1952} krijgen we meer info over dit proces:
2877    \begin{verbatim}
2878     1952 pts/0    S      0:01 -bash
2879    \end{verbatim}
2880    Nog interessanter is \commando{ps u 1952}:
2881    \begin{verbatim}
2882    USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
2883    geert     1952  0.0  6.9  2220 1224 pts/3    S    11:30   0:00 -bash
2884    \end{verbatim}
2885    We zien dus dat dit de SSH-verbinding is die door \textit{root} voor gebruiker
2886    \textit{geert} is gestart (het blijkt dat de \commando{sshd} processen altijd
2887    van \textit{root} zijn).
2888    
2889    \section{Handige kleine commandotjes}
2890    Deze sectie is gebaseerd op wat weer te vinden is onder \com{info
2891    coreutils}. Het is niet de bedoeling om hier een uitgebreide uitleg te
2892    geven. De commano's worden kort opgesomd zodat de lezer weet wat er
2893    bestaat. Voor een langere en volledige (bruikbare) uitleg wordt verwezen
2894    naar \com{info coreutils} \com{man commandonaam} en \com{info
2895    commandonaam}.
2896    
2897    \subsection{Inhoud van bestanden bekijken}
2898    \begin{itemize}
2899    \item \begrip{cat} Met \com{cat bestandsnaam} kunnen we de inhoud van een
2900    bestand over ons scherm laten rollen. Als we tegendraads zijn, en graag
2901    eerst de laatste lijn zien, dan de voorlaatste, etc. gebruiken we \com{tac
2902    bestandsnaam}.
2903    \item \begrip{nl} (Number Lines) plakt voor elke lijn een lijnnummer.
2904    \item \begrip{head} Met \com{head bestandsnaam} bekijken we de eerste tien
2905    lijnen van een bestand.
2906    \item \begrip{tail} toont de laatste tien lijnen.
2907    \item \begrip{split} splitst een bestand op in meerdere bestanden van 1000
2908    lijnen. Bij \com{csplit} gebeurt het splitsen na bepaalde sleutelwoorden.
2909    \end{itemize}
2910    
2911    \subsection{Bewerkingen op bestanden}
2912    \begin{itemize}
2913    \item \begrip{wc} Om te weten te komen hoeveel bytes, woorden of lijnen
2914    ons bestand bevat, gebruiken we \com{wc bestandsnaam}. Dit geeft een lijn
2915    met daarop het aantal regels, het aantal woorden en het aantal bytes in
2916    het bestand.
2917    \item \begrip{sort} Met \com{sort bestandnaam} kunnen we de lijnen van een
2918    bestand sorteren op alfabetische volgorde.
2919    \item \begrip{uniq} Om dubbele lijnen uit een bestand te halen, gebruiken
2920    we \com{uniq bestandsnaam}.
2921    \item \begrip{comm} Met \com{comm bestand1 bestand2} kijken we welke
2922    lijnen hetzelfde zijn en welke niet. De output bestaat uit drie kolommen.
2923    In de eerste komen alle lijnen de in bestand1 voorkomen en niet in
2924    bestand2. In de tweede kolom vinden we de lijnen die in bestand2 voorkomen
2925    en niet in bestand1 en in de derde kolom komen de gemeenschappelijke
2926    lijnen. De twee bestanden moeten voorafgaand wel gesorteerd worden met
2927    \com{sort}.
2928    \item \begrip{cut} Hiermee kunnen we bepaalde delen (velden) van lijnen in
2929    een bestand bekijken. Bijvoorbeeld \com{cut --delimiter=: --f=5
2930    /etc/passwd} betekent dat de we ervan uitgaan dat elke kolom in de
2931    paswoordfile gescheiden wordt door een dubbel punt (:). De optie
2932    \com{--f=5} geeft weer dat we alleen de vijfde kolom willen zien. Op die
2933    manier krijgen we een lijst van de gebruikers op ons systeem.
2934    \item \begrip{paste} Met \com{paste bestand1 bestand2} worden de lijnen
2935    van bestand2 lijn voor lijn na de lijnen van bestand1 geplakt (zie
2936    voorbeeld met \com{info paste}). Analoog maar net iets anders is
2937    \com{join}.
2938    \item \begrip{tr} (translate) Laat toe om \'e\'en karakter in een ander te
2939    vertalen. Bijvoorbeeld om alles te kapitaliseren: \com{tr
2940    abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ}\footnote{Luiheid is
2941    de moeder van de vooruitgang. Hetzelfde wordt met veel minder moeite
2942    bereikt door tr a-z A-Z}. Doordat \com{tr} geen bestandsnaam als argument
2943    ontvang moeten we met standaardinput werken. Dit doen we door het
2944    resultaat van een vorige bewerking door te sturen naar \com{tr} (met het
2945    zogenaamde pijpsymbool): \com{cat /etc/passwd $|$ tr a-z A-Z} wat onze
2946    paswoordfile in hoofletters laat zien.
2947    \item \begrip{expand}. Om tabs te converteren naar spaties. Om groepen van
2948    spaties te converteren naar tabs, gebruiken we \com{unexpand}.
2949    \end{itemize}
2950    
2951    \chapter{WWW proxy}
2952    Een proxyserver is een server die clients gebruiken om verbinding te leggen met
2953    een andere computer, in plaats van rechtstreeks een verbinding met de bestemmeling
2954    te leggen. De proxyserver zelf zal dan de bestemmeling contacteren.
2955    Een proxyserver werkt dus altijd voor \'e\'en bepaald protocol;
2956    in dit geval zullen we de WWW-proxyserver \begrip{squid} bespreken.
2957    
2958    Het gebruik van een proxyserver lijkt nogal een overbodige bedoening: waarom niet
2959    gewoon rechtstreeks een verbinding leggen met de bestemmeling, in plaats van
2960    rond te gaan via de proxy? Er zijn twee voordelen aan de proxy-aanpak:
2961    \begin{itemize}
2962    \item Beveiliging: we kunnen onze firewall zo instellen dat er geen WWW-trafiek
2963    van binnen ons netwerk naar buiten wordt toegelaten, tenzij vanop de proxyserver.
2964    De proxyserver zelf moet uiteraard wel WWW-verbindingen kunnen opzetten naar buiten.
2965    Op die manier kunnen we binnen de proxyserver instellen wie welke WWW-pagina's
2966    wel of niet te zien mag krijgen.
2967    \item Efficientie: de proxyserver heeft ook een \begrip{cache} aan boord van recent
2968    opgevraagde webpagina's. Pagina's die in de cache zitten, zal de proxyserver niet meer
2969    opnieuw bij de originele webserver opvragen, maar rechtstreeks uit de cache halen.
2970    Op die manier sparen we heel wat netwerktrafiek uit als bijvoorbeeld een hele
2971    PC-klas naar dezelfde site aan het surfen is.
2972    \end{itemize}
2973    Het nadeel van de proxy-aanpak is dat de software van de client (in ons geval: de webbrowser)
2974    in staat moet zijn met een proxy server om te gaan. Gelukkig is dat voor de meeste
2975    moderne webbrowsers het geval.
2976    
2977    \subsection{Installatie en configuratie}
2978    De installatie is zoals we dat van Debian gewoon zijn eenvoudig:
2979    \begin{center}\commando{apt-get install squid}\end{center}
2980    
2981    De configuratie is ook niet zo moeilijk: we bewerken het omvangrijke bestand
2982    \file{/etc/squid.conf}. We zullen twee regels toevoegen: de regel
2983    \begin{verbatim}
2984    acl mijnclients src 10.1.1.0/24
2985    \end{verbatim}
2986    die een nieuwe `Access Control List' genaamd ``mijnclients'' aanmaakt
2987    (waarin iedereen zit met een IP adres van de vorm 10.1.1.x),
2988    en een regel
2989    \begin{verbatim}
2990    http_access allow mijnclients
2991    \end{verbatim}
2992    die aangeeft dat iedereen in de lijst ``mijnclients'' toegang heeft tot onze proxyserver.
2993    Deze regel moet komen v\'o\'or de regel met
2994    \begin{verbatim}
2995    http_access deny all
2996    \end{verbatim}
2997    Alle computers op ons eigen netwerkje, met IP adres 10.1.1.x dus, kunnen dus
2998    toegang krijgen tot onze proxyserver. Eventueel kan je meerdere ACL's opstellen
2999    (bijvoorbeeld PC-zalen, sekretariaatscomputers,~\ldots) die dan allemaal een
3000    aparte configuratie kunnen krijgen.
3001    
3002    Er is nog veel meer mogelijk, bijvoorbeeld bepaalde (stukken van) websites blokkeren;
3003    zie bijvoorbeeld \url{http://www.squid-cache.org/Doc/FAQ/FAQ.html} voor meer informatie.
3004    
3005    We kunnen de configuratie snel uittesten door vanop \'e\'en van de toegelaten computers
3006    eens \commando{lynx http://mijn.favoriete/website} te doen, waarbij we eerst
3007    met
3008    \begin{verbatim}
3009    export http_proxy="http://debianserver:3128"
3010    \end{verbatim}
3011    aangeven dat \commando{lynx} onze proxyserver (die draait op de computer
3012    \texttt{debianserver}) moet gebruiken. Als het goed is krijgen we de gevraagde pagina te zien.

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26