svn commit: r44340 - translations/nl_NL.ISO8859-1/books/handbook/firewalls
Remko Lodder
remko at FreeBSD.org
Mon Mar 24 11:00:36 UTC 2014
Author: remko
Date: Mon Mar 24 11:00:35 2014
New Revision: 44340
URL: http://svnweb.freebsd.org/changeset/doc/44340
Log:
Commit work in progress.
Facilitated by: Snow B.V.
Modified:
translations/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml
Modified: translations/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml
==============================================================================
--- translations/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml Mon Mar 24 10:48:45 2014 (r44339)
+++ translations/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml Mon Mar 24 11:00:35 2014 (r44340)
@@ -823,8 +823,1191 @@ pass from { lo0, $localnet } to any keep
serieuze onderbrekingen, ook als het externe adres
wijzigt.</para>
- XXXX RL 773
+ <para>Aan de andere kant laat deze ruleset waarschijnlijk
+ meer verkeer het netwerk in dan gewenst. Een redelijke
+ instelling zou de volgende makro kunnen bevatten</para>
+
+ <programlisting>client_out = "{ ftp-data, ftp, ssh, domain, pop3, auth, nntp, http, \
+https, cvspserver, 2628, 5999, 8000, 8080 }"</programlisting>
+
+ <para>en bijbehorende passeer regel</para>
+
+ <programlisting>pass inet proto tcp from $localnet to any port $client_out \
+flags S/SA keep state</programlisting>
+
+ <para>Deze wellicht wat vreemde selectie van poorten is
+ gebaseerd op echte voorbeelden. Per situatie zal deze
+ ongetwijfeld verschillen, maar de meest bruikbare diensten
+ worden hier al door gedekt.</para>
+
+ <para>Daarnaast hebben we een aantal extra passeer regels.
+ Later zullen de meer interessantere behandeld worden. Een
+ passeer regel die nuttig is voor de gebruikers die de
+ machine op afstand willen beheren is</para>
+
+ <programlisting>pass in inet proto tcp to port ssh</programlisting>
+
+ <para>of korter gezegd</para>
+
+ <programlisting>pass in inet proto tcp to $ext_if port ssh</programlisting>
+
+ <para>welke er ook de voorkeur heeft. Als laatste moet de
+ naam-omzettings dienst werken voor de gebruikers:</para>
+
+ <programlisting>udp_services = "{ domain, ntp }"</programlisting>
+
+ <para>Deze wordt aangevuld met een regel die het verkeer
+ door de firewall heen toestaat:</para>
+
+ <programlisting>pass quick inet proto { tcp, udp } to any port $udp_services keep state</programlisting>
+
+ <para>Let op het <literal>quick</literal> sleutelwoord in
+ deze regel. Er is begonnen met het schrijven van een
+ ruleset welke bestaat uit meerdere regels, hieronder volgt
+ een uitleg over de relatie tussen de regels in een ruleset.
+ Regels worden van boven naar beneden ge-evalueerd, in de
+ volgorde waarin ze beschreven staan in het configuratie
+ bestand. Voor elk pakketje of elke verbinding welke
+ ge-evalueerd wordt door <acronym>PF</acronym> zal de
+ <emphasis>laatst overeenkomende regel</emphasis> diegeen
+ zijn die toegepast wordt. Het <literal>quick</literal>
+ sleutelwoord biedt hierin een uitweg van de reguliere
+ volgorde. Wanneer er een pakketje een quick regel matcht
+ zal het pakketje verwerkt worden volgens die specifieke
+ regel. Het verwerken en evalueren van de regels stopt
+ zonder dat andere regels nog in aanmerking genomen worden
+ welke mogelijk misschien ook zouden overeenkomen. Dit kan
+ erg nuttig zijn wanneer er een paar geisoleerde
+ uitzonderingen zijn op de normale regels.</para>
+
+ <para>Deze regel zorgt er ook voor dat <acronym>NTP</acronym>
+ werkt, welke gebruikt wordt voor tijdsynchronisatie. EEn
+ ding dat beide protocollen (DNS en NTP) gemeen hebben is
+ dat beiden onder bepaalde omstandigheden gebruik kunnen
+ maken van zowel TCP als UDP.</para>
+ </sect4>
+ </sect3>
+
+ <sect3 xml:id="pftut-ftp">
+ <title>Het trieste oude <acronym>FTP</acronym></title>
+ <para>De korte lijst van voorkomende <acronym>TCP</acronym>
+ poorten zoals hierboven beschreven bevat onder andere
+ <acronym>FTP</acronym>. <acronym>FTP</acronym> is een
+ triest oud ding en een probleemkindje, in het bijzonder
+ voor iedereen die probeert om <acronym>FTP</acronym>
+ en firewalls met elkaar te combineren.
+ <acronym>FTP</acronym> is een old en raar protocol met
+ veel dingen om niet leuk te vinden. De meest voorkomende
+ punten tegen <acronym>FTP</acronym> zijn</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Wachtwoorden worden onbeveiligd overgestuurd</para>
+ </listitem>
+
+ <listitem>
+ <para>Het protocol vereist het gebruik van minstens
+ twee <acronym>TCP</acronym> verbindingen (controle
+ en data) op verschillende poorten</para>
+ </listitem>
+
+ <listitem>
+ <para>Wanneer er verbinding is wordt data via
+ willekeurige poorten verstuurd</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Al deze voorgaande punten zorgen voor een
+ beveiligingsuitdaging, nog voordat er ook maar gekeken
+ kan worden naar potentiele zwakheden in de client of
+ server software welke kunnen leiden tot beveiligings
+ incidenten. Deze dingen gebeuren.</para>
+
+ <para>In elk geval bestaan er wel alternatieven die meer
+ modern en veiliger zijn om bestanden uit te wisselen
+ zoals &man.sftp.1; en &man.scp.1; welke zowel de
+ authenticatie als bestandsoverdracht via encryptie regelen.
+ Competente <acronym>IT</acronym> professionals zouden er
+ goed aan doen om een andere voorkeur te hebben voor
+ bestandsuitwisseling dan <acronym>FTP</acronym>.</para>
+
+ <para>Los van de professionaliteit en voorkeuren is het
+ algemeen bekend dat er soms gewerkt moet worden met dingen
+ waar liever niet mee gewerkt wordt. In het geval van
+ <acronym>FTP</acronym> door firewalls heen is onze
+ belangrijkste handeling het verkeer omleiden naar een
+ klein programmaatje wat specifiek voor dit doel geschreven
+ is.</para>
+
+ <sect4 xml:id="pftut-ftp-proxy">
+ <title><acronym>FTP</acronym> via een omleiding:
+ <application>ftp-proxy</application></title>
+
+ <para>Het inschakelen van <acronym>FTP</acronym>
+ overdrachten door de firewall heen is opmerkelijk
+ simpel dankzij het <acronym>FTP</acronym> proxy
+ programma genaamd &man.ftp-proxy.8; welke bijgeleverd
+ wordt in het basissysteem van &os; en andere systemen
+ die <acronym>PF</acronym> meeleveren.</para>
+
+ <para>Het <acronym>FTP</acronym> protocol accepterende
+ voor wat het is, moet de proxy in staat zijn om dynamisch
+ regels toe te voegen aan de ruleset. &man.ftp-proxy.8;
+ communiceert met de configuratie via een set van
+ <quote>anchors</quote>, waar de proxy regels kan toevoegen
+ en verwijderen die nodig zijn om <acronym>FTP</acronym> te
+ kunnen gebruiken.</para>
+
+ <para>Om &man.ftp-proxy.8; te kunnen gebruiken moet de
+ volgende regel worden toegevoegd aan
+ <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>ftpproxy_enable="YES"</programlisting>
+
+ <para>Door de proxy handmatig te starten door
+ <command>/usr/sbin/ftp-proxy</command> uit te voeren
+ kan de <acronym>PF</acronym> configuratie wijzigingen
+ die gemaakt gaan worden, worden getest.</para>
+
+ <para>Voor een basis configuratie hoeven er maar drie
+ elementen te worden toegevoegd aan de ruleset. Als eerste
+ de anchors:</para>
+
+ <programlisting>nat-anchor "ftp-proxy/*"
+rdr-anchor "ftp-proxy/*"</programlisting>
+
+ <para>De proxy zal de regels welke gegenereerd worden voor
+ <acronym>FTP</acronym> hier toevoegen. Een passeer regel
+ is nodig om het <acronym>FTP</acronym> verkeer naar de
+ proxy toe te staan.</para>
+
+ <para>Nu de daadwerkelijke omleiding. Omleidingsregels en
+ <acronym>NAT</acrony> regels vallen beiden in dezelfde
+ regel klasse. Er mag direct naar deze regels worden
+ verwezen, en filter regels mogen afhankelijk zijn van
+ deze regels. Logisch gezien moeten <literal>rdr</literal>
+ en <literal>nat</literal> regels gedefinieerd worden voor
+ de filter regels.</para>
+
+ <para>De <literal>rdr</literal> wordt direct toegevoegd na
+ de <literal>nat</literal> regel in
+ <filename>/etc/pf.conf</filename>.</para>
+
+ <programlisting>rdr pass on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021</programlisting>
+
+ <para>Daarnaast moet het omgeleide verkeer worden toegestaan.
+ Dit kan met</para>
+
+ <programlisting>pass out proto tcp from $proxy to any port ftp</programlisting>
+
+ <para>Waar <literal>$proxy</literal> vertaald wordt naar het
+ adres waar de proxy aangekoppeld is.</para>
+
+ <para>Bewaar <filename>pf.conf</filename> en herlaad de
+ nieuwe ruleset met:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -f /etc/pf.conf</userinput></screen>
+
+ <para>Op dit moment zullen gebruikers al meteen merken dat
+ <acronym>FTP</acronym> werkt nog voordat dit ze verteld
+ is.</para>
+
+ <para>Dit voorbeeld behandelt een basis opstelling waarbij de
+ gebruikers in het lokale netwerk contact moeten zoeken
+ met een <acronym>FTP</acronym> server ergens anders. Deze
+ basis configuratie werkt goed met de meeste combinaties
+ van <acronym>FTP</acronym> clients en servers. Zoals te
+ zien is in de handleiding, kan het gedrag van de proxy
+ beinvloed worden op verschillende manieren door het
+ toevoegen van opties aan de
+ <literal>ftpproxy_flags=</literal> regel. Sommige clients
+ of servers hebben specifieke oplossingen nodig welke
+ opgelost moeten worden in de configuratie, of het kan
+ benodigd zijn dat de proxy op een speciale manier moet
+ worden geintegreerd zoals het toewijzen van
+ <acronym>FTP</acronym> verkeer aan een specifieke queue.
+ Voor deze en andere diepere punten van de &man.ftp-proxy.8;
+ configuratie wordt verwezen naar de handleiding.</para>
+
+ <para>Voor oplossingen om een eigen <acronym>FTP</acronym>
+ server te draaien welke beveiligd wordt door
+ <acronym>PF</acronym> en &man.ftp-proxy.8; kan gekeken
+ worden naar het draaien van een aparte
+ <command>ftp-proxy</command> in omgekeerde modus (door
+ gebruik te maken van de <option>-R</option> optie), op een
+ eigen poort met zijn eigen omleidingsregel.</para>
+ </sect4>
+ </sect3>
+
+ <sect3 xml:id="pftut-icmp">
+ <title>Troubleshooting makkelijker maken</title>
+
+ <para>Het makkelijker en vriendelijker maken van netwerk
+ troubleshooting is een potentieel groot onderwerp. In
+ de meeste gevallen valt of staat de vriendelijkheid van
+ het troubleshoot van <acronym>TCP/IP</acronym> met hoe
+ het protocol dat specifiek voor probleemoplossing is
+ gemaakt wordt behandelt, het
+ <emphasis>Internet Control Message Protocol</emphasis> of
+ <acronym>ICMP</acronym> kort gezegd.</para>
+
+ <para><acronym>ICMP</acronym> is het protocol voor het
+ versturen en ontvangen van <emphasis>controle
+ berichten</emphasis> tussen machines en gateways,
+ veelal om terugkoppeling te geven naar de verzender
+ over ongebruikelijke of lastige condities om de doel
+ machine te bereiken.</para>
+
+ <para>Er is veel <acronym>ICMP</acronym> verkeer wat vaak in
+ de achtergrond actief is waarbij de gebruikers bijvoorbeeld
+ aan het surfen zijn, een email bericht lezen of bestanden
+ versturen. Routers maken gebruik van <acronym>ICMP</acronym>
+ om pakket groottes af te stemmen en andere transmissie
+ parameters in een proces wat vaak <emphasis>path
+ <acronym>MTU</acronym> discovery</emphasis> wordt
+ genoemd.</para>
+
+ <para>Sommige beheerders noemen <acronym>ICMP</acronym> een
+ <quote>puur kwaad</quote>, of als het begrip groter is een
+ <quote>noodzakelijk kwaad</quote>. De reden voor deze
+ houding is puur historisch. De reden ertoe kan een aantal
+ jaar geleden worden teruggevonden toen ontdekt werd dat
+ verschillende besturingssystemen code in de netwerk stack
+ hadden zitten welke een machine die een geraakt systeem
+ gebruikte kon doen crashen of rare dingen laten gebeuren
+ als er maar een groot genoeg <acronym>ICMP</acronym> verzoek
+ gestuurd werd.</para>
+
+ <para>EEn van de bedrijven die hier hard door getroffen werd
+ was Microsoft en hiermee is een grote hoeveelheid materiaal
+ over de <quote>ping of death</quote> terug te vinden door
+ gebruik te maken van de favoriete zoekmachine. Dit alles
+ gebeurde in de tweede helft van de jaren 90, en alle moderne
+ besturingssystemen hebben sindsdien de netwerk code drastisch
+ verbeterd. Althans dat is wat men ons doet geloven.</para>
+
+ <para>EEn van de eerste workarounds was het blokkeren van alle
+ <acronym>ICMP</acronym> verkeer, of in ieder geval
+ <acronym>ICMP</acronym> ECHO welke gebrukt wordt door ping.
+ Deze rulesets zijn inmiddels een kleine 15 jaar in gebruik
+ en de mensen die die hebben geplaatst, zijn hier nog steeds
+ bang voor.</para>
+
+ <sect4 xml:id="pftut-dowepass">
+ <title>Moet alles maar worden doorgelaten dan?</title>
+
+ <para>De logische vervolg vraag wordt dan als
+ <acronym>ICMP</acronym> zo goed en bruikbaar is hierin,
+ moeten we het dan niet altijd toestaan? Het antwoord
+ daarop is <quote>dat hangt er vanaf</quote>.</para>
+
+ <para>Het doorlaten van diagnostisch verkeer maakt het
+ probleemoplossen makkelijker, maar maakt het voor anderen
+ ook relatief eenvoudig om informatie over het netwerk
+ te verkrijgen. Dat betekent dat een regel als</para>
+
+ <programlisting>pass inet proto icmp from any to any</programlisting>
+
+ <para>misschien niet optimaal is als het interne netwerk
+ met een deken van mysterie omvat moet worden. In alle
+ eerlijkheid moet wel gezegd worden dat sommige
+ <acronym>ICMP</acronym> verkeer redelijk veilig kan zijn
+ als deze meelift op <literal>keep state</literal>
+ regels.</para>
+ </sect4>
+
+ <sect4 xml:id="pftut-icmpstopatgw">
+ <title>De makkelijke uitweg: alles stopt hier</title>
+
+ <para>De makkelijkste oplossing is om alle
+ <acronym>ICMP</acronym> verkeer vanaf het lokale netwerk
+ toe te staan en alle andere netwerken te blokkeren op de
+ gateway:</para>
+
+ <programlisting>pass inet proto icmp from $localnet to any keep state
+pass inet proto icmp from any to $ext_if keep state</programlisting>
+
+ <para>Het stoppen van verkeer op de gateway kan sowieso een
+ interessante optie zijn, maar er wordt ook gekeken naar
+ een aantal andere opties die de flexibiliteit van
+ <acronym>PF</acronym> laten zien.</para>
+ </sect4>
+
+ <sect4 xml:id="pftut-letpingthru">
+ <title>Het doorlaten van <command>ping</command></title>
+
+ <para>De ruleset die tot heden ontwikkeld is, heeft EEn
+ duidelijk nadeel, veel voorkomende troubleshooting tools
+ zoals &man.ping.8; en &man.traceroute.8; werken niet.
+ Dat maakt wellicht niet veel uit voor eind gebruikers
+ en omdat het <command>ping</command> was die veel mensen
+ ertoe heeft aangezet om <acronym>ICMP</acronym> te
+ filteren of te blokkeren, zijn er ongetwijfeld mensen
+ die denken beter af te zijn zonder. Als u echter behoort
+ aan de doelgroep dan zult u er blij mee zijn dat deze
+ tools wel beschikbaar zijn. Met een aantal kleine
+ aanpassingen in de ruleset kan dat ook. &man.ping.8;
+ maakt gebruik van <acronym>ICMP</acronym> en om de
+ regels netjes te houden, wordt er een nieuwe makro
+ gedefinieerd:</para>
+
+ <programlisting>icmp_types = "echoreq"</programlisting>
+
+ <para>en een regel welke deze definitie gebruikt</para>
+
+ <programlisting>pass inet proto icmp all icmp-type $icmp_types keep state</programlisting>
+
+ <para>Meer of andere type <acronym>ICMP</acronym> pakketjes
+ kunnen wellicht gewenst zijn, dus
+ <literal>icmp_types</literal> kan worden uitgebreid met de
+ pakket type's die toegestaan zijn.</para>
+ </sect4>
+
+ <sect4 xml:id="pftut-helptraceroute">
+ <title>&man.traceroute.8; helpen</title>
+
+ <para>&man.traceroute.8; is een ander nuttig hulpmiddel
+ wanneer er gebruikers zijn die claimen dat het Internet
+ niet werkt. Standaard gebruikt Unix
+ <kommand>traceroute</command> UDP verbindingen gebaseerd
+ op een vastgestelde formule naar de doelmachine. De regel
+ hieronder werkt met <command>traceroute</command> op alle
+ Unix'en waaronder GNU/Linux:</para>
+
+ <programlisting># allow out the default range for traceroute(8):
+# "base+nhops*nqueries-1" (33434+64*3-1)
+pass out on $ext_if inet proto udp from any to any port 33433 >< 33626 keep state</programlisting>
+
+ <para>De ervaring tot heden leert dat
+ <command>traceroute</command> implementaties op andere
+ besturingssystemen grofweg hetzelfde werkt. Met als
+ uitzondering natuurlijk Microsoft Windows. Op dat
+ platform maakt <command>TRACERT.EXE</command> gebruik van
+ ICMP ECHO. Dus om Windows traceroute door te laten is
+ alleen de eerste regel nodig. Unix
+ <command>traceroute</command> kan verteld worden dat er
+ andere protocollen gebruikt moeten worden en het gedrag
+ van Microsoft wordt wonderbaarlijk nagebootst door de
+ <option>-l</option> te gebruiken. Bekijk de
+ &man.traceroute.8; handleiding (of broncode) voor alle
+ details.</para>
+
+ <para>Deze oplossing is opgemerkt op de openbsd-misc lijst.
+ Deze lijst en zijn doorzoekbare archieven (zoals onder
+ andere beschikbaar op< <link
+ xlink:href="http://marc.theaimsgroup.com/">http://marc.theaimsgroup.com/</link>),
+ zijn een enorm waardevolle bron als er OpenBSD of
+ <acronym>PF</acronym> informatie gezocht wordt.</para>
+ </sect4>
+
+ <sect4 xml:id="pftut-pathmtudisc">
+ <title>Path <acronym>MTU</acronym> Discovey</title>
+
+ <para>Internet protocollen zijn ontwikkeld om apparaat
+ onafhankelijk te zijn, EEn consequentie daarvan is dat de
+ optimale pakket grootte voor een gegeven verbinding niet
+ altijd goed voorspelt kan worden. De belangrijkste
+ limitatie voor de grootte van een pakket heet
+ <firstterm>Maximum Transmission Unit</firstterm>, ofwel
+ <acronym>MTU</acronym>, welke de maximale limiet bepaalt
+ voor de grootte van een pakket op een interface.
+ &man.ifconfig.8; toont de <acronym>MTU</acronym> voor de
+ netwerk interfaces.</para>
+
+ <para>Moderne TCP/IP implementaties verwachten dat ze in
+ staat zijn om de juiste pakket grootte te bepalen door
+ een proces, welke simpelgezegd behelst het versturen van
+ pakketjes van verschillende groottes met de
+ <quote>Do Not Fragment</quote> vlag ingesteld, waarbij een
+ <acronym>ICMP</acronym> pakket wordt teruggestuurd met
+ <quote>type 3, code 4</quote> als de maximale waarde bereikt
+ is. Niet meteen in de RFCs duiken. Type 3 betekent
+ <quote>destination unreachable</quote>, en code 4 staat
+ voor <quote>fragmentation needed, maar de do-not-fragment
+ vlag is ingesteld</quote>. Dus als er verbindingen zijn
+ naar andere netwerken met een andere <acronym>MTU</acronym>
+ waarde, en er is geen reden om zo specifiek te zijn, kan
+ de lijst met <acronym>ICMP</acronym> types een klein
+ beetje worden aangepast om de <quote>destination
+ unreachable</quote> pakketjes ook door te laten:</para>
+
+ <programlisting>icmp_types = "{ echoreq, unreach }"</programlisting>
+
+ <para>Zoals te zien is, hoeft de passeer regel niet te worden
+ aangepast hiermee:</para>
+
+ <programlisting>pass inet proto icmp all icmp-type $icmp_types keep state</programlisting>
+
+ <para><acronym>PF</acronym> is in staat om op alle varianten
+ van <acronym>ICMP</acronym> type's en codes te filteren.
+ Voor degenen die willen onderzoeken wat ze wel en wat niet
+ willen accepteren met betrekking tot <acronym>ICMP</acronym>
+ verkeer, is de lijst van mogelijke type's en codes
+ gedocumenteerd in de &man.icmp.4; en &man.icmp6.4;
+ handleidingen. De achtergrond informatie is beschikbaar
+ in de <acronym>RFC</acronym>s
+ <footnote><para>De belangrijkste Internet
+ <acronym>RFC</acronym>s die <acronym>ICMP</acronym>
+ en gerelateerde technieken beschrijven zijn
+ RFC792, RFC950, RFC1191, RFC1256, RFC2521, RFC2765
+ en belangrijke updates voor ICMP voor IPv6 kunnen
+ worden gevonden in RFC1885, RFC2463 en RFC2466.
+ De documenten zijn op diverse plekken beschikbaar
+ zoals via de
+ <link xlink:href="http://www.ietf.org">ietf.org</link>
+ en
+ <link xlink:href="http://www.faqs.org">faqs.org</link>
+ websites.</para></footnote>.</para>
+ </sect4>
+ </sect3>
+
+ <sect3 xml:id="pftut-tables">
+ <title>Tabellen maken het leven makkelijker</title>
+
+ <para>Op dit moment kan het erop gaan lijken dat dit allemaal
+ enorm statich en rigide is. Er zal natuurlijk verkeer zijn
+ dat gefilterd moet worden en omgeleid op een bepaald moment
+ maar welke niet thuishoort in de configuratie.
+ <acronym>PF</acronym> heeft een mechanisme om deze situaties
+ te kunnen behandelen. Tabellen zijn zo'n mechanisme, met
+ name handig om te gebruiken als lijsten welke bewerkt kunnen
+ worden zonder dat de hele ruleset opnieuw geladen hoef te
+ worden, en waar snel opzoeken gewenst is. Tabelnamen worden
+ altijd omringd door <literal>< ></literal>
+ zoals:</para>
+
+ <programlisting>table <clients> { 192.168.2.0/24, !192.168.2.5 }</programlisting>
+
+ <para>Hier is het netwerk <literal>192.168.2.0/24</literal>
+ onderdeel van de tabel, met uitzondering het adres
+ <literal>192.168.2.5</literal>. Deze wordt uitgezonderd
+ door het <literal>!</literal> teken (logische NIET). Het
+ is ook mogelijk om tabellen uit bestanden te laden waarbij
+ elk onderdeel op een eigen regel staat, zoals het bestand
+ <filename>/etc/clients</filename>.</para>
+
+ <programlisting>192.168.2.0/24
+!192.168.2.5</programlisting>
+
+ <para>welke op zijn beurt wordt gebruikt om de tabel te
+ initialiseren in <filename>/etc/pf.conf</filename>:</para>
+
+ <programlisting>table <clients> persist file "/etc/clients"</programlisting>
+
+ <para>Hierna kan bijvoorbeeld EEn van de eerdere regels worden
+ aangepast naar</para>
+
+ <programlisting>pass inet proto tcp from <clients> to any port $client_out flags S/SA keep state</programlisting>
+
+ <para>om uitgaand verkeer van de gebruikers te beheren. Met
+ deze optie in handen, kan de inhoud van de tabel live worden
+ aangepast, zoals</para>
+
+ <screen>&prompt.root; <userinput>pfctl -t clients -T add 192.168.1/16</userinput></screen>
+
+ <para>Let op, dit verandert enkel de kopie van de tabel in het
+ geheugen, wat zoveel betekent als dat de wijziging niet
+ bewaard blijft bij stroomuitval of een herstart tenzij de
+ wijziging bewaard wordt.</para>
+
+ <para>EEn optie om de disk kopie van te tabel te bewaren is
+ door gebruik te maken van &man.cron.8; om de inhoud van de
+ tabel periodiek te dumpen naar de schijf door gebruik te
+ maken van een commando ala <command>pfctl -t clients -T show
+ >/etc/clients</command>. Maar ook het bestand
+ <filename>/etc/clients</filename> kan bewerkt worden waarna
+ de kopie in het geheugen wordt vervangen door de inhoud van
+ het bestand door middel van:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -t clients -T replace -f /etc/clients</userinput></screen>
+
+ <para>Voor handelingen die frequent worden uitgevoerd zullen
+ beheerders vroeg of laat shell scripts gaan schrijven voor
+ taken zoals het toevoegen of verwijderen van items, of het
+ vervangen van de inhoud van de tabellen. De enige beperking
+ is de individuele benodigdheden en creativiteit.</para>
+ </sect3>
+
+ <sect3 xml:id="pftut-overload">
+ <title>Overloop tabellen</title>
+
+ <para>Degenen een Secure Shell login dienst draaien
+ welke bereikbaar is vanaf het Internet hebben ongetwijfeld
+ wel iets als volgt in de authenticatie logs gezien:</para>
+
+ <programlisting>Sep 26 03:12:34 skapet sshd[25771]: Failed password for root from 200.72.41.31 port 40992 ssh2
+Sep 26 03:12:34 skapet sshd[5279]: Failed password for root from 200.72.41.31 port 40992 ssh2
+Sep 26 03:12:35 skapet sshd[5279]: Received disconnect from 200.72.41.31: 11: Bye Bye
+Sep 26 03:12:44 skapet sshd[29635]: Invalid user admin from 200.72.41.31
+Sep 26 03:12:44 skapet sshd[24703]: input_userauth_request: invalid user admin
+Sep 26 03:12:44 skapet sshd[24703]: Failed password for invalid user admin from 200.72.41.31 port 41484 ssh2</programlisting>
+
+ <para>Etc. Dit is hoe een brute force aanval eruit ziet. In
+ essentie is dit iemand, of waarschijnlijker een gekraakte
+ computer, welke door middel van brute force probeert een
+ juiste combinatie van gebruikersnaam en wachtwoord te
+ achterhalen om daarmee op het systeem te kunnen
+ aanloggen.</para>
+
+ <para>De simpelste reactie zou zijn om een regel in
+ <filename>pf.conf</filename> te zetten die alle toegang
+ blokkeert. Dit leidt echter tot een andere klasse problemen
+ zoals wat te doen met mensen die legitiem toegang nodig
+ hebben tot het systeem. Een aantal zullen overwegen om de
+ dienst naar een andere poort te verhuizen, maar dan zullen
+ ook de mensen die poort 22 scannen in staat zijn om ook
+ poort 2222 te scannen om het trucje te herhalen.</para>
+
+ <para>Sinds OpenBSD 3.7 en vlak erna in &os versie 6.0
+ heeft <acronym>PF</acronym> een elegantere oplossing.
+ Passeer regels kunnen geschreven worden met daarbij
+ het bijhouden van bepaalde limieten met wat bepaalde
+ hosten kunnen doen. Voor de goede orde kunnen overtreders
+ aan een tabel waarmee wordt bepaalt of ze daarmee
+ beperkte toegang krijgen of geheel geen toegang meer.
+ Indien gewenst is het ook mogelijk om alle bestaande
+ verbindingen te verwijderen van het systeem wanneer
+ de voorgeschreven limieten overtreden worden. Op de
+ volgende manier wordt dat gedaan:</para>
+
+ <para>Als eerste wordt de tabel opgezet. In de tabel
+ sectie moet worden toegevoegd:</para>
+
+ <programlisting>table <bruteforce> persist</programlisting>
+
+ <para>En daarna vroeg in de ruleset een regel om de
+ bruteforcers te blokkeren:</para>
+
+ <programlisting>block quick from <bruteforce></programlisting>
+
+ <para>Als laatste volgt de passeer regel:</para>
+
+ <programlisting>pass inet proto tcp from any to $localnet port $tcp_services \
+flags S/SA keep state \
+(max-src-conn 100, max-src-conn-rate 15/5, \
+overload <bruteforce> flush global)</programlisting>
+
+ <para>Het eerste gedeelte is gelijk aan de regel die al eerder
+ gemaakt is. Het deel tussen de ronde haken is nieuw, welke
+ de belasting op het netwerk alleen maar verbetert.</para>
+
+ <para><literal>max-src-conn</literal> is de waarde met hoeveel
+ simultane verbindingen er mogen zijn vanaf EEn machine. In
+ dit voorbeeld is de waarde 100. Andere opstellingen kunnen
+ een hogere of lagere waarde vereisen.</para>
+
+ <para><literal>max-src-conn-rate</literal> is de hoeveelheid
+ nieuwe verbindingen die EEn machine kan opzetten, hier
+ ingesteld op 15 verbindingen per 5 seconden. Ook hier geldt
+ dat de beheerder die kan bepalen wat geschikt is voor de
+ specifieke opstelling.</para>
+
+ <para><literal>overload <bruteforce></literal> betekent
+ dat elke host die de waarden overschrijd, zijn of haar
+ adres toegevoegd zal zien worden aan de tabel
+ <literal>bruteforce</literal>. De genoemde regel blokkeert
+ alle verkeer vanaf adressen in de bruteforce tabel.</para>
+
+ <para>Als laatste de <literal>flush global</literal> optie,
+ deze geeft aan dat wanneer een machine de maximale waarde
+ bereikt, alle verbindingen vanaf die machine worden
+ getermineerd(flushed). Het globale gedeelte geeft aan dat
+ dit voor de goede orde ook geldt voor verbindingen die
+ andere regels matchen.</para>
+
+ <para>Het effect is dramatisch. Vanaf nu zullen bruteforcers
+ vaker wel dan niet uit zullen komen op
+ <computeroutput>"Fatal: timeout before
+ authentication"</computeroutput> meldingen, welke
+ nergens toe leiden.</para>
+
+ <note>
+ <para>Deze regels houden langzame bruteforcers
+ <emphasis>niet</emphasis> tegen, beter bekend als
+ <link xlink:href="http://home.nuug.no/~peter/hailmary2013/">de Hail
+ Mary Cloud</link>.</para>
+ </note>
+
+ <para>Nogmaals, denk erom dat de voorbeeld regel puur bedoeld
+ is ter illustratie. Het is niet ondenkbaar dat de specifieke
+ behoeften voor een specifiek netwerk beter bediend worden door
+ andere regels of een combinatie van regels.</para>
+
+ <para>Als, bijvoorbeeld, een grote hoeveelheid verbindingen
+ gewenst is maar de wens er is om wat stricter te zijn wanneer
+ het <application>ssh</application> betreft, moet bovenstaande
+ regel aangevuld worden met iets als onderstaande zo dicht als
+ mogelijk bij het begin van de ruleset:</para>
+
+ <programlisting>pass quick proto { tcp, udp } from any to any port ssh \
+flags S/SA keep state \
+(max-src-conn 15, max-src-conn-rate 5/3, \
+overload <bruteforce> flush global)</programlisting>
+
+ <para>Het zou mogelijk moeten zijn om juiste parameters voor
+ de eigen situatie te vinden door het lezen van de relevante
+ handleidingen en de
+ <link xlink:href="http://www.openbsd.org/faq/pf/">PF User
+ Guide</link>, en wellicht een klein beetje
+ experimenteren.</para>
+
+ <note>
+ <title>Het is wellicht niet nodig om alle overtreders te
+ blokkeren</title>
+
+ <para>Het is waarschijnlijk nuttig om te vermelden dat het
+ <emphasis>overload</emphasis> mechanisme een generieke
+ techniek is welke niet specifiek alleen voor de
+ <emphasis>ssh</emphasis> dienst geldt, en het is niet
+ altijd gewenst om alle verkeer van overtreders meteen
+ te blokkeren.</para>
+
+ <para>Bijvoorbeeld, een overload regel kan gebruikt worden
+ om een mailserver of een webserver te beschermen, en de
+ overload tabel kan dan gebruikt worden om de overtreders
+ in queue te plaatsen met minimale bandbreedte toegewezen,
+ of in het geval van een webpagina om deze naar een
+ specifieke webpagina te verwijzen.</para>
+ </note>
+
+ <sect4 xml:id="pftut-expire">
+ <title>Het opruimen van tabel regels met behulp van
+ <application>pfctl</application></title>
+
+ <para>Op dit moment is er een tabel welke gevuld wordt door
+ de overload regels, en omdat een gateway gemiddeld maanden
+ achtereen beschikbaar is, zal de tabel blijven groeien en
+ en daardoor ook steeds meer geheugen bezet houden.</para>
+
+ <para>Het kan voorkomen dat een IP adres welke geblokkeerd is
+ afgelopen week in verband met een brute force aanval
+ eigenlijk een dynamisch uitgegeven adres is, welke nu
+ uitgegeven is aan een andere klant van de ISP, die wel
+ legitieme redenen heeft om te communiceren met machines op
+ het lokale netwerk.</para>
+
+ <para>Situaties als deze hebben ervoor gezorgd dat Henning
+ Brauer de mogelijkheid aan <application>pfctl</application>
+ heeft toegevoegd om regels in tabellen op te ruimen na een
+ ingestelde hoeveelheid seconden (in OpenBSD 4.1).
+ Bijvoorbeeld het commando:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -t bruteforce -T expire 86400</userinput></screen>
+
+ <para>zal <literal><bruteforce></literal> tabel regels
+ opruimen die al meer dan 86400 seconden niet gebruikt
+ zijn.</para>
+ </sect4>
+
+ <sect4 xml:id="pftut-expiretable">
+ <title>Het <application>expiretable</application> hulp
+ programma</title>
+
+ <para>Voordat <application>pfctl</application> de
+ mogelijkheid kreeg om tabel regels op te schonen had
+ Henrik Gustafsson een programma geschreven
+ <application>expiretable</application>, welke regels
+ opruimde welke een gespecificeerde hoeveelheid tijd niet
+ gebruikt waren.</para>
+
+ <para>EEn nuttig voorbeeld van het gebruik van het
+ <application>expiretable</application> programma is een
+ manier om oude niet meer gebruikte regels in
+ <literal><bruteforce></literal> te
+ verwijderen.</para>
+
+ <para>Bijvoorbeeld om <application>expiretable</application>
+ <literal><bruteforce></literal> tabel regels te laten
+ verwijderen, welke ouder zijn dan 24 uur, moet er een regel
+ worden toegevoegd aan <filename>/etc/rc.local</filename>:</para>
+
+ <programlisting>/usr/local/sbin/expiretable -v -d -t 24h bruteforce</programlisting>
+
+ <para><application>expiretable</application> is beschikbaar
+ in de Ports Collectie van &os; als
+ <package>security/expiretable</package>.</para>
+ </sect4>
+ </sect3>
+
+ <sect3 xml:id="pftut-tools">
+ <title>Andere <acronym>PF</acronym> tools</title>
+
+ <para>Na verloop van tijd zijn er een aantal programma's
+ ontwikkeld die op diverse manieren met
+ <acronym>PF</acronym> communiceren.</para>
+
+ <sect4 xml:id="pftut-pftop">
+ <title>Het huidige verkeer tonen met
+ <application>pftop</application></title>
+
+ <para>Can Erkin Acar's <application>pftop</application> maakt
+ het mogelijk om te zien wat er het netwerk in en uitgaat.
+ <application>pftop</application> is beschikbaar via het
+ ports systeem als <package>sysutils/pftop</package>. De
+ naam is een sterke hint over wat het programma doet.
+ <application>pftop</application> toont een snapshot van
+ het verkeer in een formaat dat geinspireerd is door
+ &man.top.1;.</para>
+ </sect4>
+
+ <sect4 xml:id="pftut-spamd">
+ <title>De <application>spamd</application> Spam afweer
+ daemon</title>
+
+ <para>Deze applicatie moet niet verward worden met de
+ <application>spamd</application> daemon welke wordt
+ meegeleverd als onderdeel van
+ <application>spamassassin</application>. De
+ <acronym>PF</acronym> applicatie
+ <application>spamd</application> werd ontwikkeld om te
+ draaien op een <acronym>PF</acronym> gateway als onderdeel
+ om te beschermen tegen spam.
+ <application>spamd</application> koppelt aan de
+ <acronym>PF</acronym> configuratie door een set
+ omleidingen.</para>
+
+ <para>Het belangrijkste punt van het ontwerp van
+ <application>spamd</application> is het feit dat spammers
+ een grote hoeveelheid berichten versturen waarbij de kans
+ u de eerste bent die een bepaald bericht ontvang is
+ bijzonder klein. Daarnaast wordt spam meestal verstuurd
+ via spam vriendelijke netwerken en een grote hoeveelheid
+ gekaapte machines. Zowel de individuele berichten als de
+ machines worden vaak snel gerapporteerd aan blacklists en
+ dit is precies de informatie die
+ <application>spamd</application> in ons voordeel kan
+ gebruiken met <firstterm>blacklists</firstterm>.</para>
+
+ <para>Wat <application>spamd</application> doet met
+ SMTP verbindingen vanaf adressen die in een blacklist
+ voorkomen is om de banner te laten zien en meteen daarna
+ om te schakelen naar een mode waar het SMTP verkeer nog
+ maar met EEn byte per keer wordt beantwoord. Deze techniek
+ welke bedoeld is om zoveel mogelijk tijd te verkwanselen
+ aan de versturende kant terwijl het de ontvanger feitelijk
+ niets kost wordt <firstterm>tarpitting</firstterm>
+ genoemd. De specifieke implementatie met EEn byte
+ antwoorden wordt ook wel <firstterm>stuttering</firstterm>
+ genoemd.</para>
+
+ <sect5 xml:id="pftut-spamd-allblack">
+ <title>Een standaard blacklistende
+ <application>spamd</application></title>
+
+ <para>Hier volgt de basis procedure voor het opzetten van
+ <application>spamd</application> met automatisch
+ bijgewerkte blacklists:</para>
+
+ <procedure>
+ <step>
+ <para>Installeer de <package>mail/spamd</package> Port.
+ Lees in het bijzonder het package berichten doe wat
+ er wordt gezegd. Specifiek om
+ <application>spamd</application>'s greylisting optie
+ te gebruiken moet er een bestands descriptor
+ bestandssysteem gekoppeld worden op
+ <filename>/dev/fd/</filename> (zie &man.fdescfs.5;).
+ Hiervoor moet de volgende regel worden toegevoegd aan
+ <filename>/etc/fstab</filename>:</para>
+
+ <programlisting> fdescfs /dev/fd fdescfs rw 0 0</programlisting>
+
+ <para>Zorg ervoor dat de <filename>fdescfs</filename>
+ code zich in de kernel bevind, ofwel door het
+ incompileren ervan of door het laden van de module
+ door middel van &man.kldload.8;.</para>
+ </step>
+
+ <step>
+ <para>Hierna moet de ruleset bewerkt worden waarna het
+ volgende bijgevoegd moet worden:</para>
+
+ <programlisting>table <spamd> persist
+table <spamd-white> persist
+rdr pass on $ext_if inet proto tcp from <spamd> to \
+ { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025
+rdr pass on $ext_if inet proto tcp from !<spamd-white> to \
+ { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025</programlisting>
+
+ <para>De twee tabellen <spamd> en
+ <spamd-white> zijn essentieel. SMTP verkeer
+ vanaf adressen in de eerste tabel, plus degenen
+ die niet in de andere tabel staan worden omgeleid
+ naar een daemon welke luistert op poort 8025.</para>
+ </step>
+
+ <step>
+ <para>De volgende stap is het opzetten van
+ <application>spamd</application>'s eigen
+ configuratie in
+ <filename>/usr/local/etc/spamd.conf</filename>
+ aangevuld met parameters in
+ <filename>/etc/rc.conf</filename>.</para>
+
+ <para>Het bijgeleverde voorbeeld bestand levert veel
+ uitleg aan, en de handleiding biedt nog meer extra
+ informatie aan. De belangrijkste onderdelen worden
+ hieronder besproken.</para>
+
+ <para>EEn van de eerste regels zonder een # commentaar
+ teken aan het begin van de regel bevat het blok
+ welke de <literal>all</literal> lijst definieert,
+ deze specificeert welke lijsten er daadwerkelijk
+ gebruikt worden:</para>
+
+ <programlisting>all:\
+:traplist:whitelist:</programlisting>
+
+ <para>Hier worden alle gewenste backlists opgevoerd,
+ gescheiden door dubbele punten
+ (<literal>:</literal>). Om whitelists te gebruiken
+ welke niet gebruikt kunnen worden in de blacklists
+ moet de naam worden toegevoegd direct na de naam
+ van de blacklist, zoals
+ <literal>:blacklist:whitelist:</literal>.</para>
+
+ <para>Nu volgt de specificatie van de blacklist:</para>
+
+ <programlisting>traplist:\
+:black:\
+:msg="SPAM. Your address %A has sent spam within the last 24 hours":\
+:method=http:\
+:file=www.openbsd.org/spamd/traplist.gz</programlisting>
+
+ <para>Door de naam te volgen zien we dat het eerste
+ data veld het lijsttype specificeert, in dit geval
+ <literal>black</literal>. Het
+ <literal>msg</literal> veld bevat het bericht welke
+ wordt getoond aan verzenders op de zwarte lijst
+ tijdens de SMTP communicatie. Het
+ <literal>method</literal> veld specificeert hoe
+ spamd-setup de lijst data ophaalt, in dit geval
+ via <literal>http</literal>. De andere opties zijn
+ het ophalen via <literal>ftp</literal>, via een
+ <literal>file</literal> op een gekoppeld
+ bestandssysteem of via <literal>exec</literal> een
+ extern programma. Als laatste specificeert het
+ <literal>file</literal> veld de naam van het
+ bestand welke spamd verwacht te ontvangen.</para>
+
+ <para>De definitie van een whitelist volgt hetzelfde
+ patroon:</para>
+
+ <programlisting>whitelist:\
+:white:\
+:method=file:\
+:file=/var/mail/whitelist.txt</programlisting>
+
+ <para>maar heeft geen <literal>msg</literal>
+ parameter, omdat deze niet nodig is.</para>
+
+ <tip>
+ <title>Kies de bronnen zorgvuldig</title>
+
+ <para>Door alle zwarte lijsten uit het voorbeeld
+ te gebruiken worden grote delen van het Internet
+ op de zwarte lijst gezet waaronder enkele
+ Aziatische landen. Beheerders moeten het bestand
+ bewerken om een optimale configuratie te kunnen
+ krijgen. De beheerder is de meester die de keuze
+ maakt welke data bronnen er gekozen worden en
+ gebruik maken van andere lijsten dan in het
+ voorbeeld is mogelijk.</para>
+ </tip>
+
+ <para>Zet de regels voor spamd en alle opstart
+ parameters die benodigd zijn in
+ <filename>/etc/rc.conf</filename>,
+ bijvoorbeeld:</para>
+
+ <programlisting>spamd_flags="-v" # for normal use: "" and see spamd-setup(8)</programlisting>
+
+ <para>Wanneer men klaar is met het bewerken van
+ de opstelling, herlaad de ruleset, start
+ <application>spamd</application> met de gewenste
+ opties door gebruik te maken van het
+ <filename>/usr/local/etc/rc.d/obspamd</filename>
+ script, en eindig de configuratie door gebruik te
+ maken van <command>spamd-setup</command>. Als
+ laatste moet er een &man.cron.8; job gemaakt
+ worden, welke <command>spamd-setup</command>
+ aanroept om de tabellen op redelijke intervallen
+ bij te werken.</para>
+ </step>
+ </procedure>
+
+ <para>Op een typische gateway voor een mailserver zullen
+ er machines vast komen te zitten binnen een aantal
+ seconden tot enkele minuten.</para>
+ </sect5>
+
+ <sect5 xml:id="pftut-spamd-greylist">
+ <title>Het toevoegen van greylisting aan de
+ <application>spamd</application> opstelling</title>
+
+ <para><application>spamd</application> ondersteund ook
+ het gebruik van <firstterm>greylisting</firstterm>
+ welke werkt door het weigeren van berichten van
+ onbekende machines met behulp van
+ <replaceable>45n</replaceable> codes en het doorlaten
+ van machines die het nogmaals proberen binnen redelijke
+ tijd. Verkeer van goed gedragende machines, dat wil
+ zeggen versturende machines die ingesteld zijn volgens
+ de limieten gespecificeerd in de relevante
+ RFCs
+ <footnote><para>De relevante RFCs zijn met name RFC1123
+ en RFC2821.</para></footnote> worden
+ doorgelaten.</para>
+
+ <para>De techniek greylisting werd in 2003 gepresenteerd
+ in een paper door Evan Harris
+ <footnote><para>De originele paper van Harris en een
+ aantal andere nuttige artikelen en bronnen kunnen
+ worden gevonden op de <link
+ xlink:href="http://www.greylisting.org/">greylisting.org</link>
+ website.</para></footnote>, en een aantal
+ implementaties volgden in de maanden erna. OpenBSD's
+ <application>spamd</application> verkreeg de
+ mogelijkheid tot greylisten in OpenBSD 3.5, welke
+ uitgebracht werd in 2004.</para>
+
+ <para>Het meest verbazingwekkende aan greylisting, naast
+ de simpelheid ervan, is dat het nog steeds werkt.
+ Spammers en schrijvers van malware zijn heel traag
+ geweest om zich hierop aan te passen.</para>
+
+ <para>De basis procedure om greylisting toe te voegen
+ aan de opstelling volgt hieronder.</para>
+
+ <procedure>
+ <step>
+ <para>Mits nog niet gedaan moet ervoor gezorgd
+ worden dat het File Descriptor bestandssysteem
+ (&man.fdescfs.5;) gekoppeld is aan
+ <filename>/dev/fd</filename>. Dit kan door
+ middel van het toevoegen van de volgende regel
+ aan <filename>/etc/fstab</filename>:</para>
+
+ <programlisting>fdescfs /dev/fd fdescfs rw 0 0</programlisting>
+
+ <para>en zorg ervoor dat de &man.fdescfs.5; code zich
+ ofwel in de kernel bevind of ingeladen is door een
+ module met &man.kldload.8;.</para>
+ </step>
+
+ <step>
+ <para>Om <application>spamd</application> in
+ greylisting modus te draaien moet
+ <filename>/etc/rc.conf</filename> iets worden
+ aangepast door het volgende toe te voegen</para>
+
+ <programlisting>spamd_grey="YES" # use spamd greylisting if YES</programlisting>
+
+ <para>Verschillende greylisting parameters kunnen
+ worden aangepast met <command>spamd</command>'s
+ commando regel parameters en bijbehorende
+ <filename>/etc/rc.conf</filename> instellingen.
+ Controleer de <application>spamd</application>
+ handleiding om te zien wat welke parameter
+ betekend.</para>
+ </step>
+
+ <step>
+ <para>Om de greylisting opstelling compleet te maken
+ moet <application>spamd</application> herstart
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-doc-translations
mailing list