LINUX.ORG.RU
ФорумAdmin

VirtualBox + Tor

 , , ,


0

3

Решил тут в целях саморазвития поразбираться как настраивать связку Tor и VirtualBox.

Создаю виртуальную машину, выбираю в качестве сетевого подключения «Виртуальный адаптер хоста». Имя этот адаптер имеет vboxnet1, IP-адрес 192.168.57.1. Гость получает IP от встроенного в VirtualBox DHCP-сервера.

В sysctl на хосте задаю такие опции:

net.ipv4.ip_forward=1
net.ipv4.conf.all.route_localnet=1
net.ipv6.conf.default.forwarding=0
net.ipv6.conf.all.forwarding=0

iptables на хосте настраиваю так:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -I INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -t nat -A PREROUTING -i vboxnet1 -p tcp --dport 9050 -j DNAT --to-destination 127.0.0.1:9050
iptables -A INPUT -i vboxnet1 -d 127.0.0.1 -p tcp --dport 9050 -j ACCEPT

iptables -I INPUT -i lo -j ACCEPT

iptables -I OUTPUT -o vboxnet1 -j DROP
iptables -I OUTPUT -o vboxnet1 -p tcp --sport 9050 -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type echo-request -j ACCEPT

iptables -I OUTPUT -o lo -j ACCEPT

Верно ли, что теперь виртуальная машина может только пинговать 192.168.57.1 и подключаться по TCP к 192.168.57.1:9050 (что в реальности будет перенаправлено на хосте на 127.0.0.1:9050)?

Верно ли, что приложения на хосте могут только пинговать виртуальную машину или являться сервером по адресу 127.0.0.1:9050 и никак больше по сети взаимодействовать с ВМ не могут?

Если не верно, то как сделать эти утверждения истинными?

★★★★★
Ответ на: комментарий от ving2

А можно конкретнее, что такого я забыл порезать?

Просто смотрю тот же middlebox - там даже больше, чем у меня разрешается.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от ving2

Увидел, что если открыть Яндекс.Интернетометр в tcpdump -i vboxnet0 начинают проскакивать какие-то IPv6 пакеты. Так что написал таки IPv6 правила:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -I INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -t nat -A PREROUTING -i vboxnet1 -p tcp --dport 9050 -j DNAT --to-destination 127.0.0.1:9050
iptables -A INPUT -i vboxnet1 -d 127.0.0.1 -p tcp --dport 9050 -j ACCEPT

iptables -I INPUT -i lo -j ACCEPT

iptables -I OUTPUT -o vboxnet1 -j DROP
iptables -I OUTPUT -o vboxnet1 -p tcp --sport 9050 -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type echo-request -j ACCEPT

iptables -I OUTPUT -o lo -j ACCEPT

ip6tables -F
ip6tables -X
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -t mangle -X                                                                                                                                      
ip6tables -t raw -F                                                                                                                                         
ip6tables -t raw -X                                                                                                                                         
ip6tables -P INPUT DROP                                                                                                                                     
ip6tables -P OUTPUT ACCEPT                                                                                                                                  
ip6tables -P FORWARD DROP                                                                                                                                   
                                                                                                                                                            
ip6tables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT                                                                                           
                                                                                                                    
ip6tables -I INPUT -i lo -j ACCEPT                                                                                                                          
ip6tables -I INPUT -i vboxnet1 -j DROP                                                                                                                      
                                                                                                                                                            
ip6tables -I OUTPUT -o vboxnet1 -j DROP  

По идее эти правила должны тупо резать весь IPv6 от и в виртуалку. Больше ipv6 пакетов я не видел.

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от ving2

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

KivApple ★★★★★
() автор топика

Только один вопрос: Вы откуда такую наркоманию взяли с -I ? Самим не тяжело читать? При этом еще и -A есть.

anc ★★★★★
()
Ответ на: комментарий от KivApple

вы посмотрите как там сам демон тор настраивается, он слушает на адресе вот этого интерфейса vboxnet1. у вас тор где слушает на 127.0.0.1? вот это правило работает?:

-i vboxnet1 -p tcp --dport 9050 -j DNAT --to-destination 127.0.0.1:9050
плюс не видно где у вас udp/dns. посмотрите еще вот здесь: https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy и вкурите варнинги.

ving2
()
Ответ на: комментарий от ving2

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

Меня беспокоит только вопрос безопасности - достаточно ли я всё заблокировал файерволом.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

а как оно у тебя вообще работает, если адаптер в режиме вирт. адаптер хоста. Вроде как в таком режиме пакеты от вирт. машины, должны в цепочку форвард попадать. Да и для общения с внешним миром маскарад должен быть в правилах.

ving2
()
Ответ на: комментарий от ving2

С внешним миром виртуалка общаться как раз таки не должна. Если что Tor запущен на хосте. Идея в том, что виртуалка использует как SOCKS-прокси 192.168.57.1:9050. Приём пакетов на этот порт с vboxnet1 разрешён и с помощью DNAT перенаправляется на 127.0.0.1:9050.

Это не работало, пока я не сделал вот это:

net.ipv4.conf.all.route_localnet=1

После такой настройки ядро нормально относится к тому, что локалхост получил пакет от 192.168.57.101 (адрес виртуальной машины).

Как я понимаю, при использовании DNAT цепочка FORWARD не задействуется. Во всяком случае, если происходит перенаправление на localhost. Могу ошибаться, однако правило по умолчанию для этой цепочки у меня DROP, как можно заметить.

