Date: Mon, 24 Mar 2014 11:00:35 +0000 (UTC) From: Remko Lodder <remko@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-translations@freebsd.org Subject: svn commit: r44340 - translations/nl_NL.ISO8859-1/books/handbook/firewalls Message-ID: <201403241100.s2OB0ZdT038853@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201403241100.s2OB0ZdT038853>