MikroTik настройка port knocking для VPN подключения

. Просмотров: 1214

Рейтинг:  3 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда не активнаЗвезда не активна
 

Предлагаю свою решение использования port-knocking для защиты на VPN сервера MikroTik.

Дано:

  • VPN сервер и VPN клиент, на обоих используетя Микротик.
  • Для VPN используется SSTP на 443 порт.
  • На серверере открывется 443 порт только после последовательного пинга длинной 200,100,300 байт.
  • Для VPN сервера внутренний адрес 10.1.2.1, внешний 1.2.3.4.

Превым делом убедитесь, что у вас VPN работает без этих настроек.

Настройка на сервере:

Создаем правила обработки входящих пингов разного размера. ip адрес пинговавший с этой последовательностью добавляем на минуту в адрес-лист VPN-Accept

/ip firewall filter
add action=add-src-to-address-list address-list=VPN-Phase1 address-list-timeout=5s chain=input in-interface=ether2-wan packet-size=200 protocol=icmp place-before=0
add action=add-src-to-address-list address-list=VPN-Phase2 address-list-timeout=5s chain=input in-interface=ether2-wan packet-size=100 protocol=icmp src-address-list=VPN-Phase1 place-before=0
add action=add-src-to-address-list address-list=VPN-Accept address-list-timeout=1m chain=input in-interface=ether2-wan packet-size=300 protocol=icmp src-address-list=VPN-Phase2 place-before=0

Последовательность совершено простая. Можете усложнить на свое усмотрение. Но, не забудьте тогда поправить скрипт на клиенте.

 

Разрешаем водящее соединение на 443 порт только для адресов в адрес-листе VPN-Accept

/ip firewall filter
add action=accept chain=input comment="SSTP server" connection-state=new dst-port=443 in-interface=ether2-wan protocol=tcp src-address-list=VPN-Accept place-before=0

 

 

Настройка клиента

Создаем скрипт, который будет отслеживать VPN поключение и при его отсутствии пинговать хост пакетами нужного размера. Не забудьте заменить на свое VPNname (имя vpn интерфейса) & ServerIP (вешний адрес vpn сервера)

/system script
add name=VPNcheck source=":\
    local VPNname \"sstp-out1\";\r\
    \n:local ServerIP 1.2.3.4;\r\
    \n\r\
    \n:local VPNrunning [/interface sstp-client get [find name=\$VPNname] runn\
    ing];\r\
    \n:if (!\$VPNrunning) do={\r\
    \n\t:local VPNdisabled [/interface sstp-client get [find name=\$VPNname] d\
    isabled ];\r\
    \n\t:if (!\$VPNdisabled) do={\r\
    \n\t\t:log info \"knock-knock\";\r\
    \n\t\t/ping count=2 size=200 \$ServerIP\r\
    \n\t\t/ping count=2 size=100 \$ServerIP\r\
    \n\t\t/ping count=2 size=300 \$ServerIP\r\
    \n\t}\r\
    \n}"

Если у вас sstp используется как резервный, например как в этом примере, то не забываем промаркировать эти пинги, например так:

/ip firewall mangle	
add action=mark-connection chain=output comment=icmp connection-state=new new-connection-mark=sstp_c packet-size=300 passthrough=yes protocol=icmp
add action=mark-connection chain=output comment=icmp connection-state=new new-connection-mark=sstp_c packet-size=100 passthrough=yes protocol=icmp
add action=mark-connection chain=output comment=icmp connection-state=new new-connection-mark=sstp_c packet-size=200 passthrough=yes protocol=icmp

 

Добавляем правило в netwatch которое пингует внутренний адрес vpn сервера и при его down запускает скрипт. Не забудьте поправить адрес на ваш, если требуется.

/tool netwatch add down-script=VPNcheck host=10.1.2.1

Как вариант, можно сделать чтобы скрипт запускался через шедулер.

На этом все. Удачи !

PS: все команды даны для обычного copy/paste через консоль.

 

 

Недостаточно прав для комментирования