Сообщения

Настройка mTLS на cloudflare

Изображение
Недавно я узнал о продукте cloudflare tunnel, который позволяет публиковать свои локальные сервисы в интернет даже находясь за NAT. И мне стало интересно как можно ещё прикрутить к этому mTLS, чтобы иметь гарантию что никто левый не постучит к моему сервису. А то даже находясь за cloudflare мы не можем иметь гарантию что к нам не придёт например zero-day червь пытающийся эксплуатировать какой нить log4j. mTLS технология подерживается всеми современными браузерами, на всех платформах. Протестировано на: windows+edge, IOS+safari, chrome IOS не работает . Все что нужно это установить сертификат на конечное устройство. Теория Оказалось все просто: mTLS возможен на cloudflare только если включено "облачко" , в этом режиме CF полностью занимается TLS-терминацией. Работает это как показано ниже на диаграмме: Когда мы включаем mTLS в cloudflare dashboard, то к обычному TLS рукопожатию появляется 3 шаг: "Client certificate request". На 6 этапе cloudflare проверяет что запрос...

ClickHouse 100% нагрузки на процессор улетает, уничтожая virtual server.

Сегодня при написании своего пет проекта я столкнулся с тем что ClickHouse по непонятной причине начинает деградировать понемногу по RAM, а потом уходит в 100% потребления процессора хотя у меня загрузка смешная: 1 инсерт в 15 секунд в датасет из 1 мегабайта таблицы MergeTree. Оказалось что проблема в архитектуре ClickHouse, она не позволяет адекватно инсертить больше чем 1 раз в примерно 15 минут. Это попросту перегружает одноядерный сервер. Суть в том что в прошлом проекте у нас была более серьёзная нагрузка: при 3 инсертах в секунду у нас полностью деградировала VPS машина, уходя за примерно за неделю в тротлинг даже при 32 GB RAM, и 8 ядрах. Эта проблема на самом деле называется Write Amplification, о котором почему-то мало где пишут в маркетинговых соевых постах восхваляющих ClickHouse: "Users should avoid creating too many small inserts and too many small initial parts, respectively. As this creates (1) overhead on the creation of files, (2) increasing write amplification (l...

Как компилировать встроенные приложения gnome

Изображение
В официальной документации gnome  говорится что для сборок используется система сборок - BuildStream. В этом туториале я буду использовать его через докер  docs.buildstream.build/1.6.1/install_docker.html . Для начала нужно установить докер. Сделать это можно одной командой: curl -fsSL https://get.docker.com | sh BuildStream создали утилиту для запуска через докер - bst-here . Он запускает докер контейнер BuildStream с всеми нужными предустановленными программами, что позволяет не засорять основную систему. Для установки нужно скачать скрипт и добавить его в директорию исполняемых файлов: mkdir -p ~/.local/bin curl --get https://gitlab.com/BuildStream/buildstream/raw/master/contrib/bst-here > ~/.local/bin/bst-here chmod +x ~/.local/bin/bst-here Чтобы убедится в правильности установки нужно просто запустить команду bst-here. Должен появится терминал на подобии этого: Для настройки buildstream.conf нужно создать файл на хост машине /root/.config/buildstream.conf. # This confi...

TypeError: __init__() got an unexpected keyword argument 'decode'

This error is from aiortc's webcam example application. The core of this problem is that the pypi version is old, and git version is using new interface that is not available from pypi. So you need to install aiortc from git. If you just do pip install git+https://github.com/aiortc/aiortc.git and get this error:   build/temp.linux-x86_64-cpython-39/aiortc.codecs._opus.c:570:10: fatal error: opus/opus.h: No such file or directory     570 | #include <opus/opus.h>         |          ^~~~~~~~~~~~~   compilation terminated.   error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1   ----------------------------------------   ERROR: Failed building wheel for aiortc

How to download download youtube ad without using any tools

