Несколько вариантов ограничения доступа по ip к rdp за mikrotik
1) Самый простой вариант, если со стороны клиента есть белый статический ip адрес. Создается address list, добавляется в него ip адреса клиентов и разрешается доступ этому address list к нужному сервису в firewall. Например так:
/ip/firewall/address-list/
add list=trusted_rdp address=2.2.2.2
/ip/firewall/filter
add chain=forward src-address-list=trusted_rdp in-interface-list=WAN protocol=tcp dst-port=3389 action=accept
2) Вариант, если со стороны клиента нет статического адреса, но есть возможность использовать dynDNS сервис, например cloud от того же mikrotik или любой другой dDNS. Это будет работать как с белыми адресами, так и с серыми (но тут доступ получат не только нужный клиент, но и все, кто с ним находится за NAT провайдера. Что все равно сильно меньше, чем весь интернет).
Это можно сделать, например так:
/ip/firewall/address-list/
add list=trusted_rdp address=dynDNS.name
/ip/firewall/filter
add chain=forward src-address-list=trusted_rdp in-interface-list=WAN protocol=tcp dst-port=3389 action=accept
3) Вариант с созданием временного списка доверенных адресов с помощью Port Knocking. Подойдет, когда заранее не известно кто и откуда будет подключаться. Способ заключается в получении mikrotikом определенной последовательности пакетов от клиента по которой можно будет опознать клиента и добавить ip адрес отправителя в доверенный address list на какое-то время. В примере я буду использовать набор ICMP пингов определенного размера.
На mikrotik:
/ip/firewall/filter
add action=add-src-to-address-list address-list=pknock1 address-list-timeout=30s chain=input packet-size=229 protocol=icmp
add action=add-src-to-address-list address-list=pknock2 address-list-timeout=30s chain=input packet-size=138 protocol=icmp src-address-list=pknock1
add action=add-src-to-address-list address-list=pknock-trust address-list-timeout=12h chain=input packet-size=380 protocol=icmp src-address-list=pknock2
/ip/firewall/filter
add chain=forward src-address-list= pknock-trust in-interface-list=WAN protocol=tcp dst-port=3389 action=accept
на клиенте сделать скрипт для подключения, например такой:
ping 1.1.1.1 -l 201 -n 1
ping 1.1.1.1 -l 110 -n 1
ping 1.1.1.1 -l 352 -n 1
Default.rdp
Пара нюансов:
а) размер пакета, который должен получить микротик считать, как размер пакета, посылаемого клиентом + 28 байт размер заголовка icmp;
б) эти правила следует поднять выше стандартных для established, related правил. Иначе требуется сделать некоторый тайм аут между пакетами (около 10сек) для корректной работы.
4)Вариант ограничить доступ какой-то определенной страной или запретить подключение с ip адресов какой-тот страны.
Например, требуется разрешить доступ только с ip адресов РФ. Для этого нужно получить список нужных адресов, создать address list из них и создать правило в firewall (в будущем подумать, как обновлять список этот список).
IP адреса определенной страны можно получить с помощью www.iwik.org, например.
/tool fetch url=http://www.iwik.org/ipcountry/mikrotik/RU
/import file-name=RU
/ip/firewall/filter
add chain=forward src-address-list=RU in-interface-list=WAN protocol=tcp dst-port=3389 action=accept
5) Вариант оставить RDP порт отрытый всему интернету, но настроить блокировку ip адресов, с которых было несколько не удачных попыток подключения. Этот способ основан отслеживании новых подключений и когда количество пакетов с флагом syn будет больше, чем разрешено за определенное время, то ip адрес источника будет заблокирован.
Это можно сделать, например, так:
/ip firewall mangle
add action=add-src-to-address-list address-list=rdp_stage1 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp
add action=add-src-to-address-list address-list=rdp_stage2 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage1
add action=add-src-to-address-list address-list=rdp_stage3 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage2
add action=add-src-to-address-list address-list=rdp_stage4 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage3
add action=add-src-to-address-list address-list=rdp_stage5 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage4
add action=add-src-to-address-list address-list=rdp_drop address-list-timeout=1h chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage5
/ip firewall raw
add action=drop chain=prerouting dst-port=3389 protocol=tcp src-address-list=rdp_drop