在辦公室遠程工作。 RDP、Port Knocking、Mikrotik:簡單且安全

由於 covid-19 病毒大流行和許多國家的普遍隔離,許多公司繼續工作的唯一方法是通過互聯網遠程訪問工作場所。 遠程工作有許多相對安全的方法——但考慮到問題的嚴重性,需要一種簡單的方法讓任何用戶遠程連接到辦公室,並且不需要額外的設置、解釋、繁瑣的諮詢和冗長的說明。 這種方法受到許多管理員 RDP(遠程桌面協議)的喜愛。 通過 RDP 直接連接到工作場所理想地解決了我們的問題,除了美中不足的一點——保持 RDP 端口對 Internet 開放是非常不安全的。 因此,下面我提出一種簡單但可靠的保護方法。在辦公室遠程工作。 RDP、Port Knocking、Mikrotik:簡單且安全

由於我經常遇到使用 Mikrotik 設備作為 Internet 訪問的小型組織,下面將展示如何在 Mikrotik 上實現這一點,但是 Port Knocking 保護方法很容易在具有類似輸入路由器設置和防火牆的其他更高級別的設備上實現.

端口敲門簡介. 連接到 Internet 的網絡的理想外部保護是當所有資源和端口都被防火牆從外部關閉時。 儘管配置了這種防火牆的路由器不會對來自外部的數據包做出任何反應,但它會監聽它們。 因此,您可以配置路由器,以便當在不同端口上收到特定(代碼)序列的網絡數據包時,它(路由器)為數據包來自的 IP 切斷對特定資源(端口、協議、 ETC。)。

現在開始做生意。 我不會詳細描述 Mikrotik 上的防火牆設置 - Internet 上有很多關於此的高質量資源。 理想情況下,防火牆會阻止所有傳入的數據包,但是

/ip firewall filter
add action=accept chain=input comment="established and related accept" connection-state=established,related

允許來自已建立的相關連接的傳入流量。
現在我們在 Mikrotik 上設置 Port Knocking:

/ip firewall filter
add action=drop chain=input dst-port=19000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=drop chain=input dst-port=16000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=add-src-to-address-list address-list="remote_port_1" address-list-timeout=1m chain=input dst-port=19000 protocol=tcp comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=19001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=18999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=16001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=15999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="allow_remote_users" address-list-timeout=1m chain=input dst-port=16000 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
move [/ip firewall filter find comment=RemoteRules] 1
/ip firewall nat
add action=dst-nat chain=dstnat comment="remote_rdp" src-address-list="allow_remote_users" dst-port=33890 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.33 to-ports=3389

現在更詳細:

前兩條規則

/ip firewall filter
add action=drop chain=input dst-port=19000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=drop chain=input dst-port=16000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules

禁止來自端口掃描期間列入黑名單的 IP 地址的傳入數據包;

第三條規則:

add action=add-src-to-address-list address-list="remote_port_1" address-list-timeout=1m chain=input dst-port=19000 protocol=tcp comment=RemoteRules

將 ip 添加到第一次正確敲擊正確端口 (19000) 的主機列表中;
接下來的四個規則是:

add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=19001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=18999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=16001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=15999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules

為那些想要掃描您的端口的人創建陷阱端口,如果檢測到此類嘗試,將其 ip 列入黑名單 60 分鐘,在此期間前兩條規則不會讓此類主機有機會敲擊正確的端口;

下一條規則:

add action=add-src-to-address-list address-list="allow_remote_users" address-list-timeout=1m chain=input dst-port=16000 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules

將 ip 放入允許列表中 1 分鐘(足以建立連接),因為在所需端口 (16000) 上進行了第二次正確的敲門;

下一個命令:

move [/ip firewall filter find comment=RemoteRules] 1

將我們的規則向上移動到防火牆處理鏈,因為很可能我們已經配置了不同的拒絕規則,這將阻止我們新創建的規則工作。 Mikrotik 中的第一條規則從零開始,但在我的設備上,零被內置規則佔用,無法移動它 - 我將它移動到 1。因此,我們查看我們的設置 - 你可以在哪裡移動它並註明所需的號碼。

下一步設置:

/ip firewall nat
add action=dst-nat chain=dstnat comment="remote_rdp_to_33" src-address-list="allow_remote_users" dst-port=33890 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.33 to-ports=3389

