LINUX.ORG.RU

Сообщения Bers666

 

Iptables + cgroup path - нашел воспроизводимый баг

Нашел баг в iptables, при рестарте сервиса перестает работать iptables match его cgroup path.

Есть мнения?

Пишу сразу как shell скрипт чтоб было можно копи пастить. Скрипт исполняем на свежей Ubuntu 24.04, можно и в виртуалке.

# функция тестирования
webtest() { curl 127.0.0.1 -m1 &>/dev/null && echo WEB OK || echo WEB FAIL; }

systemctl restart nginx
iptables -F OUTPUT
# будем матчить nginx и банить ответы от него.
iptables -A OUTPUT -m cgroup --path system.slice/nginx.service -m comment --comment rule1 -j DROP
webtest
# => WEB FAIL , правильный результат
systemctl stop   nginx.service
# здесь system.slice/nginx.service исчезает из дерева cgroup..
systemctl start  nginx.service
webtest 
# => WEB OK , неправильно!!! Видимо , когда по новой создался cgroup path, то старое правило iptables перестало его матчить..

#Теперь методы исправления. Времена чудес..

#method 1.
    # Произойдет рефреш маппинга cgroup path в iptables. Необъяснимо, но работает.
    iptables -Z OUTPUT 1
    webtest
    # => WEB FAIL , правильный резльтат

#method 2
    # удалим старое правило (rule1) и добавим новое аналогичное (rule2). Произойдет рефреш маппинга cgroup path в iptables.
    iptables -D OUTPUT -m cgroup --path system.slice/nginx.service -m comment --comment rule1 -j DROP
    iptables -A OUTPUT -m cgroup --path system.slice/nginx.service -m comment --comment rule2 -j DROP
    webtest
    # => WEB FAIL , правильный результат

 , ,

Bers666
()

Python asyncio speed limit

Привет, пишу tcp сервер (или клиент, неважно) на asyncio, как реализовать лимит скорости? Пока додумался только делать словарь типа «таймстамп»:«размер» , пополнять его на каждый data_received() или self.transport.send() и считать среднюю скорость за последние 10 секунд, ну и периодически чистить из словаря старые данные. Если скорость превышена, то начинаем бить буфер на чанки и спать асинхронно. Вроде работает но не покидает ощущение что это костыль.. В Гугле по словам «python asyncio network speed limit» ноль инфы. Ещё прикол что этот словарь получается глобальный, и как бы не было race condition при доступе к нему из разных экземпляров класса asyncio.Protocol.

Поделитесь best practices, спасибо.

 , ,

Bers666
()

как жить в консоли?

Миллион открытых табов в консоли при разработке/отладке! Пример:

  1. Правка кода
  2. рестарт сервиса после правки
  3. запуск клиента к сервису для теста кода
  4. слежение за логом сервиса

Это минимум! Еще может быть:

  1. слежение за метрикой (top, кол-во коннектов, итд)
  2. слежение за трафиком со стороны клиента
  3. слежение за трафиком со стороны сервера

Как с этим боротся? Уже начинает бесит много лет. Любая задача превращается в «открыть 100 вкладок и в каждой зайти по ssh на сервер». Screen\tmux не предлагать, там нет адекватной прокрутки, да и корявые они.

Узнали себя? Согласны?

 , ,

Bers666
()

альтернатива Cron для нестандартных интервалов

Как запланировать исполнение программы с интервалом 61 минута? 31 минута? 1день+1минута?
Стандартные планировщики типа семейства Cron, systemd.timer такое не умеют.

P.S. ChatGPT врывается в тред

how to execute a command in linux every 31 minute?
`*/31 * * * * command`
facepalm.bmp

 , ,

Bers666
()

чтоб SSHD стопался перед ребутом последним?

Нередки ситуации, когда отправляешь сервер в ребут, sshd естественно **умирает сразу**, но сервер все еще пингуется! И так длится бесконечно. И что там происходит, хз. Вот как сделать так, чтоб sshd останавливался примерно прямо перед ребутом?

 ,

Bers666
()

Как хранить код Ansible в git, при двух environment

