Netwerken 3
00
Hoofdstuk 2

Firewalls & IDS

Pakketfilters, stateful filtering, iptables, vyos, Cisco ACL, Snort en Suricata

0%
voltooid

1Wat is een firewall?

Een firewall is een systeem (of combinatie van systemen) dat regels oplegt tussen 2 of meer netwerken. Hij beslist op basis van herkomst, doel en soort verkeer (niet de inhoud) wat doorgelaten wordt. Ideaal: ongewenst verkeer komt niet binnen en er lekt geen geheime info naar buiten.

TechniekWatWerking
Netwerkinfo controlerenVerbergen/vervalsen wat intern zichtbaar isIntern netwerk niet zichtbaar maken (NAT, proxy, interne DNS)
Toegangslijsten (ACL)Pakketfilter op router/firewallToelaten of weigeren op bron, doel, poort, protocol
Application wrappersKleine programma's in plaats van de daemon (telnetd, ftpd)Controleren eerst of de aanvrager mag, starten dan de echte daemon. Loggen ook.
ProxiesHandelen namens de clientNetwerkniveau: pakketten doorgeven en loggen zonder inhoud te begrijpen (SOCKS). Toepassingsniveau: pakken de aanvraag uit, begrijpen HTTP/FTP/telnet en sturen ze opnieuw in.
  • Werkt volgens identify-and-trust: herkomst identificeren, dan beslissen. Zwak punt: de identificatie kan vervalst zijn (spoofing).
  • Kan ook naar binnen gericht worden: beperken en loggen wat eigen gebruikers mogen.
  • Kan niet: een insider die data naar buiten stuurt tegenhouden, virus in een bestand herkennen, een slecht veiligheidsbeleid vervangen. Eerst beleid (policy), dan firewall.
+25 XP

2Minimale firewall: pakketfilter met TCP, UDP en ICMP

Minimale firewall = router-ACL's + application wrappers + self-policing van de server. Doel van het voorbeeld (netwerk 200.2.2.0/24, server 200.2.2.3): (1) intern mag naar Internet, (2) intern mag naar de server, (3) Internet mag enkel de server bereiken, niet de rest.

ProtRichtingBronpoortDoelpoortVanNaarBetekenis
!ipIN,OUT
anyanyGeen IP met source routing flag
!anyINelkeelke200.2.2.0/24200.2.2.0/24Van buiten mag geen pakket komen met eigen bronadres (anti-spoofing)
tcp SYNINelke80any200.2.2.3/32Iedereen mag de webserver starten
tcp SYNINelke23198.8.8.0/24200.2.2.3/32Enkel dit netwerk mag telnet naar de server
tcp SYNINelke25any200.2.2.3/32SMTP naar de server
tcpINelke1025-65535any200.2.2.0/24Terugkomend verkeer (zonder SYN!) naar hoge poorten
Uittreksel uit de regeltabel. /32 = 1 host, /24 = heel C-netwerk, 0.0.0.0/0 = iedereen.

TCP

Client gebruikt een hoge poort (>1024) naar een lage well-known poort (<1024) op de server. (bronIP, bronpoort, doelIP, doelpoort) = unieke verbinding. De 3-way handshake begint met een SYN.

  • Inkomende dienst toelaten = enkel SYN naar die poort toelaten.
  • Terugkomend verkeer toelaten = TCP zonder SYN naar hoge poorten (! --syn, in Cisco established). Zonder die SYN-controle zou iedereen zomaar naar elke hoge poort kunnen verbinden.
  • Een stateless router kan dat enkel benaderen via de flags, hij kent de verbinding zelf niet.
Actieve FTP
  • Controleverbinding: client (hoge poort) → server poort 21.
  • Dataverbinding: server (poort 20) → client (hoge poort). De server maakt de verbinding.
  • Firewall bij de client moet een inkomende verbinding vanaf poort 20 toelaten = gat in de firewall.
  • Iedereen kan een verbinding vanaf poort 20 proberen zonder FTP-sessie. Oplossing: iptables RELATED (enkel toelaten als er al een controleverbinding op 21 bestaat).
Passieve FTP
  • Client opent controleverbinding naar poort 21 en stuurt PASV.
  • Server antwoordt met een willekeurige (hoge) poort; de client verbindt daar zelf naartoe.
  • Alle verbindingen zijn uitgaand vanaf de client: veiliger, geen inkomende verbinding toelaten.
  • Afdwingen: PASV instellen in de FTP-client.
  • Nadeel: server moet een bereik hoge poorten open hebben (conntrack-ftp helper lost dit op).

UDP

