TGViewer
ServerAdmin.ru ServerAdmin.ru @srv_admin · 32.6K subscribers
Post #5688 7.87K
Не так давно пришло уведомление от NewReleases.io. Удобный, кстати, сервис. Я так с тех пор им постоянно пользуюсь, читаю уведомления. Так вот, там было уведомление об обновление утилиты Labean. Я уже когда-то давно писал про него. Это простой сервис, который выполняет настроенные действия при посещении того или иного url. Он до сих пор поддерживается и время от времени обновляется.

Например, обращаемся на url https://service.example.com/tuktuk/ssh/on, а Labean выполняет проброс порта на нужный сервер. То есть выполняет конкретное действие на сервере:

iptables -t nat -A PREROUTING -p tcp --dport 31001 \
-i ens18 -s {clientIP} -j DNAT --to 10.30.51.4:22


Или любое другое в зависимости от того, какой файрвол используете. Зашли и закрыли за собой дверь - https://service.example.com/tuktuk/ssh/off:

iptables -t nat -D PREROUTING -p tcp --dport 31001 \
-i ens18 -s {clientIP} -j DNAT --to 10.30.51.4:22


Проброс порта - частный случай, когда с помощью Labean реализуется принцип port knocking. Тут он удобен тем, что работает по HTTP и с большой долей вероятности не будет блокироваться, в отличии от некоторых других методов.

Можно выполнять и любые другие действия: снимать дамп с базы, перезаливать dev, обновлять контейнеры и т.д. Такой вот костылинг на небольших инфраструктурах и задачах.

Так как это HTTP, перед Labean можно поставить любой прокси типа Angie / Nginx / Traefik и т.д. и настроить там по желанию какие-то дополнительные проверки, логирования, ограничения, аутентификации и т.д.

По своей сути Labean - одиночный бинарник на Go и конфигурационный файл в формате JSON. Проще всего запускать через systemd на хосте, либо собрать свой Docker контейнер, но в данном случае не вижу большого смысла, если действия будут выполняться на хосте, а не внутри группы контейнеров, к которым его можно присоседить.

Работает Laben примерно так. Ставлю:

# wget https://github.com/noiseonwires/labean/releases/download/v260531/labean-linux-amd64
# chmod +x labean-linux-amd64
# mv labean-linux-amd64 /usr/local/bin/labean

Создаю конфигурацию /etc/labean/labean.conf:

{
  "listen": "192.168.137.29:9191",
  "url_prefix": "tuktuk",
  "real_ip_header": "X-Real-IP",
  "allow_explicit_ips": false,
  "tasks": [
    {
      "name": "ssh",
      "timeout": 30,
      "on_command": "iptables -A INPUT -i ens18 -s {clientIP} -p tcp --dport 22 -j ACCEPT",
      "off_command": "iptables -D INPUT -i ens18 -s {clientIP} -p tcp --dport 22 -j ACCEPT"
    }
  ]
}

Создаю юнит для systemd - /etc/systemd/system/labean.service:

[Unit]
Description=Labean HTTP port knocker
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/labean /etc/labean/labean.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target

Запускаю:

# systemctl daemon-reload
# systemctl start labean

Проверяю:

# ss -tulnp | grep 9191
tcp  LISTEN 0   4096           192.168.137.29:9191   0.0.0.0:*  users:(("labean",pid=1324,fd=7))

Открываю в браузере url 192.168.137.29:9191/tuktuk/ssh/on, на сервере выполняется команда:

iptables -A INPUT -i ens18 -s 192.168.137.200 -p tcp --dport 22 -j ACCEPT

где 192.168.137.200 - адрес, с которого я делал запрос.

Это я показал максимально простой пример для демонстрации возможностей. Если будете использовать в реальной ситуации, то слушать надо "listen": "127.0.0.1:9191", а внешние запросы принимать на прокси. В репозитории есть примеры для nginx и caddy. Там же пример конфигурации и юнита systemd.

Настройка простая и интуитивная. Я сходу настроил и запустил на тестовой сервере. Сразу всё корректно отработало. Как я уже сказал, так можно выполнять любые действия. Из наиболее актуальных - открывать доступ к vpn/rdp, запускать/перезапускать/останавливать службы, добавлять/удалять маршруты и т.д. В общем, тут кто во что горазд в костылинге.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩

#security #gateway
  • 👍 83
  • 👎 2
More from @srv_admin
  1. Sep 23, 2026Очередная подборка статей авторов, которые согласились в ней участвовать. Кто не понимает,…
  2. Sep 23, 2026Контейнеры в одном инструменте, виртуалки — в другом, частное облако — вообще отдельная ис…
  3. Sep 23, 2026Расскажу тем, кто не знает, и напомню тем, кто забыл, как я. Не надо в Proxmox в LXC конте…
  4. Sep 22, 2026Недавно случайно заметил любопытную информацию на тему Proxmox VE и новой функциональности…
  5. Sep 22, 2026✔️ Сети для всех — сообщество для тех, кто развивается в сетевом и системном администриров…
  6. Sep 22, 2026Я ранее уже рассказывал, что приобрёл себе домой полноценную серверную платформу на базе S…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →