LINUX.ORG.RU

Сообщения WoozyMasta

 

SSH RemoteCommand

Форум — Admin

Приветствую!

Собственно хочу сразу в контейнере оказаться выполнив ssh %container_name%

В контейнере ssh может не оказаться, проксирование и портфорвард не предлагать.

В ~/.ssh/config воткнул это:

Host mycontainer
     HostName 10.10.0.51
     User woo
     RemoteCommand /usr/bin/lxc exec mycontainer bash

ничего не происходит, lxc хочет иметь управляющий терминал, руками используя -t все ок.

ssh 10.10.0.51 -t "/usr/bin/lxc exec mycontainer bash"

Вопросы:

  • 1 - Не вижу впритык как в конфиге ssh указать использование аргумента -t
  • 2 - Как бы так изловчится что бы не плодить для каждого контейнера правило в конфиге (ну очень много их), а к примеру задать массив имен и подставлять команду, по типу:
    Host [foo bar baz]
         HostName 10.10.0.51
         User woo
         RemoteCommand /usr/bin/lxc exec $Host bash
    

 ,

WoozyMasta
()

BTRFS на SSD для LXC

Форум — Admin

Приветствую! Есть несколько одинаковых серверов с LXD, хранилища на SSD в BTRFS. Все сервера выполняют разные задачи но нагруженость ФС приблизительно одинакова.

Один из серверов очеь быстро исчерпывает SSD диск. Два раза в неделю балансировку с тримом делать начал, остальные сервера раз в месяц регламентно выполняют и никаких проблем.

btrfs fi df

Data, single: total=223.46GiB, used=119.09GiB
System, single: total=32.00MiB, used=48.00KiB
Metadata, single: total=5.00GiB, used=2.92GiB
GlobalReserve, single: total=512.00MiB, used=0.00B

btrfs fi show

Label: 'datastore'  uuid: e5570b60-0000-0000-0000-ffffffffffff
	Total devices 1 FS bytes used 122.00GiB
	devid    1 size 238.47GiB used 228.49GiB path /dev/sdc

Делаю трим для ssd и балансировку

fstrim -v "$mountpoint"

if /bin/btrfs fi balance start -dusage=55 "$mountpoint"; then
    echo 'BTRFS balancing compleate'
else
    echo 'Running rescue balancing'

    mount -oremount,clear_cache "$mountpoint"

    for size in 0 1 2 3 4 5 10 20 30 40 50 60 70 80 90; do
        time /bin/btrfs balance start -v -musage=$size -dusage=$size "$mountpoint" 2>&1 
    done

    echo 'Rescue BTRFS balancing finished'
fi

Получаю:

/var/lib/lxd/storage-pools/datastore: 11,1 GiB (11877240832 bytes) trimmed
Done, had to relocate 99 out of 230 chunks

btrfs fi df

Data, single: total=133.46GiB, used=119.08GiB
System, single: total=32.00MiB, used=48.00KiB
Metadata, single: total=5.00GiB, used=2.89GiB
GlobalReserve, single: total=512.00MiB, used=0.00B

btrfs fi show

Label: 'datastore'  uuid: e5570b60-0000-0000-0000-ffffffffffff
	Total devices 1 FS bytes used 121.97GiB
	devid    1 size 238.47GiB used 138.49GiB path /dev/sdc

Подскажите знакомые с BTRFS, куда копать и чем смотреть?

Есть подозрение на реплику MySQL в одном из контейнеров, бинлоги летают часто - может быть он виновник, но шевелить без четкого вердикта не осмелюсь.

 , , ,

WoozyMasta
()

letsencrypt wildcart + domain на разных хостах

Форум — Admin

Имеется два публичных хоста:

  • на одном wildcard сертификат letsencrypt *.site.com и domain сертификат site.com.
  • на втором планирую развернуть api.site.com и сделать ему domain сертификат letsencrypt

На какой камень напорюсь в таком случае? Я думаю все должно быть хорошо но испытываю некоторые сомнения.

Как запасной вариант после обновления wildcard, пост хуком отправлять его на второй хост, но надеюсь данный костыль не нужен.

 ,

WoozyMasta
()

yad и тайлинг кастомной иконки уведомления

Форум — Desktop

Привет. Есть простой скрипт, хочу повесить его в область уведомлений и работать с ним из удобного места. Проблема с отображением кастомной иконки, она тайлится.

Дано:

  • yad 0.38.2
  • GTK+ 3.22.30
  • XFCE 4.12

Проблема в одной картинке https://pasteboard.co/HMGI6og.png

К примеру кастуем уведомление указав путь к файлу изображения

yad --notification --command='echo hello world' --listen --text="Hi" --image=/usr/share/vlc/vlc.ico

В результате изображение тайлится по рамке, пробовал другие пикчи от 8х8 до 256х256, svg, и ключ --icon-size= - все тщетно. А если используем каст иконки по алиасу, все красиво. В чем подвох?

yad --notification --command='echo hello world' --listen --text="Hi" --image=vlc

Есть у кого какие мысли? Документация и гугл по диагонали прочитаны, зацепок не нашел.

 ,

WoozyMasta
()

CGI bash и вывод переменных

Форум — General

Привет, делаю простенькую панельку с информацией, решил делать на bash, просто так захотел. Верчу через lighttpd.

Дано:

  • index.sh
    #!/bin/bash
    template=$(<template.html)
    title="From bash"
    eval echo "$template"
    
  • template.html
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <title>${title}</title>
      </head>
      <body>
        <h1>Hi</h1>
      </body>
    </html>
    

Увы в ответ 500 статус, если не использовать eval в заголовке страницы ${title}, как бы обработать это изящнее, просто прочитать шаблон и подставить куда нужно выхлопы от утилит?

Пробовал иначе, эффект тот-же

printf '%b\n' "$(cat template.html)"
cat template.html | xargs echo -e
eval echo \$template

Цель:

Лыжи не едут, ищу наводку как заставить работать такую конструкцию в данном контексте:

var="Hi $username"; username="John Doe"; eval echo $var
без eval переменная не обрабатывается, а используя его парсится что-то из html тегов и страничка падает.

Падает из-за проблемы с newline, смена IFS не помогает(

 , ,

WoozyMasta
()

grc и сохранение подсветки

Форум — General

Есть утилита grc, разукрашивает логи и выхлопы. Каким способом можно сохранить подсветку от исходного выхлопа команды или сохранить подсветку от grc при последующем grep?

1) ls -la разукрашивает файлы по mime типу, а grc ls -la разукрашивает права и пользователя но затирает подсветку самого ls.

2) grc zcat syslog.3.gz отдает красивый пёстрый лог, а если по нему пройтись grep - красота исчезает, тот же tail или head через пайп цвета сохраняют.

Как совместить обе подсветки?

UPD. с grep всё ок, забыл про --color=always

UPD2. с ls тоже всё ок, забыл про тот же --color=always решено xD

 , ,

WoozyMasta
()

Mirotik failover, wan port in bridge

Форум — Admin

Здравствуйте, господа.

Хочу услышать совет по поводу автоматического переключения канала при условии, что WAN порты объедены в bridge и все правила файервола настроены на этот мост.

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

Если же я хочу использовать решение с пингом, мне необходимо запретить пинг разных назначений для разных WAN портов. Но как быть если все WAN в одном бридже и NAT таблица общая?

Если же уйти от фаервола, а указать конкретный интерфейс для использования пинга - он не проходит с WAN портов.

ping 8.8.8.8 count=1 interface=wan1
  SEQ HOST                                     SIZE TTL TIME  STATUS
    0 8.8.8.8                                                 timeout
ping 8.8.8.8 count=1 interface=wan2
  SEQ HOST                                     SIZE TTL TIME  STATUS
    0 8.8.8.8                                                 timeout
но через бридж все отрабатывает
ping 8.8.8.8 count=1 interface=bridge
  SEQ HOST                                     SIZE TTL TIME  STATUS
    0 8.8.8.8                                    56  56 2ms

Возможно мне просто не хватает отдельной цепочки для возможности пинга из бриджа в WAN интерфейсы, но не приложу ума.

Вариант с выносом WAN из бриджа не интересен, ищу решение для текущего конфига, куда мне копать?

 , ,

WoozyMasta
()

Nginx - если rewrite для сабдомена возвращает 404, вернуть другую страницу.

Форум — Admin

У меня есть rewrite для старых неиспользуемых поддоменов, и 90% URL существуют как на корневом домне, так и на субдомене, но некоторые URL-адреса уникальны для поддоменов.

Как мне сделать условие?

если поддомен соответсвует шаблону то направляем на основной домен
если это перенаправление вернуло 404 вернуть пользовательскую страницу 

Это так, набросок, location в условии разместить так нельзя, я знаю.

if ($host ~* (sub1|sub2|sub3)\.mysite\.loc) {
  rewrite ^(.+)$ http://mysite.loc$1 permanent;
  location / {
    error_page 404 =301 http://mysite.loc/lost-sub;
  }
}

P.S. 404 отдельно обрабатывает приложение на своей стороне.

Решение

Элегантного решения не нашел, сделал так:

if ($host ~* (sub1|sub2|sub3)\.mysite\.loc) {
  rewrite ^(.+)$ http://mysite.loc$1 permanent;

}

location / {
  if ($request_uri ~ ^.*(pepyaki|pyani|zhirchik).*) {
    return 301 http://mysite.loc/custom;
  }
}

где ^.*(pepyaki|pyani|zhirchik).* - это проблемные вхождения взятые из лога

 ,

WoozyMasta
()

Mikrotik и блокировка nmap

Форум — Admin

Здравствуйте, господа. Блокирую сканирование портов на микроте по каноническому мануалу

# Создаем цепочку для сканеров портов
/ip firewall filter
add chain=input protocol=tcp psd=21,3s,3,1 action=add-src-to-address-list address-list="port scanners" address-list-timeout=1h comment="Port scanners to list " disabled=no

# Разделяем по типу сканирования
add chain=input protocol=tcp tcp-flags=fin,!syn,!rst,!psh,!ack,!urg action=add-src-to-address-list address-list="port scanners" address-list-timeout=1h comment="NMAP FIN Stealth scan"
add chain=input protocol=tcp tcp-flags=fin,syn action=add-src-to-address-list address-list="port scanners" address-list-timeout=1h comment="SYN/FIN scan"
add chain=input protocol=tcp tcp-flags=syn,rst action=add-src-to-address-list address-list="port scanners" address-list-timeout=1h comment="SYN/RST scan"
add chain=input protocol=tcp tcp-flags=fin,psh,urg,!syn,!rst,!ack action=add-src-to-address-list address-list="port scanners" address-list-timeout=1h comment="FIN/PSH/URG scan"
add chain=input protocol=tcp tcp-flags=fin,syn,rst,psh,ack,urg action=add-src-to-address-list address-list="port scanners" address-list-timeout=1h comment="ALL/ALL scan"
add chain=input protocol=tcp tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg action=add-src-to-address-list address-list="port scanners" address-list-timeout=1h comment="NMAP NULL scan"

# Блокируем сканеров
add chain=input src-address-list="port scanners" action=drop comment="dropping port scanners" disabled=no
add chain=forward src-address-list="port scanners" action=drop comment="dropping port scanners" disabled=no

И захотелось мне добавить белый список адресов, кто может сканить порты безнаказанно.

# Вайтлистим адрес
/ip firewall address-list
add address=10.0.0.1 disabled=no list=whitelist

# Разрешаем вайтлисту всё
/ip firewall filter
add action=accept chain=input in-interface=wan-bridge connection-state=new src-address-list=whitelist

Данный accept воткнул в самый верх списка и надеялся, что как только он сработает остальные правила ему уже будут ни по чём, но не тут то было :(

Собственно сабж, как accept-ить вайтлист так, чтобы он не попадал под другие правила блокировки.

 , ,

WoozyMasta
()

Перенаправить трафик с источника к назначение:порт на адрес:порт

Форум — Admin

Приветствую господа! Имею вопрос, и надеюсь на помощь от знатоков.

Есть два сервера: 10.0.0.2 (основной) и 10.0.0.3 (запасной) также машина выступающая в роли шлюза 10.0.0.100

необходимо адресу 10.0.0.8 подменить назначение только в случае обращения к адресу 10.0.0.2:80 на 10.0.0.3:80 и ответ вернуть обратно.

Задумка такова, выполнив скрипт на шлюзе все запросы к основному серверу от моего ПК должный уйти на запасной и назад должны вернуться ответы, при этом другие порты и другие ПК в сети не должны участвовать в этом условии.

Пробую сырой вариант без --source и --dport просто подменить назначение.

iptables -t nat -A PREROUTING -d 10.0.0.2 -j DNAT --to-destination 10.0.0.3
iptables -t nat -A POSTROUTING -s 10.0.0.3 -j SNAT --to-source 10.0.0.3
Отправка отрабатывает, пинги уходят на 10.0.0.3, но обратной связи уже нет. Пробовал маскарадить но так не сработало. Чувствую, что решение на поверхности но не понимаю.

Будьте любезны, пните в нужном направлении.

 

WoozyMasta
()

iptables, прозрачный squid и один интерфейс.

Форум — Admin

Здравствуйте, господа!

Появилась задача, но увы с iptables я знаком поверхностно.

Имеется:

  • Шлюз 192.168.0.1 (DNS, DHCP, iptables)
  • Прокси 192.168.0.222 (прозрачный squid)
  • Сервера 192.168.0.2-10 (трафик проксировать не нужно)
  • Клиенты 192.168.0.100-110 (пул DHCP, пускаем через squid)

На машине прокси с одним интерфейсом развернут прозрачный squid. Хочется весь трафик от клиентов по 80 и 443 порту пускать через него, а все что осталось отправлять прямиком на шлюз.

Вижу 2 варианта реализации:

1) На серверах статикой указан основным шлюзом 192.168.0.1, а клиенты в свою очередь получают DHCP с шлюзом 192.168.0.222 (sqid). Тем самым сервера минуют squid, а клиенты ходят к основному шлюзу через него.

