Настройка Shadowsocks
Большинство распространённых протоколов VPN, вроде OpenVPN можно заблокировать. Однако есть решение - технология Shadowsocks. Эта технология работает по принципу прокси, но с шифрованием. Она маскируется под https трафик, поэтому использование этого протокола сложно вычислить и заблокировать. В этой статье мы рассмотрим как выполняется настройка Shadowsocks Ubuntu
Прежде всего, обратите внимание, что для работы Shadowsocks, как собственно и для VPN вам понадобится сервер, в стране, где нужные вам сайты не заблокированы. Именно на этом сервере устанавливается сервер Shadowsocks. На вашем компьютере или телефоне устанавливается клиент, который подключается к этому серверу. Между вашим клиентом и сервером трафик будет зашифрован поэтому провайдер, не сможет понять какой сайт вы открываете, поэтому не заблокирует его. А уже на сервере запрос будет расшифрован и в открытом виде поступит на сайт.
Реализация shadowsocks на Си есть в официальных репозиториях Ubuntu. Вы можете установить её с помощью команды:
sudo apt install shadowsocks-libev
Конфигурационный файл shadowsocks находится по пути /etc/shadowsocks-libev/config.json и по умолчанию выглядит вот так:
{
"server":["::1", "127.0.0.1"],
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"<Password>",
"timeout":86400,
"method":"chacha20-ietf-poly1305"
}
Вот что означают эти сроки:
server - IP адрес, на котором программа будет ожидать соединений, должно соответствовать внешнему IP адресу вашего сервера.
mode - указывает какой протокол соединение использовать - tcp, udp или оба.
server_port - порт сервера, который вы будете использовать для подключения, по умолчанию - 8388.
local_port - порт клиента, к которому будет подключаться браузер по протоколу SOCS5.
password - пароль, который будет использоваться клиентами для подключения.
method - метод шифрования, по умолчанию используется chacha20-ietf-poly1305.
Для начала работы с shadowsocks надо установить в поле server внешний IP адрес вашего сервера. Также в поле password, надо прописать пароль, который будет использоваться на клиенте для подключения к серверу. Всё остальное можно оставить по умолчанию. Также после внесения изменений в конфигурационный файл необходимо перезапустить сервис:
sudo systemctl restart shadowsocks-libev
На этом базовая настройка закончена, можно переходить к подключению. Если вы хотите запустить сервер для отладки, чтобы видеть всё, что происходит, можете остановить systemd службу и запустить его вручную:
/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json
Для подключения вам понадобится клиент. В Linux можно использовать GUI клиент от Outline. Однако и его мы не будем рассматривать в этой статье. Мы поговорим про использование консольного клиента. Его можно получить установив тот же пакет, что и для сервера. Вы можете собрать его из исходников, как описано выше или установить из репозиториев дистрибутива:
sudo apt install shadowsocks-libev
После установки нужно отредактировать конфигурационный файл, так чтобы он был таким же как и на сервере. Например:
{
"server": "<remote_server_ip",
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"<Password_from_remote_server_config>",
"timeout":86400, "method":"chacha20-ietf-poly1305"
}
После этого можно запустить клиент:
sudo ss-local -v -c /etc/shadowsocks-libev/config.json
Опция -v здесь означает максимально подробный вывод, а -c - указывает путь к конфигурационному файлу. Клиент запущен, но ваш трафик ещё не перенаправляется через тоннель. Для этого надо настроить подключение к прокси в вашем браузере. Клиент ожидает соединений от браузера на порту 1080 (по умолчанию).
Для настройки прокси в Firefox откройте Настройки. В разделе Основные пролистайте в самый низ и найдите Параметры сети, тут нажмите Настроить и в открывшемся окне введите адрес 127.0.0.1 и порт 1080. После этого Firefox будет использовать Shadowsocks для открытия сайтов. Если вы откроете сайт eth0.me, то увидите, что ваш IP адрес соответствует адресу сервера, на котором установлен Shadowsocks.
Обратите внимание, что многие провайдеры блокируют сайты по DNS, так что лучше в настройках своего роутера указать DNS Google - 8.8.8.8 или включить в браузере DNS over HTTPS.
Простая настройка WireGuard Linux
WireGuard - это новый, современный VPN сервис с открытым исходным кодом, который позиционирует себя как замену OpenVPN и использует современную криптографию. Он реализован в виде модуля ядра Linux. Изначально он поддерживал только Linux, но потом были разработаны приложения для Windows, MacOS и Android.
В установке нет ничего сложного, выполните такие команды:
sudo apt update
sudo apt install wireguard
Для того, чтобы пакеты перенаправлялись туда, куда надо, нужно разрешить перенаправление сетевых пакетов на уровне ядра. Для этого откройте файл /etc/sysctl.conf и добавьте в конец такие строки:
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
Затем необходимо выполнить команду sysctl -p чтобы система перечитала конфигурацию:
sysctl -p
Для сервера надо создать приватный и публичный ключ. Эти ключи, потом надо будет записать в конфигурационный файл сервера и клиента, сами файлы ключей вам не нужны, поэтому можете создавать их где хотите, например, в домашней папке:
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
Аналогичным образом создаём ключи для клиента. Команда та же:
wg genkey | sudo tee client_private.key | wg pubkey | sudo tee client_public.key
Наш конфигурационный файл сервера будет находится по пути /etc/wireguard/wg0.conf и будет выглядеть следующим образом:
[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 63665
PrivateKey = <server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A
POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE [Peer]
PublicKey = <client_public.key>
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
Файл разделен на две секции:
Interface - настройка сервера;
Peer - настройка клиентов, которые могут подключаться к серверу, секций Peer может быть несколько.
В данном случае мы настраиваем сервер WireGuard для работы с IPv4 и IPv6 одновременно, вот, что значат основные параметры:
Address - адрес сервера в сети VPN;
ListenPort - порт, на котором будет ожидать подключения WireGuard;
PrivateKey - приватный ключ сервера, сгенерированный ранее;
PostUp - команда, которая выполняется после запуска сервера. В данном случае включается поддержка MASQUERADE для интерфейса enp0s8, а также разрешается прием пакетов на интерфейсе wg0. Сетевые интерфейсы вам придется заменить на свои.
PostDown - выполняется после завершения работы WireGuard, в данном случае удаляет все правила, добавленные в PostUp.
Секции Peer содержат настройки клиентов, которые могут подключится к серверу:
PublicKey - публичный ключ клиента, сгенерированный ранее;
AllowedIPs - IP адрес, который может взять клиент. Обратите внимание, маска для IPv4 должна быть 32.
Теперь можно переходить к созданию конфигурационного файла непосредственно для клиента.
Конфигурационный файл клиента будет выглядеть примерно так:
[Interface]
PrivateKey = <client_private.key>
Address = 10.66.66.2/24,fd42:42:42::2/64
DNS = 8.8.8.8,8.8.4.4
[Peer]
PublicKey = <server_public.key>
Endpoint = 192.168.56.101:63665
AllowedIPs = 0.0.0.0/0,::/0
Обратите внимание, что все ключи мы генерируем на сервере, а затем уже скидываем конфигурационный файл клиента на компьютер, который надо подключить к сети. Рассмотрим подробнее что за что отвечает:
PrivateKey - приватный ключ клиента, сгенерированный ранее;
Address - IP адрес интерфейса wg0 клиента;
DNS - серверы DNS, которые будут использоваться для разрешения доменных имён;
PublicKey - публичный ключ сервера, к которому надо подключится.
Endpoint - здесь надо указать IP адрес сервера, на котором установлен WireGuard и порт;
AllowedIPs - IP адреса, трафик с которых будет перенаправляться в сеть VPN, в данном примере выбраны все адреса.
После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf.
Для запуска сервера используйте такую команду:
sudo wg-quick up wg0
Аналогично можно использовать systemd:
sudo systemctl start wg-quick@wg0
С помощью systemd можно настроить автозагрузку интерфейса:
sudo systemctl enable wg-quick@wg0
Подключение клиента выполняется аналогично запуску сервера. Если WireGuard уже установлен, а конфигурационный файл клиента находится по пути /etc/wireguard/wg0.conf:
sudo wg-quick up wg0
Если у вас не получается установить WireGuard самому, вы можете попробовать скрипт автоматической установки.
Проброс видеокарты в виртуальную машину. Небольшой UPD
Приветствую!
Сей UPD является продолжением статьи "Проброс видеокарты в виртуальную машину".
На полноценную публикацию для Хабра не тянет, но описанный ниже момент для кого-то может оказаться полезным.
Итак, краткие исходные данные таковы (полный расклад в статье по ссылке выше):
1) 2 видеокарты: "Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X]" (используется для ВМ с Win10) и "Park [Mobility Radeon HD 5430]" (используется для хост-системы);
2) "Radeon HD 5430" (старенькая видюха) воткнута в первый pcie-слот материнки, а "Lexa PRO" (железяка поновее) - во второй (кстати, в статье этот момент описан не совсем корректно);
Видеокарту "Radeon HD 5430" понадобилось перекинуть с хост-системы на ВМ, а "Lexa PRO" - на хост-систему.
Чтобы это сделать корректно, необходимо карту из первого слота явно отвязать от хост-системы. Небольшая сложность тут в том, что она идёт первой в очереди на инициализацию хост-системой.
Очерёдность инициализации выводится посредством получения содержимого procfs-файла "/proc/fb" (fb = framebuffer). Выглядеть это будет, например, так
0 efifb vga
1 amdgpudrmfb
Чтобы не использовать видеокарту в хост-системе для передачи в ВМ в статье было задействовано как изменение параметров ядра (grub) при загрузке, так и механизм подгружаемых модулей ядра (modprobe), т.е.
1) добавление параметров «intel_iommu=on iommu=on rd.driver.pre=pci-stub pci-stub.ids=1002:67ff,1002:aae0» (идентификаторы "Lexa PRO") в grub
и
2) «blacklist amdgpu» и «options pci-stub ids=1002:699f,1002:aae0» -> «/etc/modprobe.d/local.conf».
Т.к. первой хост-система (ОС AlmaLinux8) захватывала "Radeon HD 5430", то проблем в рамках описанной в статье конфигурации не было.
В случае же, когда есть необходимость в ВМ прокинуть карту, находящуюся в более приоритетном слоте, в параметры загрузки мы должны прописать явный запрет на захват целевой карты. Делается это посредством добавления подстроки "video=efifb:off" (подстрока "efifb" взята из вывода "cat /proc/fb") в параметр GRUB_CMDLINE_LINUX ("/etc/default/grub") и последущим исполнением команд grub2-mkconfig + dracut + перезагрузка.
Итого, файл "/etc/default/grub" должен иметь примерно такой вид.
1002:68e1,1002:aa68 - идентификаторы "Radeon HD 5430"
В файле «/etc/modprobe.d/local.conf» также меняем идентификаторы, но не отправляем в блэк-лист драйвер "radeon", т.к. оный необходим ОС при загрузке. В общем, файл "local.conf" должен содержать только одну строку - "options pci-stub ids=1002:68e1,1002:aa68".
Курс Python-программист 08. Основы прав (permissions) в Linux
Привет, устал в любой непонятной ситуации писать SUDO, а что это "drwxr-xr-x" такое вообще не знаешь?
Тогда рекомендую моё новое видео! А так-же мой ТГ с фотками чехлов на паспорт которые я учась делать, не ну а чо
Как запускать файлы с расширением sh и run в Linux
При работе в операционной системе Linux вы рано или поздно столкнетесь с необходимостью запускать файлы, которые имеют расширение .sh или .run. Давайте сначала вкратце разберемся, что это за файлы. Файлы с расширением .sh это скрипты командной строки, чаще всего написанные на языке Bash.
Файлы .run часто являются исполняемыми файлами, которые могут содержать программу или установщик. По сути, их можно обобщить одним слово — скрипты.
Например, на Github можно встретить файлы с расширением .sh, а в файлах .run могут распространиться драйвера для какого-то оборудования. Итак, когда выяснили что представляют собой эти файлы, давайте перейдем к их установке.
Запуск файлов sh и run в Linux
Принцип запуска этих файлов одинаков, по этому, дальнейшие действия будут выполняться с файлом который имеет расширение sh. Первым делом необходимо дать права для запуска, то есть, сделать файл исполняемым. Дать разрешение на выполнение означает, что вы разрешаете файлу быть запущенным как программа. Это делается командой chmod с опцией +x, затем указываете имя файла. Например, имеется файл с именем script.sh, даем ему права на запуск:
chmod +x script.sh
Далее, что бы запустить файлы sh или run можно поступить несколькими способами. Первый способ, это указать так называемый префикс, то есть, имя оболочки перед именем файла. Например, если файл имеет расширение .sh, то его можно запустить указав префикс bash и имя файла:
bash script.sh
Если файл имеет расширение .run, то его можно запустить указав префикс sh и имя файла. Проще говоря вы указываете системе, что нужно использовать указанную оболочку для запуска файла:
Второй способ запуска этих файлов это указать перед именем файла току и слеш (./). Этот способ одинаков для обоих расширений. Далее просто пишите имя файла который хотите запустить. Например, все на том же файле script.sh:
Это говорит системе, что нужно запустить скрипт из текущей директории с помощью оболочки, указанной в шебанге. Про шебанг мы еще поговорим, когда дойдем до знакомства с bash. Это самый простой и удобный способ запускать скрипты в Linux.
Выводы про запуск файлов sh и run в Linux
Файлы sh и run, как мы уже выяснили - это скрипты, которые содержат команды для выполнения в терминале. Чтобы запустить такой скрипт, вам нужно сделать две вещи: дать ему разрешение на выполнение и указать, какую оболочку использовать для его запуска. Все достаточно просто.
Если вы интересуетесь системами Linux и хотите изучить базовые команды, то можете скачать с телеграм канала шпаргалку. В этой шпаргалке вы найдете наиболее встречаемые команды которые вам могут пригодиться. А также можете прочесть статью про команду ls.
Команда ls в дистрибутивах Linux
В наше время Linux все больше входит в повседневную жизнь, в том числе и отечественные дистрибутивы. Конечно, современные дистрибутивы Linux позволяют в большинстве случаев обходится без использования терминала, но знание базовых команд позволит более глубже изучить вашу операционную систему.
Как вы поняли из названия, сегодня речь пойдет про команду ls. Эта команда позволяет просматривать содержимое каталога, или по другому - папки. Тут стоит оговориться, что в среде линуксойдов папки принято называть каталогами или директориями. Если возникнет необходимость, вы можете скачать шпаргалку по командам по этой ссылке из телеграм канала.
Ключи команды ls
Как и у многих команд, у команды ls имеются так называемые ключи. Это позволяет расширить функциональность команды и позволяет более гибко работать с ней, синтаксис выглядит следующим образом:
команда — ключи — директория
Тут можно сделать пояснения, что такое синтаксис, это правила и структура команд в языке программирования, в разметке или, как в нашем случае, написания команд.
Ниже представлен список некоторых ключей доступных команде ls:
-l: Отображает содержимое в длинном формате. Показывает подробную информацию, включая разрешения, владельца, размер, дату изменения и т.д.
-a: Показывает скрытые файлы/директории, которые начинаются с точки.
-h: Выводит размеры файлов в удобочитаемом формате, например, "1K", "10M", "2G" и т.д.
-r: Сортирует вывод в обратном порядке (по убыванию).
-t: Сортирует вывод по времени последнего изменения.
Более подробно о всех ключах и возможностях вы можете узнать введя команду:
ls --help
Команда ls
Итак, после того как мы разобрались с некоторыми особенностями команды ls, теперь давайте посмотрим как с ней работать. Для этого открываем терминал в вашем дистрибутиве Linux и вводим команду:
ls
В ответ вы увидите примерно следующую картину:
Это содержание вашего домашнего каталога. Что бы вывести более подробную информацию из каталога, можно воспользоваться ключом -s. Эта команда выведет не только содержимое каталога, но так же отобразит права доступа, размер каталогов и их дату создания:
ls -l
В некоторых случая может понадобиться увидеть скрытые файлы и каталоги. Обычно по умолчанию они не отображаются, что бы их увидеть используется команда ls с ключом -a:
Более того, вы можете совмещать использования ключей, что позволит вам более гибко работать с командами. В нашем же случае, можно совместить уже знакомые ключи -l и -a. Что позволит увидеть файлы и каталоги более подробно:
ls -al
Если вдруг возникнет необходимость сортировки содержимого каталога в обратном порядке, то можно воспользоваться ключом -r:
Конечно, можно смотреть командой ls содержимое и других каталогов. Для этого достаточно указать путь к каталогу, который вы хотите просмотреть. К примеру, давайте выведем содержимое каталога /etc. И применим уже известные нам ключи, которые расширяют возможности команды ls:
Выводы
В этой статье мы разобрались что из себя представляет команда ls и как с ней работать. Конечно, у самой команды намного больше возможностей которых мы не коснулись, но в большинстве случаев, этих навыков, что мы рассмотрели вполне достаточно. В любом случае, вы всегда можете сами поработать с командой ls для более детального разбора ее возможностей.
Если вы до этого не работали в терминале Linux, то может показаться, что знание базовых команд вам никогда не понадобится. Поверьте, они рано или поздно вам пригодятся. Да и запомнить базовые команды не так сложно. Тем более, что в начале статьи была ссылка на шпаргалку которой вы можете всегда воспользоваться.
Хорошо разбираетесь в звездах и юморе?
Тогда этот вызов для вас! Мы зашифровали звездных капитанов команд нового юмористического шоу, ваша задача — угадать, кто возглавил каждую из них.
Переходите по ссылке и проверьте свою юмористическую интуицию!
Топ 9 архитектурных паттернов для потоков данных и коммуникаций
🔹Peer-to-Peer
Схема Peer-to-Peer предполагает прямую связь между двумя компонентами без необходимости в центральном координаторе.
🔹API Gateway
API-шлюз выступает в качестве единой точки входа для всех клиентских запросов к внутренним сервисам приложения.
🔹Pub-Sub
Шаблон Pub-Sub отделяет производителей сообщений (издателей) от потребителей сообщений (подписчиков) с помощью брокера сообщений.
🔹Request-Response
Это один из самых фундаментальных паттернов интеграции, когда клиент отправляет запрос на сервер и ждет ответа.
🔹Event Sourcing
Event Sourcing предполагает хранение изменений состояния приложения в виде последовательности событий.
🔹ETL
ETL - это схема интеграции данных, используемая для сбора данных из различных источников, преобразования их в структурированный формат и загрузки в конечную базу данных.
🔹Batching
Пакетирование подразумевает накопление данных за определенный период или до достижения определенного порога, после чего они обрабатываются как единая группа.
🔹Streaming Processing
Потоковая обработка позволяет непрерывно получать, обрабатывать и анализировать потоки данных в режиме реального времени.
🔹Orchestration
Оркестровка подразумевает наличие центрального координатора (оркестранта), управляющего взаимодействием между распределенными компонентами или сервисами для реализации рабочего процесса или бизнес-процесса.
источник https://t.me/itmozg/9703