iptables nota's 2020 vdo (dagdeel 2)
- 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.
- 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 utilitynmap
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.
- 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).
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
- FW102
Onze Firewall is een ubuntu 16.04.
Kijk na of de softwareopenssh-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 netwerkkaartenp0s3
, BRIDGED in netwerk BUITEN.
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.
- 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.
We ontdekken deze kaart met het commandolshw
:$ 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 adres10.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)
- 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 inDMZ
met een statisch ip-adres.
We noemen die machinemint19-MMdmz
.
- mint19-MMdmz
We clonen in VBOX een linuxMint19. Deze machine krijgt de volgende netwerkconfig in VBOX:
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 ...
- Firewall wordt NAT-router
We plaatsen op onze firewall in de directory/etc/iptables
het scriptnat-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 machineMINT19-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
- DNS werkt niet op mint19-MMdmz
Als we op de machine mint19-MMdmz pingen op domeinnaam naar het internet werkt dit niet:
Als we metdig
kijken wie onze DNS server is, krijgen we het adres127.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 utilitiesnetwork-manager
/avahi daemon
die op hun beurt samenwerken metdnsmasq
.
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