1

Приветствую всех!
У меня существует проблема: мои дети учатся в школе и никак не делают уроки пока я пропадаю на работе. Днем развлечения — игры, мультики, тик-ток, вацап, а вечером уроки до поздна, мелкий ноет, что не успевает. Короче — достали! Решил я поставить шлюз на debian и ограничить им доступ в Интернет. Чтобы по рабочим дням недели с 9:00 до 18:00 был доступ только к сетевому дневнику и другим образовательным ресурсам по списку, а в другое время — разрешено всё. Только как сделать — точно не знаю. Толи нужно использовать squid, толи через iptables? Думаю все-таки, нужно использовать правила таблицы, только какие — знаний не хватает. Помогите, пожалуйста, советом.

2

smola, а на роутере это нельзя сделать? Мой Mikrotik точно позволяет, не вникал в подробности, так как малых детей нет, а для котов доступ закрывать не надо ab .

ᛈᚺ'ᚾᚷᛚᚢᛁ ᛗᚷᛚᚹ'ᚾᚨᚠᚺ ᚲᛏᚺᚢᛚᚺᚢ ᚱ'lᚷᛖᚺ ᚹᚷᚨᚺ'ᚾᚨᚷᛚ ᚠᚺᛏᚨᚷᚾ

Asus Prime B460M-K, i5-10500, Intel 630 UHD, DDR4 32 GB, SSD 500GB + HDD 2TB | Linux Mint 21.3 Cinnamon + Fedora 39 MATE (Compiz) + Windows 11 + macOS 12 Monterey

3

smola, Вот всё, что вы хотите знать от летающих медведей

Linux Mint 19.3 Mate Edition
Windows 7

4

dansguardian выглядит мёртвым.

5

Спасибо, читал эту статью. Мне больше понравились варианты: 1) установить pi-hole и запрещать/разрешать доступы к ресурсам сети с помощью White и Black - листов, попутно включая (pihole enable) и выключая pi-hole  по времени; 2) кардинально - установить ОС pfSense и настроить брандмауэр  для ip адресов и портов, включая правила по расписанию. Ну, не знаю что лучше, попробую и то, и другое.

6 (28.12.2020 12:15:24 отредактировано alex_q_2000)

Привет. Можно сделать пару исполняемых скриптов с правилами для iptables и запускать поочерёдно через крон. Скрипт с блокировкой нежелательных сайтов покажу ниже, а второй, который разрешает всё - такой же, только без секции "БЛОКИРОВКА нежелательных РЕСУРСОВ".

#!/bin/sh

#Включаем форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward

#Пути, интерфейсы и сети
ipt="/sbin/iptables"
inet="enp0s3"
local="enp0s8"

#Очистка iptables
$ipt -F
$ipt -X
$ipt -t nat -F
$ipt -t nat -X
$ipt -t mangle -F
$ipt -t mangle -X

#Всё, кроме INPUT
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT

#Разрешаем lo и уже установленные соединения
$ipt -A INPUT -i lo -j ACCEPT
$ipt -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Разрешаем пинг
$ipt -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

#СЕКЦИЯ БЛОКИРОВКИ НЕЖЕЛАТЕЛЬНЫХ РЕСУРСОВ
$ipt -A FORWARD -i $local -m string --string "vk.com" --algo bm -j REJECT
$ipt -A FORWARD -i $local -m string --string "ok.ru" --algo bm -j REJECT
$ipt -A FORWARD -i $local -m string --string "facebook.com" --algo bm -j REJECT
$ipt -A FORWARD -i $local -m string --string "mail.ru" --algo bm -j REJECT
$ipt -A FORWARD -i $local -m string --string "yandex.ru" --algo bm -j REJECT

#Секция маскардинга
$ipt -A FORWARD -i $inet -o $local -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$ipt -A FORWARD -i $local -o $inet -j ACCEPT
$ipt -t nat -A POSTROUTING -o $inet -j MASQUERADE

#Сохраняем в файл и рестарт
$ipt-save -c > /etc/sysconfig/iptables
systemctl restart iptables.service

Для проверки не забываем очищать кеш браузера на клиенте за шлюзом.

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

7

alex_q_2000, попрошу без политики. Сообщение исправил.

