Пример описывает возможность разрешить доступ группы абонентов к заданным хостам в Интернет. Это может быть полезно, если Вы устанавливаете IPTV приставку у абонента с возможностью просмотра youtube и подобных сервисов, но при этом остальные сайты абоненту не нужны.
1.Создание списка разрешенных хостов:
Список разрешенных хостов будет называться crb_trust_custom_list, разрешаем доступ к хосту 10.20.30.40:
/ip firewall address-list add address=10.20.30.40 list=crb_trust_custom_list
2. Модифицируем схему прохождения трафика в цепочке forward:
Создадим правила разрешающие хождение трафика между адресами в листах crb_trust_custom_list и crb_custom_auth_list:
/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
Необходимо разместить данные правила перед правилом блокировки неавторизованных абонентов с помощью команды move RouteOS:
/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 ]
3. Модифицируем скрипт событий:
Для заполнения адрес листа crb_custom_auth_list ip адресами абонентов нужно модифицировать скрипт session. Переопределим две функции user_add и user_del Так же обратите внимание, что в примере используется переменная tarif_id равная 1136. Это значит, что адреса в список crb_custom_auth_list будут добавляться только, для абоенентов с id тарифа 1136.
#!/bin/bash . $(dirname $BASH_SOURCE)/../bin/session user_add(){ if [ "$auth_type" == "1" ] && ! [ "$tarif_id" == "1136" ]; 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 [ "$auth_type" == "1" ] && [ "$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 }