На прокси необходимо пробросить входящий трафик 80/443 через кальмара, все остальное пропускаем дальше на шлюз

net.ipv4.ip_forward в sysctl включил

В данный момент пробовал так, но не удалось:

# Чистим iptable
iptables -F
iptables -X
iptables --table nat -F
iptables --table nat -X
iptables --table mangle -F
iptables --table mangle -X

# Направляем 80 и 443 порт через squid
iptables -t nat -A PREROUTING -i ens192 -s 192.168.0.0/24 -d 192.168.0.0/24 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i ens192 -s 192.168.0.0/24 -d 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT

iptables -t nat -A PREROUTING -i ens192 -s 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192.168.0.222:3128
iptables -t nat -A PREROUTING -i ens192 -s 192.168.0.0/24 -p tcp --dport 443 -j DNAT --to 192.168.0.222:3129

# Пропускаем DNS c шлюза
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 192.168.0.1:53
iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 192.168.0.1:53

iptables -t nat -I POSTROUTING -o ens192 -s 192.168.0.0/24 -d 192.168.0.222 -p tcp -j SNAT --to 192.168.0.1

iptables -I FORWARD -i ens192 -o ens192 -s 192.168.0.0/24 -d 192.168.0.222 -p tcp --dport 3128 -j ACCEPT
iptables -I FORWARD -i ens192 -o ens192 -s 192.168.0.0/24 -d 192.168.0.222 -p tcp --dport 3129 -j ACCEPT

2) Второй вариант, на шлюзе пишется правило, что необходимо для диапазана 192.168.0.100-110 входящий трафик по 80/443 завернуть на 192.168.0.222:3128

Набросал что-то такое.

iptables -t nat -A PREROUTING -s ! 192.168.0.100-110 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.222:3128
iptables -t nat -A PREROUTING -s ! 192.168.0.100-110 -p tcp --dport 443 -j DNAT --to-destination 192.168.0.222:3129

iptables -t nat -A POSTROUTING -s ! 192.168.0.222 -p tcp -d 192.168.0.222 -j SNAT --to-source 192.168.0.1
iptables -A FORWARD -s 192.168.0.100-110 -j ACCEPT
Гуру iptables пните плз в нужную сторону. Какой вариант более логичный. И как лучше всего быть в случае падения кальмара?

Сильно экспериментировать не могу, т.к. все находится в работе.

 ,

WoozyMasta
()

jdb2 99% io NFS, а на самбашаре все ок.

Форум — Admin

Здравствуйте господа. Нужен совет куда копать, имеется программный рейд 10, EXT4.

Есть раздел 4ТБ самбашары, запись/чтение ~63MB/sec что есть норма для гигабитного линка.

Но если монтирую NFS шару получаю в iotop 99% загрузки jdb2 и load avg в 8 раз выше лимитов. А NFS нужен для ESXi, чтоб хранить vmdk.

 , ,

WoozyMasta
()

Вывод stdout дочернего скрипта в POST

Форум — Development

Здравствуйте господа. Имеется вопрос, как из вызываемого скрипта передать stdout в POST BaseHTTPServer.

    def do_POST(self):
        self._set_headers()
        self.wfile.write("Задание принято на отправку. ")
        self.data_string = self.rfile.read(int(self.headers['Content-Length']))
        self.send_response(200)
        self.end_headers()
        email = json.loads(self.data_string)
        with open('request.json', 'w') as outfile:
            json.dump(email, outfile)
        os.system('python relay.py')
        return

собственно как выхлоп от os.system('python relay.py') выдать в POST

 , ,

WoozyMasta
()

Кодировки в питоне

Форум — Development

Здравствуйте. В задаче имеется REST API сервиса SendPulse, и некая прослойка в виде минимального вебсервиса принимающего JSON и передающего данные через API. Все на питоне.

Собственно сама проблема:

Если JSON запрос находится непосредственно в коде, то все выполняется корректно. Если же я его беру из файла:

    with open('mail.json') as js:    
        data = json.load(js)
в ответ получаю

UnicodeEncodeError: 'ascii' codec can't encode characters in position 4-9: ordinal not in range(128)

если же декодирую словарь:

data = {k: unicode(v).encode("utf-8") for k,v in data.iteritems()}
в ответ дэбаг говорит:

Request response: {u'message': u'Empty «From» email', u'error_code': 10}

при попытке дэкодировать в ASCII или теряю русские символы, или получаю новые ошибки.

Вот сама функция которая из API.

    def smtp_send_mail(self, email):
        logging.info("Function call: smtp_send_mail")
        if not email.get('html') or not email.get('text'):
            return self.__handle_error('Seems we have empty body')
        elif not email.get('subject'):
            return self.__handle_error('Seems we have empty subject')
        elif not email.get('from') or not email.get('to'):
            return self.__handle_error("Seems we have empty some credentials 'from': '{}' or 'to': '{}' fields".format(email.get('from'), email.get('to')))
        email['html'] = base64.b64encode(email.get('html'))
        return self.__handle_result(self.__send_request('smtp/emails', 'POST', {'email': json.dumps(email)}))
GitHub API

Пример JSON

{
    "subject": "Это тестовое письмо отправленное через REST API sendpulse",
    "html": "<h1>Привет!</h1><p>Это тестовое письмо</p>",
    "text": "Привет!\nЭто тестовое письмо",
    "from": {"name": "Test SMTP Python", "email": "my@mail.xyz"},
    "to": [
        {"name": "SMTP test", "email": "first@mail.xyz"}
    ],
    "bcc": [
        {"name": "SMTP test", "email": "second@mail.xyz"}
    ]
}

Собственно нуждаюсь в совете или решении данной задачи. Как правильно открыть или конвертировать JSON, чтобы его смогла принять данная функция.

 , , ,

WoozyMasta
()

Gajim и end-to-end шифрование

Форум — Desktop

Доброго времени суток господа!

Имеется корпоративный жабер, на десктопах установлен Gajim. Данный месенджер активно шифрует сообщения при помощи end-to-end шифрования, ищу ответ как можно православно отключить данный функционал?

На данный момент пользуюсь не хитрым способом

dpkg -r --force-all python-crypto

но минусом данного метода является постоянно неразрешенная зависимость.

Пните пожалуйста в нужную сторону.

 ,

WoozyMasta
()

rsync пропускает файл

Форум — Admin

Запускаю синхронизации с такими параметрами:

--recursive --times --verbose --update --delete --max-size=50M --exclude-from=exclude.list /tmp/from/ /tmp/to

В итоге один файл находящийся на каталогов 6 глубже, не обновляется из источника, в логе пишет, что в каталог он заглянул но файл не взял, если файл удалить все ок. Также пробовал запускать с ключами --ignore-times, --size-only и --checksum, ничего не изменилось. И файл размером меньше 50М, в разы.

Куда копать? Такое чувство, что не совсем не смотрит на размер и время.

 

WoozyMasta
()

Автоматическое скрытие значков рабочего стола в XFCE

Форум — Desktop

Приветствую.

Необходима помощь в реализации небольшой задачи. В окнах очень доставляет небольшая утилита AutoHideDesktopIcons, функционал таков: цикл, если в течении n сек. к десктопу небыло обращения (ПКМ, ЛКМ) значки скрываются, при первом взаимодействии вновь отображаются.

Зачем? Довольно неплохо лицезреть красивые обои, особенно в том случае когда рабочий стол используется как папка темп с обильным количеством файлов. Хочется реализовать схожий функционал для XFCE (хотя и в другие DE перенести не составит труда)

  • Куда копать, как отлавливать клик по десктопу?
  • Как отключить всё одним махом, в xconf вижу только параметры для значков корзины, файловой системы и т.п.

 , ,

WoozyMasta
()

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