centOS7 virtual firewall in een KVM-bak op RUBAX
We willen een virtuele omgeving opzetten adhv 1 publiek ip-adres op de KVM van RUBAIX.
Omdat dit document op een website werd gepubliceerd zijn ip-adressen en hostnames aangepast.
-
de firewall installatie
We installeren eerst een machine die het verkeer van en naar onze virtuele omgeving zal regelen. Die krijgt straks 2 netwerkkaarten, en zal SNAT en DNAT toepassen om verschillende servers ( VPN / Owncloud / ... ) hun werk te laten doen.
Met de software Virtual Machine Manager powered by lib-virt,
plaatsen we een virtuele machine (centos-bert) op RUBAIX.
- 2 logical cpus / copy host cpu config
- 1024MB RAM
- virtio disk 20GB in /vms
- 1 netwerkkaart (om te beginnen) / bridged op publieke netwerkkaart van RUBAIX
- VNC-server met VNC (geen spice) -- password protected -- auto port -- keymap US
- we gebruiken een DVD-iso bestand van 442499072 bytes -- CentOS-7.4-x86_64-NetInstall-1708.iso
We BOOTEN de machine van DVD.iso om te installeren.
Doen een minimal + net-tools installatie ...
.. en configureren het netwerk tijdens de installatie als volgt:
- ip:
151.152.153.154
mask32
krijgen we van de provider - gw: vinden we op RUBAIX met
route -n
:94.95.96.254
- dns:
8.8.8.8
en4.2.2.2
Je kan ook een MAC-address ingeven tijdens de installatie. OVH-routing werkt a.d.h.v. MAC-address dus geven we dit nu al in. (maar we kunnen dit ook gewoon straks aanpassen in de KVM virt manager):
02:00:00:01:02:03
-
centOS first boot
In het begin wil de machine niet opstarten. Er is geen bootmedium gevonden.
We stellen onze virtuele HardDisk in virt-manager in als BOOT -- en vervolgens krijgen we beeld ...
We hebben een keyboard-layout ongevoelig paswoord gekozen. Maar onze BE-layout is QWERTY vreemd. We tikken:
$
sudo loadkeys be
Om vervolgens het netwerk te bekijken metifconfig
(ja we hebben net-tools (zie install))eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 151.152.153.154 netmask 255.255.255.255 broadcast 151.152.153.154 inet6 fe80::ecbd:d8a1:571:c057 prefixlen 64 scopeid 0x20<link> ether 02:00:00:01:02:03 txqueuelen 1000 (Ethernet) RX packets 160245 bytes 114352597 (109.0 MiB) RX errors 0 dropped 160 overruns 0 frame 0 TX packets 57741 bytes 4189572 (3.9 MiB) 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 64 bytes 6952 (6.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 64 bytes 6952 (6.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
IP en MAC blijken correct ...
Maar een ping naar 8.8.8.8 lukt niet: de routing doet het nog niet.
We tikken het volgende in:
$
sudo route add 94.95.96.254 dev eth0
Vervolgens werkt de ping ...
Ik editeer nog even de netwerkinterface configuratie om de gateway settings aan te passen:
$
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="9db385c2-08b4-442b-a7d1-a2ced0d090ad" DEVICE="eth0" ONBOOT="yes" MACADDR="02:00:00:01:02:03" IPADDR="151.152.153.154" PREFIX="32" GATEWAY="94.95.96.254" DNS1="8.8.8.8" IPV6_PRIVACY="no" ZONE=public
- centOS 2nd boot
Ik begin met het netwerk te testen: een ping naargoogle.be
werkt.
Vervolgens kijk ik naar de routing table:
$
route -n
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 94.95.96.254 0.0.0.0 UG 101 0 0 eth0 94.95.96.254 0.0.0.0 255.255.255.255 UH 101 0 0 eth0 151.152.153.154 0.0.0.0 255.255.255.255 UH 101 0 0 eth0
... en nog even naar de DNS:
$
cat /etc/resolv.conf
# Generated by NetworkManager nameserver 8.8.8.8
Ik pas tenslotte de hostnaam aan in/etc/hostname
en/etc/hosts
:centos-fw
127.0.0.1 localhost localhost4 localhost.localdomain centos-fw ::1 localhost localhost6 localhost.localdomain centos-fw
... en na het aanpassen van de hostname is het belangrijk het systeem te herstarten ...
- ssh toegang ...
We kunnen ondertussen met ssh inloggen op onze centos-fw.
Nu willen we de poort aanpassen naar bijvoorbeeld 22422.
Dit kan in/etc/ssh/sshd_config
,
maar er staat expliciet in deze file:# If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
Dus ....
- software updaten:
sudo yum update
- policy-core utils installeren:
sudo yum install policycoreutils-python
- port 22422 in SELinux:
sudo semanage port -a -t ssh_port_t -p tcp 22422
sshd_config
aanpassen ... :sudo vim /etc/ssh/sshd_config
# This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # ... # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # Port 22422 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # ...
- ssh daemon herstarten:
sudo systemctl restart sshd
- ssh status checken:
sudo systemctl status sshd
- centOS firewall aanpassen:
sudo firewall-cmd --permanent --zone=public --add-port=22422/tcp
- centOS firewall herladen:
sudo firewall-cmd --reload
- centOS FW zone
public
bekijken:sudo firewall-cmd --list-all-zones
.... public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client ports: 22422/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: ...
- En testen ... : **
ssh -p 22422 user@151.152.153.154
**
Last login: Wed Jun 6 09:27:22 2018 from d51530cb1.static.telenet.be
*
- software updaten:
- private network
Onze centOS firewall moet toegang geven tot een intern netwerk.
Hiertoe moeten we eerst een intern netwerk bouwen.
Ik doe eerst een shutdown van de centOS-fw.
Daarna ga ik naar virt-manager en klik ik rechts op de HOST-machine, en daarna op NEW ...
klik vervolgens op de virtual hardware details van de centOS-fw, daarna op ADD HARDWARE
klik netwerk en selecteer de juist gemaakte adapter als network source.
Vervolgens start ik de centOS-fw terug op ...
Ik kijk metifconfig
(ja, ik heb nog steeds net-tools), en zie een extra netwerkkaart zonder ip ...
$ ifconfig
ens10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::14af:5362:e921:d86b prefixlen 64 scopeid 0x20<link> ether 52:54:16:bf:9e:29 txqueuelen 1000 (Ethernet) RX packets 42581 bytes 3171278 (3.0 MiB) RX errors 0 dropped 31727 overruns 0 frame 0 TX packets 79537 bytes 113247349 (108.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Ik kopieer
/etc/sysconfig/network-scripts/ifcfg-eth0
naarifcfg-ens10
...
En ik pas de file aan als volgt:TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens10" #UUID="9db385c2-08b4-442b-a7d1-a2ced0d090ad" DEVICE="ens10" ONBOOT="yes" IPADDR="192.168.255.77" PREFIX="24" IPV6_PRIVACY="no" ZONE=work
- NAME en DEVICE krijgen
ens10
als waarde - UUID wordt afgevinkt met een #
- IPADDR en PREFIX worden ingesteld voor het interne netwerk
- ZONE in
firewalld
, de firewall en iptables van centOS worden zones gebruikt, ik denk proactief aan een reeds bestaande zone work om mijn VPN en Owncloud servers straks in te plaatsen.
Ik herstart het netwerk ...sudo systemctl restart network.service
Test de nieuwe settings:ifconfig ens10
ens10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.255.77 netmask 255.255.255.0 broadcast 192.168.255.255 inet6 fe80::14af:5362:e991:d89b prefixlen 64 scopeid 0x20<link> ether 52:54:16:bf:9e:29 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 13 bytes 918 (918.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
IT WORKS
- NAME en DEVICE krijgen
- NAT naar private network
Ik begin met het aanzetten van ROUTING ...sudo vim /etc/sysctl.conf
# sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5). # # IP forwarding net.ipv4.ip_forward = 1
vervolgens voeg ik de volgende regels toe aanfirewalld
...
sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens10 -o eth0 -j ACCEPT
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ens10 -m state --state RELATED,ESTABLISHED -j ACCEPT
ik kijk of er iets is aangepast met
sudo firewall-cmd --permanent --direct --get-all-rules
ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE ipv4 filter FORWARD 0 -i ens10 -o eth0 -j ACCEPT ipv4 filter FORWARD 0 -i eth0 -o ens10 -m state --state RELATED,ESTABLISHED -j ACCEPT
Het kan nooit kwaad om na een dergelijke ingreep de virtuele machine te herstarten, om te zien of de wijziging werkelijk permanent is ... na verloop van tijd begin je dit enigszins te vertrouwen.
- NAT testen
we kunnen NAT alleen maar testen vanaf een nieuwe virtual in de private address space ...