Firejail не работает через туннель SSH socks5

Firejail не работает через туннель SSH socks5

У меня есть сервер Ubuntu 18.04, на котором я создал две пары виртуальных интерфейсов (veth0a и veth0b) и назначил конец одного интерфейса (veth0b) новому сетевому пространству имен (netns0):

ip netns add netns0
ip netns exec netns0 ip link set lo up
ip link add veth0a type veth peer name veth0b
ip link set veth0b netns netns0

Затем я использовал firejail, чтобы заставить определенного пользователя (тестового пользователя) использовать это новое пространство имен по умолчанию, установив его /usr/bin/firejailв качестве оболочки по умолчанию для этого пользователя и добавив в файл следующее /etc/firejail/login.users:

test-user: --netns=netns0

Я провел следующий тест, чтобы убедиться, что это работает:

  1. Запуск tshark -i veth0a -f "port 443"из учетной записи root
  2. Подключитесь к серверу по SSH как тестовый пользователь
  3. Запуск curl https://1.1.1.1от имени пользователя SSH

Вывод tshark показывает правильный исходный IP-адрес veth0b для трафика 1.1.1.1.

Проблема, с которой я столкнулся, возникла при попытке использовать учетную запись тестового пользователя для установки динамической переадресации портов socks5 через SSH:

ssh -D 10000 -q -C -N test-user@server_ip

Запуск этой команды с моего ноутбука или рабочей станции позволяет мне установить локальный сервер socks5 на порту 1000 и туннелировать его через соединение SSH. Установка этого в качестве моего локального прокси socks5 и переход к https://api.ipify.orgдемонстрирует, что прокси работает и что мой ноутбук использует IP-адрес сервера.

Проблема в том, что трафик sock5, похоже, не проходит через правильное пространство имен. Другими словами, при просмотре веб-страниц на моем ноутбуке, подключенном к серверу socks5 через ssh-соединение тестового пользователя, мой трафик не отображается в tshark -i veth0a.

Нужен ли дополнительный шаг, чтобы убедиться, что туннель переадресации портов также использует firejail? Влияет ли настройка оболочки в /etc/passwd только на интерактивную оболочку входа? Нужно ли мне также изменить неинтерактивную оболочку пользователя на /usr/bin/firejail? Если да, то как это сделать?

Любая помощь будет высоко оценена.

решение1

То, что вы пытаетесь сделать, не сработает, и я объясню почему.

Ваше SSH-подключение подключается к удаленному серверуsshdдемон, который работает на хосте, а не в сетевом пространстве имен. Там создается экземпляр для вашего соединения. Затем вы проходите аутентификацию, затем настраиваются туннели,затемВаш сеанс пользователя настроен.

Вот отрывок из примера, запущенного с клиентом ssh версии 7.9p1 с использованием ssh -v -4 -D 10000 remoteuser@server:

debug1: Offering public key: /home/localuser/.ssh/id_ed25519 ED25519 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
debug1: Server accepts key: /home/localuser/.ssh/id_ed25519 ED25519 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
debug1: Authentication succeeded (publickey).
Authenticated to server ([192.0.2.2]:22).
debug1: Local connections to LOCALHOST:10000 forwarded to remote address socks:0
debug1: Local forwarding listening on 127.0.0.1 port 10000.
debug1: channel 0: new [port listener]
debug1: channel 1: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = C.UTF-8

Как видите, Local connections to LOCALHOST:10000 forwarded to remote address socks:0... channel 0: new [port listener]происходит первым.Затем Entering interactive sessionпроисходит. Обычно это называетсяпожарная тюрьмаи т. д., и было бы слишком поздно: все, что сделано до этого, происходит в пространстве имен хост-сети. Но на самом деле в вашем случае, поскольку вы используете -N:

-NНе выполнять удаленную команду. Это полезно только для переадресации портов.

ни одна оболочка не запускается,пожарная тюрьмане запускается и никакое альтернативное сетевое пространство имен не трогается. Это не имело бы значения даже без -Nтого, что описано выше.

Так что если вы действительно хотите это сделать, вам понадобится отдельный SOCKS5-прокси, и вы -Dбольше не сможете использовать эту опцию. Вы можете запустить экземплярsshdили любой другой инструмент с поддержкой SOCKS5 (например:dante-server) внутри сетевого пространства имен и выполнить перенаправление портов, используяiptable,nftables, или классический -Lвариантсшперенаправить наveth0bIP и порт прослушивания этого прокси-сервера SOCKS5, но для этого, вероятно, потребуется нечто большее, чем простопожарная тюрьмаи обычный пользователь. На этом этапе вам лучше запустить всю установку изсистемд, или с полномасштабнымLXC(илиLXDилиДокери т. д.) контейнера. ip netnsВозможности часто даже достаточны для этого (см.:Управление пространством имен с помощью ip netns (iproute2)).

Связанный контент