Назад | Перейти на главную страницу

Ограничение исходящего SSH для каждого пользователя

У меня есть сервер, которым я управляю. У него есть порт 22 для доступа ко многим машинам. Я хочу использовать его как оплот для некоторых пользователей. Уловка в том, что я хочу, чтобы у каждого пользователя на моем сервере был свой белый список IP-адресов / адресов, к которым он может использовать SSH.

Например, предположим, что моя машина M имеет доступ к серверам S1, S2, S3, ... S8. У меня есть 3 пользователя, A, B и C на машине M. Я хочу, чтобы A мог использовать SSH только для S2, B чтобы иметь возможность SSH только для S1, S5 и S6, и C, чтобы иметь возможность SSH для S2 , S3, S4, S5 и S8.

Как мне этого добиться?

На конечном сервере вы можете ограничить доступ к SSH по имени пользователя в файле / etc / ssh / sshd_config, но я не думаю, что это то, что вы здесь ищете.

На исходной машине вы можете попробовать использовать для этого модуль iptables «owner». Возможно, потребуется некоторое техническое обслуживание, но это поможет. Он проверяет UID пользователя и затем разрешает (или отклоняет) соединение.

Допустим, UID ваших пользователей - 1, 2 и 3. пользователю A разрешен SSH для 1.1.1.1, пользователю B - 2.2.2.2 и пользователю C - 3.3.3.3.

iptables -A OUTPUT -m owner --owner-uid 1 -d 1.1.1.1/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 1 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 2 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 3 -p tcp --dport 22 -j DROP

чтобы сделать его более «управляемым», вы можете создать «цепочку» для каждого пользователя и определить там все его разрешенные доступы.

Создайте цепочки:

iptables -N USER1
iptables -N USER2
iptables -N USER2

Перенаправить исходящий трафик от пользователей в цепочку:

iptables -A output -m owner --owner-uid 1 -J USER1
iptables -A output -m owner --owner-uid 2 -J USER2
iptables -A output -m owner --owner-uid 3 -J USER3

Добавьте правила каждому пользователю его цепочки:

iptables -A USER1 -d 1.1.1.1/32 -p tcp --dport 22 -m comment --comment "allow ssh to 1.1.1.1" -j ACCEPT
iptables -A USER1 -p tcp --dport 22 -j DROP
iptables -A USER1 -j ACCEPT
iptables -A USER2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER2 -p tcp --dport 22 -j DROP
iptables -A USER3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER3 -p tcp --dport 22 -j DROP

проверить доступ пользователя (дисплейная цепочка)

iptables -L USER1

Модуль владельца также работает с gid:

iptables -A USER3 -m owner --owner-gid 3 -p tcp --dport 22 -j DROP

Вы должны иметь возможность сделать это с помощью фильтра iptable (соответствие владельца), чтобы ограничить доступ к сети для каждого пользователя. См. «Как сделать» ниже.

http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html