在办公室的远程工作。RDP,Port Knocking,Mikrotik:简单又安全

在许多国家中,与covid-19病毒大流行和普遍隔离有关,许多公司继续工作的唯一方法是通过Internet远程访问工作站。远程工作有许多相对安全的方法-但鉴于问题的严重性,您需要一种简单的方法让任何用户远程连接到办公室,而无需其他设置,说明,繁琐的协商和冗长的说明。此方法是许多管理员RDP(远程桌面协议)的最爱。通过RDP直接连接到工作场所理想地解决了我们的问题,但美中不足的是-为Internet保持RDP端口开放非常不安全。因此,下面我提出一种简单但可靠的保护方法。图片

由于我经常遇到将Mikrotik设备用作Internet访问的小型组织,因此下面将说明如何在Mikrotik上实现此功能,但是端口敲入保护方法很容易在其他高级设备上实现,这些输入设备和输入路由器的设置相同防火墙

浅谈港口敲门。当所有资源和端口都被防火墙从外部关闭时,对于连接到Internet的网络的理想外部保护。而且,尽管具有这样配置的防火墙的路由器不会对来自外部的数据包做出任何反应,但它会侦听它们。因此,您可以配置路由器,以便当您在不同端口上收到某个(代码)网络数据包序列时,该路由器(路由器)用于获取来自数据包的IP地址,从而可以访问某些资源(端口,协议等)。

现在到了重点。我不会在Mikrotik上进行防火墙设置的详细说明-互联网上有很多为此提供高质量的资源。理想情况下,防火墙会阻止所有传入的数据包,但是

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


允许来自已建立(相关)连接的传入流量。
现在在Mikrotik上配置端口敲门:

/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的DDNS系统获取此地址,之前已在我们的Mikrotik中启用了此地址:转到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

这里有趣的设置中使用了multimon:i:1-这包括使用多台显示器-有些需要使用,但他们不会考虑自己打开它。

连接类型:i:6和networkautodetect:i:0-由于大多数Internet都在10 Mbps以上,因此请打开连接类型6(本地网络10 Mbps及更高)并禁用networkautodetect,因为默认情况下(自动),它甚至很少见网络延迟会自动为我们的会话永久设置一个被低估的速度,这会在工作中造成明显的延迟,尤其是在图形程序中。

禁用墙纸:i:1-禁用桌面图像
用户名: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或终端服务器。但是为了获得更安全的连接,我们的端口敲门方法通过添加检查端口可以使攻击复杂几个数量级-您可以添加3、4、5、6 ...相同的逻辑,在这种情况下,直接入侵您的网络几乎是不可能的。

用于创建与RDP的远程连接的文件空白

All Articles