Onbetrouwbaar, geen handshake, geen begin/einde, geen ACK. Vraag en antwoord gebruiken vaak dezelfde poort. Een stateless router kan niet weten of een UDP-pakket een antwoord is of ongewenst. Daarom: bijna alles UDP weigeren, enkel poort 53 (DNS) open naar de nameserver. UDP 53 = lookups, TCP 53 = zone transfers (secundaire naar primaire nameserver).

ICMP

Statusberichten tussen hosts en gateways, nodig voor IP. Ping = echo request (type 8) + echo reply (type 0). ICMP laat men meestal toe, behalve redirect (type 5).

AanvalHoe werkt hetVerdediging
IP spoofingAanvaller stuurt pakketten met een vals bronadres (bv. een intern adres) zodat ze lijken van binnen te komen en toegang krijgen tot diensten die enkel intern bedoeld zijn.Op de externe interface alle pakketten weigeren met bronadres uit je eigen netwerk (en 127.0.0.0/8, privé-adressen). Loggen.
Source routingIn de IP-header staat de volledige route die het pakket moet volgen; routers negeren hun routeringstabel. Antwoord volgt dezelfde weg. Aanvaller kan zo een vertrouwd adres nabootsen en toch antwoord krijgen, of ACL's omzeilen.Alle pakketten met source-routing optie weigeren (iptables ipv4options --ssrr/--lsrr, Cisco no ip source-route, kernel uitschakelen).
ICMP redirectRouter zegt aan een host "gebruik liever router B". Een valse redirect stuurt al het verkeer van het slachtoffer naar de aanvaller (man-in-the-middle, eventueel met masquerading).ICMP type 5 weigeren (in en uit).
+25 XP

3Verbeterde architectuur: red/blue LAN, DMZ, proxy, DNS

Red LAN en Blue LAN

Probleem van de minimale firewall: wie de server inneemt, zit in het interne netwerk. Oplossing: twee routers/firewalls.

Red LANBlue LAN
PlaatsEerste LAN, direct achter de buitenste router (WAN-kant), vóór de 2e routerTweede LAN, achter de 2e (binnenste) router/firewall, intern
InhoudPublieke servers (web, mail, DNS), blootgesteldWerkstations, interne servers, beschermd
SnelheidTraag (WAN-snelheid)Snel (LAN-snelheid)
  • Voordeel: dubbele bescherming (de aanvaller moet 2 firewalls door) en snelheidsscheiding. Server gekraakt in het Red LAN geeft nog geen toegang tot het Blue LAN.
  • Nadeel: extra router nodig. Alternatief: three-interface firewall router (bevat intern 2 routers).
  • Moderne naam: Red LAN = DMZ (demilitarized zone), Blue LAN = intern LAN.
De DMZ (Red LAN) met publieke servers zit tussen internet en het beschermde interne netwerk (Blue LAN).
De DMZ (Red LAN) met publieke servers zit tussen internet en het beschermde interne netwerk (Blue LAN).

Proxy

Proxy = handelen namens de client. Eigenschappen van een proxy-firewall: alle transacties lijken van één host te komen, interne details zijn niet zichtbaar, er is geen andere weg naar de interne computers.

  • Proxy in de firewall geïntegreerd, of in het LAN (dan moet de firewall verkeer naar de proxy toelaten).
  • Netwerkniveau: kijkt naar bron/doeladres, protocol, poorten. Snel, blacklisting mogelijk, begrijpt de inhoud niet (SOCKS).
  • Toepassingsniveau: LAN is niet rechtstreeks met Internet verbonden; client praat met een bastion host, die de aanvraag opnieuw inpakt en het resultaat teruggeeft. Ook meer verstaanbare logs.
  • Intern gebruik je privé-adressen: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Die zijn niet routeerbaar op Internet.

Interne vs externe DNS

DNS gebruikt UDP 53 en dat is moeilijk te filteren (UDP is stateless).

Interne DNS (veilig)
  • Clients sturen alle queries naar de interne nameserver (enkel UDP 53 nodig tussen client en die server).
  • Enkel de interne nameserver mag via de firewall naar een externe nameserver (forwarder). Firewall: één gat voor één host.
  • Interne namen/IP's komen niet op Internet. Extern wordt enkel de publieke info getoond (in de DMZ, bv. webserver, mailserver).
  • Antwoord komt binnen op poort 53 naar de nameserver.
Direct externe DNS (gevaarlijker)
  • Elke client stuurt queries rechtstreeks naar een externe nameserver (bv. van de provider).
  • Antwoorden komen terug op UDP-poorten >1023 naar alle clients: firewall moet een groot gat open laten ("met een airbus binnenvliegen") tenzij stateful.
  • Interne hosts zijn zichtbaar en kwetsbaarder voor spoofed antwoorden.
  • Oplossing: stateful firewall (UDP-antwoord ESTABLISHED) of overstappen op interne DNS.
+25 XP

4Stateful filtering en stateful inspection

Een stateless pakketfilter (ACL) is "dom": hij onthoudt niets. Een stateful firewall houdt per verbinding een rij bij in een statustabel zodat hij weet welke pakketten bij een eerder toegelaten verbinding horen.

Stateful filtering
  • Filtert op verbindingsinformatie van OSI-laag 1 tot 4.
  • IP-adressen, poortnummers, en bij TCP ook sequence-nummers, ACK-nummers en flags.
  • Kijkt niet naar applicatieprotocollen.
  • Bv. iptables connection tracking, Cisco established/reflexive ACL.
Stateful inspection
  • Alles van stateful filtering plus de commando's op applicatieniveau.
  • Zo kan een verbinding van een gebruiker vrij nauwkeurig vastgelegd worden.
  • Maakt lastige protocollen mogelijk: FTP (data-kanaal op andere poort), H.323/VoIP.
  • Nemesis-test: een firewall die dynamisch poorten opent en sluit = stateful inspection.
  • Beide gebruiken een statustabel. Rij verdwijnt bij TCP FIN/RST of na time-out (ook UDP/ICMP).
  • Tabelrij bevat: protocol, bron/doel IP+poort, omgekeerde tuple voor het antwoord, levensduur (timeout), TCP-status, conntrack-status ([UNREPLIED] → [ASSURED]).
text
TCP 6 93 SYN_SENT src=192.168.1.34 dst=172.16.2.23 sport=1054 dport=21 [UNREPLIED]
            src=172.16.2.23 dst=192.168.1.34 sport=21 dport=1054 use=1
   -> nog geen antwoord gezien, korte levensduur (93 s), omgekeerd tuple staat klaar

TCP 6 41294 ESTABLISHED src=192.168.1.34 dst=172.16.2.23 sport=1054 dport=21
            src=172.16.2.23 dst=192.168.1.34 sport=21 dport=1054 [ASSURED] use=1
   -> antwoord ontvangen: UNREPLIED weg, ASSURED, zeer lange timeout
Statustabel iptables: voor en na het antwoord op de SYN
TCP-status in de firewall
Stap 1 van 3
Opstarten

Client stuurt SYN (client: SYN_SENT). Server (LISTEN) antwoordt SYN-ACK (SYN_RCVD). Client stuurt ACK; vanaf nu hebben alle pakketten de ACK-flag = ESTABLISHED.

StatusBetekenisVoorbeeld
NEWEerste pakket van een nieuwe verbinding (bij TCP: SYN)Client start een web-verbinding naar buiten
ESTABLISHEDHoort bij een verbinding die al in de tabel staat en waarvan beide richtingen verkeer gezien hebbenAntwoord van de webserver op onze aanvraag
RELATEDNieuwe verbinding die verband houdt met een bestaande ESTABLISHED verbindingFTP-data (poort 20) na controleverbinding poort 21; ICMP-foutbericht bij een TCP/UDP-verbinding
INVALIDHoort nergens bij / status onbepaalbaar (verkeerde sequence, onverwachte RST)Gespoofde FIN/RST van een aanvaller
+25 XP

5iptables (Linux)

iptables is het gratis pakketfilter in de Linux-kernel (netfilter). Opbouw: tabellen → chains → regels. Een pakket loopt langs de regels van boven naar onder, de eerste match bepaalt de actie (ACCEPT/DROP/REJECT). Matcht niets, dan geldt de policy van de chain.