Всем привет.

Ситуация такая, есть git репа, в ней плейбуки\роли Ansible. Код обкатывается на staging серверах, потом мержится в production. Соответственно в git две ветки.

Когда я делаю мерж, то разница между ветками исчезает, но она должна быть, ведь набор серверов в inventory hosts - должен быть разный для разных веток. Выходит, один файлик все равно должен будет отличаться между ветками?

Придумал костыль, чтоб Ansible брал inventory hosts, смотря на имя текущей ветки git. Тогда их можно спокойно мержить.

Как сделать по красоте?

 ,

Bers666
()

Доступ к массиву удаленных станций

Каким софтом или чем-то иным поддерживать доступ к серверам без GUI (raspberry pi) , которое клиенты будут сами устанавливать у себя?

Я буду только предоставлять образы для MicroSD, они сами будут образ писать на карту и загружать raspberry pi. Клиент лезть в консоль не будет и монитор подключать. Мне нужно будет заходить на каждое новое устройство и его админить. Вопрос, что мне предустановить на образ, чтоб оно беспроблемно дало мне доступ после первой загрузки без действий со стороны пользователя?

Пока додумался до

- Openvpn клиент без пароля, на сервере разрешено duplicate-cn, т.к. образ единый.
- ssh -R, проброс рандомного порта на локальный 22.

Еще варианты (уже бред, хотя..):

- «curl ..| bash» в кроне
- git clone && ansible-playbook
- zerotier (который self-hosted)
- tmate + периодичный репорт ID на почту или веб-запросом

Думаю, надо предусмотреть 2+ способа — вдруг один не сработает (например, зафаерволеная локалка).

Спасибо за советы.

 , , ,

Bers666
()

ssh авторизация по ключу - странный БАГ

Нашел странный баг, когда запускаю ssh клиент с авторизацией по ключу, и при этом в папке .ssh есть одноименный публичный ключ, но с другим отпечатком, то авторизация не проходит .

Решение, чтоб НЕ БЫЛО одноименного публичного ключа с другим отпечатком.


Вот как воспроизвести

- генерим пару fwd, fwd.pub
- генерим пару fwd2, fwd2.pub
- устанавливаем fwd.pub на удаленную сторону в authorized_keys
- rm fwd2
- mv fwd2.pub fwd.pub
- Теперь fwd и fwd.pub с разным отпечатком, иии...
- ssh -i fwd u@h => облом
- РЕШЕНИЕ: rm fwd.pub
- ssh -i fwd u@h => успех

Как объяснить? Просто интересно.

 ,

Bers666
()

Openvpn: кто последний встал, того и тапки?

Всем привет, подскажите как обратить поведение сервера openvpn , а то если возникает клон клиента, то он перетягивает static/ccd IP на себя.

Поведение описано ниже, выделено жирным поведение, которое надо обратить. Чтоб старый клиент оставался, пока новый долбится .

–duplicate-cn Allow multiple clients with the same common name to concurrently connect. In the absence of this option, OpenVPN will disconnect a client instance upon connection of a new client having the same common name.

В интернете был совет таки разрешить duplicate-cn, но наколхозить up скрипт, чтоб нового клиента отфутболивать, если старый с таким же CN уже присоединён. Но неохота мутить маня-скрипты.

 

Bers666
()

Туннели которые прикидываются http/imap/ftp

Всем привет. Лорчую из Минска, у нас после выборов сделали dpi фильтр на интернет (уже все ок), так что встал вопрос о туннелях, которые мимикрируют под обычные tcp протоколы : imap, smtp, http, ftp и так далее.

Сразу скажу что не работало :
- udp туннели вообще все
- obfs и всякое левое непонятное tcp
- openvpn/tcp даже через ssh
- socks

Работало :
- ssh и tls, но не на всех провайдерах
- ping (не точно)
- http точно , возможно websockets
- dns (не точно)

Соответственно можно было только сидеть комфортно через туннель, который имитировал http обмен данными. Например gost, chisel.

Влазить в dns, icmp туннели не хочется, потому что они менее производительные.

