Alle beschikbare publieke IP-adressen worden voortdurend gescand op poorten door bots en diensten zoals shodan.io, en iedereen kan deze informatie gebruiken om brute-force-aanvallen uit te voeren en bekende exploits toe te passen. Port knocking is een kosteneffectieve manier om je hiertegen te verdedigen door geen enkele poort bloot te stellen en simpelweg te luisteren naar verbindingspogingen - als de juiste volgorde van verbindingspogingen op poorten wordt gemaakt, wordt de client als veilig beschouwd en toegevoegd aan een beveiligde adreslijst die de WAN-firewallregels omzeilt.
Configuratievoorbeeld
We gaan ervan uit dat je al een firewall hebt ingesteld die alle verbindingspogingen vanaf de WAN-poort verwerpt, dus je moet daarvóór aanvullende regels toevoegen. Maak eerst een firewallregel die op een bepaalde poort luistert en het verbonden bron-IP aan een adreslijst toevoegt - dit is de eerste knock.
/ip/firewall/filter/add action=add-src-to-address-list address-list=888 address-list-timeout=30s chain=input dst-port=888 in-interface-list=WAN protocol=tcp
Voeg vervolgens een regel toe die hetzelfde doet op een andere poort, maar alleen IP's goedkeurt die al in de eerste lijst staan. U kunt deze stap zo vaak herhalen als u wilt.
/ip/firewall/filter/add action=add-src-to-address-list address-list=555 address-list-timeout=30s chain=input dst-port=555 in-interface-list=WAN protocol=tcp src-address-list=888
Ten slotte wordt de laatste knock toegevoegd aan een IP-lijst die vertrouwd is, en wordt alle invoer geaccepteerd.
/ip/firewall/filter/add action=add-src-to-address-list address-list=secured address-list-timeout=30m chain=input dst-port=222 in-interface-list=WAN protocol=tcp src-address-list=555
/ip/firewall/filter/add action=accept chain=input in-interface-list=WAN src-address-list=secured
Klop om toegang te krijgen
Om het board vanaf het WAN te bereiken kan een port-knocking client worden gebruikt, maar een eenvoudige bash-oneliner met nmap kan de klus ook klaren.
for x in 888 555 222; do nmap -p $x -Pn xx.xx.xx.xx; done
Blacklists
Tenzij u veel knocks gebruikt, kan een eenvoudige poortscan per ongeluk de juiste poorten in de juiste volgorde activeren; het is daarom raadzaam om ook een blacklist toe te voegen.
Voeg helemaal bovenaan uw firewallstack een drop-regel toe voor de blacklist.
/ip/firewall/filter/add action=drop chain=input disabled=yes in-interface-list=WAN src-address-list=blacklist
Voeg vervolgens verdachte IP's toe aan de blacklist.
Slechte poorten - poorten die nooit door een vertrouwde gebruiker worden gebruikt en daarom een hoge time-outstraf krijgen.
/ip/firewall/filter/add action=add-src-to-address-list address-list=blacklist address-list-timeout=1000m chain=input disabled=yes dst-port=666 in-interface-list=WAN protocol=tcp
Poorten die het scanproces zodanig vertragen dat het zinloos wordt, maar die een echte gebruiker nooit te lang buitensluiten. Dit kan elke poort omvatten behalve de 'knock'-poorten. Het belangrijkste is dat het bron-IP nog niet in de beveiligde lijst staat en dat die poorten dus na een geslaagde knock gebruikt kunnen worden.
/ip/firewall/filter/add action=add-src-to-address-list address-list=blacklist address-list-timeout=1m chain=input disabled=yes dst-port=21,22,23,8291,10000-60000 in-interface-list=WAN protocol=tcp src-address-list=!secured
Waarschuwing Blacklist-regels uit deze sectie worden toegevoegd met disabled=yes om te voorkomen dat de gebruiker zichzelf buitensluit. Schakel de filterregels in zodra alternatieve toegang beschikbaar is of gebruik
<Safe Mode>
Gebruik een wachtwoordzin voor elke knock
Je zou nog een stap verder kunnen gaan door bij elke knock een wachtwoordzin mee te sturen.
Info Waarschuwing
Layer7-regels zijn zeer resource-intensief. Gebruik ze niet tenzij u weet wat u doet.
<details> <summary>Click to open code block</summary>
Maak vervolgens een layer7 regex-controle die op de knock-regel kan worden aangevraagd.
/ip/firewall/layer7-protocol/add name=pass regexp="^passphrase/$"
/ip/firewall/filter
add action=add-src-to-address-list address-list=888 address-list-timeout=30s chain=input dst-port=888 in-interface-list=WAN protocol=udp layer7-protocol=pass
</details>
Waarschuwing Zie voor een extra beveiligingslaag het artikel over Bruteforce prevention: Bruteforce prevention