"- Если вы возьметесь лечить больного и он умрет, вы будете казнены!
- А если он выздоровеет?
- В таком случае вы также будете казнены!
- Не велика разница?
- В случае смерти больного карается невежество, в случае выздоровления - дерзость. В обоих случаях вас ждет виселица."
суббота, 31 декабря 2022 г.
пятница, 30 декабря 2022 г.
Nginx условие в конфигурационном файле
Делал мониторинг nginx zabbix`ом и тут возникла проблема, сайт перенаправляет всех на https, а проверку не надо перенаправлять, как же сделать так, чтобы перенаправление работало не всегда?
server{
listen 80;
server_name site.pro www.site.pro *.site.pro;
# Enable php-fpm status page (for ZABBIX PHP-FPm HTTP)
location ~ ^/(status|ping)$ {
access_log off;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
# Enable php-fpm status page (for ZABBIX PHP-FPm HTTP) END
# ADD conditional block
if ($request_uri !~* "^/(status|ping)$") {
return 301 https://$host$request_uri;
}
}
~* - равно регулярке без учета регистр
!~* - не равно регулярке без учета регистр
= - равно правой части
!= - не равно правой части
Во всех условиях, кроме регулярок, использовать знак доллара ($) нельзя, он будет интерпретирован как переменная. Ну или экранируем
четверг, 29 декабря 2022 г.

Порой снится всякая дичь, иногда занимательно и интересно, особенно если предположить что сон - это наша жизнь в другой вселенной (теория мульти вселенных). Сегодня что именно снилось не помню, но в какой-то момент вспыхнул кадр из сна - женская рука покровительственно лежит на плече сидящего человека... может не покровительственно, а ...смирение (?)... нет... нет слов... как-будто говоря - "смотри, я ..." ... и опять нет слов, чтобы описать. Лиц я не вижу, но как-будто знаю кто это (АМ). Но главное в этой руке - на безымянном пальце обручальное кольцо, классическое, без выкрутасов, над ним вытатуирована точка, а под ним символ бесконечности. В остаточных ощущениях от вспышки картинки чувствуется ответ на вопрос - что значит эта комбинация, но в этой вселенной я так и не понял значения. Также стоит отметить, что это была левая рука, что не характерно для рожденных в России.
вторник, 27 декабря 2022 г.
Windows Port forwarding силами ОС
Появилась задача - перебросить пакеты с порта на VPN интерфейсе сервера на другой VPN интерфейс, при этом на сервере работает RRAS. Силами RRAS не получилось, так интерфейс "внутренний" не имеет такой возможности, а вот netsh portproxy справился на ура:
netsh interface portproxy add v4tov4 listenaddress=10.10.10.2 listenport=6604 connectaddress=192.168.80.1 connectport=6604
А вот так можно удалить проброс:
netsh interface portproxy delete v4tov4 listenaddress=10.10.10.2 listenport=6604
А вот так можно проверить список пробросов:
netsh interface portproxy show all
Контроль:
netstat -ano | findstr :6604
Обязательно должна быть включена служба IP Helper:
sc query iphlpsvc
Отметил, что после перезагрузки правило остается, но не работает (порт не слушается). Может быть это связано с тем, что интерфейс, а соответственно и маршрут, появляются позже. В следующий раз проверю, может достаточно перезагрузить службу, тогда накинем отложенный шедуллер, а может вообще if up для службы OpenVPN бахнем
Так, перезапуск службы iphlpsvc восстанавливает прослушивание, надо подумать, что с ней делать.
ПыСы, оказывается в виндовом брандмауере можно включить логирование, но перенаправленные пакеты туда не попадают.
А теперь самое веселое, эта плюшка не нужна, если SMART карта поддерживается определенными криптопровайдерами, тогда можно использовать SMART карту сразу на RDP сервере
Версия 5.0.12600 - не сертифицирована, поэтому я использовал вариант с донастройкой и у меня реально заработало О_О
воскресенье, 25 декабря 2022 г.
Mikrotik script подготовка конфигурационного файла OVPN
У pfSense есть забавная штука - экспорт конфигурации OpenVPN, такой штуки нет на Mikrotik. Я бы мог использовать pfSense или openSense, но они мне не нравятся, а в некоторых случаях сложны для настройки. Так как в одном из проектов мне волей-неволей придется создавать новых пользователей openVPN, я решил максимально автоматизировать процесс экспорта конфигурации и описал скрипт. Скрипт:
- запрашивает необходимые данные
- создает пользователя
- создает и подписывает сертификат
- создает структуру папок
- создает все необходимые файлы в этой структуре
- экспортирует сертификат
- формирует и выгружает файл конфигурации
Запись из июля 2023 года, скрипт формирует структуру каталогов из-за ограничения переменной в 4096 байта, но я случайно нашел обходной вариант, который позволяет слить файлы в один большой - самый последний пример.
суббота, 24 декабря 2022 г.
Mikrotik script Ввод от пользователя
Порой есть задача - запросить данные от пользователя, оказывается в Mikrotik такое тоже возможно. Описал простенькую функцию с параметрами:
- QstUser - Текст вопроса
- VarName - Имя переменной куда будет помещено введенное значение
- DefaultValue - Значение по-умолчанию (на случай пустого ввода)
- LenValue - Минимальная длина ввода (например pass-phrase для экспорта сертификата не может быть меньше 8 символов)
# Example:
# :global UserName ""
# $PromtInput QstUser="\r\nInsert new username" VarName="UserName" DefaultValue=UserX LenValue=4
:local PromtInput do={
:local readinput do={:return}
if ($LenValue>0) do={
:set $QstUser ("$QstUser. Minimum length $LenValue simbols")
}
if ([:len $DefaultValue]>0) do={
:set $QstUser ("$QstUser. \r\n(default - $DefaultValue)")
}
:put ("$QstUser:")
:local UserPromt [$readinput]
if ([:len $UserPromt]>0) do={
[:parse "global $VarName;:set $VarName $UserPromt"]
if (($LenValue>0) and [:len $UserPromt]<$LenValue) do={
:error message="You entered only $[:len $UserPromt] symbols instead of $LenValue minimum required. Stop program"
}
} else={
if ([:len $DefaultValue]>0) do={
[:parse "global $VarName;:set $VarName $DefaultValue"]
} else={
:error message="You didn't enter anything. Stop program"
}
}
}
Если добавить рекурсию с вопросом, то можно избежать выхода из программы при вводе неудовлетворяющему требованиям. Но мне не надо, поэтому я пас
пятница, 23 декабря 2022 г.
Человек стремится идти по модели упрощения во всем, в работе, в отдыхе, в домашних делах и в искусстве. Вот и Гюго здесь и в "Отверженные" уделяет много времени отсылкам и описаниям. Меня самого иногда заносит, но сколько строк ушло на описание подвешенного на цепи мертвеца. А начало меня сначала отправило не пойми куда и я засомневался в художественности произведения, но здесь еще большую роль сыграл тот факт, что 36 часов сна ни в одном глазу, а умиротворение и безделье только усугубили притяжение в царство Морфея
четверг, 22 декабря 2022 г.
понедельник, 19 декабря 2022 г.
Mikrotik script обход параметров функции
Предположим ситуация - необходимо обработать N слов, каждое слово является позиционным параметром некоей функции, сколько слов может быть на входе мы не знаем, но предполагаем что не больше 10. Каким образом обработать параметры? Сначала я подумал о преобразовании текста в код в цикле и обработки его при помощи :parse или :execut как предлагает доблестный rextended:
:global variablename "test"
# Create a global variable using the name inside "variablename" and set the value (or update the value if is already defined)
[:parse ":global $variablename \"REX1\""]
# after "parse" the variable exist and can be displayed
:put $test
# Set a value of variable with name defined inside "variablename" (or simply apply previous "parse" command)
[:parse "global $variablename;:set $variablename \"REX2\""]
:put $test
# For read the value, of a variable with name defined inside "variablename", and put it inside another global or local declared variable:
:global testx [[:parse ":global $variablename; :return \$$variablename"]]
:put $testx
# For read the value, of a variable with name defined inside "variablename", simply for put the value on terminal:
:put [[:parse ":global $variablename; :return \$$variablename"]]
Но, в случае с позиционными параметрами, вариант не прокатил, чет думал-думал (внутренний диалог):
"Вот бы знать сколько их там, в bash то мы знаем"
"Да какая разница сколько их там, все равно цикл с формированием имени переменной не использовать"
"Тогда забей и юзай условной блок с :return"
"Нет, это решение громоздкое и не красивое!....Эврика!, рекурсия со сдвигом параметров!"
Mikrotik script Создать каталог
Решил я описать скрипт по логике которого, нужно было раскидывать файлы по папкам, и тут выясняется что нельзя взять и создать каталог О_О.
В интернетах предлагают такой вариант
/tool fetch dst-path=MyPath/xxx url="http://127.0.0.1/"
Или такой
/tool fetch dst-path=MyPath/xxx url="http://google.com/"
Но у меня не работает такое, в такой вариант прокатил
/tool fetch dst-path=MyPath/xxx url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Чтобы файл не скачивался, вместо xxx ставим точку
/tool fetch dst-path=MyPath/. url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Поддиректории через слеш
/tool fetch dst-path=MyPath/subFolder/. url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Но такой вариант мне не нравится из-за ненадежности источника скачивания, и я нашел вариант через SMB
/ip smb shares add name=test directory=MyPath
/ip smb shares remove [/ip smb shares find where name=test]
Т.о. для создания структуры, можно описать таким образом
пятница, 16 декабря 2022 г.
Bash Console Script Фигурные скобки
"А так можно было?" - подумал я увидя такую конструкцию:
user@server:~$ mv /etc/postfix/{canonical,sender_relay,sasl_passwd} /etc/postfix/private/
Или так (переимновать без ввода полного пути)
user@server:~$ mv /etc/postfix/main.cnf{,.back}
Или так (создать копию без повторного ввода всего пути)
user@server:~$ cp /etc/postfix/main.cnf{,.back}
user@server:~$ ls /etc/postfix/main*
/etc/postfix/main.cf /etc/postfix/main.cf.back /etc/postfix/main.cf.db /etc/postfix/main.cf.proto /etc/postfix/main.cf.proto.db /etc/postfix/main.cf.save
С того момента я каждый раз тратил много времени на попытку вспомнить конструкцию и вот решил устаканить в своей голове фигурные скобки в консоли линукс-подобных систем. При повседневных операциях бывает необходимо повторить одно действие несколько раз и как же бесит когда не можешь упростить. Перейдем к примерам - скопировать из каталогов несколько разных файлов можно разными способами:
user@server:~$ ls ~/test
folder_1 folder_2 file_1 file_2 file_1_bak file_2_bak
user@server:~$ cp ~/test/file_1 ~/test/file_1_bak /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak
user@server:~$ rm /new_folder/*
user@server:~$ cp ~/test/file_1* /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak
user@server:~$ rm /new_folder/*
user@server:~$ cp ~/test/file_{1,1_bak} /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak
user@server:~$ rm /new_folder/*
user@server:~$ cp ~/test/file_1{,_bak} /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak





