У меня есть сервер, которым я управляю. У него есть порт 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