Wi-CAT LLC

Wireless Comprehensive Advanced Technology. Build your network now.

Wi-CAT LLC
Навигация Форума
Вы должны войти, чтобы создавать сообщения и темы.

(решено) Блокировка сервисов по расписанию

Здравствуйте. Есть необходимость с помощью планировщика:

  1. включения/отключения определенного порта Lan (например, eth1);
  2. включения/отключения PPPoE.

Как использовать планировщик я знаю (настраивал включение/отключение WiFi). Подскажите мне пожалуйста непосредственно команды для 1 и 2 пунктов. Спасибо.

  1. в лоб не выйдет см логику link_down/up в  /etc/scripts/config-swmv.sh
  2. service vpnhelper stop/start
Цитата: sfstudio от 23/11/2020, 20:40
  1. в лоб не выйдет

Тогда так, надо "вкл./выкл." Интернет на определенном Lan.

Это ещё более проблематично и требует разбивки каждого пота по vlan и затем сборкой их в софтовый бридж.

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

А не будет ли проще запретить/"отпретить" Интернет определенному Mac-у на этом Lan?

Оффтоп: скорость поддержки поражает.

Ещё раз. На уровне софта не видно какой там порт. Тупо по маку фильтровать в FORWARD цепочке проблем нет.  Гугл iptables forwad по мак заблокировать уверен расскажет как это сделать. Но привязать к LAN порту будет уже не так просто просто потому что с точки зрения софта это всё один интерфейс.

Второй пункт реализовал. А вот с первым проблема. Команда iptables -I FORWARD -m mac --mac-source 00:0F:EA:91:04:08 -j DROP зарезает Интернет на телефоне/планшете/компьютере (разумеется при записи их Mac-ов). А вот на телевизоре (на котором и нужно собственно зарезать) как шел просмотр IPTV через Интернет по Lan, так и остался. Не могу понять почему. Покурил руководство по iptables, и пробовал такие команды: iptables -I FORWARD (OUTPUT) -o eth1 -j DROP (iptables -I OUTPUT -d 192.168.1.71 -j DROP  Разумеется IP зафиксировать). Все безуспешно. Прошу помочь.

P.S. Пока для отключения IPTV на телевизоре использую отключение vpn PPPoE, что понятное дело неудобно.

ipv6? Рандомизация MAC на телике?

В output ничего добавлять не надо. Только FORWARD влияет на транзитный трафик.

 

Цитата: sfstudio от 26/11/2020, 11:16

ipv6? Рандомизация MAC на телике?

 

Нет конечно, ничего из этого. Более того, так ведут себя два телевизора Samsung Smart TV: один на Orsay, другой на Tizen. Просмотр в приложении Ott-Play.

Чудес не бывает. Фильтрация по маку в FORWARD цепочке гарантированно блокирует мир. Так что смотрите догадки выше. Ну и учитесь использовать tcpdump для диагностики потобного (ну что по факту куда ходит и с какими реквизитами), почти уверен рандомизация. Доки по нему гуглятся на раз.

Да, ещё момент, для уже установленных соединений вновь добавленные правила применяться будут только по истечению таймаута в conntrack cache ядра.

Что бы применялись сразу можно сбросить кэш принудительно echo f > /proc/net/nf_conntrack (для всех) или echo IP > /proc/net/nf_conntrack конкретного IP.

При сбросе кэша текущие соединения порвутся.

Цитата: sfstudio от 26/11/2020, 11:36

Да, ещё момент, для уже установленных соединений вновь добавленные правила применяться будут только по истечению таймаута в conntrack cache ядра.

 

А вот это мысль. А сколько времени таймаут?

sysctl -a | grep conntrack расскажет о текущих настройках контрака

Спасибо. Вечером позанимаюсь.

Цитата: sfstudio от 26/11/2020, 11:36

для уже установленных соединений вновь добавленные правила применяться будут только по истечению таймаута в conntrack cache ядра

Проверил. Действительно дело было в этом. А я ожидал реакции сразу.
tcpdump показал, что mac не меняется. Спасибо.

Напоминаю, т.к. это раздел обмена решениями между пользователями, а не мной и пользователями (т.к. это иначе называется и живёт в другом разделе) то призываю что бы результатом сих изысканий на выходе появлялся краткий step by step мануал для повторения другими с минимальным уровнем подготовки.

