RouterOS 6.41版應用於設有伺服器的家用網路(五):Port knocking

Mikrotik RB450G外觀

能想出Port knocking的人,真的滿聰明的,這個方法好用到我看到第一眼我就知道這是我要找的東西。
(其實有點文不對題了,前陣子把網路升到300/100Mbps,也換掉了使用好幾年的RB450G,現役的Mikrotik路由器是高通晶片的hAP ac^2,韌體是RouterOS v6.43rc7。)

路由器是一個區域網路的核心,重要性不言而喻,除了更改Port以及使用高強度的密碼外,在Mikrotik路由器的預設防火牆裡還有一條是禁止內網以外的連線存取路由器。

/ip firewall filter
add action=drop chain=input comment="defconf: drop all not coming from LAN" in-interface-list=!LAN

那萬一你要在外面使用怎麼辦?你也被擋在牆外了,這時候就敲一下門的方法就很好用了(Port knocking)。

Port knocking的原理是利用一個裝置,在一定的時間內依照順序存取一個或數個路由器上的Port來把這個裝置的IP位址放進白名單,並設定在白名單裡的IP位址在指定的時間內可以穿過防火牆存取路由器,就像是要連續敲對幾個門後才能到大廳刷卡進場。網路上的攻擊大多都是存取特定的Port,如果在一定的時間內被連續敲對了好幾個門而成了白名單,你就認了吧。

第一步,先建立起數個門(這裡以三個門為例)。
/ip firewall filter
add action=add-src-to-address-list address-list=Knock-LV1 address-list-timeout=15s chain=input comment="Port Knocking" dst-port=54987 protocol=tcp
add action=add-src-to-address-list address-list=Knock-LV2 address-list-timeout=15s chain=input dst-port=50987 protocol=tcp src-address-list=Knock-LV1
add action=add-src-to-address-list address-list=KnockWhiteList address-list-timeout=1h chain=input dst-port=59987 log=yes protocol=tcp src-address-list=Knock-LV2

第一條:透過tcp存取Port 54987,可以讓你加進Knock-LV1的名單之中。
第二條:在你被加進Knock-LV1的名單後的15秒內,若你透過tcp存取Port 50987,可以讓你加進Knock-LV2的名單之中。
第三條:在你被加進Knock-LV2的名單後的15秒內,若你透過tcp存取Port 59987,可以讓你加進KnockWhiteList的名單內一個小時,這裡有我有把log打開方便觀察是否有異狀(門都被別人橇開了當然要檢查一下)。

第二步,建立防火牆讓KnockWhiteList內的IP可以存取路由器。
/ip firewall filter
add action=accept chain=input log=yes src-address-list=KnockWhiteList

第三步,將第二步的防火牆規則拉到比禁止外網存取的防火牆規則之上。

就這麼簡單!卻有很高的安全性。

至於要怎麼敲門法?用telnet就可以了。
Port knocking-2

Port knocking-1