LINUX.ORG.RU

OpenWRT блокировка сайтов и «белый список» MAC.

 , , ,


0

2

Есть небольшая локальная сеть в два десятка рабочих мест. Никаких AD и серверов. В интернеты ходят через роутер на OpenWRT. Задача: заблокировать доступ к конкретным сайтам и как это водится, оставить доступ паре тройке «особ приближённых к императору». На вкладке роутера «Межсетевой экран - Пользовательские правила» конструкция вида

iptables -A FORWARD -m string --algo bm --string "site.ru" -j DROP
работает прекрасно, так же работает для конкретной машины
iptables -A FORWARD  -m mac --mac-source XX:XX:XX:XX:XX:XX -m string --algo bm --string "site.ru" -j DROP
Вопрос - как реализовать хотелку с белым списком если использую 1й вариант или как реализовать инвертированный второй вариант -
iptables -A FORWARD  -m mac ! --mac-source XX:XX:XX:XX:XX:XX -m string --algo bm --string "site.ru" -j DROP
или
iptables -A FORWARD  -m mac --mac-source ! XX:XX:XX:XX:XX:XX -m string --algo bm --string "site.ru" -j DROP
так не работает.

Белый список:

iptables -A FORWARD -p tcp --dport 80 -j DROP
iptables -A FORWARD -p tcp --dport 80 -m string --algo bm --string "site.ru" -j ACCEPT
Для одной машины:
iptables -A FORWARD -p tcp --dport 80 -m mac --mac-source XX:XX:XX:XX:XX:XX -m string --algo bm --string "site.ru" -j ACCEPT
Сам не проверял.

lucky_guy ★★★ ()
Ответ на: комментарий от Altiveus

Второе выражение как понимаю снимет ограничение для всех?

Да.

И порт обязательно указывать?

Если не указать порт, то будет резаться DNS, ICMP и все все все... Запаришься исключения клепать. Да, 443 порт тоже укажи, забыл написать.

lucky_guy ★★★ ()

А что мешает использовать веб-прокси коих полно?

Jopich1 ()
Ответ на: комментарий от lucky_guy

У тебя на первом же правиле все дропнется, и как следствие второе никогда не отработает.
Нужно поменять местами.

anonymous ()
Ответ на: комментарий от anonymous

Полностью согласен с тобой великий анон. Сбили с толку нижепреведенные правила:

#disallow all
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#allow local
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#allow local net
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
Выходит, правила с опцией "-P" срабатывают если не сработало не одно из правил?

lucky_guy ★★★ ()
Ответ на: комментарий от lucky_guy

Благодарю всех за помощь. Ставить и разбираться с какими либо прокси конкретно на роутер не было времени - мельком взглянул на то что есть и пошёл простым путём с моей точки зрения. Задачу нужно было решить быстро из вебморды. Действительно, если не указывать порт - получаю глюки с доступом к сайтам, очерёдность так же имеет значение - то есть как и говорили вы. Код ниже работает как нужно. Ещё раз спасибо lucky_guy и анонимус, задача решена. В сети множество запросов по этой теме, но либо с отсылкой на настройки прокси либо невнятные, здесь чётко указали как сделать.

# White list
 iptables -A FORWARD -p tcp --dport 80  -m mac --mac-source XX:XX:XX:XX:XX:XX-m string --algo bm --string "site.ru" -j ACCEPT
 iptables -A FORWARD -p tcp --dport 443  -m mac --mac-source XX:XX:XX:XX:XX:XX-m string --algo bm --string "site.ru" -j ACCEPT
 iptables -A FORWARD -p tcp --dport 80  -m mac --mac-source YY:YY:YY:YY:YY:YY-m string --algo bm --string "site.ru" -j ACCEPT
 iptables -A FORWARD -p tcp --dport 443  -m mac --mac-source YY:YY:YY:YY:YY:YY -m string --algo bm --string "site.ru" -j ACCEPT

# Block sites
 iptables -A FORWARD -p tcp --dport 80 -m string --algo bm --string "site.ru" -j DROP
 iptables -A FORWARD -p tcp --dport 443 -m string --algo bm --string "site.ru" -j DROP

Altiveus ()
Ответ на: комментарий от Altiveus

Пожалуйста. А если добавить

-m multiport --dports 80,443
то можно не париться с выяснением кто использует 80, а кто 443 порты.

lucky_guy ★★★ ()
Ответ на: комментарий от lucky_guy

Чтоб не плодить тем спрошу здесь.

Задача: школьнику ограничить время интернета на все кроме сайта «dnevnik.ru» ( OpenWrt 18.06.1 )

в Firewall - Custom Rules прописал

# Белый лист
 iptables -A FORWARD -p tcp --dport 80  -m mac --mac-source 00:14:85:13:0E:25 -m string --algo bm --string "dnevnik.ru" -j ACCEPT
 iptables -A FORWARD -p tcp --dport 443  -m mac --mac-source 00:14:85:13:0E:25 -m string --algo bm --string "dnevnik.ru" -j ACCEPT
 iptables -A FORWARD -p tcp --dport 80  -m mac --mac-source 00:14:85:13:0E:25 -m string --algo bm --string "login.dnevnik.ru" -j ACCEPT
 iptables -A FORWARD -p tcp --dport 443  -m mac --mac-source 00:14:85:13:0E:25 -m string --algo bm --string "login.dnevnik.ru" -j ACCEPT

Блокировка по времени настроена так: https://drive.google.com/open?id=1OMR12sEY2Urof8ZAQs1gGdywa3ZyUEKV

Но не пускает на «дневник» во время ограничения по времени.Как поменять приоритеты.

