32reg |
|
Темы:
29
Сообщения:
526
Участник с: 17 мая 2011
|
Всем доброго дня. Задался вопросом настройки iptables для конкретного локального пользователя. Т. е. чтобы этот пользователь мог открывать только определенные сайты из белого списка и больше ничего, причем всех остальных пользователей системы это вообще никак не касалось. Такое возможно средствами iptables? Мои поиски привели меня к выводу что настроить iptables только для отдельного пользователя нельзя. Так ли это? Вот какой конфиг получился: Этот конфиг работоспособен?Нужна ли последняя строка? Будут ли корректно отрабатывать правила при указании доменов вместо ip-адресов при использовании правил: И можно ли все-таки настроить iptables чтобы указанному пользователю были запрещены все входящие соединения кроме ответных с разрешенных сайтов? При этом оставляя открытыми все входящие соединения остальным пользователям?
www.linux32.ru - новости и статьи о Linux
|
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
man iptables-extensionsТут написано прямо, что модуль owner работает только с локальными исходящими пакетами, то есть теми, которые отправляет пользователь. Только у таких пакетов есть принадлежность к определённому пользователю, остальные пакеты "ничейные". Соответственно, запретить или разрешить в зависимости от пользователя можно только исходящие, а не входящие. Однако, речь идёт именно об отдельных пакетах, а не соединениях. Поскольку iptables позволяет ставить метки на соединения, в принципе, можно реализовать блокировку второго и последующих пакетов входящего соединения, если на него отвечает определённый пользователь. Заблокировать первый пакет входящего соединения только для заданного пользователя средствами именно iptables не получится, здесь надо использовать другие механизмы. Если вы хотите ввести негативное правило по владельцу пакета, то есть срабатывающее на всех, кроме него, восклицательный знак ставится перед --uid-owner, а не перед -m owner:
Также у вас не выйдет использовать в iptables имена хостов, потому что у пакетов их просто нет, есть только IP-адреса отправителя и получателя. Поскольку у одного имени хоста может оказаться больше одного IP-адреса, вам придётся заранее преобразовать список хостов в список IP, а потом уже генерировать правила по IP. Использовать в скрипте, генерирующем правила для iptables, многократный вызов этой команды не рекомендуется, потому что каждая команда iptables вызывает пересборку и применение всех правил в таблице. Загрузка сотни-другой правил таким способом может занимать порядка минуты даже на мощном сервере. Вместо этого имеет смысл с помощью команд echo отправить все правила на стандартный вывод, и перенаправить всё вместе на ввод команды iptables-restore |
32reg |
|
Темы:
29
Сообщения:
526
Участник с: 17 мая 2011
|
Natrio, спасибо. Жаль что iptables.rules не понимает переменные... придется записывать каждый адрес вручную. Не получается пока настроить так чтобы все было заблокировано кроме одного какого-нибудь сайта (для примера). Если и то на сайт 94.100.180.200 (mail.ru) не заходит все-равно.Нужно помимо ip этого сайта разрешать вручную еще и ip DNS-сервера? Или нужно разрешать весь путь до требуемого сайта? Если так, то пути брать из traceroute? Тогда по traceroute вопрос: что делать с неответившими узлами (* в выводе) и какимим ключами указать traceroute чтобы он вывел все адреса на пути к сайту вместо звездочек? Вообще, применяется ли iptables в подобных ситуациях? И для ограничения доступа в сеть какому-либо одному пользователю нужно использовать другие инструменты? Какие тогда?
www.linux32.ru - новости и статьи о Linux
|
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
Правильно, что на 94.100.180.200 не заходит, потому что вы в правиле определили его как source, а он для вас является, наоборот, destination. |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
А вообще, если у пользователя физический доступ к этому компьютеру, то все эти ваши iptables он сможет рано или поздно обойти. Если речь о компьютерах в локальной сети, для которых ваш комп является шлюзом в инет, то ни о каких -m owner речь идти не может, а правила надо писать для цепочки FORWARD. Что бы удовлетворить свое желание ограничивать доступ к определенным URL отдельным пользователям, я бы посоветовал рассмотреть вариант с http-прокси. Например, Squid - безумно гибкий и расширяемый. |
32reg |
|
Темы:
29
Сообщения:
526
Участник с: 17 мая 2011
|
Пробовал уже указывать -d вместо -s, все равно не открывается сайт. Уже чисто из интереса хочу заставить эту конструкцию работать. Но, похоже придется изучать сквид. Может быть дело в неуказывании мной портов и протоколов? Их нужно обязательно указывать?
www.linux32.ru - новости и статьи о Linux
|
32reg |
|
Темы:
29
Сообщения:
526
Участник с: 17 мая 2011
|
Подниму тему. Путем чтения манов всеже разобрался с задачей. Описал все в своем блоге, если кому интересно вот ссылка.
www.linux32.ru - новости и статьи о Linux
|