將任意選擇的端口 33890 轉發到通常的 RDP 端口 3389 和我們需要的計算機或終端服務器的 ip。 我們為所有必要的內部資源創建此類規則,最好設置非標準(和不同的)外部端口。 自然,內部資源的ip要么是靜態的,要么是固定在DHCP服務器上的。

現在我們的 Mikrotik 已經配置好了,我們需要一個簡單的程序讓用戶連接到我們的內部 RDP。 由於我們主要是 Windows 用戶,我們創建一個簡單的 bat 文件並將其命名為 StartRDP.bat:

1.htm
1.rdp

1.htm分別包含以下代碼:

<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
нажмите обновить страницу для повторного захода по RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">

它包含兩個指向位於 my_router.sn.mynetname.net 的虛構圖片的鏈接 - 在我們的 Mikrotik 中啟用它後,我們從 Mikrotik DDNS 系統獲取此地址:轉到 IP-> 雲菜單 - 選中啟用 DDNS 複選框,單擊應用並複制我們路由器的 dns 名稱。 但這僅在路由器的外部 ip 是動態的或使用多個 Internet 提供商的配置時才有必要。

第一個鏈接中的端口:19000 對應於您需要敲的第一個端口,在第二個中,分別對應於第二個。 在鏈接之間有一條簡短的說明,說明如果我們的連接由於短暫的網絡問題而突然中斷時該怎麼辦 - 我們刷新頁面,RDP 端口為我們重新打開 1 分鐘,然後我們的會話恢復。 此外,img 標籤之間的文本對瀏覽器形成了微延遲,這降低了第一個數據包被傳送到第二個端口 (16000) 的可能性——到目前為止,在兩週的使用中還沒有出現過這種情況 (30人們)。

接下來是 1.rdp 文件,我們可以為所有用戶或單獨為每個用戶配置一個文件(我這樣做了 - 多花 15 分鐘比花幾個小時諮詢那些無法弄清楚的人更容易)

screen mode id:i:2
use multimon:i:1
.....
connection type:i:6
networkautodetect:i:0
.....
disable wallpaper:i:1
.....
full address:s:my_router.sn.mynetname.net:33890
.....
username:s:myuserlogin
domain:s:mydomain

這裡有趣的設置是 use multimon: i: 1 - 這包括使用多個監視器 - 有些人需要這個,但他們自己不會想到打開它。

connection type: i: 6 和 networkautodetect: i: 0 - 因為大多數 Internet 都在 10 Mbps 以上,然後打開連接類型 6(本地網絡 10 Mbps 及以上)並關閉 networkautodetect,因為如果默認情況下(自動) ,然後即使是罕見的小網絡延遲也會自動將我們的會話長時間設置為低速,這會在工作中造成明顯的延遲,尤其是在圖形程序中。

disable wallpaper: i: 1 - 禁用桌面圖片
username:s:myuserlogin - 我們指定用戶登錄名,因為很大一部分用戶不知道他們的登錄名
domain:s:mydomain - 指定域或計算機名稱

但是如果我們想簡化創建連接過程的任務,那麼我們也可以使用 PowerShell - StartRDP.ps1

Test-NetConnection -ComputerName my_router.sn.mynetname.net -Port 19000
Test-NetConnection -ComputerName my_router.sn.mynetname.net -Port 16000
mstsc /v:my_router.sn.mynetname.net:33890

還有一點關於 Windows 中的 RDP 客戶端:MS 在優化協議及其服務器和客戶端部分方面取得了長足的進步,實現了許多有用的功能 - 例如使用硬件 3D,優化顯示器的屏幕分辨率,多屏,等等。 但當然,一切都是在向後兼容模式下實現的,如果客戶端是 Windows 7,遠程 PC 是 Windows 10,那麼 RDP 將使用協議版本 7.0 工作。 但好處是您可以將 RDP 版本更新到更新的版本——例如,您可以將協議版本從 7.0 (Windows 7) 升級到 8.1。 因此,為了方便客戶端,需要盡可能的增加服務器部分的版本,以及掉鏈升級到新版本的RDP協議客戶端。

因此,我們擁有一種簡單且相對安全的技術來遠程連接到工作中的 PC 或終端服務器。 但是為了更安全的連接,我們的 Port Knocking 方法可以使攻擊更難幾個數量級,通過添加端口來檢查 - 你可以根據相同的邏輯添加 3,4,5,6 ... 一個端口,在這種情況下,直接入侵您的網絡幾乎是不可能的。

用於創建到 RDP 的遠程連接的空白文件.

來源: www.habr.com

添加評論