Спасибо.

Целью данного решения была реализация "родительского контроля" путем отключения Интернета на всех устройствах или на определенном в определенные дни и определенное время. Роутер (в моем случае это FT-AIR-DUO-G) содержит планировщик, включаемый через веб-интерфейс. Настройка же планировщика осуществляется через командную строку.

Воспользуемся инструкцией одного из пользователей и внесем в нее необходимые изменения:

1. В веб-интерфейсе в разделе "Сервисы" включить планировщик (там же ссылка на описание crontab)
2. Подключиться через SSH
3. Команда crontab -e
4. В редакторе нажать i (букву "i" на клавиатуре), включится режим вставки и ввести задание:
00 11 * * * service vpnhelper stop (у меня это выключение PPPoE в 11:00 каждый день)
00 15 * * * service vpnhelper start (включение PPPoE в 15:00)
00 09 * * 2-5 iptables -I FORWARD -m mac --mac-source A4:46:7A:99:2D:13 -j DROP (отключение Интернет на устройстве с mac A4:46:7A:99:2D:13 в 9:00 со вторника по пятницу)
00 10 * * 2-5 iptables -D FORWARD -m mac --mac-source A4:46:7A:99:2D:13 -j DROP (включение Интернет в 10:00)
5. Нажать эскейп дважды
6. ввести :wq (на клавиатуре нажать ": w q ", Энтер)
7. Для сохранения дать команду fs save && reboot

После перезагрузки расписание сохраняется, но после обновления прошивки стирается.

Спасибо, надеюсь остальные возьмут пример.

Так же я расписывал уже как можно сделать пакет RWFS что бы руками каждый раз не делать заново после обновления.

я во времена wive-ng-rtl  добавлял правило iptables  с опцией time для нескольких девайсов по макам. Один раз добавил и без всяких кронов. Только с часовым поясом надо разобраться.   Тут такой функционал работает (вроде нужен доп-модуль)?

CONFIG_NETFILTER_XT_MATCH_TIME=m ;)

Но кто бы о нём ещё помнил =)))

А так да, оформить скриптиком в 3 строчки, забросить в /etc/iptables.d и сказать fs save. Ну или в пакет оформить. И будет счастье.

К сожалению практически не разбираюсь в командной строке linux, ssh и т.п...

Но нужно как то прописать, чтобы на ночь интернет раздача на определенный мак адрес пользователя блокировалась (чтобы ребенок спал, а не сидел ночами напролет в интернете). Можете помочь и по шагам объяснить, что и как сделать, чтобы с 22:00 до 9:00 ежедневно блокировать интернет для одного мак адреса. Буду очень благодарен!

Цитата: sfstudio от 03/12/2020, 11:24

CONFIG_NETFILTER_XT_MATCH_TIME=m ;)

Но кто бы о нём ещё помнил =)))

А так да, оформить скриптиком в 3 строчки, забросить в /etc/iptables.d и сказать fs save. Ну или в пакет оформить. И будет счастье.

Может распишите по шагам, как все сделать?

Можете воспользоваться инструкцией выше, немного изменив(MAC-адреса на свои поменяйте):

1. В веб-интерфейсе в разделе "Сервисы" включить планировщик (там же ссылка на описание crontab)
2. Подключиться через SSH
3. Команда crontab -e
4. В редакторе нажать i (букву "i" на клавиатуре), включится режим вставки и ввести задание:
00 23 * * * iptables -I FORWARD -m mac --mac-source A4:46:7A:99:2D:13 -j DROP
00 07 * * * iptables -D FORWARD -m mac --mac-source A4:46:7A:99:2D:13 -j DROP
5. Нажать эскейп дважды
6. ввести :wq (на клавиатуре нажать ": w q ", Энтер)
7. Для сохранения дать команду fs save && reboot

Чтобы после каждого обновления не вбивать руками задачи, можно оформить пакет RWFS:

tar c -j /etc/crontabs/root > /tmp/web/rwfs.tar.bz2

После чего его можно будет забрать по ссылке http://192.168.1.1/rwfs.tar.bz2 предварительно авторизовавшись в веб-интерфейсе. При необходимости адрес/порт заменить на свои.

Теперь после каждого обновления ПО можно идти в Администрирование - Управление - Загрузка RW-FS (не путать со следующим пунктом!) и загружать свой пакет.

