Анонимный, одноразовый sftp-сервер.
Sftp-сервер это часть пакета ssh, используемая для передачи файлов по сети. В данном руководстве решается задача анонимного и безопасного приёма файлов в сети tor.
Загружаемся в системе Tails и скачиваем любой образ debian-live с удобным для вас DE. К примеру debian-live-12.7.0-amd64-xfce.iso
amnesia@amnesia:~$ wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.7.0-amd64-xfce.iso
amnesia@amnesia:~$ wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/SHA256SUMS
amnesia@amnesia:~$ wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/SHA256SUMS.sign
Импортируем открытый ключ
amnesia@amnesia:~$ torsocks gpg --keyserver keyring.debian.org --recv-keys 0xDA87E80D6294BE9B
Проверяем подпись файла
amnesia@amnesia:~$ gpg --verify SHA256SUMS.sign
Считаем SHA256SUMS для debian-live-12.7.0-amd64-xfce.iso сверяем со значением указанным в файле SHA256SUMS
amnesia@amnesia:~$ sha256sum debian-live-12.7.0-amd64-xfce.iso
06afa9793cb6c4a3a41d608794405f1af626ab2f9b85bec28e5253d4da929207 debian-live-12.7.0-amd64-xfce.iso
Подключаем пустой USB накопитель и с помощью amnesia@amnesia:~$ lsblk
выясняем его блочное устройство. Сравнивам вывод команды до и после подключения пустого накопителя, появившеся блочное устройство будет искомым.
Записываем образ debian-live-12.7.0-amd64-xfce.iso на подключенный накопитель.
amnesia@amnesia:~$ sudo dd if=debian-live-12.7.0-amd64-xfce.iso of=/dev/sdb bs=1M status=progress conv=fsync
Дожидаемся окончания записи образа, отключаем записанный накопитель.
Собираем транспóрт WebTunnel используя руководство #3.1 Tails [WebTunnel].
Копируем каталог с файлами транспорта в домашний каталог пользователя amnesia.
amnesia@amnesia:~$ sudo cp -fr /home/amnesia/Persistent/webtunnel_start /home/amnesia/webtunnel_start
Вносим правки в стартовый скрипт webtunnel_start.sh, меняем пути к файлам.
amnesia@amnesia:~$ sudo nano /home/amnesia/webtunnel_start/webtunnel_start.sh
Вместо путей /home/amnesia/Persistent/webtunnel_start/
пишем /home/amnesia/webtunnel_start/
и сохраняем файл <Ctrl>+<X>, <Y>.
Вносим правки в конфигурационный файл torrc.
amnesia@amnesia:~$ sudo nano /home/amnesia/webtunnel_start/torrc
Приводим его к виду:
ClientOnly 1
Log notice file /var/log/tor/tor.log
UseBridges 1
ClientTransportPlugin webtunnel exec /usr/bin/webtunnel-client
bridge webtunnel ХХХХХХХ
HiddenServiceDir /var/lib/tor/hidden-service-sftp/
HiddenServicePort 4569 127.0.0.1:4569
#HiddenServiceAuthorizeClient stealth hidden-service-sftp
Для HiddenServicePort вместо 4569 моржно указать любой случайный порт. Сохраняем файл <Ctrl>+<X>, <Y>.
Пакуем подготовленный каталог и копируем архив обратно в Persistent.
amnesia@amnesia:~$ sudo tar -czvf webtunnel_sftp.tar.gz /home/amnesia/webtunnel_start
amnesia@amnesia:~$ sudo cp /home/amnesia/webtunnel_sftp.tar.gz /home/amnesia/Persistent/webtunnel_sftp.tar.gz
Завершаем работу системы Tails, отключаем накопитель с ней. Далее все опреции будут производиться во вновь установленной системе debian-live. Подключаем накопитель с новой системой, загружаемся с него.
Подключаем накопитель с системой Tails. Нажимаем на значок тома с замком, появившийся на рабочем столе, вводим пароль шифрования. В папке Persistent накопителя находим архив webtunnel_sftp.tar.gz и копируем его в домашний каталог пользователя user. Нажимаем на значок ⏏
и отключаем накопитель с системой Tails.
Устанавливаем tor
user@debian:~$ sudo apt update
user@debian:~$ sudo apt install tor
Распаковываем архив.
user@debian:~$ sudo tar -xvf /home/user/webtunnel_sftp.tar.gz -C /
Запускаем скрипт установки соединения.
user@debian:~$ sudo /home/amnesia/webtunnel_start/webtunnel_start.sh
И дожидаемся установки соединения с tor, контролируем процесс читая лог
user@debian:~$ sudo cat /var/log/tor/tor.log
Устанавливаем openssh-server
user@debian:~$ sudo apt install -y openssh-server
Создаём каталог для даных
user@debian:~$ sudo mkdir -p /data/store1
Добавляем в систему группу sftp
user@debian:~$ sudo addgroup sftp
Настраиваем владельца и права на каталоги
user@debian:~$ sudo chown root:root /data/store1
user@debian:~$ sudo chmod 755 /data/store1
user@debian:~$ sudo mkdir /data/store1/upload
user@debian:~$ sudo chown root:sftp /data/store1/upload
user@debian:~$ sudo chmod 730 /data/store1/upload
Добавляем пользователя для sftp-сервера.
user@debian:~$ sudo useradd -m user1 -g sftp
Задаём ему пароль
user@debian:~$ sudo passwd user1
Вместо имени user1 можно задать какое-то другое.
Редактируем конфигурационный файл sftp-сервера.
user@debian:~$ sudo nano /etc/ssh/sshd_config
Указываем в нём
LoginGraceTime 1m
PermitRootLogin no
Port 4569 # Или тот, который вы указывали в torrc
ListenAddress 127.0.0.1
Match group sftp
ChrootDirectory /data/store1
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Сохраняем файл <Ctrl>+<X>, <Y>.
Запускаем sftp-сервер
user@debian:~$ sudo systemctl start sshd
Имя хоста sftp-сервера находится в файле
user@debian:~$ sudo cat /var/lib/tor/hidden-service-sftp/hostname
Меняем стандартный пароль пользователя user
user@debian:~$ sudo passwd user
Запускаем таймер на выключение системы
user@debian:~$ sleep 5000 && sudo poweroff
Где 5000 ― время в секундах до выключения системы. После выключения системы произойдёт удаление конфигурации и всех загруженных клиентами файлов в каталоге /data/store1/upload.
Подключаем авторизацию клиентов Onion Service…
Генерируем ключи авторизации клиента.
user@debian:~$ sudo apt install basez
user@debian:~$ sudo su
root@debian:~$ openssl genpkey -algorithm x25519 -out /home/user/client.prv.pem
root@debian:~$ cat /home/user/client.prv.pem | grep -v " PRIVATE KEY" | base64pem -d | tail --bytes=32 | base32 | sed 's/=//g' > /home/user/client.prv.key
root@debian:~$ openssl pkey -in /home/user/client.prv.pem -pubout | grep -v " PUBLIC KEY" | base64pem -d | tail --bytes=32 | base32 | sed 's/=//g' > /home/user/client.pub.key
Создаём файл
user@debian:~$ sudo nano /var/lib/tor/hidden-service-sftp/authorized_clients/client1.auth
и помещаем в него текст
descriptor:x25519:base32-encoded-public-key
где base32-encoded-public-key это вывод команды
user@debian:~$ sudo cat /home/user/client.pub.key
Меняем владельца файла
user@debian:~$ sudo chown debian-tor:debian-tor /var/lib/tor/hidden-service-sftp/authorized_clients/client1.auth
Раскомментируем строчку в /etc/tor/torrc
HiddenServiceAuthorizeClient stealth hidden-service-sftp
Перезапускаем tor
user@debian:~$ sudo systemctl restart tor
Приватный ключ авторизации .onion сервиса /home/user/client.prv.key понадобится для настройки клиента. Копируем этот файл на клиент, удаляем на сервере.
Авторизация sftp по ключам…
Генерируем ключ ssh
user@debian:~$ ssh-keygen -t ed25519 -b 4096 -C "user1@sftp.onion"
user1@sftp.onion ― это комментарий, можно добавить любой.
Создаём каталог .ssh для пользователя sftp
user@debian:~$ sudo mkdir /home/user1/.ssh/
Переносим в него публичнй ключ ssh
user@debian:~$ sudo cp /home/amnesia/.ssh/id_ed25519.pub /home/user1/.ssh/authorized_keys
Выставляем права
user@debian:~$ sudo chown -R user1:sftp /home/user1/.ssh
Добавляем в /etc/ssh/sshd_config строчки
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
HostbasedAuthentication no
IgnoreRhosts yes
PasswordAuthentication no
PermitEmptyPasswords no
UsePAM no
Перезапускаем службу
user@debian:~$ sudo systemctl restart sshd
Для подключения на клиенте нам потребуется приватный ключ ssh /home/debian/.ssh/id_ed25519. Копируем этот файл на клиент, удаляем на сервере.