Изображение
Recently I wanted to download a YouTube ad. But the thing is, many ads don't have a copy URL button. After searching youtube and google, I found only broken tools, and stupid spam videos that provide no real value.  The solution I found is straightforward: You should click "Copy debug info," paste it in a notepad or text editor, and search for "addebug_videoId." By using this ID you can simply craft YouTube video URL: https://www.youtube.com/watch?v=id_here access the video page or download it using YouTube video downloader tool like yt-dlp .

Error 0x8000ffff: Unknown HTTP status code 451, returned from URL: https://pkgs.tailscale.com/stable/tailscale- etc..

Когда пытался установить tailscale у друга из РФ, столкнулся с ошибкой установщика 451. Дело в том что стандартный установщик, это на самом деле лаунчер который скачивает .msi файл с сервера. Чтобы небыло ошибки, нужно скачать full версию tailscale, через IP который не заблокирован. В full версии находится как установщик, так и сам tailsacle. Поэтому при установке, никакой ошибки небудет. https://pkgs.tailscale.com/stable/tailscale-setup-full-1.58.2.exe

IT мемы с которыми я столкнулся

Изображение
Этот пост буду старатся дополнять различными мемами с которыми возможно вы тоже столкнулись гуглив какой то термин или пытаясь исправить ошибку. Бибайт мем Во многих источниках часто говорят что в килобайте 1024 байт, и прочий бред. На самом деле в килобайте 1000 байт. Но в кибибайте 1024. Часто где эти понятия используются взаимозаменяемо, но на самом деле это абсолютно разные понятия. В основном этот мем происходит в старой технической литературе, и в учебниках по информатике которые были написаны во времена Брежнева, и которые перепечатывались без проверки информации специалистами. Мем с Systemd Systemd это часть юникс систем которая позволяет настраивать запуск программ. Например если у вас есть программа-вебсервер то после перезагрузки машины вы хотите чтобы программа запустилась при старте, после инициализации системы. Каждая програма в Systemd представлена Unit-ом который можно настроить. Мем состоит в том что у systemd unit есть 2 режима работы: simple, и forking. И многие люди...

Как обходить блокировки вебсайтов в хроме

Изображение
Многие государства цензурируют либо замедляют многие сайты. Например в Казахстане я не могу зайти в blogger.com тк государство заблокироало IP адреса для этого сайта. Но если начать использовать прокси сервер или впн на весь свой трафик, то нагрузка на прокси будет слишком большой. Тк например, неимеет смысла использовать прокси для просмотра ютуба в 1080п. Чтобы избавить прокси сервер от лишней нагрузки можно использовать прокси свитчер, который автоматически выбирает прокси сервер взависимости от настроенных правил. Я использую расширение для браузера  SwitchyOmega . В отличии от многих других свитчеров, этот свитчер опенсурсный. В попапе этого расширения можно выбрать режим работы. Выставляем auto switch, чтобы он переключал на проксю по правилам. Потом заходим в Options, там выставляем прокси сервер который у нас есть. В правилах автосвитча можно настроить свитчинг на прокси взависимости от домена: Это мой текущий сетап для обхода блокировок. Все опенсурсно, и бесплатно. Единст...

Проблемы парсинга сайтов на JS фреймворке reactjs

Сегодня мне надо было парсить сайт на reactjs, и для этого мне требовалось сэмулировать заполнение формы. Чтобы отправить форму надо просто нажать на кнопку отправить, а это эмулируется очень легко - просто надо вызвать .click на элементе кнопки. Самым логичным решением было бы попросту отказатся от эмуляции действия юзера, и просто самому слать HTTP запрос на сервер напрямую. Но из-за специфики задачи мне надо было именно эмулировать действия заполнения инпута. Проблема началась именно когда надо было заполнять текстовые поля формы. Самый простой вариант, это замена .value у элемента input. Но это так неработает, вить сайты написанные на reactjs обычно шлют данные не через <form> с встроенной в браузер функцией submit. Они используют fetch, обычно POST запрос с json данными от заполненной формы. Обычно сайты использующие jquery, или ванильный javascript перед отправкой запроса сами забирают с инпутов данные через .value.  Но это так неработает с фреймворками состояний. В слу...

