LXF162:Raspberry Pi
Olkol (обсуждение | вклад) (→Raspberry Pi: SSH-туннель) |
Olkol (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
[[Категория: Учебники]] | [[Категория: Учебники]] | ||
+ | [[Категория: Компьютер]] | ||
'''Raspberry Pi. Начните знакомство с Linux и новым карманным компьютером.''' | '''Raspberry Pi. Начните знакомство с Linux и новым карманным компьютером.''' |
Текущая версия на 00:57, 12 октября 2018
|
|
|
Raspberry Pi. Начните знакомство с Linux и новым карманным компьютером.
Содержание |
[править] Raspberry Pi: SSH-туннель
Пользуйтесь публичным Wi-Fi безопасно и одолейте цензоров: Джонатан Робертс рассказывает об SSH-тунеллировании.
Большинство из нас сталкивались с блокировкой интернет-соединения, не позволяющей делать нам то, что мы хотим – обычно в виде брандмауэра, ограничивающего доступ к сервисам, таким как SMTP или XMPP, или в виде фильтрации содержимого сайтов. Каким бы ни было ограничение, приятного здесь мало.
Большинство из нас также пользовались публичным Wi-Fi, и если у вас есть здравый смысл, то вы наверняка чувствовали себя не очень комфортно. В статье «Изучите взлом» из LXF154 было показано, как легко пользователи из той же самой сети могут шпионить за вами и даже влиять на ваши действия. С публичным Wi-Fi вы не представляете, кто еще пользуется вашим подключением и что создатели подключения делают с вашим трафиком!
На этом уроке мы покажем вам, как создать SSH-туннель в Paspberry Pi. Эта технология поможет вам одолеть цензоров и шпионов! Raspberry Pi прекрасно подходит для этого. Так как он стоит недорого и работает бесшумно, его можно просто держать на полке, пока он не понадобится.
[править] Raspbian
Если вы следите за этой серией с самого начала, возможно, у вас еще остался исходный образ Debian, которым мы пользовались в первой статье. Однако Raspberry Pi Foundation не стоит на месте и недавно выпустила новую операционную систему на основе дистрибутива Raspbian.
Raspbian – новая версия Debian, оптимизированная для работы с Raspberry Pi. Она не только работает «прямо из коробки» и заметно быстрее (некоторые тесты показали прирост производительности от 4 до 40 %, в зависимости от рода деятельности), но и содержит удобную утилиту автоматизированной настройки, вызываемую при первом запуске Raspberry Pi. Она значительно упрощает многие задачи, решенные нами в предыдущих статьях, в том числе расширение раздела на весь диск, отключение overscan, включение SSH и изменение раскладки клавиатуры.
Советуем обновить вашу систему. Самый простой способ это сделать – загрузить последнюю версию образа с www.raspberrypi.org/downloads, распаковать ее и записать образ на SD-карту командной dd так же, как мы делали это ранее.
Советуем очистить все содержимое диска, так как мы столкнулись с какими-то странными проблемами, когда этого не сделали – поскольку старые файлы настройки и программы сохранились. Воспользуйтесь следующей командой:
sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1M
Здесь mmcblk0 – устройство, соответствующее SD-карте. Перед запуском команды заранее создайте резервную копию, так как команда записывает нули на весь диск, делая все существующие данные невосстановимыми.
[править] Порты
Прежде чем воспользоваться SSH-туннелем, объясним идею, лежащую в его основе.
При создании соединения между двумя компьютерами – для передачи web-документов, открытия защищенной оболочки или обмена файлами по NFS – компьютеру, инициирующему соединение, должны быть известны IP-адрес компьютера, к которому нужно подключиться, и номер порта сервиса (web, SSH, NFS и т. д.), к которому нужно обратиться.
Большинство из вас знают, что такое IP-адрес. Это число (например, 192.168.133.20), которое является уникальным идентификатором компьютера в сети, точно так же, как почтовый адрес идентифицирует ваш дом. Но порты знакомы нам чуть хуже.
[править] Задаем порт
Так же как в одном доме обычно живет несколько человек, и каждый из них ждет свою почту, на каждом компьютере есть много разных сервисов, ожидающих подключения непосредственно к ним. В реальном мире мы адресуем почту конкретному человеку, положив ее в конверт с его именем, а в компьютерной сети мы указываем конкретный порт, к которому намереваемся подключиться.
Каждый порт задается номером от 0 до 65535, и каждый сервис, предоставляемый компьютером, слушает соединения на одном из этих портов. Есть список портов по умолчанию, которые слушают все популярные сервисы. Этот список поддерживается IANA (Internet Assigned Numbers Authority – Администрация адресного пространства Интернета) и покрывает порты с 0 по 1023 (web-трафик проходит через порт 80, FTP – через порт 20, SSH – через порт 22 и т.д).
Ничто не мешает вам настроить сервис на другой порт, и если вы знаете, на каком порту запущен сервис, можно указать клиенту подключаться к этому порту, а не к порту по умолчанию.
Хорошо, но какое отношение это имеет к SSH-туннелям?
На практике SSH-тунеллирование сводится к искусному перенаправлению портов.
Лучше всего объяснить это на примере. Представьте, что у нас два компьютера: ноутбук в кафе (laptop), где доступ к Интернету ограничен прокси-сервером (программой, которая умеет фильтровать интернет-трафик) и нельзя зайти на сайт example.com, и pi – Raspberry Pi с неограниченным доступом в Интернет дома. У ноутбука есть доступ к pi.
[править] Туннелируем соединение
Чтобы открыть example.com с ноутбука, понадобится создать туннель, т. е. перенаправить наше подключение через pi. SSH-туннель такое позволяет.
Обычно SSH создает защищенное соединение между двумя компьютерами на порту 22. Но при использовании SSH-туннеля она перенаправит весь трафик с указанного порта laptop по зашифрованному соединению на порт 22 pi (или на любой другой указанный нами компьютер и порт).
У такого подхода два преимущества. Во-первых, как и при обычном SSH-соединении, трафик теперь направляется по защищенному соединению, то есть никто в локальной сети не сможет подсмотреть за нами и украсть имена пользователей и пароли. Достоинство туннелирования в том, что оно позволяет делать это с любым видом web-трафика, не только с оболочками. Во-вторых, это позволяет обойти фильтрацию содержимого сайтов в локальной сети. Если маршрутизатор, за которым находится локальная сеть, фильтрует трафик на example.com, перенаправляя соединение через неотфильтрованный порт на неотфильтрованный компьютер, в локальной сети такие ограничения можно обойти. Для этого нужно убедиться, что SSH установлен и запущен в виде сервиса на laptop и pi. На pi для этого достаточно открыть утилиту raspi-config и выбрать опцию SSH (если у вас последняя версия Raspbian).
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
На ноутбуке настройка зависит от дистрибутива. Для настройки SSH в Fedora выполните команды:
su -c “yum -y install openssh”
su -c “systemctl enable sshd.servive”
su -c “systemctl start sshd.service”
А в Debian или Ubuntu –
sudo apt-get install openssh-server openssh-client
sudo service ssh start
sudo insserv ssh
Если на ноутбуке стоит Windows, понадобится Putty или Cygwin, но обе эти программы выходят за рамки нашей статьи.
[править] Создание туннеля
Сделав это, выполните следующую команду для создания туннеля:
ssh -L 1080:example.com:80 pi-user@pi -f
Разберем ее, чтобы вы поняли, что происходит. Параметр -L сообщает SSH, что мы будем использовать его для перенаправления порта.
Следующий фрагмент строки разбит на три части двоеточиями. Первое число – порт на локальном компьютере (laptop), который мы хотим перенаправить. Все порты с номером больше 1024 можно перенаправлять без прав root. Весь трафик, который мы направим на этот порт, будет перенаправлен. Средний фрагмент – компьютер, куда мы хотим перебросить трафик, а последнее число – порт на этом компьютере, к которому мы хотим подключиться. Компьютер и порт могут быть любыми – если у pi есть к ним доступ, все будет работать. Так как мы хотели открыть сайт example.com, то указали порт 80 – по умолчанию он используется для web-трафика. В конце указываются имя пользователя и компьютер, через которые мы хотим пропустить туннель. Здесь это компьютер pi и пользователь pi-user.
Эта часть работает как в стандартной команде ssh, и здесь можно пользоваться всеми обычными приемами: например, указать другие порты, использовать IP-адреса вместо имен компьютеров и т. д. (помните, что компьютер должен быть доступен для laptop, т. е. у него должно быть доменное имя или публично доступный IP-адрес; советы, как добиться этого при домашнем подключении, приведены во врезке «Динамический DNS»).
Параметр -f велит ssh перейти в фоновый режим и не занимать терминал в pi.
Теперь, чтобы открыть сайт example.com на laptop, нужно лишь открыть в браузере адрес http://localhost:1080, и все должно получиться. Двоеточие в конце адреса означает, что нужно использовать указанный порт вместо порта по умолчанию 80. “localhost” означает, что нужно обратиться к порту 1080 на том же компьютере – это «адрес вашего компьютера в Интернете».
Можно легко изменить настройки, чтобы пользоваться и другими сервисами, а не только web-трафиком. Например, если на pi есть собственный почтовый сервер (SMTP), можно изменить example.com на localhost и 80 на 25, и все будет готово. Затем, вместо того, чтобы вводить специальный адрес в браузере, нужно изменить некоторые настройки в почтовом клиенте.
[править] Обратные туннели
SSH умеет создавать и другие туннели. Кратко рассмотрим их. Если в предыдущем примере у нас было перенаправление локального порта (-L), следующий можно назвать перенаправлением удаленного порта.
Представим себе несколько иной сценарий. У нас опять же два компьютера – laptop и pi. Ноутбук находится дома, но на нем нужно открыть внутренний сайт internal.example.com какой-то другой сети, который блокируется для внешних подключений брандмауэром. А pi подключен ко внутренней сети.
Чтобы обойти этот брандмауэр снаружи, можно создать обратный туннель с pi на laptop. Затем с помощью этого туннеля ноутбук может проникнуть внутрь защищенной брандмауэром сети через pi и обратиться к internal.example.com.
Для этого на pi выполняется команда
ssh -R 1080:internal.example.com:80 laptop-user@laptop -f
Параметр -R означает обратный [reverse] или удаленный [remote] туннель. В следующем фрагменте текста первый параметр задает не локальный порт на pi, с которого нужно перенаправлять подключения, а порт ноутбука для той же цели.
Все остальное работает как раньше. Чтобы извлечь максимум из этой уловки, туннель нужно создать заранее, так как у вас не будет доступа к pi с ноутбука, и поддерживать SSH-соединение активным. Для этого вместо обычного SSH можно установить и воспользоваться autossh, оберткой, поддерживающей соединение активным. Синтаксис команды autossh несколько иной:
autossh -M 20000 -f 1080:internal.example.com:80 laptopuser@laptop
Здесь обратите внимание на параметр -M. Указанный порт не должен использоваться другими программами, поэтому выберите номер побольше. Он используется autossh для отслеживания соединения и его восстановления, если оно пропадает.
Правда, этот полезный прием может поссорить вас с системными администраторами. Брандмауэры ставят все-таки не зря, и администраторы не любят, когда другие проделывают в них дырки!
Некоторые специалисты в области безопасности используют именно эту технологию для проверки корпоративных сетей на прочность. С помощью методов социальной инженерии они проносят в здания компаний маленькие коробочки (и Raspberry Pi идеально подходит для этого), находят незанятые сетевые разъемы и подключают их к ним. Коробочки настраиваются на автоматическое создание SSH-туннеля (например, с помощью скрипта /etc/network/if-up.d), через который можно будет проникнуть в сеть компании, украсть пароли и поработать с файлами!
[править] Динамические туннели
Вот последняя и, пожалуй, самая полезная из технологий туннелирования SSH. Можно не указывать конкретные порты или сервисы для обмена информацией, а создавать динамические туннели, способные собирать и отправлять данные всем сервисам. Команда в этом случае гораздо проще:
ssh -D 1080 pi-user@pi
Параметр -D означает, что мы хотим настроить динамический туннель, номер – используемый локальный порт, а pi-user@pi – пользователь и компьютер, к которым будет проложен туннель.
По выполнении этой команды можно настроить любую программу, поддерживающую прокси SOCKS, на отправку трафика через только что созданный SSH-туннель.
Например, в Firefox нужно зайти в Preferences > Advanced > Network [Настройки > Дополнительные > Сеть] и нажать на кнопку Settings [Настройки] в разделе Connection [Подключение]. В появившемся окне выберите ручную [Manual] настройку прокси. Затем введите в строку SOCKS host [Узел SOCKS] адрес 127.0.0.1 и порт, указанный в команде ssh.
Нажмите OK, и все должно быть готово. Если все работает правильно, сайты должны открываться как обычно, но теперь весь трафик будет передаваться через туннель SSH на компьютер pi.
Чтобы убедиться, что все действительно работает, закройте SSH-соединение (нажав Ctrl+c) и попробуйте открыть страницу снова. Если использовался туннель, то теперь в Firefox страницы открываться не будут.
В других программах, подключающихся к Интернету – например, почтовых клиентах и программах для обмена сообщениями, будут аналогичные окна с настройками. Просто заполните параметры SOCKS, и все будет работать.
На этом все. Продемонстрированные технологии очень удобны для создания защищенного и неограниченного подключения во время поездок, но для их работы сервер должен быть постоянно включен. Электроэнергия дорожает, но с Raspberry Pi в качестве сервера расходы будут невелики.
Если вам нужно сделать сервисы в локальной сети доступными удаленным пользователям, вам могут быть интересны и VPN – виртуальные частные сети (Virtual Private Network). SSH проще в настройке, но он и менее гибок. Если вам интересно это направление, почитайте вводную статью «Применим VPN» в LXF158.
[править] Динамический DNS
В большинстве методов, описанных в этой статье, используется компьютер с общедоступным IP-адресом или доменным именем. Большинство провайдеров предоставляют общедоступный IP-адрес, но он динамический, т. е. время от времени меняется. И если вы настроите туннель, а потом IP-адрес окажется другим, все перестанет работать.
Есть несколько вариантов решения проблемы. Самый простой – найти провайдера, который выделит вам статический IP-адрес. Некоторые выделяют его по вашей просьбе, другие просят за это дополнительную плату, третьи не делают этого ни при каких обстоятельствах.
Если сменить провайдера не получается, можно воспользоваться такими сервисами, как www.no-ip.com и www.dyn.com. С ними вы запускаете программу, которая отслеживает ваш IP-адрес и при его изменении оповещает сторонний сервис. Сервисы предоставляют вам доменное имя вроде mypi.dyn.com, которое всегда указывает на IP-адрес вашего компьютера, независимо от того, сколько раз он менялся.
Если Raspberry Pi находится за маршрутизатором, убедитесь, что порт 22 перенаправляется на него. Конкретные действия по настройке немного отличаются у разных маршрутизаторов, но обычно у них есть web-интерфейс администратора, зайдя в который, можно перенаправлять порты на компьютеры по их MAC-адресам (аппаратным адресам). Также можно установить для Pi статический IP-адрес и использовать его как место перенаправления порта.|