В данном топике хочу спросить, может кто знает, есть ли туннели, которые имитируют imap, ftp, smtp?
Например, есть точно туннель, который имитирует Facebook messenger, но это tls, а его может не быть.

 , ,

Bers666
()

зачем нужна default route?

Зачем нужна default route в таблице main?

Описание ситуации:

  • удаляю default route в таблице main
  • добавляю такую же default route, но в таблицу 100, туда же роутинг на локалку.
  • маркирую исходящие пакеты в mangle\OUTPUT mark 1
  • добавляю правило: ip rule add fwmark 1 lookup 100
  • пинг гугла - Network is unreachable, гмм ок!
  • добавляю неправильный шлюз в таблицу main
  • пинг гугла - внезапно - пошел! естественно через таблицу 100, в которой правильный шлюз

Смотрю netfilter packet flow : написано, что решение о роутинге принимается после mangle\OUTPUT, то есть после моей маркировки. И мой пакет должен пойти в таблицу 100, а там шлюз есть.

Вопрос – фейковый шлюз в таблице main нужен просто чтоб был?

Ниже тестовый скрипт для проверки в Virtualbox, с одним сетевым интерфейсом типа NAT:

ip ro del default
ip ro del default
ip ro del default
ip ru add fwmark 1 tab 100
ip ro rep default via 10.0.2.2 tab 100
iptables -t mangle -I OUTPUT  -j MARK --set-mark 1

ping 8.8.8.8 -c2
# fail!

# add fake Gateway to the main Routing table
ip ro rep default via 10.0.2.100
ping 8.8.8.8 -c2
# success!!

 , ,

Bers666
()

подключиться к терминалу по USB.

Есть ли какой-то чудо девайс, который можно вставить в USB в Linux-компьютер и использовать как последовательную консоль (текстовый терминал) ? Запустить там getty и залогиниться, вводить команды итд?

На этом спец.компьютере нет графического вывода и порта rs232\com.

Это нужно для того, чтоб решать проблемы с отвалившейся сетью, так что всякие USB-Eth, USB-Wifi не подходят.

Пока нагуглил 3 подхода:

1. Комп1 — USB2RS232 — RS232 null cable — USB2RS232 — Комп2.
2. То же, только в виде одного провода. https://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_USBNMC.pdf
3. Usb-vga + usb-клавиатура.

 , , ,

Bers666
()

Certbot, Letsencrypt, round robin DNS

Как выписывать/обновлять сертификаты по одному имени на несколько серверов, когда они в DNS round robin?
Думаю сделать так:

- Создать сервер чисто с минимальным конфигом nginx+certbot и проксировать туда HTTP(S)/ACME с фронтов.
- На фронтах нет certbot, там только nginx, в нем статический путь к SSL KEY/CRT.
- Вставить hook в certbot, чтоб при успешной выписке сертификата пушил его на фронты и релоадил Nginx там.
- положить certbot renew в Crontab на nginx+certbot сервер.

Есть другие варианты или готовые решения?

 , ,

Bers666
()

мониторинг для очень большого количества серверов

Чем можно мониторить очень большое количество серверов, порядка 10к, но может быть и 50к?

Специфика в том, что они могут только посылать данные во внешний мир по https/443, то есть это «пассивные чеки» в терминах Nagios.

Нужно мониторить такие банальные вещи, как загрузку памяти/проца/диска/живость диска/наличие ключевых процессов, итого около 10 чеков на сервер.

Nagios - умеет быть хорошо scalable в режиме активных чеков, а в режиме пассивных? Если там будет прилетать около 200 чеков в секунду? Там они все кладутся в pipe nagios.cmd, ему не станет плохо?

ELK - больше про метрики, чем про чеки.

Zabbix - ??

Sensu - ??

 ,

Bers666
()

Прозрачный прокси HTTPS

Всем привет!

Как сделать прозрачный прокси, чтоб он посылал запросы клиентов далее стоящему cache_peer-у (обычный forward proxy) методом CONNECT.

Вторгаться в сертификаты не надо.

То есть он должен принять коннект от клиента, взять оттуда SNI заголовок и послать на cache_peer вот такое

 CONNECT gmail.com:443 HTTP/1.1
 Host: gmail.com
 Proxy-Connection: Keep-Alive

После чего соединить получивший сокет с сокетом от клиента.

Пока я нашел только 3proxy+tcppm, но в прозрачном режиме он отправляет CONNECT ip.ip.ip.ip:443, а не имя.

 , , ,

Bers666
()

Чем управлять ресурсами в GCP

Вот у меня задача - заказчик дает доступ на новый проект в GCP. Надо создать там сервер (потом второй, третий..) и накатить ansible. Как лучше делать?

Я делаю :
* кликаю invite ссылку, вхожу в проект своим юзером @gmail.com
* gcloud CLI: активизирую новый проект, создаю юзера terraform с правами owner, скачиваю JSON ключ
* gcloud CLI: расшариваю image со своего личного проекта этому юзеру terraform в новый проект
* создаю terraform папочку для этого проекта, делаю новый tf файл, редактирую переменные, подсовываю terraform.json. Стартую instance. Terraform печатает output/ip
* Копипащу этот IP в ansible inventory, пускаю ansible

Как-то долго и много шагов. Как можно все упростить??
ОК, допустим Terraform может сам запустить там ansible на этапе provisioning


ОК, сам ansible вроде умеет в GCP. Но в интернете этим никто не пользуется, и там все очень урезано - например, оно не может расшарить image на новый проект.. А вообще я бы перешел чисто на Ansible - очень удобно в одном плайбуке создать сервер и сразу ему назначить роли.

 , ,

Bers666
()

на чем сделать каталог?

Господа веб разразботчики, посоветуйте CMS или что, чтоб сделать каталог объектов. Checkout не надо. Итак,
* есть 5к объектов
* суть объекта это текст (сейчас банально markdown) + возможно картинка
* у каждого есть набор тэгов

Теперь гавное, юзер должен мочь выбрать по набору тэгов набор удовлетворяющих им объектов, получить разбивку постранично и пролистать ее.

Обмазываться Ecommerce ой как не хочется (Opencart, WOOcommerce etc). Так что ищется что-то, что в идеале, но не обязательно, умеет в markdown.

 , ,

Bers666
()

туннель пространства пользователя - пробросить порт

Привет! Нужен user space туннель : пробросить 1 TCP порт с локалхоста на удаленный сервер. То есть это даже не сетевой уровень.
Конечно, `ssh -R` подойдет , НО может быть уважаемая публика знает альтернативы? Конкретно про ssh, не хочется мороки с uber шифрованием (а трафик ожидается приличный) и мороки с неосвобождением занятых на «той стороне» портов после прибития `ssh -R ` на локалхосте.

 ,

Bers666
()

нормальная тема для GTK2/GTK3/XFCE

Где взять норм тему, чтоб работало под gtk2 / gtk3 / xfce? Версии моих либ:

libxfce4ui-1-0      4.12.1-2
libgtk-3-0:amd64    3.22.30-1ubuntu1~16.04.york0
libgtk2.0-0:amd64  2.24.30-1ubuntu1.16.04.2

Вот апгрейднул GTK3 с jonathonf-ubuntu-gtk3, отвалилась тема Adwaita-X-light https://www.gnome-look.org/p/1013736/ Нашел какую-то Marwaita https://www.gnome-look.org/p/1292185/, да у меня с ней не видны неактивные вкладки в gtk3 прилагах! https://imgur.com/a/Q2pgD3s !WTF!

Вот где взять тему, чтоб гарантированно работала с gtk2 / gtk3 / xfce?

 , , ,

Bers666
()

flat files CMS

Привет ЛОР, Ищу flat files CMS для блога. Требования:
* для блога (т.е. посты отсортированы по дате)
* странички в .md файлах, парсинг markdown
* поддержка тэгов
* более менее активный проект
* Docker контейнер ( ну это почти у всех)

Попробовал Picocms - но она больше для сайта чем для блога, блоггинг через хаченье кода.
Попробовал Jekyll - тут с тэгами напряг.

 , ,

Bers666
()

RSS подписка на новые темы