TabelChainsGebruik
filter (default)INPUT, OUTPUT, FORWARDPakketten toelaten/weigeren
natPREROUTING, POSTROUTING, OUTPUTAdressen vertalen (DNAT, SNAT, MASQUERADE, port forwarding)
mangleallePakketheaders aanpassen (TTL, TOS)
ChainWanneer?
INPUTPakket bestemd voor de firewall zelf (bv. ssh naar de firewall)
OUTPUTPakket afkomstig van de firewall zelf
FORWARDPakket dat door de firewall naar een ander netwerk gaat (routeren)
PREROUTING (nat)Zodra het pakket binnenkomt, voor de routeringsbeslissing: DNAT (doel vertalen)
POSTROUTING (nat)Net voor het vertrekt, na routering: SNAT / MASQUERADE (bron vertalen)
OptieBetekenis
-L, -L -n -v, --line-numbersRegels tonen (-n numeriek, geen DNS)
-A chainAppend: regel achteraan toevoegen
-I chain [nr]Insert: regel vooraan (of op nummer) toevoegen. Volgorde telt!
-D, -F, -N, -XDelete regel, Flush alle regels, New chain, eigen chain verwijderen
-P chain ACTIEPolicy (standaardactie) van een chain
-p tcp/udp/icmpProtocol
-s / -dBron- / doeladres (of netwerk /prefix)
--sport / --dportBron-/doelpoort of range 1024:65535 (enkel met -p tcp/udp)
-i / -oInkomende / uitgaande interface (bv. eth0)
--syn, ! --synEnkel SYN-pakketten / alles behalve SYN
--tcp-flagsVlaggen matchen, bv. SYN,ACK,FIN,RST SYN
--icmp-typeICMP-type, bv. echo-request, redirect
-m state --state ...Verbindingsstatus: NEW, ESTABLISHED, RELATED, INVALID (modern: -m conntrack --ctstate)
-m limit --limit 1/sAantal matches per tijd beperken (anti-flood, loggen)
-m mac --mac-sourceOp MAC-adres matchen
-j ACTIEJump / actie: ACCEPT, DROP, REJECT, LOG, DNAT, SNAT, MASQUERADE, of een eigen chain
!Negatie
DROP
  • Pakket stilzwijgend weggooien, geen antwoord
  • Aanvaller ziet een time-out; moeilijker te scannen
  • Standaardkeuze naar buiten toe
REJECT
  • Pakket weigeren met een antwoord (ICMP unreachable of TCP RST)
  • Afzender weet meteen dat het geweigerd werd (vriendelijker, sneller foutmelding)
  • Handig voor intern verkeer
bash
# Alles weigeren tenzij expliciet toegelaten (policy)
iptables -P INPUT   DROP
iptables -P FORWARD DROP
iptables -P OUTPUT  ACCEPT

# Loopback en bestaande verbindingen toelaten (eerst, want vaakst gebruikt)
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH enkel vanuit het interne netwerk
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT

# Ping naar de firewall toelaten, max 1 per seconde
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Alles wat overschiet loggen en weigeren
iptables -A INPUT -j LOG --log-prefix "DROP: "
iptables -A INPUT -j REJECT
Basis: policies, standaardregels en volgorde
bash
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#  -> laat al het inkomende web-verkeer (TCP 80) naar de firewall zelf toe

iptables -A INPUT -s 10.0.0.5 -j DROP
#  -> gooit alle pakketten van host 10.0.0.5 naar de firewall weg

iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 443 -j ACCEPT
#  -> door de firewall: LAN (eth1) mag naar Internet (eth0) op HTTPS

iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
#  -> terugkomend verkeer van Internet naar LAN, enkel als het bij een bestaande verbinding hoort

iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
#  -> anti-spoofing: privé-bronadres dat op de WAN-interface binnenkomt kan niet kloppen

iptables -A INPUT -m state --state INVALID -j DROP
#  -> pakketten zonder geldige verbinding (bv. gespoofde RST/FIN) weg

iptables -A INPUT -p icmp --icmp-type redirect -j DROP
#  -> ICMP redirect weigeren

iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
#  -> beperkt nieuwe TCP-verbindingen tot 1 per seconde (anti SYN-flood)

iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#  -> uitgaande FTP-controleverbinding (poort 21) starten en voortzetten
Wat doet deze regel? (annotatie)
bash
# TCP: uitgaand NEW+ESTABLISHED, inkomend (antwoord) enkel ESTABLISHED
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -p tcp -m state --state ESTABLISHED     -j ACCEPT

# UDP (pseudo-stateful)
iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -p udp -m state --state ESTABLISHED     -j ACCEPT

# ICMP: RELATED erbij (foutberichten). Geen NEW inkomend -> niemand kan ons pingen,
# wij kunnen wel pingen (reply = ESTABLISHED)
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p icmp -m state --state ESTABLISHED,RELATED     -j ACCEPT

# Actieve FTP-client: module laden + RELATED voor poort 20
modprobe ip_conntrack_ftp
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED     -j ACCEPT
iptables -A INPUT  -p tcp --sport 21 -m state --state ESTABLISHED         -j ACCEPT
iptables -A INPUT  -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED         -j ACCEPT
Stateful regels uit de cursus (TCP, UDP, ICMP, FTP)
bash
# Let op: -l (loggen) is cursusnotatie (ipchains); in echte iptables log je met een aparte regel -j LOG
iptables -N GOOD-BAD ; iptables -A OUTPUT -j GOOD-BAD   # intern -> buiten
iptables -N BAD-GOOD ; iptables -A INPUT  -j BAD-GOOD   # buiten -> intern

# Anti IP spoofing (eigen netwerk / loopback van buiten) en loggen
iptables -A BAD-GOOD -s 200.2.2.0/24 -l -j DROP
iptables -A BAD-GOOD -s 127.0.0.0/8  -l -j DROP

# Webserver voor iedereen, telnet enkel vanuit 198.8.8.0/24
iptables -A BAD-GOOD -p tcp -d 200.2.2.3/32 --dport 80 -j ACCEPT
iptables -A BAD-GOOD -p tcp -s 198.8.8.0/24 -d 200.2.2.3/32 --dport 23 -j ACCEPT

# Terugkomend TCP-verkeer: alles behalve SYN naar hoge poorten
iptables -A BAD-GOOD -p tcp ! --syn -d 200.2.2.0/24 --dport 1025:65535 -j ACCEPT

# DNS: UDP 53 naar de nameserver, TCP 53 (zone transfer) enkel van 199.100.105.2
iptables -A BAD-GOOD -p udp --sport 53 -d 200.2.2.3/32 --dport 53 -j ACCEPT
iptables -A BAD-GOOD -p tcp --syn -s 199.100.105.2/32 -d 200.2.2.3/32 --dport 53 -j ACCEPT

# ICMP: redirect loggen+droppen, rest toelaten
iptables -A BAD-GOOD -p icmp --icmp-type redirect -l -j DROP
iptables -A BAD-GOOD -p icmp -j ACCEPT

# Rest weigeren en loggen
iptables -A BAD-GOOD -l -j REJECT
iptables -A GOOD-BAD -l -j REJECT

# Source routing droppen
iptables -A INPUT -m ipv4options --ssrr -j DROP
iptables -A INPUT -m ipv4options --lsrr -j DROP
Het voorbeeld uit de cursus: eigen chains GOOD-BAD / BAD-GOOD (200.2.2.0/24, server 200.2.2.3)
bash
# MASQUERADE: bron = dynamisch publiek IP van eth0 (bv. DHCP/ADSL). Intern LAN deelt 1 adres
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# SNAT: hetzelfde met een vast publiek IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 200.2.2.2

# DNAT / port forwarding: gateway poort 8888 -> interne webserver poort 80
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8888 -j DNAT --to 192.168.1.1:80
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.1 --dport 80 -j ACCEPT   # en de filter-regel voor het doorsturen!

# Routeren inschakelen
echo 1 > /proc/sys/net/ipv4/ip_forward
NAT: SNAT, MASQUERADE, DNAT (port forwarding)
bash
# SYN flood: max 1 SYN per seconde doorlaten
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# Port scanners
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Ping of death
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# SSH brute force: max 8 nieuwe verbindingen per minuut per bron
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --name SSH -j DROP
Andere gebruiken (uit de cursus): flood- en scanbescherming, ssh brute force
+25 XP

6vyos

VyOS = open source routersoftware (afstammeling van Vyatta, Debian-gebaseerd), CLI naar het model van JunOS (Juniper). Ondersteunt RIPv2, OSPF, BGP, NAT, DHCP(-relay), VRRP, stateful firewall, tcpdump.

ModePromptDoel
Operationalvyos@vyos:~$Status opvragen (show ...)
Configurationvyos@vyos:~# (na configure)Instellen met set, verwijderen met delete (Cisco: no)
  • commit = wijzigingen actief maken, save = bewaren (config.boot), discard/exit discard = weggooien. Zonder commit gebeurt niets.
  • compare toont verschillen, rollback 1 keert terug naar een vorige config. run show interfaces = operational-commando vanuit config mode.
  • Handig: show firewall, show nat, show ip route, show configuration.
text
# Uitgaand: enkel HTTP (TCP 80) mag eth1 verlaten
set firewall name INSIDE-OUT default-action drop
set firewall name INSIDE-OUT rule 10 action accept
set firewall name INSIDE-OUT rule 10 protocol tcp
set firewall name INSIDE-OUT rule 10 destination port 80
set interfaces ethernet eth1 firewall out name INSIDE-OUT