Как это видится с точки зрения виртуалки: она может попинговать 192.168.57.1 и видит один открытый порт tcp 9050. Ну плюс DHCP-сервер встроенный в VirtualBox, доступный по адресу 192.168.57.100. На него правила iptables не действуют, судя по всему запросы на получение IP-адреса обрабатываются VirtualBox до того как пакет будет отдан ядру. С другой стороны он ничего кроме выдачи адресов не умеет (скажем, DNS там нет), так что угрозу безопасности представлять не должен.

Если настроить Firefox на использование SOCKS5 прокси и включить галку «разрешать доменные имена через прокси», то интернет начинает работать и судя по всему через Tor (по статистике демона Tor, по IP-адресу и по доступности onion-ресурсов). Без этой настройки никакой софт никуда подключиться не может.

Меня в целом устраивает работоспоспособность этой системы. Мне лишь интересно, всё ли я закрыл. И нет ли какой-то хитрой команды, чтобы связаться с процессом на хосте (помимо прокси на порте 9050) или даже отправить пакет во внешнюю сеть.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Если настроить Firefox на использование SOCKS5 прокси и включить галку

так у тебя не прозрачный доступ получается.

С внешним миром виртуалка общаться как раз таки не должна

не видел такой реализации. Если ты посмотрел в примерах выше, то там как раз «прозрачный нат». Ну и естественно пакеты в цепочку форвард попадают.

На него правила iptables не действуют, судя по всему запросы на получение IP-адреса обрабатываются VirtualBox до того как пакет будет отдан ядру.

странно судя по вот этому должны действовать:

 # Since now we have a much more restrictive firewall,
  # we must explicitely accept DHCP, otherwise the guest won't get an IP!
  # If you have only guests where you use static IP, you can comment out
  # those rules to be even more restrictive.
  iptables "${ACTION}" INPUT  -i "${IFACE}" -p udp --dport 67 -j ACCEPT
iptables "${ACTION}" OUTPUT -o "${IFACE}" -p udp -s "${ADDR}" --sport 67 -d "${MB_SUBNET}" --dport 68 -j ACCEPT

ving2
()
Ответ на: комментарий от ving2

А мне и не нужен прозрачный доступ. Меня вполне устраивает то, что есть.

KivApple ★★★★★
() автор топика
1 мая 2017 г.

Что за ерунда. Почему никто ещё не сделал большую кнопку «Сделать зашибись»? Что написано в исходном сообщении? Могу ли я, выполнив эту инструкцию, просто запустить виртуалочку, запустить в ней браузер, посмотреть свой IP и убедиться что трафик идёт через Tor?

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Ну вот, например, инструкция. https://www.howtoforge.com/how-to-set-up-a-tor-middlebox-routing-all-virtualb... И первый же пункт не подходит для моей Генту. Я запостил вопрос на ЛОР о том, как адаптировать первый пункт для Генты, и получил в ответ «АХАХА ВАЩЕ РЖАКА ТЫ ЧЁ ДЕБИЛ ЧТО ЛИ ТЫ ЧЁ НЕ ЗНАЕШ ЧТО /etc/network/interfaces ЕСТЬ ТОЛЬКО ДЛЯ ДЕБИАНА АХАХА ВАЩЕ ДЕБИЛ КАК ЭТО МОЖНО НЕ ЗНАТЬ Я ЖЕ ЗНАЮ ЗНАЧИТ ВСЕ ДОЛЖНЫ ЗНАТЬ! А КАК АДАПТИРОВАТЬ ДЛЯ ГЕНТЫ ЯТЕБЕ НЕ СКАЖУ, ПОТОМУ ЧТО ТЫ ДЕБИЛ!!!»

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Мой вариант по идее не требует установки ничего кроме iptables, tor и virtualbox на хосте.

Не знаю зачем они так заморачиваются с dnsmasq и прочим, когда можно тупо отрезать виртуалке всё, кроме tor.

Ведь firefox умеет отправлять через прокси и DNS запросы тоже.

Почему-то никто не подтвердил надёжность схемы, но лично я на tcpdump ничего левого не вижу (пакеты ходят от виртуалки только к локалькому адресу тора).

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
14 сентября 2017 г.

Здравствуйте. Неоходимо наладить работу DNS в гостевой системе. Дело в том, что ни одна программа не работает с интернетом, кроме браузера. Даже если ввести SOCKS-сервер. Ни одна программа, кроме браузера, не умеет Remote DNS.

anonymous
()
23 октября 2017 г.

Я выполнил твои команды. Tor успешно туннелирован в виртуалку. А проблему с DNS я решил с промощью проги dns-tcp-socks-proxy. Он есть только в репозитории Арча, но компилируется без проблем.

Работает всё, кроме торрентов. Вообще не хотят работать DHT! Ошибка UDP. Поиск в гугле говорит, что UDP через tor не работает. Блин, и как тогда? Я не хочу чтобы Роскомнадзор знал, что я качаю фильмы в день их релизов! Вообще, любой торрент-клиент можно пустить через Tor (а вернее, через прокси: HTTP или SOCKS). Так это что же, через Tor только скачивается, а запросы DNS и DHT выполняются напрямую? Так какой смысл тогда?

Как запустить DHT через Tor?

anonymous
()
Ответ на: комментарий от anonymous

не хочу чтобы Роскомнадзор знал, что я качаю фильмы в день их релизов

правильно на чьи паспортные данные витая пара оформлена - тот пусть и отвечает...

amd_amd ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.