08.05.2020
Тема: Исследование возможности при помощи ОС, ПО или сетевого оборудования ограничения на скачивание ехе файлов.
Цель работы: Исследовать возможности при помощи ОС, ПО или сетевого оборудования ограничения на скачивание ехе файлов.
Ход работы:
Mikrotik RouterOS, это достаточно гибкая, сетевая операционная система с обширным функционалом и достаточно большим количеством разнообразных функций и протоколов. Одной из таких функций, относящихся к разделу Firewall, является Layer7 protocol. И она не заслужена обделена вниманием, о ней мало информации и даже не все знают зачем она. Вот именно этот пробел, мы сегодня и постараемся заполнить, ведь данная особенность, открывает достаточно широкие возможности по определению вида трафика и его последующей сортировке. По своей сути, Layer7 protocol, является методом поиска совпадений по регулярным выражения в ICMP, TCP и UDP потоках. И работает следующим образом: с каждого соединения, берутся первые 10 пакетов или первые 2KB, в которых производится поиск совпадений. Таким образом, мы можем находить тот или иной вид трафика, и дальше обрабатывать его в Firewall - запрещать, перенаправлять, маркировать соединения и прочее.
Чаще всего, L7 используют для блокировки тех или иных сайтов или же работы тех или иных программ, но также можно использовать для ограничения на скачивание различных файлов.
Заходим в раздел Firewall и во вкладку L7 Protocol и называем «Block Exe» и записываем выражение:
GET .*(\.exe|\.bat|\.reg|\.cmd|\.scr|\.vbs|\.vbs|\.ws|\.wsf|\.wsc|\.apk)[^a-zA-Z0-9].*HTTP.*\n
Рассмотрим подробно:
GET — начало строки в которой происходит запрос чего-либо на сайте example.com
.* — сколько угодно любых символов
(\.exe|\.bat|\.reg|\.cmd|\.scr|\.vbs|\.vbs|\.ws|\.wsf|\.wsc|\.apk) — список того что ищем
.* — сколько угодно любых символов
[^a-zA-Z0-9] — знаки, ^=НЕ входящие в множество a-z, A-Z, 0-9
.*HTTP.*\n — HTTP, обрамленное любыми символами ( HTTP.* необязательно), и \n — перевод строки.
Рис.100. Настройка L7 Protocol.
Теперь создаем правило для Firewall.
Во вкладке «General» в поле «Chain» определяем «forward», в поле «In. Interface» выбираем интерфейс через который наш маршрутизатор соединен с локальной сетью.
Рис.101. Добавление правила для Firewall.
Во вкладке «Advanced» в поле «Layer7 Protocol» определяем выше созданное регулярное выражение (формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов) — Block Exe.
Рис.102. Настройка правила для Firewall.
Во вкладке «Action» в поле «Action» выбираем действие, которое будет выполняться в случае, если правило Firewall'a сработает — drop.
Рис.103. Настройка правила для Firewall.
Теперь пытаемся скачать .exe файл.
Рис.104. Пытаемся скачать .exe файл.
Как итог — выполнилась блокировка скачивания.
Рис.105. Блокировка скачивания exe-файла.
09.05.2020
Тема: Организовать ограничения по расписанию.
Цель работы: Организовать ограничения по расписанию.
Ход работы:
Для реализации задуманного нам потребуется использовать в роутере MikroTik скрипт и планировщик.
Сначала нужно привязать MAC адреса всех домашних устройств к IP адресам, и составить два списка с IP-адресами родительских устройств и устройств детей. Если вы это уже делали выше, то пропустите этот шаг.
Чтобы привязать MAC адреса, подключите все необходимые устройства к роутеру. Откройте меню IP - DHCP Server, перейдите на вкладку Leases, кликните правой кнопкой мыши на каждом устройстве и выберите Make Static.
Рис.106. Создание списков с IP-адресами.
Теперь составим два списка с IP-адресами:
- Parents-List - список IP-адресов устройств родителей
- Kids-List - список IP-адресов устройств детей
Списки добавляются в меню IP - Firewall на вкладке Address Lists. Проще всего это сделать командами ниже. Не забудьте поменять IP адреса на соответствующие вашим устройствам.
/ip firewall address-list add list=Parents-List address=192.168.88.254
/ip firewall address-list add list=Parents-List address=192.168.88.253
/ip firewall address-list add list=Kids-List address=192.168.88.252
/ip firewall address-list add list=Kids-List address=192.168.88.251
Добавляем правила NAT для разрешения доступа к интернету каждому списку IP адресов.
/ip firewall nat add chain=srcnat out-interface=ether1 src-address-list=Parents-List action=masquerade comment=Internet-For-Parents
/ip firewall nat add chain=srcnat out-interface=ether1 src-address-list=Kids-List action=masquerade comment=Internet-For-Kids
Старое правило NAT можно деактивировать, чтобы если к сети подключится незнакомое устройство, то у него не было интернета. Но если придут гости, включите его, чтобы у них появился интернет.
- Откройте меню IP - Firewall и перейдите на вкладку NAT.
- Нажмите левой кнопкой мыши на правило с комментарием "defconf: masquerade" и перетащите ниже созданных правил.
- Нажмите "красный крестик", чтобы деактивировать правило.
Рис.107. Создание правил NAT.
Проверьте, что на роутере правильно установлена дата и время в меню System – Clock.
Рис.108. Установка даты и времени.
Ниже указан скрипт включения / отключения интернета по расписанию. Отредактируйте в нем время, необходимое вам. Если вы использовали другой текст комментариев в правилах NAT, то измените параметр NatComment.
####################################
## Script to On / Off internet access for kids
####################################
:log warning "KidsInternetOnOff Script started.";
################################
## Set the internet ON and OFF times here
:local InternetOnTime "6:00";
:local InternetOffTime "9:00";
:local InternetOnTime2 "17:00";
:local InternetOffTime2 "22:00";
:local NatComment "Internet-For-Kids";
##
#################################
#################################
## Get Current Day Of Week
:local date [/system clock get date]
# Math Calculation here
:local result ""
:local months [:toarray "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec"]
:local daytbl [:toarray "sun,mon,tue,wed,thu,fri,sat"]
:local month [:pick $date 0 3]
:local day [:pick $date 4 6]
:local dayc [:pick $date 5 6]
:local year [:pick $date 7 11]
# if the first char is a 0 (zero) only read last char, else script fails
:if ([:pick $date 4 5] = 0) do={ :set day ($dayc)}
:local sum 0
:local aaa 0
:local yyy 0
:local mmm 0
:local nmonth 1
:for mindex from=0 to=[:len $months] do={
:if ([:pick $months $mindex] = $month) do={:set nmonth ($mindex + 1) }
}
:set aaa ((14 - $nmonth) / 12)
:set yyy ($year - $aaa)
:set mmm ($nmonth + 12 * $aaa - 2)
:set sum (7000 + $day + $yyy + ($yyy / 4) - ($yyy / 100) + ($yyy / 400) + ((31 * $mmm) / 12))
:set sum ($sum - (($sum / 7) * 7))
:set result [:pick $daytbl $sum]
:log info "Today is $result."
##
##################################
##################################
## Get Current Time and NAT Status
:local CurrentTime [/system clock get time];
## Setup log prefix
:local LogPrefix "KidsInternet $CurrentTime";
## Check current ON or OFF status of Kids NAT#
:local InternetDisabled [/ip firewall nat get [find comment=$NatComment] disabled];
:log info "$LogPrefix Disabled = $InternetDisabled";
##
##################################
##################################
## Check Time If It Is Workday
:local workday [:toarray "mon,tue,wed,thu,fri"]
:if ($workday ~ $result) do={
:log info "Today is Workday.";
## Where the ON time is set earlier than the OFF time #
:if (($InternetOnTime < $InternetOffTime) || ($InternetOnTime2 < $InternetOffTime2)) do {
## Internet should be ON between these times #
:if ((($CurrentTime > $InternetOnTime) and ($CurrentTime < $InternetOffTime)) || (($CurrentTime > $InternetOnTime2) and ($CurrentTime < $InternetOffTime2))) do {
if ($InternetDisabled=true) do {
:log warning "$LogPrefix was OFF, now switching ON.";
/ip firewall nat enable [find comment=$NatComment];
}
} else {
if ($InternetDisabled=false) do {
:log warning "$LogPrefix was ON, now switching OFF.";
/ip firewall nat disable [find comment=$NatComment];
}
}
}
##################################
## Kids Internet ON If It Is NOT Workday
} else={
:log info "Today is NOT Workday."
if ($InternetDisabled=true) do {
:log warning "$LogPrefix was OFF, now switching ON.";
/ip firewall nat enable [find comment=$NatComment];
}
}
##
##################################
:log warning "KidsInternetOnOff Script completed.";
Добавим скрипт в MikroTik.
- Откройте меню System - Scripts.
- На вкладке Scripts нажмите "синий плюсик".
- В поле Name укажите название скрипта KidsInternetOnOff.
- Ниже в поле Source вставьте текст скрипта.
- Нажмите кнопку OK.
Рис.109. Создание скрипта.
Проверим работу скрипта.
- Откройте меню IP - Firewall и перейдите на вкладку NAT, чтобы отслеживать активацию/деактивацию правила NAT с комментарием "Internet-For-Kids".
- Откройте меню Log, чтобы отслеживать выполнение скрипта.
- В меню System - Scripts выберите добавленный скрипт и нажмите кнопку Run Script.
После этого вы увидите в логах процесс выполнения скрипта и сможете отслеживать активацию/деактивацию правила NAT.
Рис.110. Лог активация и деактивации правила NAT.
Теперь добавим в планировщик выполнение данного скрипта каждую минуту.
- Откройте меню System - Sheduler.
- Нажмите "синий плюсик", чтобы добавить задание.
- В поле Name укажите название KidsInternetOnOff.
- В поле Start Time укажите время 00:00:00
- В поле Interval укажите 00:01:00.
- В поле On Event укажите команду /system script run KidsInternetOnOff, которая будет запускать скрипт с названием KidsInternetOnOff.
- Нажмите кнопку OK.
Рис.111. Создание планировщика.
После этого в меню Log вы увидите, как каждую минуту выполняется скрипт.
Если вы не хотите, чтобы информационные сообщения выводились в лог и забивали его, откройте текст скрипта и поставьте символ решетки # перед командами, которые начинаются на ":log". Оставьте не закомментированными строки :log warning "$LogPrefix was OFF, now switching ON."; и :log warning "$LogPrefix was ON, now switching OFF."; , чтобы отслеживать время включения / отключения интернета.
Рис.112. Просматривание логов.