Просмотр Исходного

Пример описывает возможность разрешить доступ группы абонентов к заданным хостам в Интернет. Это может быть полезно, если Вы устанавливаете IPTV приставку у абонента с возможностью просмотра *youtube* и подобных сервисов, но при этом остальные сайты абоненту не нужны.

h6. 1.Создание списка разрешенных хостов:

Список разрешенных хостов будет называться *crb_trust_custom_list*, разрешаем доступ к хосту 10.20.30.40:
{code}
/ip firewall address-list
add address=10.20.30.40 list=crb_trust_custom_list
{code}

h6. 2. Модифицируем схему прохождения трафика в цепочке forward:

Создадим правила разрешающие хождение трафика между адресами в листах *crb_trust_custom_list* и *crb_custom_auth_list*:
{code}
/ip firewall filter add chain=crb_forward comment=trust_custom_accept_dst dst-address-list=crb_trust_custom_list src-address-list=crb_custom_auth_list action=accept
/ip firewall filter add chain=crb_forward comment=trust_custom_accept_src src-address-list=crb_trust_custom_list dst-address-list=crb_custom_auth_list action=accept
/ip firewall filter add chain=crb_forward comment=trust_custom_drop_dst dst-address-list=!crb_trust_custom_list src-address-list=crb_custom_auth_list action=drop
/ip firewall filter add chain=crb_forward comment=trust_custom_drop_src src-address-list=!crb_trust_custom_list dst-address-list=crb_custom_auth_list action=drop
{code}

Необходимо разместить данные правила перед правилом блокировки неавторизованных абонентов с помощью команды *move* RouteOS:
{code}
/ip firewall filter move numbers=[find comment=trust_custom_accept_src] destination=[[find comment=drop_no_auth] -1 ]
/ip firewall filter move numbers=[find comment=trust_custom_accept_dst] destination=[[find comment=drop_no_auth] -2 ]
/ip firewall filter move numbers=[find comment=trust_custom_drop_dst] destination=[[find comment=drop_no_auth] -3 ]
/ip firewall filter move numbers=[find comment=trust_custom_drop_src] destination=[[find comment=drop_no_auth] -4 ]
{code}

h6. 3. Модифицируем скрипт событий:

Для заполнения адрес листа *crb_custom_auth_list* ip адресами абонентов нужно модифицировать скрипт [session|Пользовательская схема]. Переопределим две функции *user_add* и *user_del* Так же обратите внимание, что в примере используется переменная *tarif_id* равная *1136*. Это значит, что адреса в список *crb_custom_auth_list* будут добавляться только, для абоенентов с id тарифа *1136*.

{code}
#!/bin/bash
. $(dirname $BASH_SOURCE)/../bin/session

user_add(){
if [ "$auth_type" == "1" ]; then
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_auth_list address=$ip comment=${ip}_crb_auth
fi
if [ "$tarif_id" == "1136" ]; then
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_custom_auth; do :; done
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_custom_auth_list address=$ip comment=${ip}_crb_custom_auth
fi
}

user_del(){
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_negbal; do :; done
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_blocked; do :; done
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_custom_auth; do :; done
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /queue simple remove numbers=crb_${ip}; do :; done
}
{code}