# Inkomend: terugkerend verkeer mag
set firewall name OUTSIDE-IN default-action drop
set firewall name OUTSIDE-IN rule 100 action accept
set firewall name OUTSIDE-IN rule 100 state established enable
set interfaces ethernet eth1 firewall in name OUTSIDE-IN
commit
save
vyos firewall uit de slides: naar buiten enkel HTTP (TCP 80), binnen enkel terugkerend verkeer
vyosBetekenisiptables / Cisco equivalent
firewall name NAAMEen regelverzameling (ruleset) met een naamChain / named ACL
default-action dropWat als geen enkele regel matchtChain policy / Cisco implicit deny
rule 10 action acceptGenummerde regel (laagste eerst) met actie accept/drop/reject-j ACCEPT / permit
protocol tcp, destination port 80Matchvoorwaarden: protocol en poort-p tcp --dport 80 / eq 80
source address, destination addressIP-voorwaarden-s / -d
state established enable (ook related, new, invalid)Stateful: matcht verkeer in de statustabel-m state --state ESTABLISHED
interfaces ethernet eth1 firewall in/out/local name NAAMRuleset toepassen op een interface: in = verkeer dat de interface binnenkomt, out = verlaat, local = bestemd voor de router zelfip access-group NAAM in/out / INPUT-FORWARD-OUTPUT
text
set protocols static route 0.0.0.0/0 next-hop 192.168.56.1 distance '1'
set interfaces ethernet eth1 address 192.168.56.192/24
set service ssh

# Source NAT/masquerade (LAN via eth0 naar buiten)
set nat source rule 100 outbound-interface eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

# related ook toelaten (bv. FTP data, ICMP errors)
set firewall name OUTSIDE-IN rule 100 state related enable
Meer vyos: routering en NAT (algemene kennis, zelfde structuur)
+25 XP

7Cisco access-lists

Een ACL is een lijst permit/deny-regels, sequentieel doorlopen. Bij de eerste match stopt de evaluatie. Aan het einde staat een onzichtbare implicit deny any (alles wat niet expliciet toegelaten is, wordt geweigerd). Bekijken: show ip access-lists.

Standard ACLExtended ACL
Nummer1-99 (1300-1999)100-199 (2000-2699)
Filtert opEnkel bronadresProtocol, bron + doel, poorten, ICMP-type, established
Syntaxaccess-list 10 permit 192.168.1.0 0.0.0.255access-list 101 permit tcp 192.168.1.0 0.0.0.255 any eq 80
PlaatsDicht bij de bestemming (kan niet fijn filteren)Dicht bij de bron (verkeer zo vroeg mogelijk stoppen)
text
Router(config)# ip access-list extended INKOMEND
Router(config-ext-nacl)# permit tcp any any eq 80
Router(config-ext-nacl)# deny ip any any
Router(config-ext-nacl)# exit
Router(config)# interface FastEthernet 0/0
Router(config-if)# ip access-group INKOMEND in
!  -> iedereen mag naar webservers (poort 80), al het andere wordt geweigerd; toegepast op inkomend verkeer van Fa0/0

! Numerieke variant
Router(config)# access-list 101 permit tcp any any eq 80
Router(config)# interface fa0/0
Router(config-if)# ip access-group 101 in
Named extended ACL aanmaken en toepassen

Algemene vorm: permit|deny PROTOCOL BRONadres wildcard [BRONpoort] DOELadres wildcard [DOELpoort]. Eerst van waar, dan naar waar. Protocol: ip (alles, enkel op adres), tcp, udp, icmp. Per interface 1 ACL per richting (in/out) per protocol.

Wildcard maskBit 0 / bit 1Voorbeelden
Omgekeerde van het subnetmasker0 = moet overeenkomen, 1 = negeren (eender wat)192.168.1.0 0.0.0.255 = heel /24 netwerk
192.168.1.1 0.0.0.0 = host 192.168.1.1
0.0.0.0 255.255.255.255 = any
/26 (255.255.255.192) wordt 0.0.0.63; /20 wordt 0.0.15.255
PoortoperatorBetekenis
eq 80Enkel poort 80
gt 1023Groter dan 1023 (hoge poorten)
lt 1024Kleiner dan 1024
neq 80Alles behalve 80
range 81 1023Van 81 tot 1023
syn, established(TCP) verbinding starten / reeds opgestart (ACK- of RST-bit gezet)
logMatch loggen. Bij loggen op enkel IP: gt 0 toevoegen

ICMP-opties: echo (request), echo-reply, host-unreachable, port-unreachable, ttl-exceeded, of type-nummer (5 = redirect).

