Могу ли я ограничить пользователя (и его приложения) одним сетевым интерфейсом?

15

У меня на самом деле есть два сценария, чтобы применить это:

  1. Multiseat Desktop: два сетевых подключения, оба с интернет-шлюзами, и две учетные записи, выполняющие задачи с высокой пропускной способностью на каждом. Я хочу разделить их, чтобы одна учетная запись использовала только eth0, а вторая - только eth1.

  2. Сервер: у меня есть два IP-адреса на сервере, и я хочу убедиться, что почтовый пользователь отправляет электронную почту только со второго IP-адреса (псевдоним eth0: 1)

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

Oli
источник

Ответы:

6

Вы захотите использовать модуль владельца iptables и, возможно, несколько хитроумных пакетов.

владелец Этот модуль пытается сопоставить различные характеристики создателя пакета для локально сгенерированных пакетов. Он действителен только в цепочке OUTPUT, и даже тогда некоторые пакеты (например, пинг-ответы ICMP) могут не иметь владельца и, следовательно, никогда не совпадать.

--uid-owner userid Соответствует, если пакет был создан процессом с заданным эффективным (числовым) идентификатором пользователя.

--gid-owner groupid Соответствует, если пакет был создан процессом с заданным эффективным (числовым) идентификатором группы.

--pid-owner processid Соответствует, если пакет был создан процессом с заданным идентификатором процесса.

--sid-owner sessionid Соответствует, если пакет был создан процессом в данной группе сеансов.

Ли Ло
источник
Вы можете использовать iptables для установки метки, которую затем можете использовать в таблице маршрутизации. См. ЦЕЛИ и ПОЗНАВАТЬ цели. В iproute это тогда «правило ip add fwmark X ...». На самом деле, я бы не удивился, если бы только iproute2 мог это сделать ...
derobert
3
Будучи человеком, который проделал большую работу по подбору владельцев, я могу сказать, что это не всегда даст желаемый результат. Т.е. не у всех пакетов есть такой владелец, как вы ожидаете. ICMP и ESP являются типами, которые принадлежат ядру (или root) независимо от исходного приложения и не будут сопоставлены -m owner. Это довольно надежно с TCP и UDP, но другие типы не так надежны. Только надежный способ достижения этого 100% является с ВМ или контейнеров.
Багамат
7

Вы можете настроить две виртуальные машины на физическом компьютере и настроить мост сетевого интерфейса так, чтобы одна виртуальная машина использовала eth0, а другая виртуальная машина - eth1. См. Раздел документации по виртуальному блоку по мостовой сети .

Вим Коенен
источник
1

Я не уверен, что это возможно для первого пункта. Вы хотите сделать некоторые манипуляции с маршрутизацией на основе идентификатора пользователя пользователя. В прошлый раз, когда я проверял, я не видел этой возможности.

Во-вторых, это не iptables, который вы хотите использовать, а iproute2 (http://lartc.org/howto/ и http://www.policyrouting.org/iproute2.doc.html для полного документа). Это замена для команд ifconfig / route, поскольку они считаются устаревшими. iproute2 позволяет маршрутизировать пакеты в соответствии с их источником. Это то, что ты хочешь

Люк Степневский
источник