Самый простой способ настроить HTTPS на docker Django

Обычно для крупных проектов я использую nginx, либо полноценные CDN сервисы вроде CloudFlare которые дают https из коробки. Но в моём случае мне требовалось развернуть на дешевом впс сервере всю инфраструктуру, и чтобы был https. Мне нехотелось разбиратся в тонкостях настройки nginx и копатся в каких-то конфигах. В итоге я нашел решение - Caddy . Все что нужно для настройки - DNS A запись, и внешний айпи. Чтобы добавить Caddy к себе в docker-compose, я создал отдельный файл docker-compose.prod.yml: version : '3' services :   caddy :     image : caddy     ports :       - 80:80       - 443:443     volumes :       - ./Caddyfile:/etc/caddy/Caddyfile       - caddy_data:/data       - caddy_config:/config volumes :   caddy_data :   caddy_config : Также создал Caddyfile в корне проекта: bbak.mkhitaryan.pw {   reverse_proxy web:8000 } Все что нужно для настройки - поменяйт...

Namecheap redirect does not work with https

Изображение
I have tried using Namecheap's redirect functionality from my main domain mkhitaryan.pw to my cv. But I quickly run into an issue that Namecheap only allows HTTP requests! When it receives an HTTPS request, it just hangs the connection until timeout: Namecheap redirect only works on port 80! As you can see, the 443 port just hangs the connection, but the 80 port redirect works well! The solution that I found is to use Netlify  instead of Namecheap's redirect. Netlify works very well with HTTPS and allows you to make redirection happen on an HTML page. Netlify also gives you 100GB of free traffic! Good luck spending it with a blank HTML redirect page, that is a few kilobytes large. There are many guides over the WEB on how to connect your Namecheap domain to Netlify. I only provide the HTML page that I used for redirection: <!DOCTYPE html> < html > < head > < meta http-equiv = "refresh" content = "0; url='https://cv.mkhitaryan.p...

Installing lightweight proxy server on raspberry pi

Introduction As I live in Armenia, I have a lot of friends across the CIS region who live under internet oppression regimes. For an example the Russians cannot access Instagram, Twitter without a vpn, and many other resources. That makes it very important to them to use proxy/vpn to bypass the DPI, which government regimes use for censorship. Here in Armenia we have clean internet with no censorship, so if I setup a proxy for my friends they can use it to access the free on censorship internet. In most of the guides I found on the internet they are using privoxy, which is insecure  because it has no authentication system built-in, and if left as it is, your proxy IP address will be used by port scanners for various bad stuff like spamming. Such behavior risks your ip address getting marked as spam, or getting used by hackers to make you a suspect of cybercrime. That is why I found a better solution for creating a proxy server called 3proxy . It is pretty lightweight, and has almost...

Shadowsocks готовим домашний vpn на расберипай 2022

Изображение
У нас в Армении очень чистый интернет. Насколько я знаю, понятия блокировка сайтов у нас в стране не существует, в отличии от большанства других стран СНГ. Поэтому я решил создать себе VPN сервер и дать его своим друзьям, чтобы они могли свободно пользоватся интернетом. Есть много разных сервисов для поднятия vpn сервиса, openvpn, wireguard итд, но мне кажется что они в большинстве своём имеют слишком широкий функционал чтобы запускать на встроеных устройствах. Если цель это просто обход блокировок, и шифрация промежуточного трафика то по моему shadowsocks самый лучший вариант. Самый простой способ поставить шадоусокс на малину это использовать apt-get. Но в нём последний билд shadowsocks был в 2018 году. Поэтому лучше установить самому с гитхаба  https://github.com/shadowsocks/shadowsocks-rust/ . Кроме того, shadowsocks с тех пор переписывали с питона на си, а теперь и вовсе поддерживается только версия на rust. Чтобы скачать нужно просто скачать tar архив с релизов билдов и распа...