home       inleiding       sysadmin       services       links       bash       werk       nothing      

iptables nota's 2020 vdo (dagdeel 2)

fwnatdmz-v003
  1. algemene setup
     
    in eerste instantie werken we met 2 netwerken:
    • een netwerk met internet toegang waaraan we onze firewall koppelen; we noemen dit netwerk BUITEN. Om dit netwerk te bereiken gebruiken we in virtualbox netwerkkaarten op BRIDGED.
    • een afgesloten netwerk, dat alleen het internet op kan via onze firewall; we noemen dit netwerk DMZ. Later wordt duidelijk waarom. DMZ is een zelf gedefinieerd "intnet" in VBOX.
       
  2. BUITEN
     
    Het netwerk BUITEN kan niet gedefinieerd worden a.d.h.v. een door mij opgegeven netwerkadres. Elke online-student bereikt het internet op een andere manier. Als je je laptop verbindt met dat netwerk, heb je internet. Als je dan kijkt naar je internet settings heb je een netwerkadres dat werkt voor jou, met NET-ID/MASK + Gateway en DNS.
     
    Dit betekent dat je je eigen netwerk goed moet kennen: je moet fundamenten weten als NETid en Netmask, en default gateway a.d.h.v. de ip-configuratie van je laptop die op dat netwerk is aangesloten (liefst via een kabel, maar dit is niet noodzakelijk).
    Zoek daarna in je eigen netwerk de DHCP range(s) op. Dat doe je meestal op de router van je provider, maar misschien staat er nog een wireless access point tussen met een DHCP range?
    Je kan beter ook alle bestaande vaste ip-adressen met de utility nmap opzoeken.
    De in VBOX geconfigureerde virtuele netwerkkaarten verbonden met BUITEN, staan alle in BRIDGED.
     
    In mijn voorbeeld is BUITEN: 192.168.0.0/24 / GW 192.168.0.11 / DNS 8.8.8.8 -- telkens als je deze adressen tegenkomt in onze uitleg, vervang je die in je hoofd en op je virtuals door correcte adressen in je eigen netwerk.
     
  3. mint-19-MM1-buiten
     
    We gebruiken een linux mint virtuele machine in het netwerk BUITEN. Deze machine heeft een netwerkkaart in BRIDGED, en staat in DHCP. Via deze machine (of met de windows op je laptop) kunnen we straks communiceren via ssh met de Firewall FW102 (als deze zijn netwerkconfig in orde is).
     
    mm1-buiten-net

     
    We houden de config van onze MINT19-MM1 ongewijzigd;
     
    ik kijk vervolgens even naar mijn ip-configuratie:

    user@mint19-MM1-buiten:~$ ifconfig
    enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.76  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::182d:6c09:fbe4:dfc  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:fd:1a:01  txqueuelen 1000  (Ethernet)
        RX packets 70  bytes 7122 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 98  bytes 10231 (10.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
     
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 72  bytes 7090 (7.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72  bytes 7090 (7.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

     
    inet 192.168.0.76 netmask 255.255.255.0
    betekent dat de MINT19-MM1 in het netwerk 192.168.0.0/24 zit.
     

    user@mint19-MM1-buiten:~$ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.0.1    0.0.0.0         UG    100    0        0 enp0s3
    169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s3
    192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3

    0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp0s3
    betekent dat onze MINT19-MM1 een default gateway 192.168.0.1 heeft.
     

    user@mint19-MM1-buiten:~$ nmcli dev show | grep DNS
    IP4.DNS[1]:                             8.8.8.8
    IP4.DNS[2]:                             8.8.4.4

    bovenstaand commando toont ons de gebruikte DNS door MINT19-MM1
     

  4. FW102
     
    Onze Firewall is een ubuntu 16.04.
    Kijk na of de software openssh-server is geinstalleerd.
     
    $ sudo apt install openssh-server
    [sudo] password for user: 
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    openssh-server is already the newest version (1:7.2p2-4ubuntu2.8).
    0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

     
    De firewall FW102 heef een eerste netwerkkaart enp0s3, BRIDGED in netwerk BUITEN.
     

    fw102-net1

     
    We geven deze eerste netkaart een CORRECT statisch adres dat niet overlapt met bestaande DHCP-ranges en andere machines (nmap scan).
     

    $ cat /etc/network/interfaces
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
     
    source /etc/network/interfaces.d/*
     
    # The loopback network interface
    auto lo
    iface lo inet loopback
     
    # The BUITEN interface 192.168.0.102 #
    auto enp0s3
    iface enp0s3 inet static
    address 192.168.0.102
    netmask 24
    gateway 192.168.0.1
    dns-nameservers 8.8.8.8

     
    hierna moeten we uitgebreid testen of onze firewall nog steeds het internet op kan en of je de MINT-19-MM1 kunt bereiken.
     

    $ ping dns.google
    PING dns.google (8.8.4.4) 56(84) bytes of data.
    64 bytes from dns.google (8.8.4.4): icmp_seq=1 ttl=54 time=16.0 ms
    64 bytes from dns.google (8.8.4.4): icmp_seq=2 ttl=54 time=14.4 ms
    $ ping 192.168.0.76
    PING 192.168.0.76 (192.168.0.76) 56(84) bytes of data.
    64 bytes from 192.168.0.76: icmp_seq=1 ttl=64 time=0.373 ms
    64 bytes from 192.168.0.76: icmp_seq=2 ttl=64 time=0.952 ms

    Als je de MINT19-MM1 kan bereiken kun je vanaf de MINT-MM1 proberen de firewall te pingen.

    user@mint19-MM1-buiten:~$ ping 192.168.0.102
    PING 192.168.0.102 (192.168.0.102) 56(84) bytes of data.
    64 bytes from 192.168.0.102: icmp_seq=1 ttl=64 time=0.485 ms
    64 bytes from 192.168.0.102: icmp_seq=2 ttl=64 time=1.03 ms

    En als dat werkt kun je proberen de firewall te bereiken met SSH.
     

    $ ssh user@192.168.0.102                                               
    user@192.168.0.102's password: 
    Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-177-generic x86_64)

    We kunnen nu blijven werken met ssh op de firewall; dat is makkelijker want nu werkt copy paste.
     

  5. Netwerkkaart in Firewall voor DMZ-netwerk
     
    We plaatsen vervolgens als alles werkt en we via ssh vanaf onze linuxmint MM1 kunnen communiceren met de FW102, een tweede netwerkkaart op VBOX INTNET genaamd DMZ in deze machine.
     
    fw102-net2

     
    We ontdekken deze kaart met het commando lshw:

    $ sudo lshw -short
     
    H/W path        Device      Class      Description
    ==================================================
    system     VirtualBox
    /0                          bus        VirtualBox
    /0/0                        memory     128KiB BIOS
    /0/1                        memory     488MiB System memory
    /0/2                        processor  Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
    /0/100/2                    display    SVGA II Adapter
    ...
    /0/100/3        enp0s3      network    82540EM Gigabit Ethernet Controller
    ...
    /0/100/7                    bridge     82371AB/EB/MB PIIX4 ACPI
    ...
    /0/100/8        enp0s8      network    82540EM Gigabit Ethernet Controller
    ...
    /0/100/d                    storage    82801HM/HEM (ICH8M/ICH8M-E) SATA Controll
    ...

    in dit geval heet de netwerkkaart enp0s8. We plaatsen deze netkaart op adres 10.0.0.102
     
    we krijgen dan volgende netwerkconfiguratie:
     
    /etc/network/interfaces

    # The loopback network interface
    auto lo
    iface lo inet loopback
     
    # The BUITEN interface 192.168.0.102 #
    ### Deze interface heeft bij u waarschijnlijk een ander ip-adres ###
    auto enp0s3
    iface enp0s3 inet static
    address 192.168.0.102
    netmask 24
    gateway 192.168.0.11
    dns-nameservers 8.8.8.8
     
    # The DMZ interface 10.0.0.102 # 
    auto enp0s8
    iface enp0s8 inet static
    address 10.0.0.102
    netmask 24

    We zijn momenteel de eersten in een nog leeg netwerk (DMZ) dus we kunnen de netconfig alleen maar bekijken met ifconfig ...

    user@ubu165-FW102:~$ ifconfig
    enp0s3    Link encap:Ethernet  HWaddr 08:00:27:48:33:01  
          inet addr:192.168.0.102  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe48:3301/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2279 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1077 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2553271 (2.5 MB)  TX bytes:98974 (98.9 KB)
     
    enp0s8    Link encap:Ethernet  HWaddr 08:00:27:d5:cf:02  
          inet addr:10.0.0.102  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed5:cf02/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:648 (648.0 B)
     
    lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:11840 (11.8 KB)  TX bytes:11840 (11.8 KB)
  6. netwerk DMZ
     
    Op onze tekening is te zien dat DMZ een netwerk is, 10.0.0.0/24, momenteel geisoleerd van de buitenwereld en het internet.
    Het is een zogenaamd intern netwerk.
     
    Het is straks de bedoeling, onze firewall in te schakelen als NAT router voor het DMZ-netwerk. Om dit te testen voegen we een linux mint machine toe in DMZ met een statisch ip-adres.
    We noemen die machine mint19-MMdmz.
     
  7. mint19-MMdmz
     
    We clonen in VBOX een linuxMint19. Deze machine krijgt de volgende netwerkconfig in VBOX:
    mmdmz-net

     
    Zodra deze machine is opgestart geven we deze een statisch ip-adres:
     

    $ cat /etc/network/interfaces
    # interfaces(5) file used by ifup(8) and ifdown(8)
    auto lo
    iface lo inet loopback
     
    auto enp0s3
    iface enp0s3 inet static
    address 10.0.0.95
    netmask 24
    gateway 10.0.0.102
    dns-nameservers 8.8.8.8

    na heropstart van het netwerk moeten we de DMZ-kant van de firewall kunnen pingen:

    $ ping 10.0.0.102
    PING 10.0.0.102 (10.0.0.102) 56(84) bytes of data.
    64 bytes from 10.0.0.102: icmp_seq=1 ttl=64 time=1.00 ms
    64 bytes from 10.0.0.102: icmp_seq=2 ttl=64 time=1.08

    We kunnen echter nog niet het internet op ...

    $ ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
     
     

    ... er gebeurt niets ...
     

  8. Firewall wordt NAT-router
     
    We plaatsen op onze firewall in de directory /etc/iptables het script nat-iptables.v003.sh
     
    Dat ziet er als volgt uit:
     
    #! /bin/bash
    #
    #  iptables-script 
    #  bvdb  ( 24/04/2020 ) (v002)
    ######################################################
    #
    #  here follows the script ....1
    # 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
     
    ###################### iptables is nu cleared ####
     
    # turn on routing
    echo 1 > /proc/sys/net/ipv4/ip_forward
     
    ###### Dit is heel belangrijk in je script -- 
    ###### dan zie je wat je aan het doen bent:
    #
    ##>> my network interfaces: enp0s3 = 192.168.0.102/24 >> buiten
    ##>> my network interfaces: enp0s8 = 10.0.0.102/24 >> DMZ (binnen)
      
    ### implement NAT routing
    #
    ## NAT routing - enp0s3 is buiten en een unprotected network
    #  het ip address aan de buitenkant van onze firewall is 192.168.0.102 (outside address)
    #
    iptables -vt nat -A POSTROUTING -o enp0s3 -j SNAT --to 192.168.0.102
     
    ###################### iptables is nu ingesteld ####
     
    ### 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 "=============="

    en we voeren dit vervolgens uit:
     
    $ sudo ./nat-iptables.v003.sh
     
    (met heel veel output ...)
     
     
    en nu kunnen we op de machine MINT19-MMdmz pingen naar het internet ....

    bert@mint19-MMdmz:~$ ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=15 ttl=53 time=22.4 ms
    64 bytes from 8.8.8.8: icmp_seq=16 ttl=53 time=21.8 ms
    64 bytes from 8.8.8.8: icmp_seq=17 ttl=53 time=18.8 ms
    64 bytes from 8.8.8.8: icmp_seq=18 ttl=53 time=19.9 ms
    ^C

     

  9. DNS werkt niet op mint19-MMdmz
     
    Als we op de machine mint19-MMdmz pingen op domeinnaam naar het internet werkt dit niet:
     
    Als we met dig kijken wie onze DNS server is, krijgen we het adres 127.0.0.53 te zien:
     
    $ dig
     
    ; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>>
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30137
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1
     
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 65494
    ;; QUESTION SECTION:
    ;.              IN  NS
     
    ;; ANSWER SECTION:
    .           4955    IN  NS  h.root-servers.net.
    .           4955    IN  NS  f.root-servers.net.
    .           4955    IN  NS  g.root-servers.net.
    ...
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.53#53(127.0.0.53)
    ;; WHEN: Mon Apr 27 13:54:47 CEST 2020
    ;; MSG SIZE  rcvd: 239

     
    dig krijgt zijn dns-server van de utilities network-manager/avahi daemon die op hun beurt samenwerken met dnsmasq.
     
    We verwijderen deze pakketten:
     
    sudo apt purge network-manager
    sudo apt purge dnsmasq
    sudo apt purge avahi-daemon
     
    Vervolgens passen we handmatig de configuratie van de file /etc/resolv.conf aan.
    Momenteel vewijst die als symbolic link naar ../run/systemd/resolve/stub-resolv.conf
    We bewaren de originele link met de volgende move:
     
    sudo mv resolv.conf resolv.conf.old
     
    en vervolgens bouwen we een nieuwe file op met een editor:
     
    sudo vim /etc/resolv.conf

    nameserver 8.8.8.8

    Als we vervolgens pingen baar buiten lukt het wel:
     

    $ ping dns.google
    PING dns.google (8.8.4.4) 56(84) bytes of data.
    64 bytes from dns.google (8.8.4.4): icmp_seq=1 ttl=53 time=15.3 ms
    64 bytes from dns.google (8.8.4.4): icmp_seq=2 ttl=53 time=19.8 ms