home       inleiding       sysadmin       services       links       bash       werk       nothing      

iptables basics

 
iptables is een commando dat in de kernel netwerkfilters inbouwt.
bij elke iptables commando wordt een extra filter toegevoegd,
of eventueel een volledig geheel van filters ge-cleared.
 
iptables is een stateful packet-filter/-mangler
Stateful betekent dat van de pakketten wordt nagekeken of ze tot een reeds geopende of nieuwe sessie behoren.
Filteren betekent tegenhouden of doorlaten afhankelijk van bepaalde regels.
Mangling betekent het aanpassen van (IP/TCP/UDP) headers afhankelijk van weer andere regels.
  
De kernel doet het eigenlijke filteren en het commando iptables voegt regeltjes toe aan de firewall.
 
Commando's achter mekaar zetten doen we in een script.
Dat zetten we best op een goede plaats, met een herkenbare naam.
 

  1. ORGANISEER je iptables -script
     

    • maak een directory /etc/iptables
    • plaats hierin een bestand met als naam iptables-v.xyz.sh
      v.xyz staat voor een versie, xyz kan een datum zijn
      .sh staat als suffix voor shell script
       

    We beginnen als volgt:

    #! /bin/bash
    #
    #  iptables-script 
    #  bvdb  ( 01/11/2017 )
    ######################################################
    #
    #  here follows the script ....

    Sla dit op als /etc/iptables/iptables.v000.sh
    Voer vervolgens een chmod +x uit
    Test of je script uitvoerbaar is.
     

  2. CLEAR iptables
     
    Een iptables-script moet steeds beginnen met een clear van de firewall. Dit om vorige configuraties op nul te zetten. Er zijn 5 verschillende items die moeten worden gereset. De volgende source maakt één en ander snel duidelijk:
    #! /bin/bash
    #
    #  iptables-script 
    #  bvdb  ( 02/11/2017 )
    ######################################################
    #
    # v = verbose, X = flush tables, F = delete non standard chains
     
    # general
    iptables -vX
    iptables -vF
     
    # nat and masquerading -t refers to table
    iptables -vt nat -F
    iptables -vt nat -X
     
    # mangling TCP header
    iptables -vt mangle -F
    iptables -vt mangle -X
     
    # reset policies -P refers to policies
    iptables -vP INPUT ACCEPT
    iptables -vP OUTPUT ACCEPT
    iptables -vP FORWARD ACCEPT
     
    # turn off routing
    echo 0 > /proc/sys/net/ipv4/ip_forward

     
    Maak een kopie van je eerste script en pas de versie aan:
    $ sudo cp iptables.v000.sh iptables-clear.v001.sh
     
    Voeg daarna de juiste elementen toe zoals hierboven.
     
    Sla op, en Test je script, en vergewis u er van dat je vanaf je machine nog steeds kan doen wat je voordien ook al kon. (bijvoorbeeld een apt-get update)
     

  3. iptables status op scherm brengen
     
    Voeg de volgende iptables commandos toe aan het einde van je script.
    Je kan er ook een apart script van maken om gewoon je iptables-status op scherm te brengen.
    ### PRINT iptables configuration
    ###
    #
    echo ">>>>> iptables -n -L"
    iptables -n -L
    echo "--------------"
    echo ">>>>> iptables -S"
    iptables -S 
    echo "--------------"
    echo ">>>>> iptables -t nat -L"
    iptables -t nat -L
    echo "--------------"
    echo ">>>>> iptables -t mangle -L"
    iptables -t mangle -L
    echo "--------------"
    echo "routing set: " `cat /proc/sys/net/ipv4/ip_forward`
    echo "=============="

    Selecteer wat je nodig hebt, en maak tot comments met # wat je niet wil zien ...
     
    uit de man pagina's:
     
    -L --list [chain]
    List all rules in the selected chain. If no chain is selected, all chains are listed. Like every other iptables command, it applies to the specified table (filter is the default), so NAT rules get listed by iptables -t nat -n -L
     
    -S --list-rules [chain]
    Print all rules in the selected chain. If no chain is selected, all chains are printed like iptables-save. Like every other iptables command, it applies to the specified table (filter is the default).
     
    uit de appendix E van de Red Hat docs:
    https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/ch-proc
     
    Typing cat /proc/sys/net/ipv4/ip_forward returns either a 0 (off or false) or a 1 (on or true).
    A 0 indicates that the kernel is not forwarding network packets.
    To turn packet forwarding on, run echo 1 > /proc/sys/net/ipv4/ip_forward