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

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

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

</content></entry></feed>