Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > d667a145d78a93cee78c5358ca99c039 > files > 164

howto-text-nl-2006-5mdv2010.0.noarch.rpm

  Linux 2.4 Packet Filter HOWTO (NL)
  Rusty Russell, mailing list netfilter@lists.samba.org, ver­
  taald door Sjoerd Langkemper, sjoerd@linuxonly.nl
  $Revision: 1.2 $ $Date: 2003/02/08 20:41:49 $ $ Translation
  2001/05/20 22:31:47 Version 0.04 $

  Deze HOWTO beschrijft hoe je pakketjes op een netwerk kan filteren
  onder een Linux 2.4 kernel.
  ______________________________________________________________________

  Inhoudsopgave























































  1. Inleiding

  2. Waar kan ik meer informatie vinden?

  3. Wat is een pakket filter?

     3.1 Waarom zou ik een pakket filter willen?
     3.2 Hoe kan je het pakket filter instellen onder Linux?
        3.2.1  iptables
        3.2.2 Regels instellen bij het opstarten

  4. Wie is Rusty? Wie is Sjoerd?

  5.  Rusty's Turbo Pakket Filter cursus

  6.  Hoe de filters werken

  7.  iptables gebruiken

     7.1  Wat er gebeurt als je je computer opstart
     7.2  Een regel opgeven
     7.3 Filter specificaties
        7.3.1 Herkomst en doel
        7.3.2 Inversie opgeven
        7.3.3 Protocol opgeven
        7.3.4 Een interface opgeven
        7.3.5 Fragmenten opgeven
        7.3.6 Het uitbreiden van iptables
           7.3.6.1 TCP uitbreidingen
              7.3.6.1.1 Een uitleg van TCP markeringen
           7.3.6.2 UDP Uitbreidingen
           7.3.6.3 ICMP Extensies
           7.3.6.4 Andere optie uitbreidingen
           7.3.6.5 De `state' uitbreiding
     7.4 Doel specificaties
        7.4.1 Gebruikersreeksen
        7.4.2 Uitbreidingen: Nieuwe doelen
        7.4.3 Speciale ingebouwde doelen
     7.5 Reeksen onderhouden
        7.5.1 Een nieuwe reeks maken
        7.5.2 Een reeks verwijderen
        7.5.3 Een reeks leeg maken
        7.5.4 De regels in een reeks bekijken
        7.5.5 Tellers op nul zetten
        7.5.6 Het beleid instellen

  8.  Ipchains of ipfwadm gebruiken

  9.  NAT en een pakket filter tegelijk gebruiken

  10.  Verschillen tussen ipchains en iptables

  11.  Pakket filter advies



  ______________________________________________________________________

  1.  Inleiding

  Voor deze HOWTO is enige basiskennis vereist; je behoort te weten wat
  ip adressen, netmasks, routing en DNS zijn. Is dit niet het geval, dan
  raad ik je aan de Network Concepts HOWTO te lezen.

  Toen ik (Sjoerd) deze HOWTO aan het vertalen was, liep ik tegen een
  paar problemen en het kan zijn dat je sommige dingen raar vertaald
  vindt. Is dat het geval, waarschuw me dan. Hier zijn wat dingen waar
  ik twijfelde:


  ·  packet filter is vertaald met pakket filter. Hiermee wordt bedoeld
     een stukje software wat pakketjes kan tegenhouden en doorlaten.

  ·  rule chain is een serie filter regels, en is vertaald met reeks.

  ·  interface is vertaald met interface en is een netwerkkaart of
     modem, ofwel iets waarmee een netwerk benaderd kan worden.

  ·  connection tracking is vertaald met connectie tracking. Connectie
     tracking is dat netfilter bijhoud bij welke connectie pakketjes
     horen.

  ·  user-defined chains is vertaald met gebruikersreeks. Dit is een
     reeks die niet ingebouwd is, en die door de gebruiker samengesteld
     is.

  ·  queue en queue-handler zijn niet vertaald, want dit is zo een
     specifiek onderwerp dat als je hier wat mee gaat doen, dat je echt
     wel weet wat dit betekent.

  ·  Pakketjes die `geDROPt' worden, worden `tegengehouden'. Dat wil
     zeggen dat ze in /dev/null komen om voor altijd te verdwijnen.

  Deze HOWTO gaat onder andere in op hoe het pakket filter werkt, hoe
  NAT werkt, en hoe je de oude ipchains en ipfwadm regels kan gebruiken.
  Na het lezen van deze HOWTO en het toepassen van alle dingen erin is
  je netwerk niet gegarandeerd veilig. Er is niet zoiets als veilig. Je
  kan niet alle pakketjes tegenhouden en verwachten dat het ook nog
  werkt.

  Gelukkig kan je met iptables precies bepalen welke pakketjes je tegen
  wilt houden, dus je kan zelf bepalen hoe veel risico je neemt en
  hoeveel gebruiksvriendelijkheid je inlevert.

  (C) 2000 Paul `Rusty' Russell.  Licenced under the GNU GPL.

  Vertaald door Sjoerd Langkemper, sjoerd@linuxonly.nl

  2.  Waar kan ik meer informatie vinden?

  Er zijn drie officiele websites:

  ·  Met dank aan Filewatcher <http://netfilter.filewatcher.org>.

  ·  Met dank aan Het Samba Team en SGI
     <http://www.samba.org/netfilter>.

  ·  Met dank aan Jim Pick <http://netfilter.kernelnotes.org>.

  Die laatste site was offline de laatste keer dat ik (Sjoerd) keek.

  De officiele mailinglist kan je vinden op Samba's Listserver
  <http://lists.samba.org>.

  3.  Wat is een pakket filter?

  Een pakket filter is een stukje software wat naar de header van
  pakketjes kijkt terwijl ze langskomen. In de header staat informatie
  over het pakketje en dat wordt onder andere gebruikt om het lot van
  het pakketje te bepalen. Meestal is dat ofwel doorlaten (accept),
  ofwel tegenhouden (drop).

  Onder Linux zit het pakket filter in de kernel ingebouwd en dat biedt
  wat meer mogelijkheden voor wat er met de pakketjes kan gebeuren.
  Natuurlijk is het idee nog steeds hetzelfde: aan de hand van
  informatie over het pakketje wordt besloten wat ermee gebeurt.

  3.1.  Waarom zou ik een pakket filter willen?


     Gezag:
        Als je je Linux computer gebruikt om je interne netwerk aan het
        internet of een ander netwerk te hangen, krijg je de
        mogelijkheid om bepaalde pakketjes wel door te laten, en andere
        niet. Wil je niet dat je werknemers naar www.playboy.com gaan,
        dan kan dat met een pakket filter.

     Veiligheid:
        Als je Linux computer de grens is tussen het chaotische internet
        vol met crackers, hackers en scriptkiddies en je eigen veilige
        netwerkje, dan is het fijn om te weten dat je al dit slechts
        buiten kan sluiten met een pakket filter. Aangezien de meeste
        mensen alleen de connecties naar buiten willen maken en
        voorkomen dat er een connectie naar binnen wordt gemaakt, kan
        een pakket filter in veel situaties veiligheid bieden.

     Controle:
        Als er iets vreemds gebeurt op je netwerk, zoals een machine die
        opeens allemaal pakketjes begint te versturen zonder reden, wil
        je er vast vanaf weten. Als je weet wat er gebeurt op je
        netwerk, kan je ingrijpen als het nodig is.

  3.2.  Hoe kan je het pakket filter instellen onder Linux?

  Linux had al een pakket filter sinds de 1.1 kernels. Deze eerste
  filters kwamen oorspronkelijk uit BSD en werden door Alan Cox in Linux
  ingevoerd.  Toen kernel 2.0 uit kwam was er een nieuwe tool, door Jos
  Vos: ipfwadm was nu het programma om de filter regels mee in te
  stellen. In kernel 2.2 werd weer een nieuw programma ontwikkeld,
  namelijk ipchains. Nu is het zover dat de 2.4 kernels er zijn en
  nogmaals een nieuwe pakket filter hebben: iptables. Iptables brengt
  ook echt nieuwe opties met zich mee, die ipchains en ipfwadm niet
  hadden. Zo kan je nu ook regels maken op basis van de gebruiker die
  het pakketje verstuurt, of op basis van hoeveel connecties er al zijn.

  Om het pakket filter te kunnen gebruiken moet je je kernel wel
  compileren met netfilter. Netfilter is het deel van de kernel wat
  iptables gebruikt om zijn regels te realiseren. Je hebt minimaal
  kernel 2.3.15 nodig, en je moet de optie CONFIG_NETFILTER
  aanschakelen.

  3.2.1.  iptables

  Het programma iptables geeft aan de kernel door welke regels in
  werking moeten treden, en de kernel zorgt dat elk pakketje
  gecontroleerd wordt.  Dit betekent echter wel dat als je de computer
  opnieuw opstart, de regels weer verloren gaan. Er zijn wel manieren om
  dit tegen te gaan, zie hiervoor ``Regels instellen bij het
  opstarten''.

  iptables vervangt ipfwadm en ipchains, maar met een speciale module
  kan je nog steeds je oude regels gebruiken onder iptables. Zie
  hiervoor ``Ipchains of ipfwadm gebruiken''

  3.2.2.  Regels instellen bij het opstarten

  Omdat de pakket filter regels in de kernel worden opgeslagen, zullen
  deze verloren gaan bij het opnieuw opstarten van de computer.
  Er zijn twee manieren om dit te voorkomen. Er zijn twee programma's,
  namelijk iptables-save en iptables-restore die een set regels in een
  bestand kunnen opslaan. Je kan dan bij het opstarten van je computer
  de regels laden uit een bestandje.

  Je kan ook de filter regels in een scriptje zetten en het scriptje
  elke keer laden bij het opstarten van de computer. In het scriptje
  staan dan de commando's die je ook gebruikte om de huidige regels in
  te stellen.

  4.  Wie is Rusty? Wie is Sjoerd?

  Rusty is de man die het Linux IP pakket filter onderhoudt. Hij schreef
  ipchains en heeft daar veel van geleerd om iptables beter te maken.
  Natuurlijk heeft hij dit niet alleen gedaan en hij zou ook niet genoeg
  tijd hebben, als WatchGuard <http://www.watchguard.com> hem hier niet
  voor betaalde. Rusty is geen kernel guru. Andere mensen zoals David S.
  Miller, Alexey Kuznetsov, Andi Kleen en Alan Cox hebben hem hiermee
  geholpen.

  Het schrijven van iptables kostte Rusty en anderen een jaar, maar dat
  was zodat het in één keer goed kon.

  Sjoerd is een van de webmasters bij LinuxOnly.nl
  <http://www.linuxonly.nl> en was van plan een iptables HOWTO te
  schrijven toen hij de Engelse versie van dit document tegen kwam. Hij
  vond het wel een goed idee om dit naar het Nederlands te vertalen.

  Als je `ik' leest, betekent het `Sjoerd'. Als Rusty iets heeft gezegd
  als `I think it's a good idea' dan wordt dat meestal vertaald met `Het
  is misschien een goed idee' en soms met `Rusty denkt...'.

  5.  Rusty's Turbo Pakket Filter cursus

  De meeste mensen hebben een PPP connectie naar het internet en willen
  niet meer dan voorkomen dat er connecties gemaakt worden vanaf het
  internet.



       ## Voeg modules in (niet nodig als deze zijn ingebouwd in de kernel).
       # insmod ip_conntrack
       # insmod ip_conntrack_ftp

       ## Nieuwe reeks regels maken, die alle inkomende connecties tegenhoud.
       # iptables -N block
       # iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
       # iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
       # iptables -A block -j DROP

       ## Ga naar die reeks vanuit de INPUT en FORWARD reeks.
       # iptables -A INPUT -j block
       # iptables -A FORWARD -j block




  6.  Hoe de filters werken

  Je kan je pakket filter vorm geven door regels toe te voegen aan
  reeksen.  Zulke reeksen (chains in het Engels) worden regel voor regel
  nagelopen om te kijken of er een regel is voor het huidige pakketje.

  Er zijn standaard drie reeksen in de kernel, namelijk INPUT
  (inkomend), OUTPUT (uitgaand) en FORWARD (doorsturen).

  De reeksen zijn als volgt gerangschikt:


                            _____
  Inkomend                 /     \         Uitgaand
         -->[ Router ]--->|FORWARD|------->
            [ keuze  ]     \_____/        ^
                 |                        |
                 v                      ____
                ___                    /    \
               /   \                 |OUTPUT|
              |INPUT|                  \____/
               \___/                      ^
                 |                        |
                 --> Lokale programma's --^



  De drie rondjes staan voor de drie reeksen. Als een pakketje bij zo'n
  cirkel aankomt worden de regels nagelopen om het lot van het pakketje
  te bepalen. Als hieruit blijkt dat het pakketje moet worden genegeerd
  (DROP) dan wordt het pakketje gelijk daar gestopt. Als uit de reeks
  blijkt dat er niets mis is met het pakketje (ACCEPT) dan doorloopt het
  pakketje de rest van het schema.

  Elke reeks bestaat uit een aantal regels en een beleid (policy). Elke
  regel heeft de vorm van: "Als het pakketje deze eigenschappen heeft,
  doe dan dit en dat met het pakketje.". Als deze regel niet van
  toepassing is op het pakketje (het pakketje heeft niet de
  eigenschappen voor deze regel), dan wordt de volgende regel gelezen.
  Als de laatste regel is gelezen en er is geen regel die van toepassing
  is op dit pakketje, dan wordt de actie uitgevoerd die het beleid is.
  Dit is dus een standaard actie die van toepassing is op alle pakketjes
  die niet door een regel gespecifeerd zijn. Het beleid is meestal het
  pakketje negeren (DROP) zodat onbekende pakketjes niet door kunnen
  dringen.


  1. Als een pakketje binnenkomt (via een modem of ethernetkaart
     bijvoorbeeld), bepaalt de kernel eerst waar het pakketje heen moet.
     Dit heet routing.

  2. Als het pakketje voor deze computer bedoeld is, wordt het pakketje
     doorgegeven aan de INPUT reeks. Als het hierdoor komt, wordt het
     doorgegeven aan de programma's op de computer.

  3. Als het pakketje voor een andere computer bedoeld is, en de kernel
     kan niet forwarden of het weet niet hoe het geforward moet worden,
     wordt het pakketje genegeerd. Als er wel geforward kan worden, dan
     komt het pakketje in de FORWARD reeks. Komt het hierdoor, dan wordt
     het doorgestuurd naar een andere machine.

  4. Als een programma op de computer een pakketje verstuurd, moet het
     eerst door de OUTPUT reeks om verzonden te kunnen worden.

  7.  iptables gebruiken

  iptables heeft een goede gebruikershandleiding (man iptables) en deze
  is dus te gebruiken als je ergens meer van wil weten. Als je al bekend
  bent met ipchains kan je het hoofdstuk ``Differences Between iptables
  and ipchains'' lezen, maar je kan natuurlijk ook gewoon doorlezen.

  Er zijn drie standaardreeksen die je niet kan verwijderen, maar je kan
  ook nog zelf extra reeksen maken. Hier zijn wat opties waarmee je
  reeksen kan onderhouden:

  1. Een nieuwe reeks maken (-N);

  2. Een lege reeks verwijderen (-X);

  3. Het beleid (policy) voor een standaardreeks wijzigen (-P);

  4. De regels weergeven in een reeks (-L);

  5. Alle regels uit een reeks verwijderen (-F);

  6. De pakket en byte tellers op nul zetten (-Z).

  Er zijn een paar manieren om regels in een reeks te onderhouden:


  1. Voeg een regel toe aan het einde van een reeks (append) (-A);

  2. Voeg een regel toe op een bepaalde positie in een reeks (insert)
     (-I);

  3. Vervang een regel door een andere regel in een reeks (replace)
     (-R);

  4. Verwijder een bepaalde regel uit een reeks (-D).

  7.1.  Wat er gebeurt als je je computer opstart

  iptables kan in een kernel module zitten, namelijk iptable_filter.o.
  Deze module zou automatisch geladen moeten worden zodra je iptables
  opstart.  Deze code kan ook in de kernel ingebouwd worden.

  Voordat iptables een keer gestart is zijn alle standaard reeksen leeg
  en hebben het beleid ACCEPT, ofwel alles doorlaten. Je kan het beleid
  van de FORWARD reeks wijzigen door de optie "forward=0" mee te geven
  aan de iptable_filter module. Als op jou computer niet alle reeksen
  leeg zijn bij het opstarten van je computer, dan kan het zijn dat je
  distributie in de bootscripts de regels aanpast.

  7.2.  Een regel opgeven

  Natuurlijk kan je niets met een pakket filter als je geen regels op
  kan geven.  Meestal wil je gewoon een regel aan het einde toevoegen
  (-A) of verwijderen.  Een regel ergens invoegen (-I) is handig als de
  volgorde van je regels belangrijk is en een regel vervangen (-R) is
  handig als bijvoorbeeld een IP-adres verandert.

  Elke regel bepaalt welke eigenschappen een pakketje moet hebben zodat
  deze regel ervoor geld, en wat in dat geval met het pakketje moet
  gebeuren.  Je kan bijvoorbeeld alle pakketjes die van het protocol
  ICMP zijn en die van het IP 127.0.0.1 afkomen, tegenhouden (DROP). De
  eigenschappen zijn dan dat het protocol ICMP is, het IP 127.0.0.1. Het
  doel is DROP.

  127.0.0.1 is de loopback adapter. Dit IP heb je zelfs als je geen
  netwerk hebt. Je kan ICMP pakketjes produceren met het programma ping,
  wat een pakketje stuurt en meld of het aangekomen is.










  # ping -c 1 127.0.0.1
  PING 127.0.0.1 (127.0.0.1): 56 data bytes
  64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

  --- 127.0.0.1 ping statistics ---
  1 packets transmitted, 1 packets received, 0% packet loss
  round-trip min/avg/max = 0.2/0.2/0.2 ms
  # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
  # ping -c 1 127.0.0.1
  PING 127.0.0.1 (127.0.0.1): 56 data bytes

  --- 127.0.0.1 ping statistics ---
  1 packets transmitted, 0 packets received, 100% packet loss
  #




  Je ziet hierboven dat de eerste ping wel lukt, maar niet meer als de
  regel is toegevoegd aan de INPUT reeks.

  Een regel kan op twee manieren verwijderd worden: ofwel door het
  nummer op te geven, ofwel door dezelfde opties op te geven als dat de
  regel gemaakt werd.

  De nummering begint bovenaan met 1 en omdat er nog maar één regel in
  de reeks staat, is deze regel nummer 1. Deze regel kan dus als volgt
  verwijdert worden:


               # iptables -D INPUT 1
               #




  De tweede manier is hetzelfde als de regel maken, alleen wordt de -A
  nu vervangen door -D. Dit is vooral handig als je veel regels hebt en
  je hebt geen zin om te tellen. Onze regel zouden we dus als volgt
  verwijderen:


               # iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
               #




  Als er meerdere regels zijn die hetzelfde zijn, wordt alleen de eerste
  verwijderd met deze manier.

  7.3.  Filter specificaties

  Behalve protocol (-p) en de herkomst (-s) zijn er nog andere
  eigenschappen waaraan je bepaalde pakketjes kan herkennen. Hier volgen
  alle eigenschappen waar je pakketjes mee kan aanduiden.  i

  7.3.1.  Herkomst en doel

  Herkomst (`-s', `--source' of `--src') en doel (`-d', `--destination'
  or `--dst') IP adressen kunnen worden opgegeven op vier manieren.
  Natuurlijk kan je gewoon een IP-adres opgeven, maar je kan ook een
  hostname gebruiken, zoals `localhost' of `www.linuxhq.com'.

  De derde en vierde manieren laten het toe om meerdere IP-adressen te
  specificeren. `199.95.207.0/255.255.255.0', bijvoorbeeld geeft 255 ip-
  adressen aan. Ook geldig is `199.95.207.0/24'. Allebei geven ze IP-
  adressen aan van 199.95.207.0 tot 199.95.207.255.

  Twee speciale varianten hiervan zijn 1.2.3.4/32, waar de /32 aangeeft
  dat het IP-adres helemaal moet voldoen. Dit is standaard. 1.2.3.4/0
  kan ook, in welk geval het IP-adres helemaal niet uitmaakt. In dit
  geval wordt meestal 0/0 opgegeven als IP adres. Dit is standaard als
  de -s of -d optie weggelaten wordt, dus als er geen herkomst of doel
  adres opgegeven wordt. Daarom wordt het ook weinig gebruikt:



               [ NOTE: `-s 0/0' is redundant here. ]
               # iptables -A INPUT -s 0/0 -j DROP
               #




  7.3.2.  Inversie opgeven

  Veel opties kunnen voorafgegaan worden door `!', wat staat voor
  `niet'.  `-s ! localhost' heeft dus betrekking tot alle pakketjes,
  behalve die van localhost afkomen.

  7.3.3.  Protocol opgeven

  Het protocol kan worden opgegeven met `-p' of met `--protocol'. Het
  protocol kan een nummer zijn, of een naam zoals TCP, UDP of ICMP.
  Hoofdletters maken hier niets uit.

  Ook de protocol optie kan vooraf worden gegaan door een uitroepteken:
  `-p! TCP' betekent alle pakketjes behalve TCP.

  Het opgeven van een protocol is nodig als je regels wilt maken die
  afhankelijk zijn van het poortnummer waarop een connectie gemaakt
  wordt. Omdat ICMP geen poorten ondersteund, moet er TCP of UDP
  opgegeven worden.

  7.3.4.  Een interface opgeven

  De `-i' of `--in-interface' optie geeft de interface
  (netwerkkaart/modem) aan waar de pakketjes de computer mee inkomen.
  De `-o' of `--out-interface' optie geeft de interface aan waar de
  pakketjes uit de computer gaan. Je kan ifconfig gebruiken om een lijst
  van de huidige interfaces te krijgen.

  Pakketjes die door de INPUT reeks komen hebben geen interface waarmee
  ze uit de computer gaan. Regels met -o erin zullen dus nooit waar zijn
  en overgeslagen worden. Bij regels in de OUTPUT reeks werkt het net
  zo: deze hebben geen interface waarmee ze binnengekomen zijn.

  Pakketjes die door de FORWARD reeks gaan hebben zowel een interface
  waarmee ze naar binnen zijn gekomen, als een interface waarmee ze weer
  naar buiten gaan.

  Je mag ook een interface opgeven die nog niet bestaat. De regel geld
  niet zolang deze interface niet bestaat, maar zodra deze interface
  gaat werken treed de regel in werking. Dit is handig voor inbel-
  connecties, zodat er regels ingevoerd kunnen worden voor het geval er
  ingebeld wordt.

  Bij interfaces werkt het `+' teken als een sterretje; het zal meerdere
  interfaces specificeren. -i ppp+ bijvoorbeeld zal voor alle PPP
  interfaces gelden, maar niet voor ethernet interfaces.

  Ook de interface optie kan voorafgegaan worden door een `!' om de
  optie om te keren.

  7.3.5.  Fragmenten opgeven

  Soms is een pakketje te groot om in één keer verstuurd te kunnen
  worden.  In zo'n geval wordt het pakketje opgesplitst in fragmenten en
  verzonden als meerdere pakketjes. Het probleem wat hierbij komt kijken
  is dat het eerste pakketje de headers heeft en dus moeiteloos door de
  regels komt, maar de opvolgende pakketjes hebben de header niet en dus
  zullen ze tegen gehouden worden.

  Als je NAT gebruikt zullen de fragmenten aan elkaar gelijmd worden
  voordat ze door de reeksen gaan, dus hoef je je over fragmenten geen
  zorgen te maken.

  Is dat niet het geval, dan is het belangrijk om te weten hoe
  fragmenten behandeld worden door de regels. Als een regel vraagt om
  bepaalde informatie, kan een fragment die niet verschaffen (het heeft
  tenslotte geen headers) en dus zal de regel niet gelden voor dit
  pakketje. Het eerste pakketje zal dus waarschijnlijk door de reeks
  komen, maar op de andere pakketjes wordt het beleid uitgevoerd.

  Om dit probleem te omzeilen kan je fragments doorlaten of tegenhouden
  met de -f optie.

  Het wordt als veilig beschouwd om fragmenten door te laten, hoewel er
  wel bugs in sommige systemen zitten die het laten crashen als er een
  los fragment op komt. Deze bugs zijn echter opgelost in moderne
  software.

  De volgende regel zal alle fragmenten tegenhouden die naar 192.168.1.1
  gaan:



       # iptables -A OUTPUT -f -d 192.168.1.1 -j DROP
       #




  7.3.6.  Het uitbreiden van iptables

  iptables is makkelijk uit te breiden, wat nieuwe mogelijkheden met
  zich mee brengt. Sommige van deze mogelijkheden zijn standaard, andere
  worden slechts in enkele gevallen gebruikt. In het laatste geval
  worden ze meestal apart verstrekt voor de mensen die de extra
  mogelijkheid nodig hebben.

  Uitbreidingen van de kernel gaan meestal in de kernel module
  directory, meestal /lib/modules/2.4.x/net. Als je kernel gecompileerd
  is met CONFIG_KMOD, dan worden ze geladen als dat nodig is en hoef je
  ze niet handmatig te laden.

  Uitbreidingen van iptables zijn `shared libraries', die meestal in de
  /usr/local/lib/iptables/ directory staan, hoewel sommige distributies
  deze in /usr/lib/iptables zetten.

  Er zijn twee type uitbreidingen: nieuwe doelen en nieuwe regelopties.
  Sommige protocollen bieden je automatisch nieuwe regelopties. Deze
  zijn TCP, UDP en ICMP, die onder andere poorten kunnen specificeren.

  Met de `-p' optie wordt automatisch een nieuwe uitbreiding geladen en
  om expliciet een uitbreiding te laden gebruik je de `-m' optie.

  Om hulp te krijgen bij een uitbreiding, geef een optie om deze te
  laden (`-p', `-j' of `-m') en geef de optie `-h' of `--help':


       # iptables -p tcp --help
       #




  7.3.6.1.  TCP uitbreidingen

  De TCP uitbreidingen worden automatisch geladen als het TCP protocol
  wordt gekozen. De volgende opties kunnen dan gebruikt worden:


     --tcp-flags
        wordt gevolgd door twee lijsten met TCP markeringen.  De eerste
        optie geeft de TCP markeringen (flags) aan die je wilt
        onderzoeken, de tweede geeft aan welke hiervan geactiveerd
        moeten zijn. Bijvoorbeeld:



          # iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DROP




     Deze regel geeft aan dat de TCP pakketjes die de SYN en ACK
     markeringen hebben geactiveerd, maar de rest niet, tegengehouden
     moeten worden.  `ALL' is hetzelfde als `SYN,ACK,FIN,RST,URG,PSH'.
     Wil je geen markeringen opgeven, dan kan je `NONE' gebruiken.

     --syn
        Dit is hetzelfde als `--tcp-flags SYN,RST,ACK SYN'.

     --source-port
        kan gevolgd worden door een poortnummer of een poortbereik. Voor
        poortnummers kan je ook namen gebruiken, zoals die in
        /etc/services worden genoemd. Een poortbereik kan worden
        aangegeven door twee poorten, gescheiden met een dubbele punt,
        zoals 1000:2000. Wordt het eerste poortnummer weggelaten
        (`:2000') dan geldt deze regel voor alle poorten tot 2000. Wordt
        het laatste poortnummer weggelaten (`1000:') dan geldt deze
        regel voor de poort 1000 en verder.

     --sport
        is hetzelfde als `--source-port'.

     --destination-port
        en

     --dport
        zijn hetzelfde als de bovenstaande, alleen geven ze de poorten
        van de doelbestemming aan in plaats van de herkomst.

     --tcp-option
        wordt gevolgd door een nummer. Deze regel geldt voor TCP
        pakketjes met de markering voor dit nummer. Als het pakketje een
        niet volledige header heeft, dan wordt het pakketje automatisch
        tegengehouden.




  7.3.6.1.1.  Een uitleg van TCP markeringen

  Soms is het handig om TCP connecties maar één kant op te laten werken;
  je wilt wel connecties maken naar buiten, maar niet andersom.

  De oplossing hiervoor is om de pakketjes tegen te houden die een
  connectie willen openen. Deze pakketjes heten SYN pakketjes (het zijn
  eigenlijk pakketjes met de SYN markering geactiveerd en de RST en ACK
  markeringen niet geactiveerd). Door deze pakketjes tegen te houden,
  wordt er geen connectie gemaakt en zullen dus opvolgende pakketjes
  genegeerd worden.

  De `--syn' optie wordt hiervoor gebruikt. Deze is alleen geldig voor
  het TCP protocol. Om een regel te maken die geldt voor de pakketjes
  die een connectie willen maken vanaf 192.168.1.1 kan je de volgende
  (niet complete) regel gebruiken:



       -p TCP -s 192.168.1.1 --syn




  Natuurlijk kan ook deze optie weer voorafgegaan worden door een
  uitroepteken, om pakketjes te specificeren die geen connectie willen
  maken.

  7.3.6.2.  UDP Uitbreidingen

  Deze uitbreidingen worden automatisch geladen als er een regel is die
  het UDP protocol gebruikt (dus als er ergens in de regel `-p udp'
  voorkomt).  Deze uitbreiding brengt de opties `--source-port',
  `--sport', `--destination-port' en `--dport' met zich mee en deze zijn
  identiek aan die van TCP.

  7.3.6.3.  ICMP Extensies

  Deze uitbreiding wordt automatisch geladen als het ICMP protocol
  gebruikt wordt en komt met slechts één extra optie:


     --icmp-type
        wordt gevolgd door een ICMP type naam (zoals `host-
        unreachable'), door een nummer wat staat voor een type, of door
        twee nummers gescheiden door een `/'. De twee nummers staan voor
        het type en de code van het ICMP pakketje. De nummers kan je
        opzoeken door `-p icmp --help' te gebruiken.

  7.3.6.4.  Andere optie uitbreidingen

  Deze uitbreidingen kunnen worden gebruikt door de `-m' optie te
  gebruiken.


     mac
        Deze module kan gebruikt worden om het hardware adres van de
        netwerkkaart te gebruiken in je regels. Het werkt alleen met het
        hardware adres van de kaart waarmee de pakketjes in de computer
        komen. Het heeft één optie:


        --mac-source
           gevolgd door een hardware adres, zoals in `--mac-source
           00:60:08:91:CC:B7'.

     limit
        Deze module wordt gebruikt om het aantal geldende regels in een
        bepaalde tijd terug te dringen. Zo kan je bijvoorbeeld zorgen
        dat er slechts 3 keer per uur een berichtje in je log komt te
        staan als er de hele tijd geldende pakketjes komen. Het
        specificeert twee opties:

        --limit
           wordt gevolgd door een nummer en het geeft het aantal
           pakketjes waar deze regel voor geldt, in een bepaald
           tijdsbestek.  Het nummer kan ook een tijd aangeven, door
           gebruik te maken van `/second', `/minute', `/hour' of `/day'
           of de eerste letter ervan.  `5/second' is dus hetzelfde als
           `5/s'.

        --limit-burst
           wordt gevolgd door een nummer en geeft de maximale grens
           voordat de bovenstaande optie gaat gelden.

        Om te kijken hoe het werkt kijken we naar de onderstaande regel,
        die de pakketjes door de FORWARD reeks logt, maar alleen als ze
        door de `limit' module heen komen.



          # iptables -A FORWARD -m limit -j LOG




     De standaard `limit-burst' is vijf en daardoor worden de eerste
     vijf pakketjes gelogd. Hierna duurt het twintig minuten voordat het
     volgende pakketje gelogd wordt. Als er 20 minuten lang geen
     pakketje komt, dan kunnen er na nog eens 20 minuten twee pakketjes
     doorheen. Na 100 minuten kunnen er dus weer 5 pakketjes doorheen.

     NB: Je kan niet een regel maken met een tijdsbestek van meer dan 59
     uur.

     Je kan deze regel ook gebruiken om DoS (Denial of Service)
     aanvallen tegen te gaan, door een overvloed aan pakketjes tegen te
     houden.

     Syn-flood bescherming:


          # iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT




     Furtive port scanner:


          # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT




     Ping of death:


          # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT



     Hoe dit werkt laat de volgende grafiek zien:



             snelheid (pkt/s)
                       ^        .---.
                       |       / DoS \
                       |      /       \
          Rand van DoS-|.....:.........\.......................
           = (limit *  |    /:          \
          limit-burst) |   / :           \         .-.
                       |  /  :            \       /   \
                       | /   :             \     /     \
          Eide van DoS-|/....:..............:.../.......\..../.
           = limit     |     :              :`-'         `--'
          -------------+-----+--------------+------------------> tijd (s)
          RESULTAAT=>  Geldt |  Geldt niet  |    Geldt




     De volgende grafiek is van een grens van één pakketje per seconde,
     met een `burst' van vijf pakketjes. Pakketjes komen binnen met vier
     per seconde, drie seconden lang. Vervolgens nog eens na weer drie
     seconden:





                  <--Flood 1-->           <---Flood 2--->

          Total  ^                   Line  __--      YNNN
          Packets|               Rate  __--      YNNN
                 |            mum  __--      YNNN
              10 |        Maxi __--         Y
                 |         __--            Y
                 |     __--               Y
                 | __--    YNNN
                 |-    YNNN
               5 |    Y
                 |   Y                                Key:  Y -> Matched Rule
                 |  Y                                       N -> Didn't Match Rule
                 | Y
                 |Y
               0 +-------------------------------------------------->  Time (seconds)
                  0   1   2   3   4   5   6   7   8   9  10  11  12




     Je ziet hier dat de eerste vijf pakketjes sneller binnenkomen dan
     één per seconde en ook doorgelaten worden. Dan pas begint de grens
     te gelden.  De volgende pakketjes zullen dus slechts met één
     pakketje per seconde doorgelaten worden. Na de pauze kunnen er weer
     meer pakketjes doorgelaten worden, totdat de grens weer gaat
     gelden.

     owner
        Deze module zorgt dat je de eigenaar van het pakketje kan laten
        meetellen in een regel. Het werkt alleen in de OUTPUT reeks, en
        sommige pakketjes hebben geen eigenaar.


        --uid-owner userid
           Geldt als het pakketje gemaakt werd door deze gebruiker.
        --gid-owner groupid
           Geldt als het pakketje gemaakt werd door een gebruiker in
           deze groep.

        --pid-owner processid
           Geldt als het pakketje gemaakt werd door dit programma.

        --sid-owner sessionid
           Geldt als het pakketje gemaakt werd door een programma in een
           sessie groep.

     unclean
        Deze module kijkt of de pakketjes wel geldig zijn en verschaft
        geen extra opties. Het zou niet gebruikt moeten worden om de
        veiligheid van een computer te verhogen.

  7.3.6.5.  De `state' uitbreiding

  De 'state' uitbreiding stelt je in staat om regels te maken op basis
  van wat van een pakketje bekend is in verband met connectie tracking.
  Connectie tracking wordt gerealiseerd door de `ip_conntrack' module.
  Deze uitbreiding is makkelijk als je wilt weten of een pakketje deel
  uitmaakt van een bestaande connectie of niet. Het wordt aangeraden
  deze optie te gebruiken, zodat je geen pakketjes doorlaat die een
  ander doel hebben dan een connectie te openen.

  Je gebruikt deze uitbreiding met de optie `-m state' en het levert een
  extra `--state' optie, die gevolgd wordt door een reeks toestanden
  (states) van de pakketjes, gescheiden door komma's. De toestanden die
  beschikbaar zijn:


     NEW
        Dit pakketje maakt een nieuwe verbinding.

     ESTABLISHED
        Dit pakketje behoort tot een bestaande verbinding (d.w.z. een
        antwoord-pakketje, of een pakketje op een connectie waar al
        verkeer is geweest).

     RELATED
        Een pakketje wat te maken heeft, maar niet deel uitmaakt van een
        bestaande connectie. Zulke pakketjes zijn ICMP error pakketjes
        of pakketjes deel uitmakend van een FTP connectie.

     INVALID
        Van dit pakketje kon niet uitgemaakt worden waar het bij hoort.
        Dit kan voorkomen als je geen vrij geheugen meer hebt of als je
        ICMP error pakketjes krijgt die niets te maken hebben met een
        bestaande connectie. Zulke pakketjes kunnen normaal gesproken
        tegen gehouden worden.

  7.4.  Doel specificaties

  Nu we weten hoe we een pakketje kunnen specificeren, kunnen we iets
  doen met zo'n pakketje. Wat er moet gebeuren met een pakketje, heet
  het doel (target).

  Er zijn twee simpele doelen al ingebouwd: DROP en ACCEPT. Met DROP
  wordt het pakketje tegengehouden. Met ACCEPT wordt het pakketje gewoon
  doorgelaten. Als een pakketje een doel heeft bereikt (DROP, ACCEPT of
  een ander doel) doorloopt het de resterende regels niet meer maar
  wordt het doel gelijk afgehandeld.

  Er zijn twee soorten doelen behalve de bovenstaande: uitbreidingen en
  gebruikersreeksen.
  7.4.1.  Gebruikersreeksen

  Een van de kenmerken waar iptables zijn kracht vandaan haalt is dat
  het de gebruiker in staat stelt om zijn eigen reeksen te maken.
  Behalve de ingebouwde reeksen (INPUT, FORWARD en OUTPUT) kan je dus
  nog meer reeksen maken, die naar elkaar kunnen verwijzen en die ook
  weer regels bevatten.  Meestal zijn de namen van gebruikersreeksen in
  kleine letters, om ze te kunnen onderscheiden van de ingebouwde
  regels.

  Als een pakketje overeenkomt met een bepaalde regel en die regel
  verwijst naar een andere reeks, dan wordt die reeks doorlopen. Bepaald
  die reeks niet wat er met het pakketje gebeuren moet, dan wordt de
  volgende regel in de vorige reeks uitgevoerd.

  In de mooie ASCII art tekening zie je twee reeksen: INPUT en test.



                `INPUT'                         `test'
               -----------------------------   ----------------------------
               | Regel1: -p ICMP -j DROP   |   | Regel1: -s 192.168.1.1    |
               |---------------------------|   |---------------------------|
               | Regel2: -p TCP -j test    |   | Regel2: -d 192.168.1.1    |
               |---------------------------|   -----------------------------
               | Regel3: -p UDP -j DROP    |
               -----------------------------




  Zoals je ziet verwijst regel 2 naar de reeks `test'. Stel dat er nu
  een pakketje binnenkomt vanaf 192.168.1.1, dat gaat naar 1.2.3.4. Het
  komt binnen in de INPUT reeks en er wordt naar de eerste regel
  gekeken. Aangezien dit pakketje geen ICMP pakketje is, wordt de tweede
  regel bekeken. Deze geldt wel voor dit pakketje, dus wordt het doel
  uitgevoerd: reeks test wordt uitgevoerd op dit pakketje. Regel 1 geldt
  voor dit pakketje, maar er is hier geen doel opgegeven. Er gebeurt dus
  niets met dit pakketje. Regel 2 geldt niet en we zijn aan het einde
  van deze reeks.  Er wordt meer verder gegaan bij regel 3 van de INPUT
  reeks.

  De weg van het pakketje is dus als volgt:


                                        v    __________________________
                `INPUT'                 |   /    `test'                v
               -------------------------|--/   ------------------------|----
               | Regel1                 | /|   | Regel1                |   |
               |------------------------|/-|   |-----------------------|---|
               | Regel2                 /  |   | Regel2                |   |
               |---------------------------|   ------------------------v----
               | Regel3                 /--+___________________________/
               -------------------------|---
                                        v





  Gebruikersreeksen kunnen verwijzen naar andere gebruikersreeksen. Als
  je echter heen en weer verwijst kan het voorkomen dat je pakketjes in
  een lus komen. Dit vergt veel processortijd en je pakketjes worden
  tegengehouden.


  7.4.2.  Uitbreidingen: Nieuwe doelen

  Met uitbreidingen kan je nieuwe doelen opgeven. Een doel-uitbreiding
  bestaat uit een kernel module en eventueel een iptables uitbreiding.
  De volgende uitbreidingen zijn beschikbaar bij netfilter:


     LOG
        Met deze uitbreiding kan je pakketjes loggen in je syslog. Het
        biedt de volgende opties:

        --log-level
           wordt gevolgd door een nummer of een naam, zoals `debug',
           `info', `notice', `warning', `err', `crit', `alert' of
           `emerg'.  Deze namen komen overeen met de nummers 7 tot en
           met 0.  De handleiding van syslog.conf geeft aan wat deze
           namen betekenen.

        --log-prefix
           wordt gevolgd door een regel van maximaal 29 letters.  Deze
           regel komt vóór de eigenlijke boodschap in het logbestand,
           zodat je de boodschap makkelijk kan terugvinden.

        Het wordt aangeraden om de limit-uitbreiding te gebruiken in
        combinatie met deze module, zodat je niet je log (en misschien
        je harde schijf) vol zet als je opeens veel pakketjes krijgt.

     REJECT
        Deze module werkt hetzelfde als `DROP', alleen wordt de afzender
        op de hoogte gesteld dat het pakketje is tegengehouden door
        middel van een `port unreachable' (onbereikbaar) ICMP pakketje.
        Zo'n pakketje wordt niet verzonden als


     ·  Het pakketje wat gefilterd werd een ICMP error pakketje was, of
        een onbekend ICMP pakketje.

     ·  Het pakketje een fragment was.

     ·  Er al te veel ICMP error pakketjes zijn verzonden.

        REJECT heeft ook een extra optie `--reject-with' waarmee je kan
        bepalen welk pakketje teruggestuurd moet worden. Zie de
        handleiding voor meer informatie hierover.

  7.4.3.  Speciale ingebouwde doelen

  Er zijn twee ingebouwde doelen die een speciale functie hebben: RETURN
  en QUEUE.

  RETURN beeindigd een gebruikersreeks. Het heeft hetzelfde effect als
  aan het einde van de reeks komen, namelijk dat naar de oorspronkelijke
  reeks wordt teruggekeerd en dat de volgende regel uitgevoerd wordt.
  Als dit in een ingebouwde reeks wordt gebruikt, wordt het beleid van
  die reeks uitgevoerd op het pakketje.

  QUEUE bewaart het pakketje om later door een programma verwerkt te
  worden. Dit is alleen nuttig als:

  is a special target, which queues the packet for userspace processing.
  For this to be useful, two further components are required:


  ·  er een "queue handler" (afhandelaar) is, die het pakketje van de
     kernel aanpakt.

  ·  er een programma is wat iets met het pakketje doet.

     De queue-handler voor IPv4 is de ip_queue kernel module, die nog
     experimenteel is.

  Als er geen programma is wat op de pakketjes wacht, dan worden ze
  tegengehouden. Om zo'n programma te schrijven kan je de libipq API
  gebruiken. Het bestand /proc/net/ip_queue geeft de status van ip_queue
  aan en het bestand /proc/sys/net/ipv4/ip_queue_maxlen geeft de
  maximale lengte van de queue (normaal 1024).

  7.5.  Reeksen onderhouden

  Als je veel regels hebt kan het wel eens een chaos worden als je ze
  allemaal in één reeks zet. Daarom is het handig om zelf reeksen te
  maken. Je kan je eigen reeksen noemen zoals je wilt, maar aangeraden
  wordt kleine letters te gebruiken om ze te kunnen onderscheiden van
  ingebouwde reeksen, die namen in hoofdletters hebben. De namen van
  reeksen kunnen niet langer zijn dan 31 letters.

  7.5.1.  Een nieuwe reeks maken

  Hier volgt een voorbeeld van hoe je een reeks kan maken met een hele
  originele naam: test:



       # iptables -N test
       #




  Dat is alles. Nu heb je een reeks zonder regels erin, die test heet.

  7.5.2.  Een reeks verwijderen

  Een reeks verwijderen is ook simpel, maar kan alleen als de reeks
  helemaal geen regels meer bevat. Er moeten ook geen verwijzingen meer
  zijn naar de reeks die je wilt verwijderen. Je verwijdert een regel
  met `-X' of `--delete-chain':



       # iptables -X test
       #




  Als je de naam van de reeks weg laat, worden alle gebruikersreeksen
  verwijdert.

  7.5.3.  Een reeks leeg maken

  Er is een simpele manier om alle regels uit een reeks te verwijderen,
  namelijk met de `-F' of `--flush' optie:



       # iptables -F FORWARD
       #




  Als je geen reeks opgeeft, worden alle reeksen leeg gemaakt.

  7.5.4.  De regels in een reeks bekijken

  Om alle regels in een reeks te bekijken gebruik je de `-L' optie, of
  de `--list' optie.

  Bij gebruikersreeksen zie je een `refcnt' staan. Dit is het aantal
  verwijzingen naar deze reeks. Dit moet nul zijn voordat de reeks kan
  worden verwijdert.

  Je kan nog drie extra opties gebruiken naast `-L'. Met de `-n' optie
  kan je zorgen dat IP adressen niet omgezet worden naar domeinnamen.
  Dit is nuttig als je DNS niet goed werkt. Het opzoeken van namen zorgt
  dan namelijk voor grote vertragingen. Poorten worden ook weergegeven
  als nummers (`80') in plaats van namen (`www').

  Met de `-v' optie krijg je alle pikante details te zien, zoals de
  interfaces en pakket tellers.

  De pakket en byte tellers gebruiken achtervoegsels zoals `K' (kilo) en
  `M' (mega) voor 1.000 en 1.000.000. Gebruik de `-x' optie als je de
  hele cijfers wilt weten, zonder achtervoegsels.

  7.5.5.  Tellers op nul zetten

  Je kan een teller op nul zetten met de `-Z' of `--zero' optie.

  Als je het volgende doet:



       # iptables -L FORWARD
       # iptables -Z FORWARD
       #




  Kunnen er nog pakketjes doorkomen in de tijd dat je het tweede
  commando aan het typen bent. Om dit te voorkomen kan je de `-L' en
  `-Z' opties tegelijk gebruiken, om de tellers tegelijk te lezen en op
  nul te zetten.

  7.5.6.  Het beleid instellen

  Als een pakketje aan het einde van een reeks komt, wordt het beleid
  uitgevoerd.  Alleen ingebouwde reeksen (INPUT, OUTPUT en FORWARD)
  hebben een beleid.

  Het beleid kan ACCEPT (doorlaten) of DROP (tegenhouden) zijn.



       # iptables -P FORWARD DROP
       #




  Dit voorbeeld stelt het beleid van de reeks FORWARD in op DROP.

  8.  Ipchains of ipfwadm gebruiken

  Twee modules, ipchains.o en ipfwadm.o, stellen je in staat om je oude
  firewall regels te gebruiken. Laad één van deze twee als module in je
  kernel en je kan gewoon ipchains of ipfwadm gebruiken.

  Je kan slechts één van de drie modules laden die uitmaken welke regels
  je gebruikt: ipfwadm.o, ipchains.o of iptables.o. Laad er niet meer
  dan één.

  Ipfwadm en ipchains worden natuurlijk niet eeuwig ondersteund. Er komt
  een tijd dat je iptables wel moet gebruiken. Volgens Rusty hoef je je
  geen zorgen te maken tot 2004 als je ipfwadm of ipchains gebruikt.

  9.  NAT en een pakket filter tegelijk gebruiken

  NAT staat voor Network Address Translation en het stelt je in staat om
  pakketjes een ander doel of bestemming te geven. Meer details hierover
  vind je in de NAT HOWTO. Je kan NAT en een pakket filter goed
  combineren.

  Als je een pakket filter opzet, kan je gewoon je NAT negeren: de
  bestemming van je regel is de `echte' bestemming en wordt niet
  beïnvloed door NAT.  Als je bijvoorbeeld je NAT zo hebt ingesteld dat
  pakketjes die naar 1.2.3.4 poort 80 gaan, naar 10.1.1.1 poort 8080
  gestuurd worden, ziet je pakket filter de pakketjes naar 10.1.1.1
  poort 8080 gaan en niet naar 1.2.3.4.  De pakketjes gaan tenslotte
  niet naar 1.2.3.4, dus heeft het ook geen zin hier regels voor te
  maken.

  Bij masquerading (SNAT) komen de pakketjes dus van hun interne
  netwerkadres (192.168.1.1) en gaan naar een extern adres
  (www.linux.org).  Ingaande pakketjes worden eerst omgeschreven, dan
  gefilterd, uitgaande pakketjes worden eerst gefilterd, dan
  omgeschreven.

  Je kan de `state' uitbreiding gebruiken zonder dat het extra moeite
  kost voor het pakket filter, want die moet het toch al bijhouden om
  NAT te kunnen doen. Om inkomende connecties tegen te houden en
  masquerading te gebruiken kan je het volgende doen (dit staat ook
  deels in de NAT howto):



       # Masquerade uitgaand ppp0
       iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

       # Houd NEW en INVALID inkomende of doorgestuurde connecties tegen.
       iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP
       iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j DROP

       # IP forwarding aanzetten
       echo 1 > /proc/sys/net/ipv4/ip_forward




  10.  Verschillen tussen ipchains en iptables


  ·  De namen van de ingebouwde reeksen hebben nu namen in hoofdletters.
     Ze heten dus geen `input', `forward' en `output' meer maar `INPUT',
     `FORWARD' en `OUTPUT'. De INPUT en OUTPUT reeksen krijgen
     respectievelijk alleen pakketjes die voor deze computer bedoeld
     zijn of die door deze computer gemaakt zijn. Bij ipchains kwam al
     het verkeer door deze reeksen.

  ·  De `-i' optie betekent nu de interface van het inkomende verkeer,
     en werkt alleen in de INPUT en FORWARD reeksen. Sommige regels in
     de FORWARD reeks en alle regels in de OUTPUT reeks moeten aangepast
     worden: `-i' moet vervangen worden door `-o', de optie voor de
     uitgaande interface.

  ·  De TCP en UDP opties om een poort te specificeren zijn nu --source-
     port of --sport (of --destination-port/--dport) en deze moeten na
     `-p tcp' of `-p udp' komen, omdat deze opties de TCP en UDP
     uitbreidingen laden.

  ·  De TCP `-y' optie is veranderd naar `--syn' en moet na `-p tcp'
     komen.

  ·  Het DENY doel is veranderd naar DROP.

  ·  Je kan reeksen leegmaken terwijl je de informatie ervan bekijkt.

  ·  Het leegmaken van ingebouwde reeksen leegt nu ook de
     beleidstellers.

  ·  FIXME: Listing chains gives you the counters as an atomic snapshot.

  ·  REJECT en LOG zijn nu uitbreidingen, wat betekent dat ze apart
     geladen moeten worden.

  ·  Reeksen kunnen namen hebben tot 31 tekens.

  ·  MASQ is veranderd in MASQUERADE en werkt ook anders. REDIRECT heeft
     dezelfde naam gehouden maar werkt ook anders. Meer informatie
     hierover kan je vinden in de NAT HOWTO.

  ·  De `-o' optie betekent nu de uitgaande interface in plaats van
     pakketjes naar `userspace' te sturen. Pakketjes worden nu naar
     `userspace' gestuurd via het QUEUE doel.

  ·  Duizenden dingen meer.

  11.  Pakket filter advies

  Het is vaak een goed idee voor maximale veiligheid om alles tegen te
  houden, en dan selectief sommige dingen door te laten. Iets onbekends
  wordt dan tegengehouden.

  Draai geen daemons, servers en services als je ze niet nodig hebt,
  zelfs als je denkt dat je ze geblockt hebt.

  Het kan geen kwaad veilige dingen te combineren. Je kan beter te veel
  veiligheid hebben dan te weinig. Gebruik tcp-wrappers, proxies, route
  verificatie en een pakket filter. Route verificatie is pakketjes
  blokken die een IP hebben op een verkeerde interface. Als je interne
  netwerk addressen heeft als 10.1.1.1 en er komt een pakketje vanaf IP
  10.1.1.2 in je computer via je externe interface, kan je hem beter
  tegenhouden. Doe je dat niet, dan denkt je computer dat het een
  pakketje van je netwerk is, dus van mensen die vertrouwd kunnen
  worden. Dit kan als volgt ingesteld worden:



       # echo 1 > /proc/sys/net/ipv4/conf/ppp0/rp_filter
       #




  Of voor alle interfaces:



  # for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
  #     echo 1 > $f
  # done
  #




  Debian doet dit standaard al, maar bij sommige routers moet dit
  uitgezet worden omdat ze pakketjes uit rare richtingen horen te
  krijgen.

  Logging is nuttig om meer informatie te krijgen, maar als je firewall
  hevig gebruikt wordt kan je log wel eens overvol raken. Dit kan zelfs
  resulteren tot een DoS situatie. Om dit te voorkomen kan je `limit'
  gebruiken, zie hierboven.

  Rusty raad dringend aan om connectie tracking in te stellen. Het maakt
  de boel iets langzamer, maar het is erg nuttig om de toegang tot je
  netwerk te bepalen. Als je connectie tracking niet hebt ingebouwd moet
  je de module `ip_conntrack.o' laden. Als je ingewikkelde protocolen
  wilt tracken, dan moet je hulp modules laden, zoals
  `ip_conntrack_ftp.o'. Hier een voorbeeldje van wat je kan doen met
  connectie tracking:




       # iptables -N no-conns-from-ppp0
       # iptables -A no-conns-from-ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
       # iptables -A no-conns-from-ppp0 -m state --state NEW -i ! ppp0 -j ACCEPT
       # iptables -A no-conns-from-ppp0 -i ppp0 -m limit -j LOG --log-prefix "Bad packet from ppp0:"
       # iptables -A no-conns-from-ppp0 -i ! ppp0 -m limit -j LOG --log-prefix "Bad packet not from ppp0:"
       # iptables -A no-conns-from-ppp0 -j DROP

       # iptables -A INPUT -j no-conns-from-ppp0
       # iptables -A FORWARD -j no-conns-from-ppp0




  Een goede firewall bouwen is niet het onderwerp van deze HOWTO. Zie
  daarvoor de Security HOWTO. Een goede tip is altijd zo min mogelijk
  door te laten.