在办公室远程工作。 RDP、Port Knocking、Mikrotik:简单且安全

由于covid-19病毒大流行和许多国家的全面隔离,许多公司继续工作的唯一方法是通过互联网远程访问工作场所。 远程工作有许多相对安全的方法 - 但考虑到问题的规模,需要一种简单的方法让任何用户都能远程连接到办公室,而不需要额外的设置、解释、繁琐的咨询和冗长的说明。 这种方法受到许多管理员 RDP(远程桌面协议)的喜爱。 通过 RDP 直接连接到工作场所理想地解决了我们的问题,除了一个大美中不足 - 保持 RDP 端口对互联网开放是非常不安全的。 因此,下面我提出一种简单但可靠的保护方法。在办公室远程工作。 RDP、Port Knocking、Mikrotik:简单且安全

由于我经常遇到使用 Mikrotik 设备作为互联网接入的小型组织,下面将展示如何在 Mikrotik 上实现这一点,但端口敲门保护方法很容易在具有类似输入路由器设置和防火墙的其他高级设备上实现。

简单介绍一下端口敲门。 连接到 Internet 的网络的理想外部保护是通过防火墙从外部关闭所有资源和端口。 尽管配置了此类防火墙的路由器不会以任何方式对来自外部的数据包做出反应,但它会侦听它们。 因此,您可以配置路由器,以便当在不同端口上接收到特定(代码)序列的网络数据包时,它(路由器)针对数据包来源的 IP 切断对某些资源(端口、协议、 ETC。)。

现在开始做生意。 我不会对 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 中启用该地址后,我们从 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 - 这包括使用多个显示器 - 有些人需要这个,但他们自己不会想到打开它。

连接类型:i: 6 和网络自动检测:i: 0 - 由于大多数互联网都在 10 Mbps 以上,因此打开连接类型 6(本地网络 10 Mbps 及以上)并关闭网络自动检测,因为如果默认情况下(自动) ,那么即使是罕见的小网络延迟也会自动将我们的会话设置为长时间低速,这可能会导致工作明显延迟,尤其是在图形程序中。

禁用壁纸: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 或终端服务器。 但为了更安全的连接,我们的端口敲门方法可以通过添加要检查的端口来使攻击难度提高几个数量级 - 您可以根据相同的逻辑添加 3,4,5,6 ... 端口,在这种情况下,直接入侵您的网络几乎是不可能的。

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

来源: habr.com

添加评论