Router
Contents
Router
De router is de spin in ons netwerk. Hij bepaalt welke diensten beschikbaar zijn en hoe je die kunt benaderen. Hierbij is de router verantwoordelijk voor het afhandelen van al het inkomende en uitgaande dataverkeer van A-Eskwadraat. Op het moment zijn Ernst en oclaude de huidige routers.
De router die in gebruik is, is naast zijn eigen IP op het IP-adres 10.14.3.1 (vm-netstack.a-eskwadraat.nl) te benaderen. Dit adres wordt gebruikt als default route op alle andere computers. Een backup-router zou dit snel kunnen overnemen als ernst uitvalt, maar dat is op het moment van schrijven nog niet geïmplementeerd.
Firewall
Voor de firewall maken we gebruik van shorewall. De config is terug te vinden in salt, en in /etc/shorewall op Ernst en oclaude zelf. Shorewall zorgt voor de iptables regels die de daadwerkelijke firewall vormen.
Zones
Een firewall bestaat uit meerdere zones. Deze zijn er om onderscheid te maken tussen verschillende bronnen/bestemmingen. Op dit moment maken we gebruik van de zones firewall(fw), extern(ext) en intern(int). Het is ook mogelijk om zones binnen een zone aan te maken zoals voor virtuele machines(vm) die binnen de interne zone zitten, echter gebruiken we deze nog niet. De configuratie voor de zones is te vinden in /etc/shorewall/zones. Een voorbeeld zoals deze op het moment van schrijven staat ingesteld:
#{zone} {type} fw firewall ext ipv4 int ipv4 vm:int ipv4
Interfaces
De interfaces van de router zijn in te stellen in /etc/shorewall/interfaces. Hierbij maken we onderscheid tussen intern(int) en extern(ext). Een voorbeeld zoals deze op oclaude staat ingesteld:
#{zone} {interface} {opties} ext enp4s0 blacklist,norfc1918 int enp3s0 dhcp,routeback
Variabelen
Voor het gemak zijn er in shorewall enkel variabelen te gebruiken. Deze variabelen zijn in te stellen in /ets/shorewall/params. Bijvoorbeeld voor vm-mail:
#{naam}={waarde} VM_MAIL=10.14.3.6
Port Forward
De port forwards worden door de firewall geregeld in /etc/shorewall/rules. Deze file bevat alle speciale regels, waar port forwards dus ook toe behoren. Een portforward bestaat uit 2 regels, namelijk een regel voor verkeer afkomstig van het internet en een regel voor verkeer afkomstig van het interne netwerk. Daarnaast is er voor verkeer afkomstig van het interne netwerk een speciale masq regel nodig, welke ervoor zorgt dat het verkeer via de router loopt in plaats van direct.
Extern voorbeeld
Voorbeeld regel voor externe forward in /etc/shorewall/rules, hierbij wordt de externe tcp-poort 25 doorgestuurd naar poort 25 van vm-mail:
#{soort} {bron} {bestemming} {tcp/udp} {inkomende poort} DNAT ext int:$vm-mail:25 tcp 25
Intern voorbeeld
Voorbeeld regel voor interne forward in /etc/shorewall/rules, hierbij wordt de interne tcp-poort 25 doorgestuurd naar poort 25 van vm-mail, hierbij wordt de bron van het pakket omgezet naar de het externe ip van de router:
#{soort} {bron} {bestemming} {tcp/udp} {inkomende poort} {bron poort} {bron} DNAT int int:$vm-mail:25 tcp 25 - $EXT_IP_VIRT
Om wijziging van de bron van het pakket te laten werken moet er ook een overeenkomstige regel aangemaakt worden /etc/shorewall/masq:
#{interface:bestemming} {oorsprong} {bron} {tcp/udp} {poort} enp3s0:$VM_MAIL $INT_RANGE $EXT_IP_VIRT tcp 25
DHCP server
Alle computers in het netwerk krijgen hun IP-adres van de router via DHCP. Zie dnsmasq voor details.
Reverse Proxy
De reverse proxy zorgt ervoor dat bezoekers van de websites, die gehost worden bij A-Eskwadraat, terecht komen bij de juiste webserver. Verder is dit het SSL-eindpunt zodat er verbindingen met https mogelijk zijn, zonder dat op iedere webserver het certificaat hoeft te staan. We gebruiken hiervoor nginx. Iedere webserver heeft een aparte file voor de configuratie in /etc/nginx/conf.d/ met de extensie conf.
Als je website door de vm-www-dmz wordt gehost en je wilt deze in de router toevoegen, doe dit in het bestand vm-www-dmz.aeslist.
Als je website op een eigen virtuele machine bij A-Eskwadraat staat is het volgende commando te gebruiken vanuit /etc/nginx/conf.d om een subdomein te maken:
sed 's/template/{virtuele machine}/g' vm.template > vm-{virtuele machine}.conf
Daarbij wordt de volgende template gebruikt:
##Vervang hier alle verwijzingen met template naar de naam de virtuele machine # vm-template upstream vm-template { server vm-template:80; # Should be IP } server { #listen 80; # accepteer poort 80 include /etc/nginx/conf.d/https.common; # accepteer ssl verbinding met a-eskwadraat certificaat server_name template.a-eskwadraat.nl; access_log /var/log/nginx/access-vm-template.log main; error_log /var/log/nginx/error-vm-template.log; root /usr/share/nginx/html; index index.html; location / { proxy_pass http://vm-template; include /etc/nginx/conf.d/proxy.common; } }
Vergeet niet om de configuratie in salt op te slaan als je deze aanpast.
Redirects
Naast dat nginx gebruikt wordt als reverse proxy, zorgt deze ook voor de verwijzingen. Deze zijn te vinden in /etc/nginx/conf.d/www-redirects.conf. Een voorbeeld functie van het redirecten is al het verkeer voor http://a-es2.nl wordt doorverwezen naar https://www.a-eskwadraat.nl.