И сразу, так правильно ?

iptables -A FORWARD -p tcp -m multiport --dports 80,443  -m mac --mac-source 00:14:85:13:0E:25 -m string --algo bm --string "login.dnevnik.ru" -j ACCEPT

PS. я не специалист, поэтому вопросы могут быть глупыми).

Griin ()
Ответ на: Чтоб не плодить тем спрошу здесь. от Griin

Re: Чтоб не плодить тем спрошу здесь.

Вот так правильно:

iptables -I FORWARD -p tcp -m multiport --dports 80,443 -m mac --mac-source 00:14:85:13:0E:25 -m string --algo bm --string "dnevnik.ru" -j ACCEPT
А то на login.dnevnik.ru пускать будет, а на [все остальные].dnevnik.ru не будет.

И обратите внимание - не «iptables -A», а «iptables -I».

funky ()
Ответ на: Re: Чтоб не плодить тем спрошу здесь. от funky

Оставил одну строчку (в вашей редакции ) в Custom Rules. Но как только активируется блокировка по времени (скриншот в предыдущем сообщении) - доступа к сайту «Дневник» нет.

в PuTTY в выводе по команде:

iptables -L -n -v 
строки с «dnevnik.ru» вообще нет, т.е. это правило не применяется (поискал и по MAC адресу). Как его заставить работать?

Griin ()
Ответ на: комментарий от Griin

1. Введите эту строку «iptables -I FORWARD...» в PuTTY и посмотрите, будут ли сообщения об ошибках.

2. Когда работает блокировка по времени, введите в PuTTY:

iptables-save
и покажите выхлоп.

funky ()

iptables -A FORWARD -m string --algo bm --string "site.ru" -j DROP

работает прекрасно, так же работает для конкретной машины

За одним исключением: если в комментариях на разрешённом сайте кто-то выложит ссылку на запрещённый, то разрешённая страница тоже не откроется.

И ещё:

-j DROP

Крайне хреновая идея ограничивать доступ просто отбрасыванием пакетов. У тебя браузеры будут тупить и ждать ответа от сервера, если на странице вставлены счётчики с доменов, которые ты забанил таким образом. Если заботишься о своих пользователях, не дропай «неугодные пакеты», а отклоняй их явно: -j REJECT --reject-with icmp-host-prohibited. А подключения из WAN можешь дропать, если нужно)

mogwai ★★★★ ()
Ответ на: комментарий от Griin

1. Введите эту строку «iptables -I FORWARD...» в PuTTY и посмотрите, будут ли сообщения об ошибках.

Я имел в виду строку:

iptables -I FORWARD -p tcp -m multiport --dports 80,443 -m mac --mac-source 00:14:85:13:0E:25 -m string --algo bm --string "dnevnik.ru" -j ACCEPT
Введите ее в PuTTY и если будут сообщения об ошибках, то пришлите, какие. Если ошибок не будет, то пришлите выхлоп
iptables-save

funky ()
Ответ на: комментарий от funky
root@OpenWrt:~# iptables -I FORWARD -p tcp -m multiport --dports 80,443 -m mac --mac-source 00:14:85:13:0E:25 -m st
ring --algo bm --string "dnevnik.ru" -j ACCEPT
iptables v1.6.2: Couldn't load match `string':No such file or directory

попробовал и апострофы вместо кавычек - тоже самое.

Griin ()
Ответ на: комментарий от Griin

Вам нужно добавить пакеты:

kmod-ipt-filter
iptables-mod-filter

Не помню, где это делается в вебморде, но можно это сделать в PuTTY:

opkg update
opkg install kmod-ipt-filter iptables-mod-filter

funky ()
Ответ на: комментарий от Griin

Ну и после этого перезагрузить роутер и попробовать добавит строку и посмотреть, будет ли ругаться. Если не ругается, то все, по идее, нормально.

funky ()
Ответ на: комментарий от funky

Применилось, строка по выводу iptables-save выглядит так:

-A FORWARD -p tcp -m multiport --dports 80,443 -m mac --mac-source 00:14:85:13:0E:25 -m string --string "dnevnik.ru" --algo bm --to 65535 -j ACCEPT 
но на «дневник» не пускает (((. полный вывод: https://drive.google.com/open?id=1ZHMGZIpMmAqizWFbSBcWF24-w18yz8Hs когда отключаю правило по времени (строка 102) - пускает.

Griin ()
Ответ на: комментарий от Griin

Кстати да! Заметьте, не я предложил резать (ну или разрешать, как в этом правиле) доступ к dnevnik.ru с помощью модуля string. Это правило работать не будет. То есть будет для 80 (http) порта, но не для 443 (https) - там шифрование. А dnevnik.ru работает по 443 (

Вместо старого правила, попробуйте такие:

iptables -I FORWARD -p tcp -m mac --mac-source 00:14:85:13:0E:25 -m multiport --dports 80,443 -d 172.217.21.170 -j ACCEPT
iptables -I FORWARD -p tcp -m mac --mac-source 00:14:85:13:0E:25 -m multiport --dports 80,443 -d 178.248.232.13 -j ACCEPT
iptables -I FORWARD -p tcp -m mac --mac-source 00:14:85:13:0E:25 -m multiport --dports 80,443 -d 188.227.88.0/24 -j ACCEPT

Может я какие IP адреса не указал - проверьте в таком виде.

funky ()
Ответ на: комментарий от funky

Огромное СПАСИБО!

Все заработало как нужно! С добавлением новых ip думаю справлюсь.

[flood] Я же обещал глупые вопросы))). [/flood]

Griin ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.