Цитата: CHIPSET от 24/02/2021, 14:33

Чтобы после каждого обновления не вбивать руками задачи, можно оформить пакет RWFS:

 
 
 
 
tar c -j /etc/crontabs/root > /tmp/web/rwfs.tar.bz2
tar c -j /etc/crontabs/root > /tmp/web/rwfs.tar.bz2
 
tar c -j /etc/crontabs/root > /tmp/web/rwfs.tar.bz2

После чего его можно будет забрать по ссылке http://192.168.1.1/rwfs.tar.bz2 предварительно авторизовавшись в веб-интерфейсе. При необходимости адрес/порт заменить на свои.

Теперь после каждого обновления ПО можно идти в Администрирование - Управление - Загрузка RW-FS (не путать со следующим пунктом!) и загружать свой пакет.

Скажите, а как этот загруженный пакет убрать из роутера, если в нем пропала необходимость?

Rwfs сбоасывается при обновлении или по кнопке сброса настроек в дефолт. По другому никак.

Настройки при этом можно сохранить отдельно файлом.

 

Для того, чтобы убрать пакет rwfs, сохранил настройки в файл, сделал сброс, залил настройки. В crontab осталось задание. Я его удаляю, делаю fs save && reboot, а все равно в crontab появляется задание. И как убрать это задание?

Это видимо потому что crontab сейчас не правит задачи. Попробуйте руками через

vi /etc/crontabs/root

Далее как обычно - сохраняем изменения в редакторе(точно также), fs save && reboot

Цитата: CHIPSET от 28/02/2021, 15:04

Это видимо потому что crontab сейчас не правит задачи. Попробуйте руками через

 
 
 
 
vi /etc/crontabs/root
vi /etc/crontabs/root
 
vi /etc/crontabs/root

Далее как обычно - сохраняем изменения в редакторе(точно также), fs save && reboot

Спасибо, помогло. Кстати, на команду tar c -j /etc/crontabs/root > /tmp/web/rwfs.tar.bz2 роутер ругается: tar: removing leading '/' from member names Видимо, ему не нравится синтаксис.

Это нормально. Архив всё же создаётся.

Цитата: Raund_Mc от 20/01/2021, 19:00

Может распишите по шагам, как все сделать?

C 3.6.7 доступно в UI

Загруженные файлы:
  • Вам нужно войти, чтобы просматривать прикрепленные файлы..

Решил потестировать блокировку по времени. Создал запрещающее правило для MAC-адреса телефона - интерфейс LAN на время с 23:00 до 23:30(тестировал в промежутке). И не срабатывает, хотя правило в iptables появляется. Без указания времени всё верно отсекает. Часовой пояс перед тестированием выбрал верный и время на маршрутизаторе проверил. Рандомизация MAC не используется. Переподключаться к сети также пробовал. G, 4.1.10

Глянул код. Вижу проблему. Sadler не учёл что xt_time динамически меняют код возврата в зависимости от времени, т.е. когда разрешены при SYN соединения обработаются и вернётся ACCEPT иначе REJECT, после чего соединение закэшируется контраком и начнёт подпадать под правило ESTABLISHED/RELATED и аццептиться уже не зависимо от того что думает xt_time ибо до него дело уже не дойдёт никогда.

Т.е. правила xt_time должны добавляться в цепочку первыми, т.е. просто используем -I вместо -A для этих правил. Будет в новой версии.

Однако что опять таки замечу, что никто кроме вас не удосужился даже попробовать. ОООчень востребовано, а сколько было бурлений что нет такого функционала, а оказалось что он и нафиг никому не нужен особо =)))

Как только Вы развеяли миф об эффективности блокировки по MAC, так сразу люди пошли окольными путями(рубить VPN/Wi-Fi). Но раз ко мне обратились, значит всё же есть ситуации, где это нужно(где адрес точно не поменяется). А ещё встречается ряд людей, которые ищут меню "Родительский контроль" или "Интернет по расписанию" и не найдя ничего просто забивают, типа "нет такой функции, но что поделаешь".

И правильно делают что забивают. Не создают к себе лишний негатив со стороны ребёнка. ;)

Проверяйте. Должно зажить. У себя не проверял ибо ну совсем другим занят.

P.S. Вообще можно ж политику в дроп выставить и разрешить только известным макам, и рандомизация пойдёт в лес. =)

Воспитанию их учить не буду, но про негатив согласен)

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

Про политику в обсуждении на спортлото я и сам упоминал, но людям нужна привязка ко времени, а значит от планировщика они не уйдут.

Правила местами поменялись, но доступ есть

А если дропнуть вообще всё время кроме 1 минуты =) Кстати счётчик у правила тикает?

Там ещё дело в том что юзается типа --kerneltz но что-то мне подсказывает что эта фигня не работает и придётся Sadler`у писать трансляцию локального времени в UTC и убирать опцию из генерилки.

Да и универсальнее будет ИМХО. LibC вроде было что-то что бы транслировать время из локального в UTC штатное...

Больше ничего в голову не приходит.

Хотя опять же libxt_time.c в iptables должен это всё сам пересчитать. Но проверить стоит.

Там ещё дело в том что юзается типа --kerneltz но что-то мне подсказывает что эта фигня не работает и придётся Sadler`у писать трансляцию локального времени в UTC и убирать опцию из генерилки.

Либо посмотреть, как эта опция реализована, и почему у нас она не срабатывает (если это так).

Попробуйте ручками как будет время https://www.cyberciti.biz/tips/iptables-for-restricting-access-by-time-of-day.html в самое начало форварда.

Будет что-то типа

iptables -I FORWARD -m time --timestart 12:00 --timestop 13:00 -j DROP

т.е. весь форвард для всех блокировать ежедневно с 12 до часу. Время в UTC. Ну что бы проверить что модуль работает.

Цитата: Sadler от 27/12/2021, 16:45

Там ещё дело в том что юзается типа --kerneltz но что-то мне подсказывает что эта фигня не работает и придётся Sadler`у писать трансляцию локального времени в UTC и убирать опцию из генерилки.

Либо посмотреть, как эта опция реализована, и почему у нас она не срабатывает (если это так).

Ты же проверял и у тебя работала когда реализовывал? =) Я тебе скажу почему =) Потому что нет RTC потому ядру фиолетово на таймзону и никто её ядру даже не передаёт.  Поэтому написать функцию конверсии Locat2UTC (если нет такой в LibC)  и заюзывать где нужно. В перспективе этот кейз будет не один.

Но сначала убедиться что именно в трасляции времени проблема. Т.е. задать руками и проверить.

Цитата: sfstudio от 27/12/2021, 16:33

А если дропнуть вообще всё время кроме 1 минуты

Тогда срабатывает.

Тестируя в ~15:45 написал: iptables -I FORWARD -m time --timestart 15:40 --timestop 15:50 -j DROP и доступ остаётся. Видимо действительно проблема с форматом. Кстати как альтернативу политике белых адресов радио, можно будет пользователям предлагать такой вариант(если устраивает, что отрублены все). Или по умолчанию запрещать, доверенным - разрешать всегда, а остальным - разрешать по расписанию. Как удобно(если не ожидаются гости).

Что касается что можно крутить в драйвере, гуглите MTK_Wi-Fi_SoftAP_Software_Programming_Guide версии 4.* но:
1) не всё реально крутится на лету
2) не всё будет работать и чинить эти вещи точно никто не будет ибо это дебаг крутилки и в рабочем режиме не юзаются
3) некоторые крутилки могут привести к полностью непредсказуемому поведению и даже порче фактори со всеми вытекающими

Крутить nvram по крону точно не стоит. С xt_time починим через UI.

Цитата: sfstudio от 27/12/2021, 13:06

Глянул код. Вижу проблему. Sadler не учёл что xt_time динамически меняют код возврата в зависимости от времени, т.е. когда разрешены при SYN соединения обработаются и вернётся ACCEPT иначе REJECT, после чего соединение закэшируется контраком и начнёт подпадать под правило ESTABLISHED/RELATED и аццептиться уже не зависимо от того что думает xt_time ибо до него дело уже не дойдёт никогда.

Т.е. правила xt_time должны добавляться в цепочку первыми, т.е. просто используем -I вместо -A для этих правил. Будет в новой версии.

Однако что опять таки замечу, что никто кроме вас не удосужился даже попробовать. ОООчень востребовано, а сколько было бурлений что нет такого функционала, а оказалось что он и нафиг никому не нужен особо =)))

Недавно купил FT-AIR-DOU-G.  До этого keenetic Lite III. 

Функционал блокировки по времени нужен. Но, т.к. он сделан для технических специалистов, то обычные юзеры не будет им пользоваться. А технических специалистов в разы меньше. А на форумах сидят еще меньше, а тех кто что-то пишут еще меньше(в основном читают). Поэтому, если кто-то написал, что функционал нужен, то умножайте на 100.

Почему не пользуются.
Все дело в простоте. На Кинетике есть отдельный пункт, который, скорее всего делает, тоже самое. Но есть нюанс.  Тут нужно понимать или слепо копировать iptables из инструкции. А там нужно выбрать имя устройства/mac и время когда у него доступен/заблокирован Интернет. 

Давайте я вам поясню (хотя уже устал). Я могу умножить хоть на 800, но мы не производители оборудования. А именно они решают заказывать нам работу над тем или иным функционалом или нет. Вы же понимаете, что любая работа должна быть оплачена?

В данном случае вы обратились не по адресу. Вам нужно обращаться с предложениями к производителю оборудования.

Детально расписано тут https://wi-cat.ru/forums/topic/465/

800 раз говорил, что устройство выбирается под задачу, а не наоборот. И специально для этого есть demo UI. Нет никакого смысла покупать оборудование которое вам не подходит (не важно по какой причине) в надежде что написав производителю софта (не очень понятно почему не производителю оборудования) резко появится то что вам нужно и в том виде в котором хочется.

И уж тем более брать железо которое априрори ориентировано на настройку силами подготовленных специалистов, а не конечными пользователями, ну если не спец.  Или ждать что там будет комбайн с кучей свистелок по крайней мере странно.

Ещё раз попрошу перестать сравнивать подходы к операторскому оборудованию и розничными железяками и ПО. Это 2 разных мира, каждый со своими причудами и ориентирами. И внезапно  ценниками.

Если Wireless-Cat решит стать самостоятельным розничным вендором (что крайне маловероятно просто из-за необходимости не кислых инвестиций), то поверьте мы всё умножим и прикинем. Включая цену до уровня того кого вы приводите в пример.

Поэтому если желаете видеть что-то в UI - пишите производителю железки. И им поясняйте почему это повысит их продажи и потраченные ими деньги на оплату нам работы окупятся.

Нам писать смысла около нуля, у нас подход простой. Ну да, тот самый всем известный про деньги и стулья.

Спасибо за понимание.

P.S. Ни один ISP не будет настраивать никаких отключений и фильтрации и прочих род контролей на оконечном оборудовании. А именно ISP наша ЦА. Кстати пользователей в UI часто в итоге вообще не пускают после настройки. ;)

Более того. Если вы не заметили. То никаких правил копировать никуда не нужно. Фильтр по времени давно в UI. Проблема исключительно пересчитать время в UTC пока Sadler не сделал конвертилку исходя из выставленного часового пояса. Просто навалом другой работы, в т.ч. оплаченной, в т.ч. для основной ЦА с гораздо высшим приоритетом.

 

Я вообще без претензий. Вы написали, что функция не нужна оказалась. Я по-фантазировал о причинах.

У вас очень получилось очень крутая OS. Поэтому выбрал FT-AIR-DOU-G. Цена тоже была важна ;) Keenetic Viva - 7900 в DNS

Для фантазий есть более подходящие места, где вы не будете ими ни кого отвлекать от работы.

На этом форуме плз. строго по делу.

Спасибо.

P.S. Низкий ценник при высокой надёжности и актуальности достигается исключительно за счёт ограничения числа свистелок и никак иначе. Это ооочень зыбкий баланс. Ну и благо на операторском рынке большинство домашних свистелок по просту не нужно.

Тут кто-то на мыло написал со ссылкой сюда, типа когда...

Ау. А что мешает использовать сейчас? Ну пересчитайте время с вашего локального пояса в UTC. Делов на 2 минуты....? https://time.is/ru/UTC

P.S. Отвечаю тут ибо при ответе на мыло похоже меня отшивает спамфильтр. Надеюсь вопрошающий увидит.

На всякий случай в 4.2.14 дропнул флаг --kerneltz что бы модуль точно использовал UTC. Не забываем настраивать синхронизацию времени и вашу таймзону, т.к. в роутере нет RTC.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: