Как ограничить доступ в Интернет для конкретного пользователя в локальной сети, используя iptables в Linux

11

Допустим, в локальной сети есть два пользователя: A и B. Как я могу ограничить доступ пользователя A к Интернету, используя правила iptables и сохраняя правила, чтобы после перезагрузки они оставались в силе. Предположим также, что я хочу предоставить этому пользователю доступ в какой-то момент; как мне включить его снова? Я использую Ubuntu Linux 10.04. Было бы неплохо, если бы кто-нибудь показал мне, как это сделать из командной строки, так как я часто подключаюсь к машине с помощью локальной учетной записи ssh.

Марван Танагер
источник

Ответы:

17

Я предполагаю, что пользователи A и B используют ту же машину Linux, где вы являетесь администратором. (Из вашего вопроса не совсем ясно. Если у A и B есть свои компьютеры, на которых они являются администраторами, это совершенно другая проблема.)

Следующая команда не позволит пользователю с uid 1234 отправлять пакеты по интерфейсу eth0:

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

Я рекомендую прочитать руководство по Ubuntu iptables, чтобы получить базовые знания об инструменте (и обратитесь к странице справочника для продвинутых вещей, таких как таблица mangle).

Пользователь по-прежнему сможет запускать ping (потому что это setuid root), но не что-нибудь еще. Пользователь по-прежнему сможет подключаться к локальному прокси, если этот прокси был запущен другим пользователем.

Чтобы удалить это правило, добавьте -Dкоманду выше.

Чтобы сделать правило постоянным, добавьте его в /etc/network/if-up.d/my-user-restrictions(сделайте так, чтобы исполняемый скрипт начинался с #!/bin/sh). Или используйте iptables-save(см. Руководство по Ubuntu iptables для получения дополнительной информации).

Жиль "ТАК - прекрати быть злым"
источник
Большое спасибо. И да, ваши предположения верны. Основываясь на вашем ответе и упомянутом руководстве по Ubuntu, это то, что правильный способ сделать что-то, если я хочу также предоставить ssh-доступ ограниченному пользователю (иногда я хочу войти в систему, используя его учетную запись через ssh): iptables -t mangle -A OUTPUT - o eth0 -m владелец --uid-owner 1234 -p tcp --dport ssh -j ПРИНЯТЬ iptables -t mangle -A ВЫХОД -o eth0 -m владелец --uid-owner 1234 -j ОТПРАВИТЬ Я поставил эти правила как есть в упомянутый файл и все, кажется, работает нормально.
Марван Танагер
@ Марван, я думаю, это правильно. Обратите внимание, что если вы разрешаете доступ по ssh, вы разрешаете почти все, поскольку ssh может легко туннелировать другие протоколы.
Жиль "ТАК - перестать быть злым"
0

Я бы не использовал iptables для этого.

Я предполагаю, что A и B связаны с фиксированными IP-адресами ClientA и ClientB. Я предполагаю, что ваш интернет-прокси - это ServerI (ваш Ubuntu-сервер?).

Поэтому я бы добавил запись о запрете / отбрасывании от ClientA к ServerI.

Я не использую Ubuntu - поэтому я не могу сказать вам, какой файл конфигурации использовать, чтобы сделать этот параметр постоянным (пережив перезагрузку).

Возможно, кто-то может добавить эту деталь?

Nils
источник