Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Как ограничить из сети доступ в Интернет по времени? (http://forum.oszone.net/showthread.php?t=347456)

olalo7 27-12-2020 07:26 2944294

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

Busla 27-12-2020 08:54 2944295

конечно же через squid

для iptables вам нужно будет как-то вычислять ip

Dimon 09-01-2021 20:11 2945543

olalo7,

Вариантов несколько:
  • можно поставить локальный DNS-сервер (например, dnsmasq) настроить систему использовать только этот локальный DNS и в нем уже разрешать или запрещать использование нужных адресов по времени;
  • подобный вышеуказанному подход, но на уровне файла hosts: в /etc/resolv.conf убрать все записи типа nameserver x.x.x., запретить в системе всякие NetworkManager'ы и resolvconf-службы, затем в /etc/hosts прописать соответствие имен сайтов их айпишниам. Чтобы адреса развязывались ТОЛЬКО у сайтов, прописанных в /etc/hosts и ТОЛЬКО через этот файл. Возможно надо будет подкорректировать nsswitch.conf. И по крону подменять файлы resolv.conf, когда можно все и когда можно только по списку;
  • можно попробовать через iptables ограничивать (см. скрипт ниже). тоже необходимо вручную прописать все нужные сайты (включая вспомогательные googleapis, jquery, userapi и пр.). По крону включаем и выключаем. Но, зато, обойти данный способ будет проблематично, ибо закрыто все, что не разрешено.
Первый вариант самый простой в плане настройки, второй - достаточно хлопотный, надо все вручную выявлять-прописывать, третий - нечто среднее между обоими способами.
Так же, как указали выше, возможна установка прокси-сервера, прописывание его в браузер, запрет системе ходить в инет БЕЗ прокси и настройка whitelist/blacklist. Отличный вариант.

Скрипт:

Код:

#!/bin/bash

IPT="/sbin/iptables"
IN_A="$IPT -A INPUT"
OUT_A="$IPT -A OUTPUT"

##############################################

function printUsage {
echo -e "USAGE: $0 <stop|start|restart>\n"
}


function do_stop {
    echo "Stopping firewall (clearing all rules and open everything)"
    $IPT -F
    $IPT -t nat -F
    $IPT -t mangle -F
    $IPT -P INPUT ACCEPT
    $IPT -P OUTPUT ACCEPT
    $IPT -P FORWARD ACCEPT
}

function do_start {

    echo "Starting firewall (setting rules, closing all other, not allowed)"

###################### Insert firewall rules from here #######################
#                                                                            #
# !!!!!!!!!!!!!!!!!!!! Everyting is closed by default !!!!!!!!!!!!!!!!!!!!!! #
#                                                                            #
# Automatically only already opened connections for all are accepted.        #
# To open something you have to set INPUT _AND_ OUTPUT rules manually.      #
# Forward rules are set as usual.                                            #
#                                                                            #
##############################################################################

    $IN_A -i lo0 -j ACCEPT
    $OUT_A -o lo0 -j ACCEPT

    # SSH
    $IN_A -p tcp -m tcp --dport 22 -j ACCEPT
    $OUT_A -p tcp -m tcp --dport 22 -j ACCEPT

  # Allow inet ( DNS, HTTP(S))
    $IN_A -p udp -m udp --dport 53 -j ACCEPT
    $OUT_A -p udp -m udp --dport 53 -j ACCEPT

    # Here adding sites one by one with appropriate ports. See example below.
    # IN and OUT chains have to be added
    #
    $IN_A -p tcp -m tcp -m multiport -s thinkwiki.org --dports 443,80 -j ACCEPT
    $OUT_A -p tcp -m tcp  -m multiport -d thinkwiki.org --dports 443,80 -j ACCEPT

    $IN_A -p tcp -m tcp -m multiport -s vk.com --dports 443 -j ACCEPT
    $OUT_A -p tcp -m tcp  -m multiport -d vk.com --dports 443 -j ACCEPT



    # Allow ICMP
    $IN_A -p icmp -j ACCEPT
    $OUT_A -p icmp -j ACCEPT

#############################################################################
    # Allow all incoming traffic for connections etablished
    $IN_A -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    $OUT_A -m conntrack --ctstate ESTABLISHED -j ACCEPT


    # Drop all other
    $IPT -P FORWARD DROP
    $IPT -P INPUT DROP
    $IPT -P OUTPUT DROP
}

case $1 in
    stop) do_stop ;;
    start) do_start ;;
    restart) do_stop; sleep 1; do_start ;;
    *) printUsage; exit 1 ;;
esac

echo "done"
exit 0


DJ Mogarych 11-01-2021 19:54 2945820

Существует функция родительского контроля - настроить её проще, чем извращаться со сквидом и дебианами.


Время: 08:07.

Время: 08:07.
© OSzone.net 2001-