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
|