Как заблокировать сайт штатными средствами ubuntu?

Всем здравствуйте.

На работе поступила задача заблокировать несколько сайтов vk, fb, youtube, итд. и если честно, я думал что с этими задачами вполне может справиться iptables но так как я работаю немного в другой области с сетевым администрированием я сталкиваюсь очень мало...

Что есть на данный момент
Ubuntu server 12.04
eth0 - внешний интерфейс
inet addr: 94.159.48.42
eth1 - внутренний интерфейс
inet addr: 192.168.0.250
На серевере настроен проброс интеа и еще пары портов + небольшой фаервол.

Что я пробовал:
Блок
#iptables -A FORWARD -m string --string "vk.com" --algo kmp --to 65535 -j DROP
Разблокировка для mac
#iptables -A FORWARD -m mac --mac-source b8:8d:12:0f:32:90 -m string --string "vk.com" --algo kmp --to 65535 -j ACCEPT

Тут все неплохохо, но! Если открыть сайт на котором тусует виджет контакта - он будет тупить а может и не откроется.
Если обойти DNS и стучаться по кешу DNS то доступ есть...

Для решения проблемы блочим пул ip vk
#iptables -A FORWARD -s 95.142.200.0/21 -j DROP
...
так это разблокируем для mac
#iptables -A FORWARD -m mac --mac-source b8:8d:12:0f:32:90 -s 95.142.200.0/21 -j ACCEPT
...

Если проделать те же фокусы с youtube то он ведет себя вообще очень странно :)

Самым главным минусом такого подхода является факт того что сторонние сайты с виджетами блокируемых сайтов тупят...

Я уже третий день перелопачиваю свои правила iptables но никак не могу добиться нужного:
- Заблокировать несколько сайтов (желательно по домену) для болшей массы машин в сети.
- Организовать доступ к этим сайтам для некоторых машин по mac.
- Не нарушить работу сторонних сайтов.

Отчаявшись уже посматриваю в сорону squid, но вычитал что там тоже не все так гладко...

Если честно, мне кажется что это можно решить пробросом, аля все запросы по доменам завернуть на мой же сервер, а там отдать либо 404 либо пустой лист, но с этой частью iptables я вообще мало знаком - так что не смог правильно стоставить правило.

Прошу от сообщества помощи! Всех благодарю за внимание и ваши ответы!
  • Вопрос задан
  • 15181 просмотр
Пригласить эксперта
Ответы на вопрос 5
@Power
Чтобы не "тупили", замените "-j DROP" на "-p tcp -j REJECT --reject-with tcp-reset" или на "-j REJECT --reject-with icmp-net-prohibited".
Ответ написан
Комментировать
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
webvpn.org

Вы можете только делать скрины раб столов или поставить всем расширение на браузер (кстати совсем не сложно делается) которое будет просто при обнаружении верстки запрещенного сайта его ломать. Против анонимайзеров поможет.
Ответ написан
Комментировать
vvpoloskin
@vvpoloskin
Инженер связи
1) поменять правила ACCEPT и DROP местами
2) используй ipset, адреса в который можно добавлять резолвингом по крону или узнаешь с какого-нибудь bgp-резолвера.

А виджеты на сайтах висят скорее всего из-за не всех фильтруемых IP-шников. Узнай все его адреса и отфильтруй их.
Но все же прокси для этого подходит лучше.
Ответ написан
Комментировать
Cram
@Cram
System Administrator
Можно просто прописать в /etc/hosts левые IP адреса для этих сайтов.
Например:
1.2.3.4 odnoklassinki.ru
1.2.3.4 facebook.com
1.2.3.4 vk.com

Тогда браузер будет пытаться открыть сайт с этого левого адреса.
Ответ написан
Комментировать
Ernillew
@Ernillew
Администрирую *nix-системы с 1997 года
Вы пытаетесь решать вопрос не тем инструментом.
Для ваших целей таки нужно использовать Squid в режиме прозрачного проксирования и его acl. Вы сможете и запретить нужные сайты, и разрешить нужным IPшникам ходить на них.
iptables не предназначен для решения ваших задач.
dhcp с привязкой по макам и сквид в виде трансперент-прокси — ваши инструменты.
Если нужно подробней, задавайте вопросы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы