<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Алексей</title><generator>teletype.in</generator><description><![CDATA[Алексей]]></description><image><url>https://img3.teletype.in/files/e5/8f/e58fd461-8540-4f60-90f9-999b93eff6bd.png</url><title>Алексей</title><link>https://blog.lefey.tech/</link></image><link>https://blog.lefey.tech/?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lefey</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/lefey?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/lefey?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 15 Apr 2026 19:58:43 GMT</pubDate><lastBuildDate>Wed, 15 Apr 2026 19:58:43 GMT</lastBuildDate><item><guid isPermaLink="true">https://blog.lefey.tech/ufw-docker</guid><link>https://blog.lefey.tech/ufw-docker?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lefey</link><comments>https://blog.lefey.tech/ufw-docker?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lefey#comments</comments><dc:creator>lefey</dc:creator><title>Решение вопроса с обходом запрещающих правил фаервола в Docker</title><pubDate>Sun, 07 Aug 2022 03:12:56 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/93/bc/93bc772f-3e12-4433-be96-b560b5830e87.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/98/4c/984c035e-eb71-439f-ab98-55f4477e7d6f.png"></img>При включенном фаерволе (iptables), настроенном на полный запрет входящего трафика, любой docker контейнер с опубликованными портами становится открытым для доступа из интернета, это обусловлено правилами iptables которые добавляет сам docker автоматически при установке.]]></description><content:encoded><![CDATA[
  <figure id="70gY" class="m_retina">
    <img src="https://img2.teletype.in/files/98/4c/984c035e-eb71-439f-ab98-55f4477e7d6f.png" width="600" />
  </figure>
  <h3 id="lxIi"><strong>Проблема:</strong></h3>
  <p id="XegS">При включенном фаерволе (iptables), настроенном на полный запрет входящего трафика, любой docker контейнер с опубликованными портами становится открытым для доступа из интернета, это обусловлено правилами iptables которые добавляет сам docker автоматически при установке.</p>
  <h3 id="WGIr">Решение проблемы:</h3>
  <p id="D4AQ">Установить скрипт, который добавляет необходимые правила в iptables которые по умолчанию запрещают доступ ко всем контейнерам со стороны интернета (доступ из диапазонов локальных сетей сохраняется). В дальнейшем если для какого-то docker контейнера нужно разрешить входящий трафик из интернета необходимо вместо стандартного iptables менеджера ufw использовать скрипт ufw-docker.</p>
  <h3 id="60OZ">Установка ufw-docker:</h3>
  <p id="dBbS">Скачиваем файл скрипта и сохраняем его в /usr/local/bin/ufw-docker</p>
  <pre id="9uel">sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker</pre>
  <p id="upJX">Меняем файлу скрипта разрешение на запуск</p>
  <pre id="BcNd">sudo chmod +x /usr/local/bin/ufw-docker</pre>
  <p id="hhcG">Выполняем установку необходимых для ufw-docker правил (добавляет пачку правил в /etc/ufw/after.rules)</p>
  <pre id="CcnT">sudo ufw-docker install</pre>
  <p id="WG2L">Перезагрузить фаервол чтобы изменения вступили в силу</p>
  <pre id="kGrk">systemctl restart ufw</pre>
  <h3 id="CGxK">Работа с ufw-docker:</h3>
  <p id="H4MX">Общий синтаксис ufw-docker:</p>
  <pre id="oEOy">ufw-docker &lt;list|allow&gt; [docker-instance-id-or-name [port[/tcp|/udp]] [network]]</pre>
  <pre id="4BEG">ufw-docker delete allow [docker-instance-id-or-name [port[/tcp|/udp]] [network]]</pre>
  <p id="X2Ph">Примеры:</p>
  <p id="0KSX">Чтобы разрешить доступ из интернета к TCP порту 8080 контейнера с названием test_container (вместо имени можно указывать ID контейнера):</p>
  <pre id="zl2X">ufw-docker allow test_container 8080/tcp</pre>
  <p id="GPXo">Чтобы удалить правило:</p>
  <pre id="Zv5O">ufw-docker delete allow test_container 8080/tcp</pre>
  <p id="rbtC">Чтобы разрешить доступ из интернета ко всем опубликованным портам контейнера c названием test_container:</p>
  <pre id="AFC2">ufw-docker allow test_container</pre>
  <p id="SBor">Просмотр всех правил для контейнера test_container:</p>
  <pre id="Y68D">ufw-docker list test_container</pre>
  <p id="wYUL">Чтобы удалить все правила для контейнера test_container:</p>
  <pre id="y3ay">ufw-docker delete allow test_container</pre>
  <p id="mEOn">Просмотр всех правил созданных с помощью ufw-docker:</p>
  <pre id="2MDi">ufw-docker status</pre>
  <h3 id="0Rpd"><strong>Важное примечание:</strong></h3>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Fb8s">Номера портов, используемые с ufw-docker необходимо указывать именно те, которые внутри контейнера, а не те которые им сопоставлены в хостовой системе.</p>
    <p id="mBxM">Eсли запустить контейнер с указанием публикации портов (параметр -p) таки образом:</p>
    <p id="Uxgt"><code>docker run -p 88:8080</code></p>
    <p id="VI6Z">Сервис, работающий внутри контейнера на порту 8080 будет доступен в хостовой системе на порту 88. Чтобы разрешить доступ к такому сервису из интернета с помощью ufw-docker необходимо указывать порт 8080, т.е. именно тот, на котором работает сервис внутри контейнера.</p>
    <p id="ilSU"><code>ufw-docker allow test_container 8080</code></p>
  </section>
  <h3 id="sYHM"><strong>Важное примечание 2:</strong></h3>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="rFSX">ufw-docker это просто удобное дополнение которое позволяет добавлять правила на основании имени контейнера в стандартный ufw. При этом если посмотреть ufw status, можно увидеть что эти правила создаются для внутренних ip адресов контейнеров, соответственно если удалить контейнер и создать его снова, есть вероятность что его ip адрес поменяется, соответственно старое разрешающее правило уже не будет работать. Рекомендую после пересоздания контейнера еще раз разрешать необходимые порты с помощью ufw-docker, при этом он автоматически удалит старые неактуальные.</p>
  </section>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h4 id="5SPM">Альтернативный способ запрета доступа из интернета </h4>
    <p id="83xx">В случае если вам нужно закрыть доступ к контейнеру из интернета полностью, можно не публиковать порты вовсе, например если доступ из интернета организован с помощью reverse proxy работающем в другом контейнере.</p>
    <p id="aWb9">Также можно публиковать порты с привязкой к localhost интерфейсу, в таком случае доступ из интернета будет закрыт, но будет доступен локально, например с RPC или API сервисами ноды можно будет взаимодействовать локально с помощью curl. </p>
    <p id="iP8K">Так выглядит параметр -p при стандартной публикации порта с привязкой ко всем интерфейсам в системе:</p>
    <p id="HSt0"><code>-p 1317:1317</code></p>
    <p id="lK2o">А так доступ будет только локально:</p>
    <p id="HN57"><code>-p 127.0.0.1:1317:1317</code></p>
  </section>
  <p id="wdOX">Проверка доступности портов <a href="https://portchecker.co/" target="_blank">https://portchecker.co/</a></p>
  <p id="3OXQ">Полная инструкция по ufw-docker:</p>
  <p id="hq1e"><a href="https://github.com/chaifeng/ufw-docker" target="_blank">https://github.com/chaifeng/ufw-docker</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://blog.lefey.tech/penumbra-herse-update</guid><link>https://blog.lefey.tech/penumbra-herse-update?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lefey</link><comments>https://blog.lefey.tech/penumbra-herse-update?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lefey#comments</comments><dc:creator>lefey</dc:creator><title>Penumbra обновление до версии Herse</title><pubDate>Thu, 14 Apr 2022 09:47:24 GMT</pubDate><description><![CDATA[Удалить папку penumbra, чтобы выполнить чистую установку]]></description><content:encoded><![CDATA[
  <p id="Wz7K">Удалить папку penumbra, чтобы выполнить чистую установку</p>
  <pre id="QmMO" data-lang="bash">rm -rf penumbra</pre>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="H6NP">Внимание! информация вашего кошелька хранится в папках <code>~/.local/share/pcli</code> и <code>~/.local/share/penumbra-testnet-archive</code> и соответственна удалена не будет</p>
  </section>
  <p id="Azh2">Клонировать репозиторий</p>
  <pre id="9tfq" data-lang="bash">git clone https://github.com/penumbra-zone/penumbra</pre>
  <p id="LQbz">Перейти в папку с репозиторием и переключиться на новую версию кода</p>
  <pre id="qbCD" data-lang="bash">cd penumbra &amp;&amp; git checkout 007-herse</pre>
  <p id="9ymw">Обновить зависимости проекта</p>
  <pre id="OUd8" data-lang="bash">cargo update</pre>
  <p id="z9p7">Скомпилировать новую версию приложения кошелька (pcli)</p>
  <pre id="CrqT" data-lang="bash">cargo build --release --bin pcli</pre>
  <p id="7M80">Сбросить состояние кошелька (для обновления адреса)</p>
  <pre id="Ve8J" data-lang="bash">cargo run --quiet --release --bin pcli wallet reset</pre>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="vuvI" data-align="center">Внимание! формат адреса кошелька в новой версии изменился, старый формат начинался на <code>penumbrev0</code>, новый <code>penumbrav1</code>. После выполнения команды сброса кошелька удаляется старая информация, но ваш приватный ключ сохраняется и на его основе формируется адрес кошелька нового формата. Тестовых монет которые вы получали на старые адреса на новом не будет, т.к. разработчики сбросили состояние блокчейна.</p>
  </section>
  <p id="VDfb">Проверяем новый адрес кошелька</p>
  <pre id="Lfh3" data-lang="bash">cargo run --quiet --release --bin pcli addr list</pre>
  <p id="C8ue">Постим новый адрес в дискорд канал #testnet-faucet для получения тестовых токенов</p>
  <p id="vhmc">Синхронизируем состояние кошелька с сетью</p>
  <pre id="N4PX" data-lang="bash">cargo run --quiet --release --bin pcli sync</pre>
  <p id="ZbKW">Проверяем баланс</p>
  <pre id="oIit" data-lang="bash">cargo run --quiet --release --bin pcli balance</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://blog.lefey.tech/git-pull-requests-parsing</guid><link>https://blog.lefey.tech/git-pull-requests-parsing?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lefey</link><comments>https://blog.lefey.tech/git-pull-requests-parsing?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lefey#comments</comments><dc:creator>lefey</dc:creator><title>Анализируем pull requestы на github (История про Archway Torii gentx мультиаккинг)</title><pubDate>Wed, 13 Apr 2022 15:42:56 GMT</pubDate><description><![CDATA[Клонируем репозиторий себе]]></description><content:encoded><![CDATA[
  <p id="AHIq">Клонируем репозиторий себе</p>
  <pre id="9dIQ" data-lang="bash">git clone https://github.com/archway-network/testnets</pre>
  <p id="KT8w">Переходим в папку репозитория чтобы начать работать с ним</p>
  <pre id="LCrm" data-lang="bash">cd testnets</pre>
  <p id="EanJ">Получаем все пулл реквесты</p>
  <pre id="zeIF" data-lang="bash">git fetch origin +refs/pull/*/head:refs/remotes/origin/pr/*</pre>
  <p id="oheh">Выгружаем содержимое всех пулл реквестов в файл</p>
  <pre id="m1r7" data-lang="bash">git ls-remote origin &#x27;pull/*/head&#x27;|awk &#x27;{print $1}&#x27;|xargs git show &gt;pull_requests</pre>
  <p id="e8qE">Теперь все пулл реквесты сохранены в файле pull_requests, можно анализировать</p>
  <p id="dccy">Выдернем все ip адреса, которые содержатся в gentx и сохраним их в файл all_ip:</p>
  <pre id="M6HA" data-lang="bash">grep -E -o &quot;(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)&quot; pull_requests|sort &gt; all_ip</pre>
  <p id="avGT">Общее количество ip адресов (количество строк в файле)</p>
  <pre id="jpj1" data-lang="bash">wc -l all_ip</pre>
  <p id="2Qaq">Выведем топ по количеству повторов (когда много разных gentx было создано на одном сервере)</p>
  <pre id="YVfu" data-lang="bash">uniq -c all_ip|grep -E &quot;[0-9]{2,}\s&quot;|sort -n</pre>
  <p id="AEqp">Количество адресов из диапазонов локальных сетей</p>
  <pre id="d0qh" data-lang="bash">grep -E &#x27;^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.127\.)&#x27; all_ip| wc -l</pre>
  <p id="ubQD">Аккаунты github отправившие пуллреквесты (сохраним в файл github_users)</p>
  <pre id="R44u" data-lang="bash">grep -E &quot;Author:\s&quot; pull_requests|sort&gt; github_users</pre>
  <p id="akyB">Топ аккаунов по количеству отправленных пулреквестов с одного акка</p>
  <pre id="yTA9" data-lang="bash">uniq -c github_users|grep -E &quot;[0-9]{2,}\sA&quot;|sort -n</pre>
  <p id="sYym">Дата создания аккаунта (если ничего не покажет, значит аккаунт заблокирован)</p>
  <pre id="0vmi" data-lang="bash">curl -s https://api.github.com/users/&lt;имя пользователя&gt; |grep -E &quot;created_at&quot;</pre>
  <p id="96cX"></p>
  <p id="Ty0K">Предлагайте свои идеи и способы визуализации, дополню)</p>

]]></content:encoded></item></channel></rss>