[Juniper] Junos限制遠端存取SSH、Telnet權限(ACL)

邊做邊學,順便留個筆記,若有錯誤請不吝指教。

Junos基本操作及root密碼設定可參考我之前的文章:Juniper Junos基本操作、root密碼設定

所有Juniper相關文章列表:Juniper JunOS 系列文章列表

之前我們幫Switch開啟了SSH及Telnet遠端管理的功能,但是如果網際網路上的所有IP都能夠遠端管理,就有可能造成資安上的風險。

Juniper的遠端管理功能邏輯上都是透過Loopback介面進行存取,因此我們需要透過在Loopback介面(lo0)上套用filter來限制遠端管理的來源IP。

這邊的設定我們使用上次vlan基本設定的範例來進行實作,限制僅vlan200(即192.168.200.0/24網段)可對sw1做telnet、ssh的遠端管理。

首先我們要實做一個等等要套用的filter,在設定模式下使用下列指令建立Filter:

    KerKer@sw1# set firewall family inet filter Remote_ACL term 1 from source-address 192.168.200.0/24
    KerKer@sw1# set firewall family inet filter Remote_ACL term 1 from destination-port telnet
    KerKer@sw1# set firewall family inet filter Remote_ACL term 1 from destination-port ssh
    KerKer@sw1# set firewall family inet filter Remote_ACL term 1 then accept
    KerKer@sw1# set firewall family inet filter Remote_ACL term 2 from destination-port telnet
    KerKer@sw1# set firewall family inet filter Remote_ACL term 2 from destination-port ssh
    KerKer@sw1# set firewall family inet filter Remote_ACL term 2 then reject
    KerKer@sw1# set firewall family inet filter Remote_ACL term 3 then accept

Remote_ACL是我們給這個filter定義的名稱,也可以換成任意其他名稱,我們可以在設定模式下用show指令來查看Filter設定:

    KerKer@sw1# show firewall family inet filter Remote_ACL                       
    term 1 {
        from {
            source-address {
                192.168.200.0/24;
            }
            destination-port [ telnet ssh ];
        }
        then accept;
    }
    term 2 {
        from {
            destination-port [ telnet ssh ];
        }
        then {
            reject;
        }
    }
    term 3 {
        then accept;
    }

首先在 term 1 先允許192.168.200.0/24的telnet、ssh請求,並在 term 2 阻擋來自其他所有IP的telnet、ssh請求,最後再用 term 3 允許其它非telnet、ssh封包。

這裡比較需要注意的是term後面接的數字為term的名稱,也可以使用任意字串命名。

term的優先序以排列順序為主,from後面接的是條件,then後面接的是動作。

destination-port可以填常用的協定,效果其實等同這填寫這些協定預設的port,所以這邊填 [ 22 23 ] 也能起到相同的效果。

若要改變排列順序可以使在設定模式下用 insert term 2 before term 1 的指令把 term 2 排到 term 1 前面。

完成filter設定後我們須將其套用至介面上,套用方如下:

KerKer@sw1# set interfaces lo0 unit 0 family inet filter input Remote_ACL

這樣就完成所有的設定了, 設定完成記得要commit才會生效,更多關於commit指令的內容可以參考:Juniper Junos提交設定(commit)

我們分別在vlan100及vlan200上接電腦對sw1進行ping及telnet/ssh測試。

當我們使用192.168.100.1時可正常ping到sw1但無法ssh、telnet。

    [C:\~]$ ipconfig

    Windows IP 設定

    乙太網路卡 乙太網路 9:

       連線特定 DNS 尾碼 . . . . . . . . : 
       IPv4 位址 . . . . . . . . . . . . : 192.168.100.1
       子網路遮罩 . . . . . . . . . . . .: 255.255.255.0
       預設閘道 . . . . . . . . . . . . .: 192.168.100.254

    [C:\~]$ ping 10.0.0.1

    Ping 10.0.0.1 (使用 32 位元組的資料):
    回覆自 10.0.0.1: 位元組=32 時間=3ms TTL=64
    回覆自 10.0.0.1: 位元組=32 時間=5ms TTL=64
    回覆自 10.0.0.1: 位元組=32 時間=4ms TTL=64
    回覆自 10.0.0.1: 位元組=32 時間=10ms TTL=64

    10.0.0.1 的 Ping 統計資料:
        封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
    大約的來回時間 (毫秒):
        最小值 = 3ms,最大值 = 10ms,平均 = 5ms

    [C:\~]$ telnet 10.0.0.1

    Connecting to 10.0.0.1:23...
    Could not connect to '10.0.0.1' (port 23): Connection failed.

    [C:\~]$ ssh 10.0.0.1

    Connecting to 10.0.0.1:22...
    Could not connect to '10.0.0.1' (port 22): Connection failed.

當我們改使用192.168.200.1時則ping、ssh、telnet都可以正常存取。

    [C:\~]$ ipconfig

    Windows IP 設定

    乙太網路卡 乙太網路 9:

       連線特定 DNS 尾碼 . . . . . . . . : 
       IPv4 位址 . . . . . . . . . . . . : 192.168.200.1
       子網路遮罩 . . . . . . . . . . . .: 255.255.255.0
       預設閘道 . . . . . . . . . . . . .: 192.168.200.254

    [C:\~]$ ping 10.0.0.1

    Ping 10.0.0.1 (使用 32 位元組的資料):
    回覆自 10.0.0.1: 位元組=32 時間=12ms TTL=64
    回覆自 10.0.0.1: 位元組=32 時間=12ms TTL=64
    回覆自 10.0.0.1: 位元組=32 時間=7ms TTL=64
    回覆自 10.0.0.1: 位元組=32 時間=10ms TTL=64

    10.0.0.1 的 Ping 統計資料:
        封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
    大約的來回時間 (毫秒):
        最小值 = 7ms,最大值 = 12ms,平均 = 10ms

    [C:\~]$ telnet 10.0.0.1

    Connecting to 10.0.0.1:23...
    Connection established.
    To escape to local shell, press 'Ctrl+Alt+]'.

    [C:\~]$ ssh 10.0.0.1

    Connecting to 10.0.0.1:22...
    Connection established.
    To escape to local shell, press 'Ctrl+Alt+]'.  

如此一來就能夠確認所有設定都已生效,已經能夠限制特定來源對Switch進行存取了!