text
ip access-list extended BAD-GOOD
 deny ip 200.2.2.0 0.0.0.255 any        ! IP spoofing: eigen netwerk van buiten
 deny ip 127.0.0.0 0.255.255.255 any
 permit tcp any host 200.2.2.3 eq 80    ! web voor iedereen
 permit tcp 198.8.8.0 0.0.0.255 host 200.2.2.3 eq 23
 permit tcp any host 200.2.2.3 eq 25
 permit tcp any host 200.2.2.3 eq 21
 permit tcp any 200.2.2.0 0.0.0.255 gt 1023 established   ! antwoorden op onze verbindingen
 permit udp any host 200.2.2.3 eq 53
 permit tcp host 199.100.105.2 host 200.2.2.3 eq 53 syn   ! zone transfer
 deny icmp any any 5                    ! redirect
 permit icmp any any
 deny ip any any

ip access-list extended GOOD-BAD
 permit tcp host 200.2.2.3 eq 20 any gt 1023   ! actieve FTP data
 permit tcp 200.2.2.0 0.0.0.255 any
 permit udp 200.2.2.0 0.0.0.255 eq 53 any eq 53
 permit icmp any any
 deny ip any any

no ip source-route                      ! source routing uit
interface FastEthernet 0/0
 ip access-group GOOD-BAD out
 ip access-group BAD-GOOD in
Cisco-versie van het voorbeeld (200.2.2.0/24, server 200.2.2.3)
text
interface FastEthernet 0/0
 ip access-group INKOMEND in
 ip access-group UITGAAND out
!
ip access-list extended UITGAAND
 permit tcp any any reflect TCPVERKEER      ! uitgaand TCP: tijdelijke omgekeerde regel aanmaken
!
ip access-list extended INKOMEND
 permit icmp any any
 deny udp any any
 evaluate TCPVERKEER                        ! enkel antwoorden op eigen uitgaande sessies binnenlaten
Stateful op Cisco: reflexive access lists
Cisco ACL
  • Eerste match wint, implicit deny op het einde
  • Toepassen: ip access-group NAAM in|out op interface
  • Wildcard-masker (0 = controleren)
  • established = vlag-gebaseerd, niet echt stateful; reflexive = stateful
iptables
  • Eerste match wint, daarna policy van de chain
  • Chains INPUT/OUTPUT/FORWARD, geen interface-binding
  • Subnet /prefix
  • -m state = echt stateful
+25 XP

8IDS en IPS: Snort en Suricata

IDS (Intrusion Detection System)
  • Detecteert en meldt (alert, log)
  • Kijkt mee naar kopie van verkeer (sniffer/span-poort), passief
  • Grijpt niet in: geen vertraging, maar ook geen blokkade
IPS (Intrusion Prevention System)
  • Detecteert én blokkeert (drop/reject)
  • Zit inline in het verkeerspad
  • Risico: false positives blokkeren legitiem verkeer, extra latency

Een firewall filtert op adres/poort/status; een IDS/IPS kijkt naar patronen en inhoud (signatures) en afwijkend gedrag. Ze vullen elkaar aan.

Snort

NIDS (Network IDS), gebaseerd op een pakketsniffer (libpcap) op een interface. Klein, portable, snel genoeg voor een gemiddeld netwerk, gratis (GPL), volledig regelgestuurd.

  • Detectie-engine: regels = patronen/handtekeningen, modulair combineerbaar. Detecteert abnormale activiteit zoals stealth scans, OS fingerprinting, ongeldige ICMP-codes.
  • Output: gedecodeerde logs, tcpdump-formaat (binair), ASCII in mappen per IP, realtime alerts (syslog, bestand, winpopup), MySQL-databank.
  • Gebruik: NIDS / pakketsniffer, honeypot-monitor, scandetectie/traps.
  • Regelupdates met oinkmaster; extra acties (e-mail, active response) met Swatch. Logs opnieuw afspelen: snort -r logfile -c /etc/snort/snort.conf.
  • Heeft geen ingebouwde poortscan-detectie: "poor man's" detectie met een trap-regel op ongebruikte poorten.

Regelopbouw = header + opties tussen haakjes.

actie protocol BRON-IP bronpoort -> DOEL-IP doelpoort (opties)

IP: CIDR of ! (negatie). Poorten: any, !, bereik 100:600, :1023, 1024:. Richting: -> (of <> bidirectioneel). Snort-acties: alert, log, pass (en drop/reject in inline-modus).

text
# SYN-FIN scan van buiten naar het interne netwerk
alert tcp !10.1.1.0/24 any -> 10.1.1.0/24 any (flags: SF; msg: "SYN-FIN Scan";)
#  alert  = melding genereren
#  !10.1.1.0/24 any = bron: alles BEHALVE het interne netwerk, elke poort
#  -> 10.1.1.0/24 any = doel: intern netwerk, elke poort
#  flags: SF = SYN en FIN tegelijk gezet (ongeldig, typisch voor stealth scan)

