Что: 4dc2d9bda136818589b90db3c1b96512433ce659
Когда: 2020-12-12 16:49:23+03:00
Темы: ipsec
Протоколы обмена файлами, IPsec, удалённый доступ В моём идеальном мире между компьютерами должен быть IPsec. Аутентифицированный, всё такое. А не костыли транспортного уровня типа TLS per-application. Мне поэтому жутко не нравится когда протоколы делают без возможности использования TLS (ну вроде HTTP/2 хотели же) или когда говорят что FTP это не безопасно. Если поверх аутентифицированного доверенного IPsec, то какие проблемы? Кроме IPsec у меня на моих машинах гоняется и SSH. Вот зачем он мне? Для управления компьютерами вне IPsec (его же тоже нужно как-то настроить предварительно) конечно нужен, а в общем случае нет. Могу ли использовать старый добрый telnetd для этого? Попробовал -- могу, вроде бы всё терминальное (tmux там) работает. А вот все утилиты типа rlogin, rsh, rcp убраны уже в моей версии FreeBSD. Ну и нужно думать как бы автоматизировать telnet вход. А если чуть подольше подумать, то вообще аутентификация по ключам (для которых локально можно требовать парольную фразу) была бы в любом случае полезна. telnet намекает на то, что нужно Kerberos использовать. Но у меня с ним мало что выходило и я его боюсь. То есть SSH поверх IPsec был бы хорош всем, если бы можно было отключить шифрование трафика, ибо IPsec это делает. Такой опции из коробки нет. И вообще SSH это про удалённый доступ, а это значит мало трафика, ибо интерактив для человека. Поэтому плюнул на telnet+Kerberos идею. SSH всё равно будет для управления out-of-band IPsec и это уже рабочая инфраструктура, пускай и с overhead-ом, но для интерактивных сессий не страшного. А как быть с передачей файлов? NFS работает, но это кардинальное большое решение, не во всех случаях удобное. scp/sftp не хочется, так как это уже серьёзный overhead на шифрование, избыточное в IPsec сети. Один файл можно передать и просто по TCP сокету через netcat. Но продолжить прерванную передачу нельзя, если не считать руками байты и указать их для какого-нибудь dd при повторном запуске. python -m SimpleHTTPServer на одной стороне и fetch/wget/curl позволит продолжить докачку. tftp сервер просто и быстро поднимается, но всё же это уже больно не эффективный протокол. Да и, из-за ограничений размеров счётчиков, в нём только небольшие файлы можно передать. Хотя простота подкупает. А какие протоколы есть для передачи нескольких файлов, для получения списка директорий/файлов? FTP -- мамонт, не рассматриваю, хотя он подходит. Он должен уже не одно десятилетие назад вымереть. Его два TCP соединения -- та ещё заноза для firewall-а, да и много архаичного в нём, совершенно не актуального и избыточного для современного мира. lftp утилита позволяет одной командой зеркалировать целые FTP серверы/директории. SFTP -- подходит, но, как уже писал, ненужный overhead в IPsec сети. Я надеюсь что 9P на практике окажется очень здоровским протоколом, который бы и NFS наверное заменил. Но в FreeBSD его поддержка будет только в следующем релизе. Вспомнил про WebDAV. Который даже позволял из коробки в Windows 98 монтировать удалённые директории. Работало это на Windows у родителей не очень -- уже не помню конкретики, но вроде просто нестабильно. Но WebDAV чисто в теории мне нравится относительной простотой, возможностью использовать без WebDAV клиента (curl хватит или даже броузера), всякими докачками. В принципе годное решение. Да и всякие lighttpd/apache имеют из коробки webdav модуль. rsync ещё могу вспомнить, который по своему собственному протоколу может работать, без всяких SSH. В отличии от FTP, SFTP, WebDAV -- с большим количеством файлов/директорий он очень эффективен для зеркалирования. Никогда не пробовал, но man говорит что и докачивать файлы может (--append). Тоже годное решение, особенно учитывая что rsync часто есть на компьютерах и его демон настраивается куда проще чем HTTP-серверы. FISH https://en.wikipedia.org/wiki/Files_transferred_over_shell_protocol мог бы быть интересен, но отдельного клиента с ходу для него не увидел. lftp поддерживает fish://, но при этом запускает его поверх SSH насильно. UUCP мог бы отправлять/докачивать файлы в обе стороны -- в нём есть возможность не копировать файл в spool область. NNCP может только через копирование. Но это уже настройка знаний между компьютерами (хотя UUCP может и анонимным быть). Kermit решение вспомнил. http://www.columbia.edu/kermit/ckututor.html И Zmodem вместе с ним: https://ohse.de/uwe/software/lrzsz.html В lrzsz даже есть сразу поддержка TCP сервера-клиента и протоколов без коррекции ошибок (IPsec же!). Списка файлов нет. Но... по IPv4 оно у меня заработало, а по IPv6 нет -- ругается на какой-то format3, наверное адреса. Kermit, судя по исходникам, аналогично с IPv6 не должен дружить, но в нём хотя бы уже и списки файлов можно было бы получать. Но так можно накопать уже тьму другую софта, особенно ориентированного для быстрой передачи данных (из единственного TCP соединения сложно выжать скорость).
From: kmeaw Date: 2020-12-15 01:56:57Z А можно ли настроить какую-нибудь существующую реализацию IPsec таким образом, чтобы аутентифицировать не машину, а человека, который за машиной сидит? То есть я хочу что-то вроде IDENT, но правильно спроектированное. Чтобы я на другом конце мог писать фаервольные правила, фильтрующие не IP-адреса, а людей. А в совсем хорошем случае - ещё и из прикладных программ узнавать, кто к ним по сети пришёл. Как с клиентскими TLS-сертификатами. > Ну и нужно думать как бы автоматизировать telnet вход. rfc2941 > То есть SSH поверх IPsec был > бы хорош всем, если бы можно было отключить шифрование трафика, ибо > IPsec это делает. https://gitweb.gentoo.org/repo/gentoo.git/tree/net-misc/openssh/files ssh -o Ciphers=none Жаль, что > Такой опции из коробки нет. > rsync Мне как-то нужно было скачать один файл с удалённого сервера (без докачки, всегда от начала и до конца) и запайпать его в другую программу. Из коробки клиент rsync так не умеет. Я попытался написать свою реализацию, и с удивлением обнаружил, что протокол оказывается недокументирован. > Zmodem ... Списка файлов нет. В те времена его чаще всего передавали с помощью файла FILES.BBS. > по IPv6 нет lrzsz и kermit наверняка можно попытаться подружить с inetd и netcat, чтобы им не пришлось ничего знать про IPv6. > А какие протоколы есть для передачи нескольких файлов, для получения > списка директорий/файлов? Лет 10 назад я придумал один очень странный протокол, работающий поверх TCP. Он очень зависит от системы, но у него есть масса применений. У меня есть его реализация для Linux/amd64. Описать его можно буквально парой фраз: в момент подключения сервер посылает клиенту слово, которое позволяет клиенту идентифицировать платформу и версию протокола; затем клиент посылает семь машинных слов (номер syscall и его аргументы), а сервер их выполняет и отвечает одним словом (return value). Вызовы read и write всегда выполняются до конца (сервер докручивает partial reads/writes до успеха или до первой ошибки). С его помощью можно и файлы передавать, и директории просматривать, и вообще почти что угодно делать, не внося изменений в реализацию сервера, которая занимает меньше килобайта памяти.
From: Sergey Matveev Date: 2020-12-15 07:34:07Z
Сгенерирован: SGBlog 0.34.0