![Firejail не работает через туннель SSH socks5](https://rvso.com/image/168783/Firejail%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D1%8C%20SSH%20socks5.png)
У меня есть сервер 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
Я провел следующий тест, чтобы убедиться, что это работает:
- Запуск
tshark -i veth0a -f "port 443"
из учетной записи root - Подключитесь к серверу по SSH как тестовый пользователь
- Запуск
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)).