ᛈᚺ'ᚾᚷᛚᚢᛁ ᛗᚷᛚᚹ'ᚾᚨᚠᚺ ᚲᛏᚺᚢᛚᚺᚢ ᚱ'lᚷᛖᚺ ᚹᚷᚨᚺ'ᚾᚨᚷᛚ ᚠᚺᛏᚨᚷᚾ

Asus Prime B460M-K, i5-10500, Intel 630 UHD, DDR4 32 GB, SSD 500GB + HDD 2TB | Linux Mint 21.3 Cinnamon + Fedora 39 MATE (Compiz) + Windows 11 + macOS 12 Monterey

8

Rizado пишет:

...а для котов доступ закрывать не надо

Для котов тоже есть iptables, только он полосатый.  ab  С Наступающим...

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

9

alex_q_2000, установка упомянутого Вами приложения, не поверите, попадает в сферу действия Уголовного Кодекса РФ. Напоминаю о правилах:

3.2.22. Запрещается использовать форум в целях, противоречащих законодательству РФ.

Часть сообщения я удалил.

alex_q_2000 пишет:

С Наступающим...

Спасибо, но ещё рановато. Успеем отметить.

ᛈᚺ'ᚾᚷᛚᚢᛁ ᛗᚷᛚᚹ'ᚾᚨᚠᚺ ᚲᛏᚺᚢᛚᚺᚢ ᚱ'lᚷᛖᚺ ᚹᚷᚨᚺ'ᚾᚨᚷᛚ ᚠᚺᛏᚨᚷᚾ

Asus Prime B460M-K, i5-10500, Intel 630 UHD, DDR4 32 GB, SSD 500GB + HDD 2TB | Linux Mint 21.3 Cinnamon + Fedora 39 MATE (Compiz) + Windows 11 + macOS 12 Monterey

10

alex_q_2000 пишет:

Привет. Можно сделать пару исполняемых скриптов с правилами для iptables и запускать поочерёдно через крон.

Для сервера то пойдёт, но для компа, который не включён постоянно будут проблемы. Пропустил время запуска скрипта и все разрешено. Тогда уж скриптом при загрузке, который будет проверять дату.

11 (29.12.2020 23:06:01 отредактировано alex_q_2000)

ormorph пишет:

Для сервера то пойдёт, но для компа, который не включён постоянно будут проблемы. Пропустил время запуска скрипта и все разрешено. Тогда уж скриптом при загрузке, который будет проверять дату.

Несомненно. А поскольку в условии сказано, что ограничения нужны с 09 часов утра до 18 часов вечера именно в рабочие дни (пока автор на работе), то при перезагрузке нужно учитывать ещё и номер дня недели (с 1 по 5). Посему предлагаю 1 скрипт, который будет запускаться при перезагрузке через site-blocker.service и далее каждый час через крон. Костылить, так костылить...

Сервис: /etc/systemd/system/site-blocker.service

[Unit]
Description=IPTables Site Blocker Unit
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/site-blocker.sh

[Install]
WantedBy=multi-user.target

Активировать: systemctl enable site-blocker

Мега-Скрипт: /site-blocker.sh

#!/bin/bash

#Параметры -----//------------------
hstart="09" #Начало блокировки (час)
hend="18" #Конец блокировки (час)

#Пути, интерфейсы
inet="enp0s3"
local="enp0s8"
ipt="/sbin/iptables"

#-----------------//----------------

#Текущий день недели - это рабочий день (Пн-Пт)?
budni="no"
for i in Пн Вт Ср Чт Пт; do [[ "$i" = "$(date +%a)" ]] && budni="yes"; done

#Включаем форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward

#Очистка iptables
$ipt -F; $ipt -X
$ipt -t nat -F; $ipt -t nat -X
$ipt -t mangle -F; $ipt -t mangle -X

#Всё, кроме INPUT
$ipt -P INPUT DROP; $ipt -P OUTPUT ACCEPT; $ipt -P FORWARD ACCEPT

#Разрешаем lo и уже установленные соединения
$ipt -A INPUT -i lo -j ACCEPT
$ipt -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Разрешаем пинг
$ipt -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

#С 09 часов утра до 18 часов вечера по будням (Пн-Пт) пускать с ограничениями
if [[ "$(date +%H)" > "$hstart" && "$(date +%H)" < "$hend" && "$budni" = "yes" ]]; then
    $ipt -A FORWARD -i $local -m string --string "vk.com" --algo bm -j REJECT
    $ipt -A FORWARD -i $local -m string --string "ok.ru" --algo bm -j REJECT
    $ipt -A FORWARD -i $local -m string --string "facebook.com" --algo bm -j REJECT
    $ipt -A FORWARD -i $local -m string --string "mail.ru" --algo bm -j REJECT
    $ipt -A FORWARD -i $local -m string --string "yandex.ru" --algo bm -j REJECT
fi;

#Секция маскардинга
$ipt -A FORWARD -i $inet -o $local -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$ipt -A FORWARD -i $local -o $inet -j ACCEPT
$ipt -t nat -A POSTROUTING -o $inet -j MASQUERADE

#Сохраняем в файл и рестарт
$ipt-save -c > /etc/sysconfig/iptables
systemctl restart iptables.service

exit 0;

Запустить всё это хозяйство: systemctl start site-blocker

Осталось сделать Учёт Праздничных дней, незапланированных выходных, а так же метод быстрого отключения всего этого добра.  ag

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

12

alex_q_2000 пишет:

Сервис: /etc/systemd/system/site-blocker.service

А вот подсказки детям давать не стоит. Может сначала они и не разберутся как войти под рутом, но потом обязательно смогут. Тем более в linux это довольно просто, зайти на комп с LiveCD(USB), скопировать содержимое "/etc/shadow", сменить пароль, а после вернуть все обратно.
Сервис с таким названием сразу привлечёт внимание. В данном случае, чем запутаннее сделано тем лучше.

А так, можно ещё проще оставить доступ root себе, например оставив где-нибудь лежащий бинарник, дающий такие права(так же как sudo).

13

alex_q_2000, Вы не предполагаете, что язык интерфейса системы может быть не русским? У меня, кстати, долгое время испанский был.
Вместо «$(date +%a)» лучше использовать «$(date +%u)» и номер от 1 до 5.

ᛈᚺ'ᚾᚷᛚᚢᛁ ᛗᚷᛚᚹ'ᚾᚨᚠᚺ ᚲᛏᚺᚢᛚᚺᚢ ᚱ'lᚷᛖᚺ ᚹᚷᚨᚺ'ᚾᚨᚷᛚ ᚠᚺᛏᚨᚷᚾ

Asus Prime B460M-K, i5-10500, Intel 630 UHD, DDR4 32 GB, SSD 500GB + HDD 2TB | Linux Mint 21.3 Cinnamon + Fedora 39 MATE (Compiz) + Windows 11 + macOS 12 Monterey

14 (04.01.2021 23:58:36 отредактировано alex_q_2000)

ormorph пишет:

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

Дети хитрые. Не исключено, что они станут ходить через анонимайзеры или vpn. Через них конечно много не наработаешь (скорость, обрывы)... А касаемо рутового доступа... Мне видится, что автор сделает обычный комп без монитора и клавиатуры, который будет мирно стоять где-нибудь в уголке и выполнять роль "няньки" в плане контроля за доступом. А доступ автору мы предоставим по SSH:22 изнутри + введём защиту от брутфорса (3 неудачных подключения и БАН на 60 сек). Автор, знающий логин и пароль сможет подключиться через Putty. Думаю, для такого варианта особые требования к защите от человеческого фактора предъявлять не стоит. Или стОит? ))

Rizado пишет:

alex_q_2000, Вы не предполагаете, что язык интерфейса системы может быть не русским? У меня, кстати, долгое время испанский был.
Вместо «$(date +%a)» лучше использовать «$(date +%u)» и номер от 1 до 5.

Абсолютно верно, спасибо! Сейчас поправим...  ab

Дополнительно приложу конфиг dnsmasq, чтобы не париться с раздачей настроек по DHCP (если автору понадобится) и открою нужные порты Samba (может быть автор захочет сделать общий диск), SSH, DNS, DHCP в iptables. Таким образом, автору потребуется доустановить openssh-server и dnsmasq (по желанию)...

Скрипт: /site-blocker.sh (вариант-1 без модуля time)

#!/bin/bash

#Параметры -----//------------------
hstart="09:00" #Начало блокировки (час)
hend="18:00" #Окончание блокировки (час)

#Пути, интерфейсы
wan="enp0s3"
lan="enp0s8"
#-----------------//----------------

#Текущий день недели в списке заблокированных дней (Пн-Пт)?
block_day="no"; for i in 1 2 3 4 5; do [[ "$i" = "$(date +%u)" ]] && block_day="yes"; done

