PDA

View Full Version : Реализация туннеля средствами dropbear


FilimoniC
16-06-2008, 12:30
Господа, ситуация такая: Требуется сделать туннель между компьютером за NAT'ом и роутером.
Для доступа к radmin на удаленном компе. Т.е.

Роутер слушает входящие подключения
На удаленном ПК запускается plink (консольный putty), который коннектится к роутеру и делает туннель.
Реализация такова:

На роутере запущен dropbear (так:)
#тут вопрос, нужен ли флаг -a ?
dropbear -m -a -p 443

На компьютере запускается
plink -P 443 -v -ssh -l loginXXX -pw passwordXXX -T -N -noagent -R 172.20.1.1:8087:127.0.0.1:8088 hostanmeXXX.homedns.org
и при этом делает туннель. При обращении к роутеру по адресу 172.20.1.1 (внутренний) на порт 8087,
идет туннельный коннект к сервису на удаленном компьютере на порту 8088.

Для тестов запускаю NetCat для Windows:
nc -v -vv -p 8088 -L -s 127.0.0.1

Так вот проблема: если я использую логипасс админа-рута роутера, то все работает отлично. А вот создать пользователя не получается.

[XxX@router root]$ cat /etc/group
root:x:0:XxX
nobody:x:99:
port_tunnels:x:200:yyy1,yyy2,yyy3,yyy4,yyy5

[XxX@router root]$ cat /etc/passwd
XxX:hash1hash1hash1hash1:0:0:root:/usr/local/root:/bin/sh
nobody:x:99:99:nobody:/:/sbin/nologin
yyy1:hash2hash2hash2hash2:201:200:Remote Tunnel N1:/opt:/sbin/nologin

(ессно, файлы сохраняются при ребуте)

При коннекте пишет
plink -P 443 -v -ssh -l yyy1 -pw pass_yyy1 -T -N -noagent -R 172.20.1.1:80:127.0.0.1:8088 xxxhost.homedns.org
Looking up host "xxxhost.homedns.org"
Connecting to 111.111.111.111 port 443
Server version: SSH-2.0-dropbear_0.49
We claim version: SSH-2.0-PuTTY_Release_0.60
Using SSH protocol version 2
Using Diffie-Hellman with standard group "group1"
Doing Diffie-Hellman key exchange with hash SHA-1
Host key fingerprint is:
ssh-rsa 1040 b4:27:d7:ca:44:02:66:54:da:22:62:8f:aa:47:f6:9f
Initialised AES-256 CBC client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 CBC server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Using username "yyy1".
Sent password
Access denied
Access denied
Disconnected: Unable to authenticate

Подскажите, как быть? Хочется чтобы у юзера было как можно меньше прав.

UPD: Решено: нужно пользователю прописать шелл /bin/true (вместо /sbin/nologin), затем в /etc/shells добавить строки с шеллами, которые используются, не забыв про /bin/sh (если его не добавить, невозможно будет зайти под рутом Через ssh. Если все же сделали такую ошибку, зайдите через web-интерфейс и rm /etc/shells ). Теперь если пользователь зайдет с помощью вышеописаной команды проброса порта, все будет ОК, а если с помощью обычного консольного захода, то консоль закроется сразу после авторизации.

FilimoniC
16-06-2008, 14:24
Нашел проблему:
Jun 16 14:22:55 dropbear[145]: user 'yyy1' has invalid shell, rejected
Посоветуйте, что написать в качестве шелла? Пробовал /sbin/nologin, но такого файла нету и он матерится. Пробовал /bin/netstat и /bin/true, то же самое. с /bin/sh все хорошо, но мне нужно чтобы шелла у данного логина не было

6opoga
16-06-2008, 15:06
Нашел проблему:
Jun 16 14:22:55 dropbear[145]: user 'yyy1' has invalid shell, rejected
Посоветуйте, что написать в качестве шелла? Пробовал /sbin/nologin, но такого файла нету и он матерится. Пробовал /bin/netstat и /bin/true, то же самое. с /bin/sh все хорошо, но мне нужно чтобы шелла у данного логина не было

Попробуй /bin/true, только добавь его в /etc/shells

Dpoke
16-06-2008, 15:13
Думаю надо написать /bin/false.

FilimoniC
16-06-2008, 15:25
Спасибо, только добил роутер :-)
А потом нашел вот это: http://wl500g.info/showpost.php?p=80019&postcount=9 :_))
6opoga, поправьте свой пост плиз, а то еще кто-нибудь споткнется :-)

FilimoniC
17-06-2008, 08:35
Пасибо большое, проблема решена!
Далее буду делать win-клиент, который будет сам реконнектиться если что. Отпишу тут

FilimoniC
17-06-2008, 11:11
Прошу еще помощи касательно plink: если сервер отвалился,то plink остается висеть, ничего не делая и не отваливаясь. Как бы победить такую ситуацию?

FilimoniC
17-06-2008, 16:40
Решил проблему - добавил к ссш-подключению туннель от клиента к роутеру, на роутере поднял хттп-сервачок с индексом = 0 байт.
На клиенте - wget, который периодически спрашивает эту страничку через туннель, если не спросилось - taskkill /F /IM plink.exe

Вот мои скрипты
Всего учавствуют:
plink - для связи и туннеля
wget - для периодического прошибания канала
hidec - чтобы прятать dos-окна

Совково, но кому надо, тот доработает сам, по-правильному, с pid-ами и прочим.