Как автоматизировано защитить Mikrotik от несанкционированного доступа через API, порт 8728 +1


AliExpress RU&CIS

Если вы используете на своём маршрутизаторе службу HotSpot и управляете сетью с помощью удаленного сервера, через API, то эта статья будет вам интересна.

Обычно, для запрета доступа через определенные порты, открывают меню IP → Services и отключают нужный порт, путем выделения нужной строки, двойным кликом и нажатия кнопки «Disable». Как показано на рисунках ниже.

image

image

В случае, когда необходимо разрешить доступ до маршрутизатора, только, с одного IP-адреса, то в настройках порта, в графе «Available From», указывается нужный IP адрес или вся подсеть, например 192.168.1.0/24, тогда будет разрешён доступ со всех IP этой подсети. На рисунке ниже показано, как добавить один IP.

image

Что делать, если ваш Mikrotik управляется удаленным сервером, имеющим своё доменное имя, через API порт 8728. Иногда, IP-сервера может измениться, например, по причине смены оператора связи, а вы не будете об этом знать.

Когда у меня возник подобный вопрос, я решил написать скрипт, который будет запускаться через определённый интервал времени и контролировать необходимые настройки. Скрипт будет выполнять следующие действия:

  • проверит наличие правила, во вкладке IP → Hotspot → Walled Garden IP List, разрешающего доступ, для всех пользователей «Hotspot», до доменного имени сервера, правило необходимо, только для извлечения IP доменного имени;
  • если правила нет, скрипт создаст его;
  • из созданного правила скрипт извлечёт IP адрес доменного имени сервера;
  • отредактирует адрес в графе «Available From», в настройках портов, меню IP → Services, напротив порта 8728.

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

#присвоим переменной yourServer доменное имя нашего сервера
:global yourServer "домен.site"; 
#в переменную res будем записывать результат поиска правила, по умолчанию «null»
:global res "null"; 
#в переменную addr будем записывать извлеченный IP адрес сервера, по умолчанию «null»
:global addr "null";
#запишем лог, о том, что собираемся выполнить поиск правила и начнем поиск при помощи цикла foreach
:log info message="Check of record governed";
/ip hotspot walled-garden ip; 
:foreach i in=[find where dst-host=$yourServer] do={
	:set res [get $i dst-host];
}; 
#если правило отсутствует
:if ($res = "null") do={
	#запишем лог
	:log info message="The rule is absent";
	#добавим правило
	/ip hotspot walled-garden ip add action=accept dst-host=$yourServer; 
	#запишем лог
	:log info message="The rule is created";
	#запишем лог
	:log info message="The pause is established - 10 sec";
	#выждем паузу, чтобы автоматически создалось правило с IP сервера во вкладке IP - > Hotspot -> Walled Garden
	:delay 10;
	#запишем лог
	:log info message="Time out pause 10 sec";
	#найдем созданное правило и извлечём IP сервера
	/ip hotspot walled-garden; 
	:foreach n in=[find where comment=$yourServer] do={
		:set addr [get $n dst-address]; 
		#изменим настройки доступа до Mikrotik
		/ip service set address=$addr [find port=8728];
	};
	#запишем лог
	:log info message="Control of access to on API is changed";
} else={
	#найдем созданное правило и извлечём IP сервера
	/ip hotspot walled-garden; 
	:foreach n in=[find where comment=$yourServer] do={
		:set addr [get $n dst-address]; 
		#изменим настройки доступа до Mikrotik
		/ip service set address=$addr [find port=8728];
	};
	#запишем лог
	:log info message="Control of access to on API is changed";
};

Как подключить скрипт к Mikrotik. Заходим в меню System → Scripts.

image

Нажимаем «+» добавить скрипт и вписываем, сам скрипт, в поле «Source», нажимаем «Ок».

image

Далее установим интервал автоматического запуска скрипта, для этого перейдем в меню System → Scheduler.

image

Добавим команду и интервал времени, 20 минут, для запуска скрипта «scripts1».

image

Теперь, каждые 20 минут будет запускаться скрипт, который будет проверять IP домена сервера и изменять его в настройках доступа к маршрутизатору по API.

Ниже приведено демонстрационное видео по подключению скрипта с последующим проверочным запуском.




Комментарии (6):