#Включаем форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward

#Очистка iptables
iptables -F; iptables -X
iptables -t nat -F; iptables -t nat -X
iptables -t mangle -F; iptables -t mangle -X

#Всё, кроме INPUT
iptables -P INPUT DROP; iptables -P OUTPUT ACCEPT; iptables -P FORWARD ACCEPT

#Разрешаем lo и уже установленные соединения
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Разрешаем пинг
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

#Открываем SSH:22 + защита от брутфорса (3 неудачных попытки подключения => бан атакующего на 60 сек)
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshport --set
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshport --update --seconds 60 --hitcount 4 -j DROP

#Разрешаем Samba, DHCP/DNS и SSH:22 (dnsmasq, если они будут)
iptables -A INPUT -i $lan -p tcp -m multiport --dports 22,137:139,445 -j ACCEPT
iptables -A INPUT -i $lan -p udp -m multiport --dports 137:139,445,53,67,68,1024:65535 -j ACCEPT

#С 09:00 часов утра до 18:00 часов вечера по будням (Пн-Пт) пускать с ограничениями
if [[ "$(date +%T)" > "$hstart" && "$(date +%T)" < "$hend" && "$block_day" = "yes" ]]; then
#Только Web-серфинг (блокировка VPN, Torrent и т.д.)
    iptables -A FORWARD -i $lan -p udp ! --dport domain -j DROP
    iptables -A FORWARD -i $lan -p tcp -m multiport ! --dports http,https -j DROP

#Список заблокированных сайтов
    iptables -A FORWARD -i $lan -m string --string "vk.com" --algo bm -j REJECT
    iptables -A FORWARD -i $lan -m string --string "ok.ru" --algo bm -j REJECT
    iptables -A FORWARD -i $lan -m string --string "facebook.com" --algo bm -j REJECT
    iptables -A FORWARD -i $lan -m string --string "mail.ru" --algo bm -j REJECT
fi;

#Секция маскардинга
iptables -A FORWARD -i $wan -o $lan -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $lan -o $wan -j ACCEPT
iptables -t nat -A POSTROUTING -o $wan -j MASQUERADE

#Сохраняем в файл и рестарт
iptables-save -c > /etc/sysconfig/iptables
systemctl restart iptables.service

exit 0;

Скрипт: /site-blocker.sh (вариант-2 с модулем time)

#!/bin/bash

#Интерфейсы
wan="enp0s3"
lan="enp0s8"
#-----------------//----------------

#Включаем форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward

#Очистка iptables
iptables -F; iptables -X
iptables -t nat -F; iptables -t nat -X
iptables -t mangle -F; iptables -t mangle -X

#Всё, кроме INPUT
iptables -P INPUT DROP; iptables -P OUTPUT ACCEPT; iptables -P FORWARD ACCEPT

#Разрешаем lo и уже установленные соединения
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Разрешаем пинг
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

#Открываем SSH:22 + защита от брутфорса (3 неудачных попытки подключения => бан атакующего на 60 сек)
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshport --set
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshport --update --seconds 60 --hitcount 4 -j DROP

#Разрешаем Samba, DHCP/DNS, SSH (dnsmasq и openssh-server, если они будут)
iptables -A INPUT -i $lan -p tcp -m multiport --dports 22,137:139,445 -j ACCEPT
iptables -A INPUT -i $lan -p udp -m multiport --dports 137:139,445,53,67,68,1024:65535 -j ACCEPT

#Блокировка сайтов по времени и дням (Пн-Пт)
block="-m time --weekdays 1,2,3,4,5 --timestart 09:00 --timestop 18:00 -j REJECT"

#Только Web-серфинг (блокировка VPN, Torrent и т.д.)
iptables -A FORWARD -i $lan -p udp ! --dport domain $block
iptables -A FORWARD -i $lan -p tcp -m multiport ! --dports http,https $block

#Список заблокированных сайтов
iptables -A FORWARD -i $lan -m string --string "vk.com" --algo bm $block
iptables -A FORWARD -i $lan -m string --string "ok.ru" --algo bm $block
iptables -A FORWARD -i $lan -m string --string "facebook.com" --algo bm $block
#iptables -A FORWARD -i $lan -m string --string "mail.ru" --algo bm $block
#iptables -A FORWARD -i $lan -m string --string "yandex.ru" --algo bm $block

#Секция маскардинга
iptables -A FORWARD -i $wan -o $lan -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $lan -o $wan -j ACCEPT
iptables -t nat -A POSTROUTING -o $wan -j MASQUERADE

#Сохраняем в файл и рестарт
iptables-save -c > /etc/sysconfig/iptables
systemctl restart iptables.service

exit 0;

Раздача настроек локальным клиентам (установить dnsmasq)...

Конфиг: /etc/dnsmasq.conf

#Авторитетный DHCP сервер
dhcp-authoritative

#Слушать на интерфейсах ($lan=enp0s8=192.168.1.1+lo)
interface=enp0s8
listen-address=127.0.0.1,192.168.1.1

#Не использовать resolv.conf
no-resolv

#DNS для раздачи
server=8.8.8.8
server=8.8.4.4

#Диапазон выдачи IP-адресов (аренда 72 часа)
dhcp-range=192.168.1.20,192.168.1.250,72h

#Отдать параметры клиенту
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.1

#Отключить DHCP_INFO-PROXY для Windows 7+
dhcp-option=252,"\n"

#Настройки кеша DNS
cache-size=10000
no-negcache

*** Добавлено: 31.12.2020 18:01:30 ***

Скрипт: /site-blocker.sh
+ добавлена секция "Только Web-серфинг (блокировка VPN, Torrent, Icq, Skype, Jabber и т.д.)". Разрешены только http и https (+dns)
+ добавлен /site-blocker.sh (вариант-2 с использованием модуля time). SSH:22 по умолчанию
+ /site-blocker.sh (вариант-1 без модуля time) введено отслеживание до минут (формат 00:00). Крон будет дёргать этот скрипт только 2 раза: вначале и в конце блокировки. Правильный интервал 00:00-23:59. Вариант скрипта с использованием модуля time (2) может работать некорректно (--kerneltz) с обновлением ядер.
*** Добавлено: 01.01.2021 19:49:50 ***

Осталось как-то разобраться с разрывом уже установленного соединения (ESTABLISHED). Сайты блокируются, однако если они ранее были открыты, а правила iptables сменились на блокирующие, они продолжают работать до закрытия. Для чистоты эксперимента нужно бы сделать стремительный отлуп...  bv
*** Добавлено: 03.01.2021 00:19:11 ***

Небольшой гуй по теме...
http://images.vfl.ru/ii/1609703907/fdf3b209/32846296_s.png
Требуются привилегии root и 2 сетевых карты (WAN/LAN).
Требуются пакеты iptables, ipset, bind-utils.

Создаёт:
---
/root/.siteblocker/blacklist - блэклист сайтов
/root/.siteblocker/settings.ini - настройки программы

/usr/local/bin/site-blocker.sh - основной скрипт с правилами iptables
/var/spool/cron/root или /var/spool/cron/crontabs/root - план запуска основного скрипта iptables через crond
/etc/systemd/system/site-blocker.service - сервис автозапуска после перезагрузки (не в курсе, есть ли эта папка в Debian, в Mageia есть)

Кнопка "Рестарт iptables" - применяет выбранный план блокировки сайтов и создаёт вышеуказанные файлы
Кнопка "Сброс" - корректно удаляет основной скрипт, план запуска, сервис автозапуска и возвращает iptables  в дефолт
В список можно дополнять свои сайты, удалять, выгружать и загружать из файла (ПКМ).

Здесь...


v1.3 (upd: 04.01.2021)
+сохранение/загрузка blacklist
+оперативное применение списка ipset
+отключение протокола IPv6
+проверка ping перед рестартом iptables

v1.1 (upd: 03.01.2021)
+IPSET - основной метод блокировки (1 сайт = множество ip)
+STRING - дополнительный метод словарной фильтрации
+окружение в плане запуска cron: /var/spool/cron/root
+отлуп и фильтрация сайтов заметно улучшились ab
*** Добавлено: 05.01.2021 21:15:09 ***

Rizado пишет:

Спасибо, но ещё рановато. Успеем отметить.

Здравствуйте, Rizado. В Новый Год особо заняться было нечем и... Что-то я здесь приходил-колупал-ковырял; в результате сделал вот это: MgaRemix [флешки, технология сборки] Теперь не знаю, может быть то, что выше уже не нужно? Это я к тому, что вроде как дубляж какой-то вышел... Или нет?

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10