# Poor man's port scan trap: SYN op ongebruikte poorten 100 t/m 600
alert tcp any any -> 10.1.1.0/24 100:600 (flags: S; msg: "TRAP!";)
Snort-regels

Opties (voorbeelden): IP TTL, IP ID, fragmentgrootte, TCP flags, ACK/seq-nummer, payload size, content (+ offset, depth), sessie-recording, ICMP type/code, alternatieve logfile, msg. Header en opties vrij te combineren.

Suricata

Open-source IDS én IPS (en netwerk-monitoring). Regelsyntaxis lijkt sterk op Snort.

actie protocol bron poort richting doel poort (meta-opties)

Acties: alert, log, pass, drop, reject.

text
alert tcp $DMZ1_NET any -> any 80 (msg:"Tentative connexion DMZ1 http"; flow:established,to_server; content:!"|20|yum|2F|"; classtype:web-application-activity; sid:9201503; rev:2;)
#  alert tcp $DMZ1_NET any -> any 80  : header (variabele voor DMZ1-netwerk, naar elke webserver)
#  msg        : tekst in de alert
#  flow:established,to_server : enkel pakketten van een bestaande verbinding in de richting van de server
#  content:!"|20|yum|2F|"     : NIET de bytes " yum/" bevatten (! = negatie, |20| hex voor spatie)
#  classtype  : categorie. sid = uniek regelnummer, rev = revisie
Suricata-regel uit de slides
Snort (klassiek)Suricata
RolVooral NIDS (sniffer, libpcap), IPS inline mogelijkIDS + IPS (meteen inline-blokkade met drop)
InhoudRegels op pakketniveau: flags, content, TTL...Herassembleert pakketten/streams, begrijpt applicatieprotocollen
DetectieScans, fingerprinting, exploits (signatures)Plus: cleartext/base64-paswoorden, cloud-gebruik (Dropbox, OneDrive), P2P, malware/trojan/virus, informatie verzamelen, brute force, threat detection
Configuratiesnort.conf + rules/etc/suricata/suricata.yaml (netwerken en regels instellen), regels in /etc/suricata/rules, updates via suricata-update/oinkmaster, systemctl start|stop|status suricata

Context: de "Chinese firewall" (Great Firewall) blokkeert woorden/afbeeldingen en veel westerse diensten (Google, YouTube, WhatsApp/Discord). In de plaats gebruikt men Baidu, QQ/WeChat, Youku. Dit is filtering op inhoud/DNS/IP op nationaal niveau.

+25 XP

9Serverbescherming en testtools

Tool / begripWat
Application wrappers / TCP wrappersControleren de herkomst van een aanvraag vóór de echte daemon start, loggen bezoekers en patronen. Extra beschermlaag achter de firewall.
Audit tools: TAMU Tiger, COPS, Tripwire, SATANControleren Unix-instellingen. Tripwire = digitale handtekeningen (CRC/MD5-hash) van systeembestanden om wijzigingen te detecteren. SATAN scant netwerken van op afstand op lekken.
CERTWaarschuwt voor beveiligingslekken (opgericht na de Morris-worm, 1988).
Bastion hostExtra verharde host op een gevaarlijke plek, vaak deel van de firewall (proxy).
tcpdump / WiresharkSniffers: pakketten bekijken om regels te testen.
nmapPoortscanner (+ OS-detectie): nmap -sT -O host. Toont welke poorten je firewall doorlaat.
nemesisMaakt eigen pakketten (IP, MAC, poorten, flags; TCP/UDP/ICMP/ARP...) om je firewall te testen. Bv. spoofed FIN/RST/ACK, UDP-timeout, alle ICMP-types.
bash
nemesis tcp -S 192.168.1.1 -D 10.10.10.1 -fF -x 1266 -y 139   # spoofed FIN op bestaande sessie
nemesis tcp -S 192.168.1.1 -D 10.10.10.1 -fR -x 1266 -y 139   # spoofed RST
nemesis tcp -S 192.168.1.1 -D 10.10.10.1 -fA -x 1266 -y 139   # losse ACK (backdoors misbruiken dit)
# Stateful firewall: blokkeert ze (sequence klopt niet). Zo niet -> DoS door constant RST te sturen.
nemesis: test of de firewall echt stateful is (tcpdump aan de andere kant)

Andere begrippen: IP splicing/hijacking = actieve sessie overnemen na authenticatie (tegen: encryptie); tunneling = verkeer inpakken in ander verkeer om de firewall te omzeilen; trojan, worm (zelfkopiërend, Morris 1988), social engineering.

+25 XP
Volgende stap

Nog niet klaar? Je kan altijd terugkomen.

Leer de begrippen